[
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:\n// https://github.com/microsoft/vscode-dev-containers/tree/v0.192.0/containers/codespaces-linux\n{\n  \"image\": \"mcr.microsoft.com/devcontainers/universal:2\",\n  \"containerEnv\": {\n    \"GOOGLE_APPLICATION_CREDENTIALS\": \"/home/codespace/.google-cloud-service-account.json\"\n  },\n  \"postCreateCommand\": \"pnpm install && ./.devcontainer/postbuild\"\n}\n"
  },
  {
    "path": ".devcontainer/postbuild",
    "content": "#!/bin/bash -e\nnode core/dev set-up-codespaces"
  },
  {
    "path": ".gitattributes",
    "content": "# Don't allow people to merge changes to these generated files, because the result\r\n# may be invalid.  You need to run \"rush update\" again.\r\npnpm-lock.yaml               merge=binary\r\nshrinkwrap.yaml              merge=binary\r\nnpm-shrinkwrap.json          merge=binary\r\nyarn.lock                    merge=binary\r\n\r\n# Rush's JSON config files use JavaScript-style code comments.  The rule below prevents pedantic\r\n# syntax highlighters such as GitHub's from highlighting these comments as errors.  Your text editor\r\n# may also require a special configuration to allow comments in JSON.\r\n#\r\n# For more information, see this issue: https://github.com/microsoft/rushstack/issues/1088\r\n#\r\n*.json                       linguist-language=JSON-with-Comments\r\n"
  },
  {
    "path": ".gitignore",
    "content": ".env\n.cache\nnode_modules\n/automatron.js\n/automatron.js.map\n/dist/\n*.gz\nwebpack.stats.json\n*.env\n\n# Rush temporary files\ncommon/deploy/\ncommon/temp/\ncommon/autoinstallers/*/.npmrc\n**/.rush/temp/\n\n# Heft\n.heft\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"singleQuote\": true,\n  \"semi\": false\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"cSpell.words\": [\"Automatron\"],\n  \"typescript.experimental.useTsgo\": true\n}\n"
  },
  {
    "path": ".vscode/tasks.json",
    "content": "{\n  \"version\": \"2.0.0\",\n  \"tasks\": [\n    {\n      \"label\": \"pnpm: dev\",\n      \"type\": \"shell\",\n      \"command\": \"pnpm dev\",\n      \"group\": \"build\"\n    },\n    {\n      \"label\": \"pnpm: tunnel\",\n      \"type\": \"shell\",\n      \"command\": \"pnpm tunnel\",\n      \"group\": \"build\"\n    },\n    {\n      \"label\": \"pnpm: dev+tunnel\",\n      \"type\": \"shell\",\n      \"command\": \"echo Running pnpm dev and pnpm tunnel in parallel...\",\n      \"dependsOn\": [\"pnpm: dev\", \"pnpm: tunnel\"],\n      \"group\": {\n        \"kind\": \"build\",\n        \"isDefault\": true\n      },\n      \"problemMatcher\": []\n    }\n  ]\n}\n"
  },
  {
    "path": "README.md",
    "content": "# automatron\n\nThis is my personal LINE bot that helps me automate various tasks of everyday life, such as\n**home control** (air conditioner, lights and plugs) and **expense tracking** (record how much I spend each day).\n[See below for a feature tour.](#features)\n\nI recommend every developer to try creating their own personal assistant chat bot.\nIt’s a great way to practice coding and improve problem solving skills.\nAnd it helps make life more convenient!\n\nIt is written in TypeScript and runs on [DigitalOcean App Platform](https://www.digitalocean.com/products/app-platform) with Node.js 24.\n\n## features\n\n- [home automation](#home-automation)\n- [expense tracking](#expense-tracking)\n- [transaction aggregation](#transaction-aggregation)\n- [image-to-text](#image-to-text)\n- [livescript evaluation](#livescript-evaluation)\n\n### home automation\n\n![home automation](./images/home_automation.png)\n\nI have a [Home Assistant](https://www.home-assistant.io/) setup which can [control lights](https://www.home-assistant.io/integrations/hue/), [air conditioner](https://www.home-assistant.io/integrations/broadlink/#remote), and [smart plugs](https://www.home-assistant.io/integrations/tplink/). automatron can send commands to [Home Assistant’s REST API](https://developers.home-assistant.io/docs/api/rest/) to control these devices.\n\n### expense tracking\n\n![expense tracking](./images/expense_tracking.png)\n\nSimple expense tracking by typing in the amount + category. Example: 50f means ฿50 for food. Data is saved in [Grist](https://www.getgrist.com/).\n\nOn mobile, tapping the bubble’s body (containing the amount) will take me to the created Grist record. This allows me to easily edit or add remarks to the record.\n\n### transaction aggregation\n\n![transaction_aggregation](./images/transaction_aggregation.png)\n\nI built a [notification exfiltrator](https://docs.dt.in.th/dtinth.tools-android/exfiltrate.html) that send notifications my phone receive to automatron, which saves it to a database for later processing.\n\n### image-to-text\n\n![image_to_text](./images/image_to_text.png)\n\nautomatron can also convert image to text using [Google Cloud Vision API](https://cloud.google.com/vision/).\n\n### livescript evaluation\n\n![livescript](./images/livescript.png)\n\n[LiveScript](https://livescript.net/) interpreter is included, which allows me to do some quick calculations.\n\n### cli / api\n\n![api](./images/api.png)\n\n`POST /text` sends a text command to automatron. This is equivalent to sending a text message through LINE. This allows me to create a CLI tool that lets me talk to automatron from my terminal.\n\n`POST /post` sends a message to my LINE account directly. This allows the [home automation](#home-automation) scripts to report back to me whenever the script is invoked.\n\n`POST /run/automatron/reload` reloads the encrypted environment file (requires `X-API-Key` header with `API_KEY`).\n\n## project structure\n\n- [core](./core) — The core automatron service.\n- [webui](./webui) — The web-based UI running on Vercel.\n\n### other projects\n\n- [automatron-prelude](https://github.dev/dtinth/automatron-prelude/blob/main/prelude.js) contains code experimentation.\n\n### development setup\n\n```sh\n# Run the development server\npnpm dev\n\n# Set up a tunnel using frp\npnpm tunnel\n\n# Update a secret\npnpm env:set SECRET_NAME\n```\n"
  },
  {
    "path": "core/README.md",
    "content": "# @dtinth/automatron-core\n\nThe core service of automatron. Provides:\n\n- Chat bot interface (LINE, Slack)\n- REST API interface\n- Cron jobs\n\n## secrets\n\nThe secret data required to run the automation are defined in [BotSecrets.ts](./src/BotSecrets.ts).\n\n## development workflow\n\n### developing\n\nWatches for file changes and deploy the compiled code. Since it is my personal bot (I am the only one using it), I want a save-and-deploy workflow; there is no dev/staging environment at all.\n\n```sh\nnode dev\n```\n\n### configuration\n\n```sh\n# download\ngsutil cp gs://$GOOGLE_CLOUD_PROJECT-evalaas/evalaas/automatron.env automatron.env\n\n# upload\ngsutil cp automatron.env gs://$GOOGLE_CLOUD_PROJECT-evalaas/evalaas/automatron.env\n```\n"
  },
  {
    "path": "core/package.json",
    "content": "{\n  \"name\": \"@dtinth/automatron-core\",\n  \"private\": true,\n  \"description\": \"My LINE bot!\",\n  \"version\": \"1.0.0\",\n  \"license\": \"Apache-2.0\",\n  \"author\": \"Google Inc.\",\n  \"engines\": {\n    \"node\": \">=24\"\n  },\n  \"repository\": \"https://github.com/dtinth/automatron\",\n  \"main\": \"app.js\",\n  \"scripts\": {\n    \"start\": \"tsx src/server.ts\",\n    \"dev\": \"env AUTOMATRON_ENV=dev tsx --watch src/server.ts\"\n  },\n  \"dependencies\": {\n    \"age-encryption\": \"0.2.4\",\n    \"google-application-credentials-base64\": \"0.0.0\",\n    \"@dtinth/encrypted\": \"^0.3.1\",\n    \"@google-cloud/firestore\": \"^5.0.2\",\n    \"@google-cloud/storage\": \"^7.18.0\",\n    \"@google-cloud/trace-agent\": \"^5.1.6\",\n    \"@google-cloud/vision\": \"^2.4.2\",\n    \"@line/bot-sdk\": \"^9.2.2\",\n    \"@slack/types\": \"^1.10.0\",\n    \"@types/cors\": \"~2.8.13\",\n    \"airtable\": \"0.5.9\",\n    \"axios\": \"0.18.0\",\n    \"body-parser\": \"1.18.3\",\n    \"cors\": \"~2.8.5\",\n    \"citty\": \"0.1.6\",\n    \"dotenv\": \"^7.0.0\",\n    \"express\": \"4.16.4\",\n    \"express-async-handler\": \"~1.2.0\",\n    \"express-oauth2-jwt-bearer\": \"~1.1.0\",\n    \"form-data\": \"~4.0.0\",\n    \"google-auth-library\": \"~7.12.0\",\n    \"jsonwebtoken\": \"^8.5.1\",\n    \"lib\": \"~4.3.3\",\n    \"livescript\": \"1.6.0\",\n    \"lodash\": \"^4.17.21\",\n    \"mongodb\": \"^4.13.0\",\n    \"mqtt\": \"2.18.8\",\n    \"nanoid\": \"~3.3.4\",\n    \"pino\": \"^7.11.0\",\n    \"prelude-ls\": \"1.1.2\",\n    \"transaction-parser-th\": \"0.1.1\",\n    \"tweetnacl\": \"^1.0.3\",\n    \"tweetnacl-sealedbox-js\": \"^1.2.0\",\n    \"verror\": \"^1.10.1\",\n    \"tsx\": \"^4.21.0\",\n    \"grist-api\": \"0.1.7\",\n    \"@inquirer/prompts\": \"^8.0.2\"\n  },\n  \"devDependencies\": {\n    \"@types/express\": \"^4.17.15\",\n    \"@types/jsonwebtoken\": \"^8.5.9\",\n    \"@types/node\": \"^24.10.1\",\n    \"@vercel/ncc\": \"^0.36.0\",\n    \"execa\": \"^1.0.0\",\n    \"ora\": \"^3.4.0\",\n    \"typescript\": \"^5.9.3\",\n    \"yargs\": \"^13.3.2\"\n  }\n}\n"
  },
  {
    "path": "core/src/BotSecrets.ts",
    "content": "export interface BotSecrets {\n  /** The secret key that must be sent with the request to use the [API](../README.md#cli-api) */\n  API_KEY: string\n  /** Self-explanatory */\n  LINE_CHANNEL_SECRET: string\n  /** For development */\n  DEV_LINE_CHANNEL_SECRET: string\n  /** Self-explanatory */\n  LINE_CHANNEL_ACCESS_TOKEN: string\n  /** For development */\n  DEV_LINE_CHANNEL_ACCESS_TOKEN: string\n  /** My user ID, so that the bot receives commands from me only */\n  LINE_USER_ID: string\n  /** Self-explanatory @deprecated */\n  AIRTABLE_API_KEY: string\n  /** The ID of the Airtable base used for tracking expenses (should start with ‘app’) @deprecated */\n  AIRTABLE_EXPENSE_BASE: string\n  /** The web URL to the Airtable base, used for deep linking @deprecated */\n  AIRTABLE_EXPENSE_URI: string\n  /** The ID of the Airtable base used for cron jobs (should start with ‘app’) @deprecated */\n  AIRTABLE_CRON_BASE: string\n  /** Two numbers in form of A/B, where A is usage budget per day (rolls over to the next day) and B is starting budget */\n  EXPENSE_PACEMAKER: string\n  /** Slack webhook URL */\n  SLACK_WEBHOOK_URL: string\n  /** My user ID, so that the bot receives commands from me only */\n  SLACK_USER_ID: string\n  /** Google Cloud IoT Core device path to send */\n  CLOUD_IOT_CORE_DEVICE_PATH: string\n  /** GitHub OAuth App credentials for making unauthenticated API calls with elevated rate limits. In form of \"<client_id>:<client_secret>\" */\n  GITHUB_OAUTH_APP_CREDENTIALS: string\n  /** Encryption secret for decrypting */\n  ENCRYPTION_SECRET: string\n  /** Database storage */\n  MONGODB_URL: string\n  /** Subject ID for Google Auth */\n  GOOGLE_AUTH_SUB: string\n\n  /** Base URL for Grist */\n  GRIST_BASE_URL: string\n  /** API key for Grist */\n  GRIST_API_KEY: string\n  /** Document ID for Grist expense tracking */\n  GRIST_EXPENSE_DOC_ID: string\n  /** Document URI for Grist expense tracking */\n  GRIST_EXPENSE_URI: string\n}\n"
  },
  {
    "path": "core/src/CodeEvaluation.ts",
    "content": "import { getCodeExecutionContext } from './PreludeCode'\nimport { AutomatronContext, TextMessageHandler } from './types'\n\nexport async function evaluateCode(input: string, context: AutomatronContext) {\n  const code = input.startsWith(';')\n    ? input\n    : require('livescript')\n        .compile(input, {\n          run: true,\n          print: true,\n          header: false,\n        })\n        .replace(/^\\(function/, '(async function')\n  console.log('Code compilation result', code)\n  const runner = new Function(\n    ...['prelude', 'self', 'code', 'context'],\n    'with (prelude) { with (self) { return [ eval(code) ] } }'\n  )\n  const self = await getCodeExecutionContext(context)\n  const [value] = runner(require('prelude-ls'), self, code, context)\n  const returnedValue = await Promise.resolve(value)\n  let result = postProcessResult(returnedValue)\n  const extraMessages = [...self.extraMessages]\n  return { result, extraMessages }\n}\n\nfunction postProcessResult(returnedValue: any) {\n  if (typeof returnedValue === 'string') {\n    return returnedValue\n  }\n  return require('util').inspect(returnedValue)\n}\n\nexport const CodeEvaluationMessageHandler: TextMessageHandler = (\n  text,\n  context\n) => {\n  if (text.startsWith(';')) {\n    return async () => {\n      const input = text.slice(1)\n      try {\n        var { result, extraMessages } = await evaluateCode(input, context)\n        return [{ type: 'text', text: result }, ...extraMessages]\n      } catch (error: any) {\n        const stack = String(error.stack).replace(\n          /\\/evalaas\\/webpack:\\/@dtinth\\/automatron-core\\//g,\n          ''\n        )\n        return [{ type: 'text', text: `❌ EVALUATION FAILED ❌\\n${stack}` }]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "core/src/Cron.ts",
    "content": "import { ObjectId } from 'mongodb'\nimport { getDb } from './MongoDatabase'\nimport { AutomatronContext } from './types'\n\ninterface CronEntry {\n  name: string\n  scheduledTime: string\n  completed: boolean\n  notes?: string\n}\n\nexport async function addCronEntry(\n  context: AutomatronContext,\n  time: number,\n  text: string\n) {\n  const targetTime = new Date(time)\n  targetTime.setUTCSeconds(0)\n  targetTime.setUTCMilliseconds(0)\n\n  const collection = await getCronCollection(context)\n  await collection.insertOne({\n    name: text,\n    scheduledTime: targetTime.toISOString(),\n    completed: false,\n  })\n\n  return {\n    localTime: new Date(targetTime.getTime() + 7 * 3600e3)\n      .toJSON()\n      .replace(/\\.000Z/, ''),\n  }\n}\n\nexport async function getCronCollection(context: AutomatronContext) {\n  const db = await getDb(context)\n  return db.collection<CronEntry>('cronJobs')\n}\n\nexport async function getPendingCronJobs(context: AutomatronContext) {\n  const collection = await getCronCollection(context)\n  return collection.find({ completed: false }).toArray()\n}\n\nexport async function updateCronJob(\n  context: AutomatronContext,\n  jobId: string,\n  update: Partial<CronEntry>\n) {\n  const collection = await getCronCollection(context)\n  await collection.updateOne({ _id: new ObjectId(jobId) }, { $set: update })\n}\n"
  },
  {
    "path": "core/src/DataEncryption.ts",
    "content": "import Encrypted from '@dtinth/encrypted'\nimport { AutomatronContext } from './types'\n\nexport function decrypt(\n  context: AutomatronContext,\n  encryptedPayload: string\n): any {\n  const encrypted = Encrypted(context.secrets.ENCRYPTION_SECRET)\n  return encrypted(encryptedPayload)\n}\n\nexport function encrypt(context: AutomatronContext, payload: any): string {\n  const encrypted = Encrypted(context.secrets.ENCRYPTION_SECRET)\n  return encrypted.encrypt(payload)\n}\n"
  },
  {
    "path": "core/src/DeviceTracking.ts",
    "content": "import { getDb } from './MongoDatabase'\nimport { ref } from './PersistentState'\nimport { AutomatronContext } from './types'\nimport { logger } from './logger'\n\nasync function getCollection(context: AutomatronContext) {\n  const db = await getDb(context)\n  return db.collection<DeviceLogEntry>('deviceLog')\n}\n\ninterface DeviceLogEntry {\n  time: string\n  deviceId: string\n  key: string\n  value: any\n}\n\nasync function getDeviceStateUpdater(\n  context: AutomatronContext,\n  deviceId: string\n) {\n  const collection = await getCollection(context)\n  const device = getDeviceRef(context, deviceId)\n  const state = (await device.get()) || {}\n  const time = new Date().toISOString()\n  let changed = false\n  return {\n    time,\n    state,\n    update: async (key: string, value: any) => {\n      if (JSON.stringify(state[key]) !== JSON.stringify(value)) {\n        state[key] = value\n        await collection.insertOne({\n          time,\n          deviceId,\n          key,\n          value,\n        })\n        logger.info(\n          { deviceId, key, value },\n          `Device \"${deviceId}\" property \"${key}\" changed to \"${value}\"`\n        )\n        changed = true\n      }\n    },\n    updateSilently: async (key: string, value: any) => {\n      if (JSON.stringify(state[key]) !== JSON.stringify(value)) {\n        state[key] = value\n        changed = true\n      }\n    },\n    save: async () => {\n      if (changed) {\n        await device.set(state)\n      }\n    },\n  }\n}\n\nexport async function trackDevice(\n  context: AutomatronContext,\n  deviceId: string,\n  properties: Record<string, any>\n) {\n  const updater = await getDeviceStateUpdater(context, deviceId)\n  if (!('ip' in properties)) {\n    properties.ip = context.requestInfo.ip\n  }\n  for (const [key, value] of Object.entries(properties)) {\n    await updater.update(key, value)\n  }\n  await updater.updateSilently('lastSeen', updater.time)\n  await updater.save()\n  return updater.state\n}\n\nfunction getDeviceRef(context: AutomatronContext, deviceId: string) {\n  return ref(context, 'devices.' + deviceId)\n}\n\nexport async function checkDeviceOnlineStatus(context: AutomatronContext) {\n  const deviceIds = await getDeviceIds(context)\n  for (const deviceId of deviceIds) {\n    const updater = await getDeviceStateUpdater(context, deviceId)\n    if (\n      updater.state.online &&\n      Date.now() - new Date(updater.state.lastSeen).getTime() > 1000 * 60 * 3\n    ) {\n      await updater.update('online', false)\n    }\n    await updater.save()\n  }\n}\n\nasync function getDeviceIds(context: AutomatronContext) {\n  const value = await ref(context, 'deviceIds').get()\n  return (value || '').split(',').filter(Boolean)\n}\n"
  },
  {
    "path": "core/src/ExpenseTracking.ts",
    "content": "import { messagingApi } from '@line/bot-sdk'\nimport { GristDocAPI } from 'grist-api'\nimport { ExpenseTrackingGristTables } from './ExpenseTrackingGrist'\nimport { createBubble } from './LINEMessageUtilities'\nimport { TypedGristDocAPI } from './TypedGristDocAPI'\nimport { AutomatronContext } from './types'\n\ntype ExpenseRecord = ExpenseTrackingGristTables['Daily_Expenses']\n\nfunction getGristDoc(context: AutomatronContext) {\n  const grist = new GristDocAPI(context.secrets.GRIST_EXPENSE_DOC_ID, {\n    server: context.secrets.GRIST_BASE_URL,\n    apiKey: context.secrets.GRIST_API_KEY,\n  })\n  return grist as TypedGristDocAPI<ExpenseTrackingGristTables>\n}\n\nexport async function recordExpense(\n  context: AutomatronContext,\n  amount: string,\n  category: string,\n  remarks = ''\n): Promise<messagingApi.FlexMessage> {\n  const date = new Date().toJSON().split('T')[0]\n  // Airtable\n  const doc = getGristDoc(context)\n  const [id] = await doc.addRecords('Daily_Expenses', [\n    {\n      Date: new Date(date + 'T00:00:00Z').getTime() / 1000,\n      Category: category,\n      Amount: parseInt(amount),\n      Note: remarks,\n    },\n  ])\n  const gristUri =\n    context.secrets.GRIST_EXPENSE_URI +\n    `?openExternalBrowser=1#a1.s12.r${id}.c28`\n  const body: messagingApi.FlexBox = {\n    type: 'box',\n    layout: 'vertical',\n    contents: [\n      {\n        type: 'text',\n        text: '฿' + amount,\n        size: 'xxl',\n        weight: 'bold',\n      },\n      {\n        type: 'text',\n        text: `${category}\\nrecorded`,\n        wrap: true,\n      },\n    ],\n    action: {\n      type: 'uri',\n      label: 'Open Grist',\n      uri: gristUri,\n    },\n  }\n  const footer = await getExpensesSummaryData(context)\n  const bubble = createBubble('expense tracking', body, {\n    headerColor: '#ffffbb',\n    footer: {\n      type: 'box',\n      layout: 'horizontal',\n      spacing: 'sm',\n      contents: footer.map(([label, text]) => ({\n        type: 'box',\n        layout: 'vertical',\n        contents: [\n          {\n            type: 'text',\n            text: label,\n            color: '#8b8685',\n            size: 'xs',\n            align: 'end',\n          },\n          {\n            type: 'text',\n            text: text,\n            color: '#8b8685',\n            size: 'sm',\n            align: 'end',\n          },\n        ],\n      })),\n      action: {\n        type: 'uri',\n        label: 'Open Grist',\n        uri: gristUri,\n      },\n    },\n  })\n  return bubble\n}\nasync function getExpensesSummaryData(context: AutomatronContext) {\n  const date = new Date().toJSON().split('T')[0]\n  const gristToDate = (t: number) =>\n    new Date(t * 1000).toISOString().split('T')[0]\n  const grist = getGristDoc(context)\n  const tableData = await grist.fetchTable('Daily_Expenses')\n  const normalRecords = tableData.filter((r) => !r['Occasion'])\n  const total = (records: ExpenseRecord[]) =>\n    records.map((r) => +r['Amount'] || 0).reduce((a, b) => a + b, 0)\n  const firstDate = normalRecords\n    .map((r) => gristToDate(r['Date']))\n    .reduce((a, b) => (a < b ? a : b), date)\n  const todayUsage = total(\n    normalRecords.filter((r) => gristToDate(r['Date']) === date)\n  )\n  const totalUsage = total(normalRecords)\n  const dayNumber =\n    Math.round((Date.parse(date) - Date.parse(firstDate)) / 86400e3) + 1\n  const [pacemakerPerDay, pacemakerBase] =\n    context.secrets.EXPENSE_PACEMAKER.split('/')\n  const pacemaker = +pacemakerBase + +pacemakerPerDay * dayNumber - totalUsage\n  const $ = (v: number) => `฿${v.toFixed(0)}`\n  return [\n    ['today', $(todayUsage)],\n    ['pace', $(pacemaker)],\n    ['day', `${dayNumber}`],\n  ]\n}\n"
  },
  {
    "path": "core/src/ExpenseTrackingGrist.ts",
    "content": "export namespace grist {\n  export type Text = string\n  export type Numeric = number\n  export type Int = number\n  export type Bool = boolean\n  export type Date = number\n  export type DateTime = string\n  export type Choice = string\n  export type Reference = number\n  export type ReferenceList = ['L', ...number[]] | null\n  export type ChoiceList = ['L', ...string[]] | null\n  export type Attachments = ['L', ...number[]] | null\n  export type Any = any\n}\n\nexport type ExpenseTrackingGristTables = {\n  Daily_Expenses: {\n    id: number\n    Date: grist.Date\n    Amount: grist.Numeric\n    Category: grist.Choice\n    Beneficiary: grist.Choice\n    Note: grist.Text\n    Occasion: grist.Bool\n    Month: grist.Any // calculated/formula\n    Daily_Amount: grist.Numeric // calculated/formula\n  }\n}\n"
  },
  {
    "path": "core/src/HomeAutomation.ts",
    "content": "import Encrypted from '@dtinth/encrypted'\nimport { AutomatronContext } from './types'\nimport axios from 'axios'\n\nexport async function sendHomeCommand(\n  context: AutomatronContext,\n  cmd: string | string[]\n): Promise<void> {\n  const cmds = Array.isArray(cmd) ? cmd : [cmd]\n  const encrypted = Encrypted(context.secrets.ENCRYPTION_SECRET)\n  const { url, key } = encrypted`mz8Dc0LiBPPI63I5lMJHdC3RC9VF//S2.QYg30oYhuEUS8b1u80vM7sO0cv4OLYNtxy52fTMnf2Vcg8QZHlLeXUV1qPnEjR/5jYTid5hG6of8mHDHjTE1A+luDzplgM4WJQBgDNM2pkRnKnbcmAUw8MXxBb4ZMqrrAyFELigKoELWwbDg51ErhFXrm+n3hzfpbRIcge1BdH6aEPtNipsUcMj7q7BfBqFLZA==`\n  await Promise.all(\n    cmds.map(async (command) => {\n      const id =\n        new Date().toJSON() +\n        Math.floor(Math.random() * 10000)\n          .toString()\n          .padStart(2, '0')\n      await axios.post(url, { id, topic: 'home', data: command }, {\n        headers: {\n          'X-Api-Key': key\n        }\n      })\n    })\n  )\n}\n"
  },
  {
    "path": "core/src/ImageMessageHandler.ts",
    "content": "import vision from '@google-cloud/vision'\nimport { ref } from './PersistentState'\nimport { getBlob, getBlobUrl } from './TemporaryBlobStorage'\nimport { TextMessage, TextMessageHandler } from './types'\n\nexport const ImageMessageHandler: TextMessageHandler = (text, context) => {\n  if (text.startsWith('image:')) {\n    return async () => {\n      const blobName = text.slice(6)\n      await ref(context, 'latestImage').set(blobName)\n      return [{ type: 'text', text: blobName }]\n    }\n  }\n  if (text === 'annotate') {\n    return async () => {\n      const blobName = await ref(context, 'latestImage').get()\n      return await annotateImage(blobName)\n    }\n  }\n  if (text === 'image url') {\n    return async () => {\n      const blobName = await ref(context, 'latestImage').get()\n      return await getBlobUrl(blobName)\n    }\n  }\n}\n\nasync function annotateImage(blobName: string) {\n  const buffer = await getBlob(blobName)\n  const imageAnnotator = new vision.ImageAnnotatorClient()\n  const results = await imageAnnotator.documentTextDetection(buffer)\n  const fullTextAnnotation = results[0].fullTextAnnotation\n  const blocks: string[] = []\n  for (const page of fullTextAnnotation.pages) {\n    blocks.push(\n      ...page.blocks.map((block) => {\n        return block.paragraphs\n          .map((p) =>\n            p.words.map((w) => w.symbols.map((s) => s.text).join('')).join(' ')\n          )\n          .join('\\n\\n')\n      })\n    )\n  }\n  const blocksToResponses = (blocks: string[]) => {\n    if (blocks.length <= 4) return blocks\n    let processedIndex = 0\n    const outBlocks = []\n    for (let i = 0; i < 4; i++) {\n      const targetIndex = Math.ceil(((i + 1) * blocks.length) / 4)\n      outBlocks.push(\n        blocks\n          .slice(processedIndex, targetIndex)\n          .map((x) => `・ ${x}`)\n          .join('\\n')\n      )\n      processedIndex = targetIndex\n    }\n    return outBlocks\n  }\n  const responses = blocksToResponses(blocks)\n  return [...responses.map((r): TextMessage => ({ type: 'text', text: r }))]\n}\n"
  },
  {
    "path": "core/src/LINEClient.ts",
    "content": "import { messagingApi } from '@line/bot-sdk'\n\nexport class LINEClient {\n  private readonly api: messagingApi.MessagingApiClient\n  private readonly blobApi: messagingApi.MessagingApiBlobClient\n  constructor(config: { channelAccessToken: string }) {\n    this.api = new messagingApi.MessagingApiClient({\n      channelAccessToken: config.channelAccessToken,\n    })\n    this.blobApi = new messagingApi.MessagingApiBlobClient({\n      channelAccessToken: config.channelAccessToken,\n    })\n  }\n  replyMessage(replyToken: string, messages: messagingApi.Message[]) {\n    return this.api.replyMessage({ replyToken, messages })\n  }\n  pushMessage(to: string, messages: messagingApi.Message[]) {\n    return this.api.pushMessage({ to, messages })\n  }\n  getMessageContent(messageId: string) {\n    return this.blobApi.getMessageContent(messageId)\n  }\n  showLoadingAnimation(chatId: string) {\n    return this.api.showLoadingAnimation({ chatId })\n  }\n}\n"
  },
  {
    "path": "core/src/LINEMessageUtilities.ts",
    "content": "import { messagingApi } from '@line/bot-sdk'\n\nexport function toMessages(data: any): messagingApi.Message[] {\n  if (!data) data = '...'\n  if (typeof data === 'string') data = [{ type: 'text', text: data }]\n  if (!Array.isArray(data)) data = [data]\n  return data\n}\n\nexport function createBubble(\n  title: string,\n  text: string | messagingApi.FlexBox,\n  {\n    headerBackground = '#353433',\n    headerColor = '#d7fc70',\n    textSize = 'xl',\n    altText = String(text),\n    footer,\n  }: {\n    headerBackground?: string\n    headerColor?: string\n    textSize?: messagingApi.FlexText['size']\n    altText?: string\n    footer?: string | messagingApi.FlexBox\n  } = {}\n): messagingApi.FlexMessage {\n  const data: messagingApi.FlexContainer = {\n    type: 'bubble',\n    styles: {\n      header: { backgroundColor: headerBackground },\n    },\n    header: {\n      type: 'box',\n      layout: 'vertical',\n      contents: [\n        { type: 'text', text: title, color: headerColor, weight: 'bold' },\n      ],\n    },\n    body:\n      typeof text === 'string'\n        ? {\n            type: 'box',\n            layout: 'vertical',\n            contents: [\n              { type: 'text', text: text, wrap: true, size: textSize },\n            ],\n          }\n        : text,\n  }\n  if (footer) {\n    data.styles!.footer = { backgroundColor: '#e9e8e7' }\n    data.footer =\n      typeof footer === 'string'\n        ? {\n            type: 'box',\n            layout: 'vertical',\n            contents: [\n              {\n                type: 'text',\n                text: footer,\n                wrap: true,\n                size: 'sm',\n                color: '#8b8685',\n              },\n            ],\n          }\n        : footer\n  }\n  return {\n    type: 'flex',\n    altText: truncate(`[${title}] ${altText}`, 400),\n    contents: data,\n  }\n}\n\nfunction truncate(text: string, maxLength: number) {\n  return text.length + 5 > maxLength\n    ? text.substr(0, maxLength - 5) + '…'\n    : text\n}\n"
  },
  {
    "path": "core/src/LanguageModelAssistant.ts",
    "content": "import axios from 'axios'\nimport { decrypt } from './DataEncryption'\nimport { logger } from './logger'\nimport { getDb } from './MongoDatabase'\nimport { ref } from './PersistentState'\nimport {\n  AutomatronContext,\n  AutomatronResponse,\n  TextMessageHandler,\n} from './types'\n\ntype Role = 'system' | 'user' | 'assistant'\ninterface ChatMessage {\n  role: Role\n  content: string\n}\ninterface LlmHistoryEntry {\n  time: string\n  contextMessages?: ChatMessage[]\n  inText: string\n  outText: string\n}\n\nasync function getCollection(context: AutomatronContext) {\n  const db = await getDb(context)\n  return db.collection<LlmHistoryEntry>('llmHistory')\n}\n\nexport const LanguageModelAssistantMessageHandler: TextMessageHandler = (\n  text,\n  context\n) => {\n  const runLlm = async (\n    inText: string,\n    continueFrom?: LlmHistoryEntry\n  ): Promise<AutomatronResponse> => {\n    const key = decrypt(\n      context,\n      'c0wgjM3RJp/V40lLhcHbtjUDBvlT/NlI.yF9iWwImsHrUOiZkD6UMZdGyjLd3yCJm7WMkN6dxerzXlxCK4U6bSzNFHwyvUjPDop4+gLCs5Qa9Pcxwii3DvSVjjE+7'\n    )\n    const nowIct = new Date(Date.now() + 7 * 3600e3)\n    const day = [\n      'Sunday',\n      'Monday',\n      'Tuesday',\n      'Wednesday',\n      'Thursday',\n      'Friday',\n      'Saturday',\n    ][nowIct.getDay()]\n\n    const prompt: string[] = [\n      // https://beta.openai.com/examples/default-chat\n      'Current date and time: ' +\n        nowIct.toISOString().replace('Z', '+07:00') +\n        ' (Asia/Bangkok).',\n      'Today is ' + day + '.',\n      'The following is a conversation with an AI assistant, automatron. ' +\n        'The assistant is helpful, creative, clever, funny, and very friendly. ' +\n        (await ref(context, 'llmPrompt').get()),\n    ]\n    const newContext: ChatMessage[] = [\n      ...(continueFrom\n        ? [\n            ...(continueFrom.contextMessages ?? []),\n            { role: 'user' as Role, content: continueFrom.inText },\n            { role: 'assistant' as Role, content: continueFrom.outText },\n          ]\n        : []),\n    ]\n    const messages: ChatMessage[] = [\n      { role: 'system', content: prompt.join('\\n') },\n      ...newContext,\n      { role: 'user', content: inText },\n    ]\n    const payload = {\n      model: 'chatgpt-4o-latest',\n      messages,\n      temperature: +(await ref(context, 'llmTemperature').get()) || 0.5,\n    }\n    const response = await axios.post(\n      'https://api.openai.com/v1/chat/completions',\n      payload,\n      { headers: { Authorization: `Bearer ${key}` } }\n    )\n    const responseText = response.data.choices[0].message.content.trim()\n    logger.info(\n      { assistant: { prompt, response: response.data } },\n      'Ran OpenAI assistant'\n    )\n    const collection = await getCollection(context)\n    await collection.insertOne({\n      time: new Date().toISOString(),\n      contextMessages: newContext,\n      inText,\n      outText: responseText,\n    })\n    return [{ type: 'text', text: responseText }]\n  }\n\n  if (text.match(/^hey\\b/i)) {\n    return async () => {\n      return runLlm(text)\n    }\n  }\n  if (text.match(/^hmm?\\b/i)) {\n    return async () => {\n      const collection = await getCollection(context)\n      const [lastEntry] = await collection\n        .find({})\n        .sort({ _id: -1 })\n        .limit(1)\n        .toArray()\n      return runLlm(text, lastEntry)\n    }\n  }\n}\n"
  },
  {
    "path": "core/src/MessageHandler.ts",
    "content": "import { CodeEvaluationMessageHandler } from './CodeEvaluation'\nimport { addCronEntry } from './Cron'\nimport { recordExpense } from './ExpenseTracking'\nimport { sendHomeCommand } from './HomeAutomation'\nimport { ImageMessageHandler } from './ImageMessageHandler'\nimport { LanguageModelAssistantMessageHandler } from './LanguageModelAssistant'\nimport {\n  MessageHistoryMessageHandler,\n  saveMessageHistory,\n} from './MessageHistory'\nimport { getDb } from './MongoDatabase'\nimport { ref } from './PersistentState'\nimport { PhoneFinderMessageHandler } from './PhoneFinder'\nimport { getCodeExecutionContext } from './PreludeCode'\nimport { decodeRomanNumerals } from './RomanNumerals'\nimport { SpendingTrackingMessageHandler } from './SpendingTracking'\nimport { putBlob } from './TemporaryBlobStorage'\nimport { trace } from './Tracing'\nimport { AutomatronContext, AutomatronResponse } from './types'\n\nconst messageHandlers = [\n  CodeEvaluationMessageHandler,\n  ImageMessageHandler,\n  MessageHistoryMessageHandler,\n  SpendingTrackingMessageHandler,\n  PhoneFinderMessageHandler,\n  LanguageModelAssistantMessageHandler,\n]\n\nexport async function handleTextMessage(\n  context: AutomatronContext,\n  message: string,\n  options: { source: string }\n): Promise<AutomatronResponse> {\n  message = message.trim()\n  let match: RegExpMatchArray | null\n\n  context.addPromise(\n    'Save text history',\n    getDb(context).then((db) =>\n      trace(context, 'Save history', () =>\n        saveMessageHistory(context, message, options.source)\n      )\n    )\n  )\n\n  if (message === 'ac on' || message === 'sticker:2:27') {\n    await sendHomeCommand(context, 'ac on')\n    return 'ok, turning air-con on'\n  } else if (message === 'ac off' || message === 'sticker:2:29') {\n    await sendHomeCommand(context, 'ac off')\n    return 'ok, turning air-con off'\n  } else if (message === 'power on' || message === 'plugs on') {\n    await sendHomeCommand(context, 'plugs on')\n    return 'ok, turning smart plugs on'\n  } else if (message === 'power off' || message === 'plugs off') {\n    await sendHomeCommand(context, 'plugs off')\n    return 'ok, turning smart plugs off'\n  } else if (\n    message === 'home' ||\n    message === 'arriving' ||\n    message === 'sticker:2:503'\n  ) {\n    await sendHomeCommand(context, ['plugs on', 'lights normal', 'ac on'])\n    return 'preparing home'\n  } else if (message === 'leaving' || message === 'sticker:2:502') {\n    await sendHomeCommand(context, ['plugs off', 'lights off', 'ac off'])\n    return 'bye'\n  } else if (message === 'lights' || message === 'sticker:4:275') {\n    await sendHomeCommand(context, 'lights normal')\n    return 'ok, lights normal'\n  } else if (\n    message === 'bedtime' ||\n    message === 'gn' ||\n    message === 'gngn' ||\n    message === 'sticker:11539:52114128'\n  ) {\n    await sendHomeCommand(context, 'lights dimmed')\n    await addCronEntry(context, Date.now() + 300e3, 'lights off')\n    const prelude = await getCodeExecutionContext(context)\n    await prelude.executeHandlers('bedtime')\n    return 'ok, good night'\n  } else if (message === 'ooo') {\n    const prelude = await getCodeExecutionContext(context)\n    await prelude.executeHandlers('ooo')\n    return 'ok, out of office'\n  } else if (message === 'work') {\n    const prelude = await getCodeExecutionContext(context)\n    await prelude.executeHandlers('work')\n    return 'ok, set working status'\n  } else if ((match = message.match(/^lights (\\w+)$/))) {\n    const cmd = match[1]\n    await sendHomeCommand(context, 'lights ' + cmd)\n    return 'ok, lights ' + cmd\n  } else if ((match = message.match(/^in ([\\d\\.]+)([mh]),?\\s+([^]+)$/))) {\n    const targetTime =\n      Date.now() + +match[1] * (match[2] === 'm' ? 60 : 3600) * 1e3\n    const result = await addCronEntry(context, targetTime, match[3])\n    return `will run \"${match[3]}\" at ${result.localTime}`\n  } else if ((match = message.match(/^([\\d.]+|[ivxlcdm]+)(j?)([tfghmol])$/i))) {\n    const m = match\n    const enteredAmount = m[1].match(/[ivxlcdm]/)\n      ? decodeRomanNumerals(m[1])\n      : +m[1]\n    const conversionRate = m[2] ? 0.302909 : 1\n    const amount = (enteredAmount * conversionRate).toFixed(2)\n    const category = (\n      {\n        f: 'Food',\n        t: 'Transportation',\n        s: 'Stationery',\n        g: 'Grocery',\n        h: 'Hygiene',\n        m: 'Medicine',\n        w: 'Wellness',\n        // o: 'occasion',\n        // l: 'lodging',\n      } as {\n        [k: string]: string\n      }\n    )[m[3].toLowerCase()]\n    const remarks = m[2] ? `${m[1]} JPY` : ''\n    return await recordExpense(context, amount, category, remarks)\n  } else if ((match = message.match(/^([ivxlcdm]+)$/i))) {\n    return `${match[1]} = ${decodeRomanNumerals(match[1])}`\n  }\n\n  // Go through message handlers and see if any of them can handle the message\n  for (const handler of messageHandlers) {\n    const action = handler(message, context)\n    if (action) {\n      return action()\n    }\n  }\n\n  // At this point, the message is not recognized.\n  // Just save it to the stack.\n  const size = await ref(context, 'stack').push(message)\n  return '(unrecognized message, saved to stack (size=' + size + '))'\n}\n\nexport async function handleImage(\n  context: AutomatronContext,\n  imageBuffer: Buffer,\n  options: { source: string }\n) {\n  const blobName = await putBlob(imageBuffer, '.jpg')\n  return await handleTextMessage(context, 'image:' + blobName, options)\n}\n"
  },
  {
    "path": "core/src/MessageHistory.ts",
    "content": "import { getDb } from './MongoDatabase'\nimport { AutomatronContext, TextMessage, TextMessageHandler } from './types'\n\nexport interface MessageHistoryEntry {\n  time: string\n  text: string\n  source: string\n}\n\nexport async function saveMessageHistory(\n  context: AutomatronContext,\n  text: string,\n  source: string\n) {\n  const db = await getDb(context)\n  await db.collection<MessageHistoryEntry>('history').insertOne({\n    time: new Date().toISOString(),\n    text: text,\n    source: source,\n  })\n}\n\nexport async function getMessageHistory(\n  context: AutomatronContext,\n  options: { limit: number }\n) {\n  const db = await getDb(context)\n  return await db\n    .collection<MessageHistoryEntry>('history')\n    .find({})\n    .sort({ _id: -1 })\n    .limit(options.limit)\n    .toArray()\n}\n\nexport const MessageHistoryMessageHandler: TextMessageHandler = (\n  text,\n  context\n) => {\n  if (text === 'history') {\n    return async () => {\n      const history = await getMessageHistory(context, { limit: 5 })\n      return [...history]\n        .reverse()\n        .map((entry): TextMessage => ({ type: 'text', text: entry.text }))\n    }\n  }\n}\n"
  },
  {
    "path": "core/src/MongoDatabase.ts",
    "content": "import { Db, MongoClient } from 'mongodb'\nimport { trace } from './Tracing'\nimport { AutomatronContext } from './types'\n\nexport { Db } from 'mongodb'\n\nconst globalCacheKey = Symbol.for('automatron/MongoDatabase')\nconst cache: { dbPromise: Promise<Db> | null } = (() => {\n  return ((global as any)[globalCacheKey] = (global as any)[globalCacheKey] || {\n    dbPromise: null,\n  })\n})()\n\nexport async function getDb(context: AutomatronContext): Promise<Db> {\n  if (cache.dbPromise) {\n    return cache.dbPromise\n  }\n  cache.dbPromise = trace(context, 'getDb', async () => {\n    const client = await MongoClient.connect(context.secrets.MONGODB_URL)\n    const db = client.db('automatron')\n    return db\n  })\n  cache.dbPromise.catch(() => {\n    cache.dbPromise = null\n  })\n  return cache.dbPromise\n}\n"
  },
  {
    "path": "core/src/NotificationProcessor.ts",
    "content": "import { getDb } from './MongoDatabase'\nimport { AutomatronContext } from './types'\nimport { logger } from './logger'\n\nexport interface INotification {\n  packageName: string\n  text: string\n  title: string\n  time: string\n  postTime: string\n  when: string\n  key: string\n}\n\nexport async function handleNotification(\n  context: AutomatronContext,\n  notification: INotification\n) {\n  const text = notification.title + ' : ' + notification.text\n  const time = notification.when || notification.postTime || notification.time\n  const key = notification.key\n  const promises: Promise<void>[] = []\n  const process = (name: string, promise: Promise<void>) => {\n    promises.push(\n      promise.catch((err) => {\n        logger.error({ err, name }, `Unable to run processor \"${name}\": ${err}`)\n      })\n    )\n  }\n\n  process('save to DB', saveNotificationToDb(context, notification))\n\n  if (notification.packageName === 'com.kasikorn.retail.mbanking.wap') {\n    process('process KBank', handleKbankNotification(context, key, text, time))\n  }\n\n  return Promise.all(promises)\n}\n\nasync function saveNotificationToDb(\n  context: AutomatronContext,\n  notification: INotification\n) {\n  const db = await getDb(context)\n  await db\n    .collection('notis')\n    .insertOne({ received: new Date().toISOString(), ...notification })\n}\n\nexport async function handleKbankNotification(\n  context: AutomatronContext,\n  key: string,\n  text: string,\n  time: string = new Date().toISOString()\n) {\n  let m: RegExpMatchArray | null\n\n  m = text.match(\n    /^รายการใช้บัตร : หมายเลขบัตร (\\S+) จำนวนเงิน (\\S+) (\\S+) ที่ ([^]*)$/\n  )\n  if (m) {\n    const db = await getDb(context)\n    db.collection('txs').insertOne({\n      notificationKey: key,\n      time,\n      type: 'charge',\n      card: m[1],\n      amount: parseAmount(m[2]),\n      currency: m[3],\n      merchant: m[4],\n    })\n    return\n  }\n\n  m = text.match(\n    /^รายการยกเลิก : หมายเลขบัตร (\\S+) จำนวนเงิน (\\S+) (\\S+) ที่ ([^]*)$/\n  )\n  if (m) {\n    const db = await getDb(context)\n    db.collection('txs').insertOne({\n      notificationKey: key,\n      time,\n      type: 'refund',\n      card: m[1],\n      amount: parseAmount(m[2]),\n      currency: m[3],\n      merchant: m[4],\n    })\n    return\n  }\n}\n\nfunction parseAmount(text: string) {\n  return +text.replace(/,/g, '')\n}\n"
  },
  {
    "path": "core/src/PersistentState.ts",
    "content": "import { getDb } from './MongoDatabase'\nimport { trace } from './Tracing'\nimport { AutomatronContext } from './types'\n\ninterface StateDoc {\n  _id: string\n  value: any\n}\n\ninterface StateDocStack extends StateDoc {\n  value: any[]\n}\n\nasync function push(\n  context: AutomatronContext,\n  key: string,\n  value: any\n): Promise<number> {\n  const db = await getDb(context)\n  const result = await trace(context, `read(${key})`, () =>\n    db\n      .collection<StateDocStack>('state')\n      .findOneAndUpdate(\n        { _id: key },\n        { $push: { value } },\n        { upsert: true, returnDocument: 'after' }\n      )\n  )\n  return result.value!.value.length\n}\n\nasync function pop(context: AutomatronContext, key: string): Promise<any> {\n  const db = await getDb(context)\n  const result = await trace(context, `pop(${key})`, () =>\n    db\n      .collection<StateDocStack>('state')\n      .findOneAndUpdate({ _id: key }, { $pop: { value: 1 } })\n  )\n  return result.value!.value.pop()\n}\n\nasync function get(context: AutomatronContext, key: string): Promise<any> {\n  const db = await getDb(context)\n  const result = await trace(context, `get(${key})`, () =>\n    db.collection<StateDoc>('state').findOne({ _id: key })\n  )\n  return result?.value\n}\n\nasync function set(\n  context: AutomatronContext,\n  key: string,\n  value: any\n): Promise<boolean> {\n  const db = await getDb(context)\n  const result = await trace(context, `set(${key})`, () =>\n    db\n      .collection<StateDoc>('state')\n      .findOneAndUpdate(\n        { _id: key },\n        { $set: { value } },\n        { upsert: true, returnDocument: 'after' }\n      )\n  )\n  return !!result.ok\n}\n\nexport function ref(context: AutomatronContext, key: string) {\n  return {\n    push: push.bind(null, context, key),\n    pop: pop.bind(null, context, key),\n    get: get.bind(null, context, key),\n    set: set.bind(null, context, key),\n  }\n}\n"
  },
  {
    "path": "core/src/PhoneFinder.ts",
    "content": "import { TextMessageHandler } from './types'\nimport { GoogleAuth } from 'google-auth-library'\nimport axios from 'axios'\nimport { decrypt } from './DataEncryption'\n\nconst auth = new GoogleAuth()\n\nexport const PhoneFinderMessageHandler: TextMessageHandler = (\n  text,\n  context\n) => {\n  if (text === 'where is my phone') {\n    return async () => {\n      const url = decrypt(\n        context,\n        '09oTErU3ru/YqzCNmUBIH2ftVYz1jSfG.NODxXCib7BiuF0vAtnxpwbsvVQ5fxNVXoYDYGZHmJNxBRLPfAWj9KmAK89cOjCtFw3uxudSjqCV1F79Icmn3/SWwi5Z313xXkKyJFr9YWT/1dq8+EWcZfbPR'\n      )\n      const client = await auth.getIdTokenClient(url)\n      const jwt = await client.idTokenProvider.fetchIdToken(url)\n      await axios.post(url, {}, { headers: { Authorization: `Bearer ${jwt}` } })\n      return 'calling you now...'\n    }\n  }\n}\n"
  },
  {
    "path": "core/src/PreludeCode.ts",
    "content": "import axios from 'axios'\nimport { Storage } from '@google-cloud/storage'\nimport { AutomatronContext } from './types'\nimport tweetnacl from 'tweetnacl'\nimport jsonwebtoken from 'jsonwebtoken'\nimport crypto from 'crypto'\nimport util from 'util'\nimport Encrypted from '@dtinth/encrypted'\nimport { logger } from './logger'\nimport * as mongodb from 'mongodb'\nimport * as os from 'os'\nimport { Db, getDb } from './MongoDatabase'\nimport * as NotificationProcessor from './NotificationProcessor'\nimport * as PersistentState from './PersistentState'\nimport { getAllSpeedDials, getSpeedDialCode, saveSpeedDial } from './SpeedDial'\n\nconst lib = require('lib')\nconst storage = new Storage()\nconst preludeFile = storage.bucket('dtinth-automatron-data').file('prelude.js')\n\nexport async function deployPrelude(context: AutomatronContext) {\n  const userPreludeResponse = await axios.get(\n    'https://api.github.com/repos/dtinth/automatron-prelude/contents/prelude.js',\n    {\n      auth: {\n        username: context.secrets.GITHUB_OAUTH_APP_CREDENTIALS.split(':')[0],\n        password: context.secrets.GITHUB_OAUTH_APP_CREDENTIALS.split(':')[1],\n      },\n    }\n  )\n  const buffer = Buffer.from(userPreludeResponse.data.content, 'base64')\n  await preludeFile.save(buffer)\n  await PersistentState.ref(context, 'preludeDeployedAt').set(\n    new Date().toISOString()\n  )\n}\n\nlet cache: { deployedAt: string; code: string } | undefined\n\nexport async function getPreludeCode(context: AutomatronContext) {\n  const latestDeployedAt = await PersistentState.ref(\n    context,\n    'preludeDeployedAt'\n  ).get()\n  if (cache && cache.deployedAt === latestDeployedAt) {\n    return cache.code\n  }\n  const [buffer] = await preludeFile.download()\n  const code = buffer.toString('utf8')\n  cache = {\n    deployedAt: latestDeployedAt,\n    code,\n  }\n  return code\n}\n\nexport async function getCodeExecutionContext(\n  context: AutomatronContext\n): Promise<any> {\n  // Prepare \"self\" context\n  const self: any = {}\n  self.exec = (code: string) => {\n    return new Function(\n      ...['self', 'code'],\n      'with (self) { return eval(code) }'\n    )(self, code)\n  }\n  self.encrypted = Encrypted(context.secrets.ENCRYPTION_SECRET)\n  self.extraMessages = []\n  self.withDb = (f: (db: Db) => any) => getDb(context).then(f)\n  self.ref = PersistentState.ref.bind(null, context)\n  self.stack = self.ref('stack')\n  self.require = (id: string) => {\n    const availableModules: { [id: string]: any } = {\n      axios,\n      tweetnacl,\n      jsonwebtoken,\n      crypto,\n      util,\n      mongodb,\n      os,\n      lib,\n      '@/NotificationProcessor': NotificationProcessor,\n    }\n    const available = {}.hasOwnProperty.call(availableModules, id)\n    if (!available) {\n      throw new Error(\n        `Module ${id} not available; available modules: ${Object.keys(\n          availableModules\n        )}`\n      )\n    }\n    return availableModules[id]\n  }\n  self.json = (x: any) => JSON.stringify(x, null, 2)\n  self.SD = async (name?: string, f?: () => any) => {\n    if (name && f) {\n      if (typeof f !== 'function') {\n        throw new Error('f must be a function')\n      }\n      await saveSpeedDial(context, name, f.toString())\n      return 'Saved speed dial'\n    } else if (name) {\n      const code = await getSpeedDialCode(context, name)\n      self.extraMessages.push({\n        type: 'text',\n        text: `;;SD('${name}', ${code})`,\n      })\n      return self.exec(code)()\n    } else {\n      const all = await getAllSpeedDials(context)\n      return all.map((s) => s._id)\n    }\n  }\n\n  // Plugin system\n  type Handler = (...args: any[]) => Promise<void>\n  const registeredHandlers: Record<string, Set<Handler>> = {}\n  self.registerHandler = (event: string, handler: Handler) => {\n    if (!registeredHandlers[event]) {\n      registeredHandlers[event] = new Set()\n    }\n    registeredHandlers[event].add(handler)\n  }\n  self.executeHandlers = async (event: string, ...args: any[]) => {\n    await Promise.all(\n      [...(registeredHandlers[event] || [])].map(async (handler, i) => {\n        try {\n          const start = Date.now()\n          await handler(...args)\n          const elapsed = Date.now() - start\n          logger.info(\n            `Done executing handler index ${i} for event ${event} in ${elapsed} ms`\n          )\n        } catch (error) {\n          logger.error(\n            { err: error },\n            `Unable to execute handler index ${i} for event ${event}: ${error}`\n          )\n        }\n      })\n    )\n  }\n\n  // Execute user prelude\n  const userPrelude = await getPreludeCode(context)\n  self.exec(userPrelude)\n\n  return self\n}\n"
  },
  {
    "path": "core/src/RomanNumerals.ts",
    "content": "export function decodeRomanNumerals(romanNumerals: string) {\n  const decode = (s: string): number => {\n    if (s.startsWith('M')) return 1000 + decode(s.substr(1))\n    if (s.startsWith('CM')) return 900 + decode(s.substr(2))\n    if (s.startsWith('D')) return 500 + decode(s.substr(1))\n    if (s.startsWith('CD')) return 400 + decode(s.substr(2))\n    if (s.startsWith('C')) return 100 + decode(s.substr(1))\n    if (s.startsWith('XC')) return 90 + decode(s.substr(2))\n    if (s.startsWith('L')) return 50 + decode(s.substr(1))\n    if (s.startsWith('XL')) return 40 + decode(s.substr(2))\n    if (s.startsWith('X')) return 10 + decode(s.substr(1))\n    if (s.startsWith('IX')) return 9 + decode(s.substr(2))\n    if (s.startsWith('V')) return 5 + decode(s.substr(1))\n    if (s.startsWith('IV')) return 4 + decode(s.substr(2))\n    if (s.startsWith('I')) return 1 + decode(s.substr(1))\n    if (s === '') return 0\n    throw new InvalidRomanNumeralError(s)\n  }\n  try {\n    return decode(romanNumerals.toUpperCase())\n  } catch (e) {\n    if (e instanceof InvalidRomanNumeralError) {\n      throw new InvalidRomanNumeralError(romanNumerals)\n    }\n    throw e\n  }\n}\n\nclass InvalidRomanNumeralError extends Error {\n  constructor(s: string) {\n    super('Invalid roman numeral in input ' + s)\n  }\n}\n"
  },
  {
    "path": "core/src/SMSHandler.ts",
    "content": "import { messagingApi, QuickReplyItem } from '@line/bot-sdk'\nimport { AutomatronContext } from './types'\nimport { recordExpense } from './ExpenseTracking'\nimport { createBubble } from './LINEMessageUtilities'\nimport { LINEClient } from './LINEClient'\n\nexport async function handleSMS(\n  context: AutomatronContext,\n  client: LINEClient,\n  text: string\n) {\n  const { parseSMS } = require('transaction-parser-th')\n  const result = parseSMS(text)\n  if (!result || !result.amount) return { match: false }\n  console.log('SMS parsing result', result)\n  const title = result.type\n  const pay = result.type === 'pay'\n  const moneyOut = ['pay', 'transfer', 'withdraw'].includes(result.type)\n  const body: messagingApi.FlexBox = {\n    type: 'box',\n    layout: 'vertical',\n    contents: [\n      {\n        type: 'text',\n        text: '฿' + result.amount,\n        size: 'xxl',\n        weight: 'bold',\n      },\n    ],\n  }\n  const ordering = ['provider', 'from', 'to', 'via', 'date', 'time', 'balance']\n  const skip = ['type', 'amount']\n  const getOrder = (key: string) => ordering.indexOf(key) + 1 || 999\n  for (const key of Object.keys(result)\n    .filter((key) => !skip.includes(key))\n    .sort((a, b) => getOrder(a) - getOrder(b))) {\n    body.contents.push({\n      type: 'box',\n      layout: 'horizontal',\n      spacing: 'md',\n      contents: [\n        {\n          type: 'text',\n          text: key,\n          align: 'end',\n          color: '#888888',\n          flex: 2,\n        },\n        {\n          type: 'text',\n          text: String(result[key]),\n          flex: 5,\n        },\n      ],\n    })\n  }\n  const quickReply = (suffix: string, label: string): QuickReplyItem => ({\n    type: 'action',\n    action: {\n      type: 'message',\n      label: label,\n      text: result.amount + suffix,\n    },\n  })\n  const messages: messagingApi.Message[] = [\n    {\n      ...createBubble(title, body, {\n        headerBackground: pay ? '#91918F' : moneyOut ? '#DA9E00' : '#9471FF',\n        headerColor: '#FFFFFF',\n        altText: require('util').inspect(result),\n      }),\n      quickReply: {\n        items: [\n          quickReply('f', 'food'),\n          quickReply('h', 'health'),\n          quickReply('t', 'transport'),\n          quickReply('m', 'misc'),\n          quickReply('o', 'occasion'),\n        ],\n      },\n    },\n  ]\n  if (result.type === 'pay' && result.to === 'LINEPAY*BTS01') {\n    messages.push(\n      await recordExpense(context, result.amount, 'transportation', 'BTS')\n    )\n  }\n  await client.pushMessage(context.secrets.LINE_USER_ID, messages)\n  return { match: true }\n}\n"
  },
  {
    "path": "core/src/SlackMessageUtilities.ts",
    "content": "import { KnownBlock, MessageAttachment } from '@slack/types'\n\nexport type SlackMessage = SlackMessageWithoutBlocks | SlackMessageWithBlocks\nexport type SlackMessageWithoutBlocks = {\n  text: string\n  attachments?: MessageAttachment[]\n}\nexport type SlackMessageWithBlocks = { text?: string; blocks: KnownBlock[] }\n\nexport function createErrorMessage(error: Error): SlackMessage {\n  const title =\n    (error.name || 'Error') + (error.message ? `: ${error.message}` : '')\n  return {\n    text: title,\n    attachments: [\n      {\n        color: 'danger',\n        blocks: [\n          {\n            type: 'section',\n            text: {\n              type: 'mrkdwn',\n              text: ['```', String(error.stack || error), '```'].join('')\n            }\n          }\n        ]\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "core/src/SpeedDial.ts",
    "content": "import { getDb } from './MongoDatabase'\nimport { AutomatronContext } from './types'\n\nasync function getCollection(context: AutomatronContext) {\n  const db = await getDb(context)\n  return db.collection<{ _id: string; code: string }>('speedDial')\n}\n\nexport async function saveSpeedDial(\n  context: AutomatronContext,\n  name: string,\n  code: string\n) {\n  const collection = await getCollection(context)\n  await collection.updateOne(\n    { _id: name },\n    { $set: { code } },\n    { upsert: true }\n  )\n}\n\nexport async function getSpeedDialCode(\n  context: AutomatronContext,\n  name: string\n) {\n  const collection = await getCollection(context)\n  const result = await collection.findOne({ _id: name })\n  if (!result) {\n    throw new Error(`Speed dial ${name} not found`)\n  }\n  return result.code\n}\n\nexport async function getAllSpeedDials(context: AutomatronContext) {\n  const collection = await getCollection(context)\n  return collection.find({}).sort({ _id: 1 }).toArray()\n}\n"
  },
  {
    "path": "core/src/SpendingTracking.ts",
    "content": "import { getDb } from './MongoDatabase'\nimport { ref } from './PersistentState'\nimport { TextMessageHandler } from './types'\n\nexport const SpendingTrackingMessageHandler: TextMessageHandler = (\n  text,\n  context\n) => {\n  if (text === 'pace') {\n    return async () => {\n      const db = await getDb(context)\n      const paceResetTimeRef = ref(context, 'SpendingTracking.paceResetTime')\n      const paceResetTime = await paceResetTimeRef.get()\n      const allowancePerMillis = 24000 / (32 * 86400e3)\n      const elapsed = Date.now() - Date.parse(paceResetTime)\n      const txs = await db\n        .collection('txs')\n        .find({ time: { $gt: paceResetTime } })\n        .sort({ _id: 1 })\n        .toArray()\n      const warnings = []\n      let sum = 0\n      for (const tx of txs) {\n        let currencyMul\n        if (tx.currency === 'บาท') {\n          currencyMul = 1\n        } else {\n          warnings.push(`Unknown currency ${tx.currency}`)\n          continue\n        }\n        const typeMul = tx.type === 'refund' ? -1 : 1\n        sum += tx.amount * typeMul * currencyMul\n      }\n      const remaining = Math.round(allowancePerMillis * elapsed - sum)\n      // return { sum, warnings }\n      return `used ${sum} บาท\\nremaining ${remaining} บาท`\n    }\n  }\n  if (text === 'reset pace') {\n    return async () => {\n      const now = new Date().toISOString()\n      await ref(context, 'SpendingTracking.paceResetTime').set(now)\n      return `Pace reset to ${now}`\n    }\n  }\n}\n"
  },
  {
    "path": "core/src/TemporaryBlobStorage.ts",
    "content": "import { Storage } from '@google-cloud/storage'\nimport { nanoid } from 'nanoid'\n\nconst storage = new Storage()\nlet latest: { blobName: string; buffer: Buffer } | undefined\n\nexport async function putBlob(buffer: Buffer, extension: string) {\n  const blobName = nanoid() + extension\n  await storage.bucket('tmpblob').file(blobName).save(buffer)\n  latest = { blobName, buffer }\n  return blobName\n}\n\nexport async function getBlob(blobName: string) {\n  if (latest && latest.blobName === blobName) {\n    return latest.buffer\n  }\n  const response = await storage.bucket('tmpblob').file(blobName).download()\n  return response[0]\n}\n\nexport async function getBlobUrl(blobName: string) {\n  const result = await storage\n    .bucket('tmpblob')\n    .file(blobName)\n    .getSignedUrl({\n      action: 'read',\n      expires: new Date(Date.now() + 86400e3),\n      version: 'v4',\n      virtualHostedStyle: true,\n    })\n  return result[0]\n}\n"
  },
  {
    "path": "core/src/Tracing.ts",
    "content": "import { AutomatronContext } from './types'\n\nexport async function trace<T>(\n  context: AutomatronContext,\n  name: string,\n  f: () => Promise<T>\n) {\n  const tracer = context.tracer\n  if (!tracer) {\n    return f()\n  }\n  const span = tracer.createChildSpan({ name })\n  try {\n    return await f()\n  } finally {\n    span.endSpan()\n  }\n}\n"
  },
  {
    "path": "core/src/TypedGristDocAPI.ts",
    "content": "import type { GristDocAPI } from 'grist-api'\n\n// From: https://dt.in.th/GristTypeGenerator\nexport interface TypedGristDocAPI<Tables extends AnyTables>\n  extends Omit<\n    GristDocAPI,\n    | 'fetchTable'\n    | 'addRecords'\n    | 'deleteRecords'\n    | 'updateRecords'\n    | 'syncTable'\n  > {\n  fetchTable<TableName extends keyof Tables>(\n    tableName: TableName,\n    filters?: FilterSpec<Tables[TableName]>\n  ): Promise<Tables[TableName][]>\n  addRecords<TableName extends keyof Tables>(\n    tableName: TableName,\n    records: Partial<Tables[TableName]>[]\n  ): Promise<number[]>\n  deleteRecords<TableName extends keyof Tables>(\n    tableName: TableName,\n    recordIds: number[]\n  ): Promise<void>\n  updateRecords<TableName extends keyof Tables>(\n    tableName: TableName,\n    records: (Partial<Tables[TableName]> & { id: number })[]\n  ): Promise<void>\n  syncTable<TableName extends keyof Tables>(\n    tableName: TableName,\n    records: Partial<Tables[TableName]>[],\n    keyColIds: (keyof Tables[TableName])[],\n    options?: { filters?: FilterSpec<Tables[TableName]> }\n  ): Promise<void>\n}\nexport type AnyTable = { [colId: string]: unknown }\nexport type AnyTables = { [table: string]: AnyTable }\nexport type FilterSpec<Table extends AnyTable> = {\n  [ColId in keyof Table]?: Table[ColId][]\n}\n"
  },
  {
    "path": "core/src/bot.ts",
    "content": "import Encrypted from '@dtinth/encrypted'\nimport { MessageEvent, middleware, WebhookEvent } from '@line/bot-sdk'\nimport axios from 'axios'\nimport cors from 'cors'\nimport express, {\n  NextFunction,\n  Request,\n  RequestHandler,\n  Response,\n} from 'express'\nimport handler from 'express-async-handler'\nimport { claimEquals, auth as jwtAuth } from 'express-oauth2-jwt-bearer'\nimport { Stream } from 'stream'\nimport sealedbox from 'tweetnacl-sealedbox-js'\nimport { getPendingCronJobs, updateCronJob } from './Cron'\nimport { encrypt } from './DataEncryption'\nimport { checkDeviceOnlineStatus, trackDevice } from './DeviceTracking'\nimport { LINEClient } from './LINEClient'\nimport { toMessages } from './LINEMessageUtilities'\nimport { logger } from './logger'\nimport { handleImage, handleTextMessage } from './MessageHandler'\nimport { getMessageHistory } from './MessageHistory'\nimport { handleNotification } from './NotificationProcessor'\nimport { ref } from './PersistentState'\nimport { deployPrelude } from './PreludeCode'\nimport { createErrorMessage, SlackMessage } from './SlackMessageUtilities'\nimport { handleSMS } from './SMSHandler'\nimport { getAllSpeedDials } from './SpeedDial'\nimport { AutomatronContext } from './types'\n\nconst app = express()\napp.set('trust proxy', true)\n\nfunction getAutomatronContext(req: Request, res: Response): AutomatronContext {\n  return {\n    secrets: req.env,\n    tracer: req.tracer,\n    requestInfo: {\n      ip: req.ip || '',\n      ips: req.ips,\n      headers: req.headers,\n    },\n    addPromise: (name, promise) => {\n      if (!res.yields) res.yields = []\n      res.yields.push(promise)\n    },\n  }\n}\n\nasync function runMiddleware(\n  req: Request,\n  res: Response,\n  middleware: RequestHandler\n): Promise<void> {\n  return new Promise((resolve, reject) => {\n    middleware(req, res, (error) => {\n      if (error) {\n        reject(error)\n      } else {\n        resolve()\n      }\n    })\n  })\n}\n\nasync function handleWebhook(\n  context: AutomatronContext,\n  events: WebhookEvent[],\n  client: LINEClient\n) {\n  async function main() {\n    for (const event of events) {\n      if (event.type === 'message') {\n        await handleMessageEvent(event)\n      }\n    }\n  }\n\n  async function handleMessageEvent(event: MessageEvent) {\n    const { replyToken, message } = event\n    if (event.source.userId !== context.secrets.LINE_USER_ID) {\n      await client.replyMessage(replyToken, toMessages('unauthorized'))\n      return\n    }\n    client.showLoadingAnimation(event.source.userId).catch((e) => {\n      logger.error({ err: e }, 'Unable to show loading animation')\n    })\n    if (message.type === 'text') {\n      const reply = await handleTextMessage(context, message.text, {\n        source: 'line',\n      })\n      await client.replyMessage(replyToken, toMessages(reply))\n    } else if (message.type === 'sticker') {\n      const reply = await handleTextMessage(\n        context,\n        'sticker:' + message.packageId + ':' + message.stickerId,\n        { source: 'line' }\n      )\n      await client.replyMessage(replyToken, toMessages(reply))\n    } else if (message.type === 'image') {\n      const content = await client.getMessageContent(message.id)\n      const buffer = await readAsBuffer(content)\n      const reply = await handleImage(context, buffer as Buffer, {\n        source: 'line',\n      })\n      await client.replyMessage(replyToken, toMessages(reply))\n    } else {\n      await client.replyMessage(replyToken, [\n        { type: 'text', text: 'don’t know how to handle this yet!' },\n      ])\n    }\n  }\n\n  return main()\n}\n\napp.post(\n  '/webhook',\n  handler(async (req, res) => {\n    const lineConfig = getLineConfig(req, res)\n    await runMiddleware(req, res, middleware(lineConfig))\n    await handleRequest(req, res, async (context, services) => {\n      const lineClient = services.line\n      logger.info(\n        { ingest: 'line', event: JSON.stringify(req.body) },\n        'Received webhook from LINE'\n      )\n      const data = await handleWebhook(context, req.body.events, lineClient)\n      return data\n    })\n  })\n)\n\napp.post(\n  '/slack',\n  require('body-parser').json(),\n  (req, res, next) => {\n    logger.info(\n      { ingest: 'slack', event: JSON.stringify(req.body) },\n      'Received an event from Slack'\n    )\n    if (req.body.type === 'url_verification') {\n      res.set('Content-Type', 'text/plain').send(req.body.challenge)\n      return\n    }\n    next()\n  },\n  endpoint(async (context, req, services) => {\n    if (req.body.type === 'event_callback') {\n      let globalScope = global as unknown as {\n        automatronSlackEventCache: Set<string>\n      }\n      let eventCache = globalScope.automatronSlackEventCache\n      if (!eventCache) {\n        eventCache = new Set()\n        globalScope.automatronSlackEventCache = eventCache\n      }\n      const eventId = req.body.event_id\n      if (eventCache.has(eventId)) {\n        return\n      }\n      eventCache.add(eventId)\n      if (req.body.event.user === req.env.SLACK_USER_ID) {\n        const text = String(req.body.event.text)\n          .replace(/&gt;/g, '>')\n          .replace(/&lt;/g, '>')\n          .replace(/&amp;/g, '&')\n        const slackClient = services.slack\n        const reply = await handleTextMessage(context, text, {\n          source: 'slack',\n        })\n        await slackClient.pushMessage({\n          text: `\\`\\`\\`${JSON.stringify(reply, null, 2)}\\`\\`\\``,\n        })\n      }\n    }\n\n    return 1\n  })\n)\n\napp.post(\n  '/post',\n  require('body-parser').json(),\n  requireApiKey,\n  endpoint(async (context, req, services) => {\n    const lineClient = services.line\n    const messages = toMessages(req.body.data)\n    await lineClient.pushMessage(context.secrets.LINE_USER_ID, messages)\n  })\n)\n\napp.post(\n  '/text',\n  require('body-parser').json(),\n  requireApiKey,\n  endpoint(async (context, req, services) => {\n    logger.info(\n      { ingest: 'text', event: JSON.stringify(req.body) },\n      'Received a text API call'\n    )\n    const text = String(req.body.text)\n    logToSlack(context, services.auditSlack, text, req.body.source)\n    const reply = await handleTextMessage(context, text, {\n      source: 'text:' + req.body.source,\n    })\n    return reply\n  })\n)\n\napp.options('/webpost-firebase', cors() as any)\napp.post(\n  '/webpost-firebase',\n  require('body-parser').json(),\n  requireFirebaseAuth,\n  cors(),\n  endpoint(async (context, req, services) => {\n    logger.info(\n      { ingest: 'webpost-firebase', event: JSON.stringify(req.body) },\n      'Received a webpost API call with Firebase credentials'\n    )\n    const text = String(req.body.text)\n    logToSlack(context, services.auditSlack, text, req.body.source)\n    const reply = await handleTextMessage(context, text, {\n      source: 'webpost:' + req.body.source,\n    })\n    return reply\n  })\n)\n\napp.options('/history', cors() as any)\napp.get(\n  '/history',\n  requireFirebaseAuth,\n  cors(),\n  endpoint(async (context, req) => {\n    logger.info(\n      { ingest: 'history', event: JSON.stringify(req.body) },\n      'Received a history API call'\n    )\n    return {\n      history: await getMessageHistory(context, { limit: 20 }),\n    }\n  })\n)\n\napp.options('/speed-dials', cors() as any)\napp.get(\n  '/speed-dials',\n  requireFirebaseAuth,\n  cors(),\n  endpoint(async (context, req) => {\n    logger.info(\n      { ingest: 'speed-dials', event: JSON.stringify(req.body) },\n      'Received a speed dial API call'\n    )\n    return {\n      speedDials: await getAllSpeedDials(context),\n    }\n  })\n)\n\napp.options('/knobs', cors() as any)\napp.get(\n  '/knobs',\n  requireFirebaseAuth,\n  cors(),\n  endpoint(async (context, req) => {\n    logger.info({ ingest: 'knobs' }, 'Received a knobs API call')\n    const knobKeys = ((await ref(context, 'knobs').get()) as string).split(',')\n    const knobs = Object.fromEntries(\n      await Promise.all(\n        knobKeys.map(async (key) => {\n          const value = await ref(context, key).get()\n          return [key, value] as [string, string]\n        })\n      )\n    )\n    return { knobs }\n  })\n)\n\n// http post $AUTOMATRON/encrypt data=meow\napp.post(\n  '/encrypt',\n  express.json(),\n  endpoint(async (context, req) => {\n    return encrypt(context, req.body.data)\n  })\n)\n\nfunction logToSlack(\n  context: AutomatronContext,\n  slack: Slack,\n  text: string,\n  source: string\n) {\n  context.addPromise(\n    'Log to Slack',\n    slack.pushMessage({\n      blocks: [\n        {\n          type: 'context',\n          elements: [{ type: 'plain_text', text: 'from ' + source }],\n        },\n        {\n          type: 'section',\n          text: { type: 'plain_text', text: text },\n        },\n      ],\n    })\n  )\n}\n\napp.post(\n  '/gh/prelude/push',\n  require('body-parser').json(),\n  endpoint(async (context, req, services) => {\n    logger.info(\n      { ingest: 'prelude-push', event: JSON.stringify(req.body) },\n      'Received prelude push webhook from GitHub'\n    )\n    await deployPrelude(context)\n    return 'ok'\n  })\n)\n\napp.post(\n  '/sms',\n  require('body-parser').json(),\n  requireApiKey,\n  endpoint(async (context, req, services) => {\n    const text = String(req.body.text)\n    return await handleSMS(context, services.line, text)\n  })\n)\n\napp.post(\n  '/notification',\n  require('body-parser').text(),\n  endpoint(async (context, req, services) => {\n    try {\n      const encrypted = Encrypted(context.secrets.ENCRYPTION_SECRET)\n      const { publicKey, secretKey } = encrypted(`\n        BpnjVPJcwkInfE/lPxxcl6E11BlDNh3v.KoCet77F7KC4pvuhRySH2wNP1AjYpUGVcHQSqhc\n        rbFTDHUsXDaYjF/Jc584uh7Bd6yLl0a4scdEsX7EhxuHXUknD4bA8AXxkJe/OhI3EbmfleP5\n        ByVNvvvxqScM9pHvCy/bURK33REznhvW0MsscwgRGsqMxvI7Km9RpxpglexWANMlrkuVBJbC\n        G3CeOqs9QGI3QS0K+jse8PM7HvJ8vg43AAjQsx6o85xSzaGWVWE1wdNtWfkdusGf/NYbDyb6\n        hgA9ddrCRJVMydqJ4g9A/LgpieO0v\n      `)\n      const result = sealedbox.open(\n        Buffer.from(req.body, 'hex'),\n        Buffer.from(publicKey, 'base64'),\n        Buffer.from(secretKey, 'base64')\n      )\n      const notification = JSON.parse(Buffer.from(result).toString('utf8'))\n      logger.info(\n        { ingest: 'notification', notification },\n        'Received a notification from ' + notification.packageName\n      )\n      const deviceId = String(req.query.deviceId ?? 'phone')\n      await trackDevice(context, deviceId, {})\n      await handleNotification(context, notification)\n    } catch (err) {\n      logger.error({ err, data: req.body }, 'Unable to process notification')\n    }\n  })\n)\n\napp.get(\n  '/cron',\n  endpoint(async (context, req, services) => {\n    const otherTasks: Promise<any>[] = []\n    otherTasks.push(\n      (async () => {\n        await checkDeviceOnlineStatus(context)\n      })()\n    )\n    await Promise.all(otherTasks)\n\n    const pendingJobs = await getPendingCronJobs(context)\n    const jobsToRun = pendingJobs.filter(\n      (j) => new Date().toISOString() >= j.scheduledTime\n    )\n    logger.trace('Number of pending cron jobs found: %s', jobsToRun.length)\n    try {\n      for (const job of jobsToRun) {\n        let result = 'No output'\n        const logContext = {\n          job: { id: job._id.toString(), name: job.name },\n        }\n        try {\n          const reply = await handleTextMessage(context, job.name, {\n            source: 'cron:' + job._id.toString(),\n          })\n          result = require('util').inspect(reply)\n          logger.info(\n            { ...logContext, result },\n            `Done processing cron job: ${job.name}`\n          )\n        } catch (e) {\n          logError('Unable to process cron job', e, logContext)\n          result = `Error: ${e}`\n        }\n        await updateCronJob(context, job._id.toString(), {\n          completed: true,\n          notes: result,\n        })\n      }\n      return 'All OK'\n    } catch (e) {\n      logError('Unable to process cron jobs', e)\n      return 'Error: ' + e\n    }\n  })\n)\n\napp.post(\n  '/mac/ping',\n  require('body-parser').json(),\n  requireApiKey,\n  endpoint(async (context, req, services) => {\n    const deviceId = req.body.deviceId\n    if (!deviceId) {\n      throw new Error('Missing deviceId')\n    }\n    const newState = await trackDevice(context, deviceId, {\n      locked: req.body.locked || null,\n      powerSource: req.body.powerSource,\n      online: true,\n    })\n    return { newState }\n  })\n)\n\nfunction requireApiKey(req: Request, res: Response, next: NextFunction) {\n  const context = getAutomatronContext(req, res)\n  if (req.body.key !== context.secrets.API_KEY) {\n    return res.status(401).json({ error: 'Invalid API key' })\n  }\n  next()\n}\n\nconst firebaseAuthn = jwtAuth({\n  issuer: 'https://securetoken.google.com/dtinth-automatron',\n  jwksUri:\n    'https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com',\n  audience: 'dtinth-automatron',\n})\nfunction requireFirebaseAuth(req: Request, res: Response, next: NextFunction) {\n  const encrypted = Encrypted(req.env.ENCRYPTION_SECRET)\n  const sub = encrypted(\n    `HnX5zHMDR/F7ZUy8sw2829Wi7cYbi/3c.6CBZ+I3sTbyYsXUg81qf+OvjRQExIfVkkhGvEs9E+w7LAO4y9KwU1DtKAtIutA==`\n  )\n  return firebaseAuthn(req, res, (err) => {\n    if (err) {\n      return next(err)\n    }\n    claimEquals('sub', sub)(req, res, next)\n  })\n}\n\nclass Slack {\n  constructor(private webhookUrl: string) {}\n  async pushMessage(message: SlackMessage) {\n    await axios.post(this.webhookUrl, message)\n  }\n}\n\ninterface ThirdPartyServices {\n  line: LINEClient\n  slack: Slack\n  auditSlack: Slack\n}\n\nfunction endpoint(\n  f: (\n    context: AutomatronContext,\n    req: Request,\n    services: ThirdPartyServices\n  ) => Promise<any>\n): RequestHandler {\n  return handler(async (req, res) => {\n    await handleRequest(req, res, (context, services) =>\n      f(context, req, services)\n    )\n  })\n}\n\nasync function handleRequest(\n  req: Request,\n  res: Response,\n  f: (context: AutomatronContext, services: ThirdPartyServices) => Promise<any>\n) {\n  const context = getAutomatronContext(req, res)\n  const encrypted = Encrypted(context.secrets.ENCRYPTION_SECRET)\n  const lineConfig = getLineConfig(req, res)\n  const lineClient = new LINEClient(lineConfig)\n  const slackClient = new Slack(context.secrets.SLACK_WEBHOOK_URL)\n  const auditSlackClient = new Slack(\n    encrypted(\n      'j3o0uDUL3OuYfUsYxZUkI8ECdaUIGxW0.HX1CMjS27oaZHnQormJbPIoE9xdPB3GsITBVXW2oIFeuuAb4xyWVJZyywWMubR1I1ECkXtBJN+Fs+98MECYk+u9YnlnAgw6DlE9e8TezE88C5DeNtOO0DOnSO6ww39Cn/w=='\n    )\n  )\n  try {\n    const result = await f(context, {\n      line: lineClient,\n      slack: slackClient,\n      auditSlack: auditSlackClient,\n    })\n    await Promise.allSettled(res.yields || [])\n    res.json({ ok: true, result })\n  } catch (e) {\n    logError('Unable to execute endpoint ' + req.path, e)\n    try {\n      await slackClient.pushMessage(createErrorMessage(e as any))\n    } catch (ee) {\n      console.error('Cannot send error message to LINE!')\n      logError('Unable to send error message to Slack', ee)\n    }\n    await Promise.allSettled(res.yields || [])\n    throw e\n  }\n}\n\nfunction logError(title: string, e: any, extra: Record<string, any> = {}) {\n  var response = e.response || (e.originalError && e.originalError.response)\n  var data = response && response.data\n  const bindings: Record<string, any> = { ...extra, err: e }\n  if (data) {\n    bindings.responseData = JSON.stringify(data)\n  }\n  logger.error(bindings, `${title}: ${e}`)\n}\n\nfunction getLineConfig(req: Request, res: Response) {\n  const context = getAutomatronContext(req, res)\n  const isDev = process.env.AUTOMATRON_ENV === 'dev'\n  return {\n    channelAccessToken: isDev\n      ? context.secrets.DEV_LINE_CHANNEL_ACCESS_TOKEN\n      : context.secrets.LINE_CHANNEL_ACCESS_TOKEN,\n    channelSecret: isDev\n      ? context.secrets.DEV_LINE_CHANNEL_SECRET\n      : context.secrets.LINE_CHANNEL_SECRET,\n  }\n}\n\nfunction readAsBuffer(stream: Stream) {\n  return new Promise((resolve, reject) => {\n    stream.on('error', (e: Error) => {\n      reject(e)\n    })\n    const bufs: Buffer[] = []\n    stream.on('end', () => {\n      resolve(Buffer.concat(bufs))\n    })\n    stream.on('data', (buf: Buffer) => {\n      bufs.push(buf)\n    })\n  })\n}\n\nmodule.exports = app\n"
  },
  {
    "path": "core/src/logger.ts",
    "content": "import pino from 'pino'\n\nexport const logger = pino({\n  // https://github.com/pinojs/pino/issues/726#issuecomment-605814879\n  messageKey: 'message',\n  formatters: {\n    level: (label) => {\n      function getSeverity(label: string) {\n        switch (label) {\n          case 'trace':\n            return 'DEBUG'\n          case 'debug':\n            return 'DEBUG'\n          case 'info':\n            return 'INFO'\n          case 'warn':\n            return 'WARNING'\n          case 'error':\n            return 'ERROR'\n          case 'fatal':\n            return 'CRITICAL'\n          default:\n            return 'DEFAULT'\n        }\n      }\n      return { severity: getSeverity(label) }\n    },\n  },\n}).child({ name: 'automatron' })\n"
  },
  {
    "path": "core/src/modules.d.ts",
    "content": "declare module '@google-cloud/vision' {\n  export class ImageAnnotatorClient {\n    constructor(options?: any)\n    documentTextDetection(\n      imageBuffer: Buffer\n    ): Promise<\n      {\n        fullTextAnnotation: {\n          pages: {\n            blocks: {\n              paragraphs: {\n                words: {\n                  symbols: {\n                    text: string\n                  }[]\n                }[]\n              }[]\n            }[]\n          }[]\n        }\n      }[]\n    >\n  }\n}\n\ndeclare module 'airtable' {\n  export interface AirtableRecord {\n    get(field: string): any\n    getId(): string\n  }\n  export default class Airtable {\n    constructor(options: any)\n    base(\n      id: string\n    ): {\n      table(\n        name: string\n      ): {\n        select(\n          options?: any\n        ): {\n          all(): Promise<AirtableRecord[]>\n        }\n        create(data: any, options?: any): Promise<AirtableRecord>\n        update(id: string, data: any): Promise<AirtableRecord>\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "core/src/scripts/updateEnv.ts",
    "content": "import { Storage } from '@google-cloud/storage'\nimport { password } from '@inquirer/prompts'\nimport * as age from 'age-encryption'\nimport { defineCommand, runMain } from 'citty'\n\nconst main = defineCommand({\n  meta: {\n    name: 'updateEnv',\n    description:\n      'Encrypt and upload environment variables to Google Cloud Storage',\n  },\n  args: {\n    name: {\n      type: 'positional',\n      description: 'Name',\n      required: true,\n    },\n  },\n  async run({ args }) {\n    const name = args.name\n    const value = await password({\n      message: `Enter value for ${name}:`,\n      mask: true,\n    })\n    const e = new age.Encrypter()\n    e.addRecipient(\n      'age1234vw9hka4p6eurluezk49kn46ywqpshywy6eypvs0kw0dep6a4sn6gyaz'\n    )\n    e.addRecipient(\n      'age1eeezwmr0u6pnl2rgw56dl3k5pcsmxfmzv42varg2zzm96a7s64as9cffpl'\n    )\n    const ciphertext = await e.encrypt(value)\n    const encoded = age.armor.encode(ciphertext)\n    console.log(name)\n    console.log(encoded)\n\n    await writeEnv(name, encoded)\n  },\n})\n\nasync function writeEnv(key: string, encodedValue: string) {\n  const storage = new Storage()\n  const [, bucket, file] = process.env.AUTOMATRON_ENV_GS_URI!.match(\n    /^gs:\\/\\/([^\\/]+)\\/(.+)$/\n  )!\n  const [data] = await storage.bucket(bucket).file(file).download()\n  const encryptedEnv = JSON.parse(data.toString()) as Record<string, string>\n  encryptedEnv[key] = encodedValue\n  await storage\n    .bucket(bucket)\n    .file(file)\n    .save(JSON.stringify(encryptedEnv, null, 2))\n  console.log(`Updated ${key} in ${process.env.AUTOMATRON_ENV_GS_URI}`)\n}\n\nrunMain(main)\n"
  },
  {
    "path": "core/src/server.ts",
    "content": "import { Storage } from '@google-cloud/storage'\nimport { start } from '@google-cloud/trace-agent'\nimport * as age from 'age-encryption'\nimport crypto from 'crypto'\nimport express from 'express'\nimport 'google-application-credentials-base64'\nimport { BotSecrets } from './BotSecrets'\n\nconst bot = require('./bot')\nconst tracer = start()\n\nconst app = express()\nconst PORT = process.env.PORT || 28364\n\nconst storage = new Storage()\nconst [, bucket, file] = process.env.AUTOMATRON_ENV_GS_URI!.match(\n  /^gs:\\/\\/([^\\/]+)\\/(.+)$/\n)!\n\nfunction loadEnv(): Promise<BotSecrets> {\n  return storage\n    .bucket(bucket)\n    .file(file)\n    .download()\n    .then(async ([data]) => {\n      const encryptedEnv = JSON.parse(data.toString()) as Record<string, string>\n      const env: Record<string, string> = {}\n      const d = new age.Decrypter()\n      d.addIdentity(process.env.AGE_SECRET_KEY!)\n      for (const [key, value] of Object.entries(encryptedEnv)) {\n        const ciphertext = age.armor.decode(value)\n        env[key] = await d.decrypt(ciphertext, 'text')\n      }\n      console.log('Decrypted keys:', Object.keys(env))\n      return env\n    }) as Promise<BotSecrets>\n}\nlet envPromise: Promise<BotSecrets> = loadEnv()\nlet reloadPromise: Promise<BotSecrets> | null = null\nenvPromise\n  .then(async (env) => {\n    console.log('Environment has been loaded')\n  })\n  .catch((err) => {\n    console.error('Unable to load environment', err)\n  })\napp.post('/run/automatron/reload', async (req, res, next) => {\n  try {\n    let validationEnv: BotSecrets\n    try {\n      validationEnv = await envPromise\n    } catch (err) {\n      console.warn('Existing environment unavailable, attempting reload', err)\n      validationEnv = await loadEnv()\n    }\n    const providedApiKey = req.get('X-API-Key')\n    const providedBuffer = providedApiKey\n      ? Buffer.from(providedApiKey, 'utf8')\n      : undefined\n    const expectedBuffer = Buffer.from(validationEnv.API_KEY, 'utf8')\n    if (\n      !providedBuffer ||\n      providedBuffer.length !== expectedBuffer.length ||\n      !crypto.timingSafeEqual(providedBuffer, expectedBuffer)\n    ) {\n      res.status(401).send('Invalid API key')\n      return\n    }\n    const startReload = () => {\n      const nextEnvPromise = loadEnv()\n      return nextEnvPromise\n        .then((env) => {\n          envPromise = nextEnvPromise\n          return env\n        })\n        .catch((err) => {\n          console.error('Unable to reload environment', err)\n          throw err\n        })\n        .finally(() => {\n          reloadPromise = null\n        })\n    }\n    if (!reloadPromise) {\n      reloadPromise = startReload()\n    }\n    await reloadPromise\n    res.json({ ok: true })\n  } catch (err) {\n    next(err)\n  }\n})\napp.use('/run/automatron', async (req, res, next) => {\n  try {\n    req.tracer = tracer\n    req.env = (await envPromise) as unknown as BotSecrets\n    bot(req, res)\n  } catch (err) {\n    next(err)\n  }\n})\napp.get('/', (req, res) => {\n  res.send('Automatron is running')\n})\napp.listen(PORT, () => {\n  console.log(`Automatron server is running on port ${PORT}`)\n})\n"
  },
  {
    "path": "core/src/typedefs.d.ts",
    "content": "declare module 'tweetnacl-sealedbox-js'\ndeclare module 'lib'\n"
  },
  {
    "path": "core/src/types.ts",
    "content": "import { FlexMessage, messagingApi, TextMessage } from '@line/bot-sdk'\nimport { BotSecrets } from './BotSecrets'\nimport type { PluginTypes } from '@google-cloud/trace-agent'\nimport { IncomingHttpHeaders } from 'http'\n\nexport interface AutomatronContext {\n  secrets: BotSecrets\n  requestInfo: HttpRequestInfo\n  tracer?: PluginTypes.Tracer\n  addPromise: (name: string, promise: Promise<any>) => void\n}\n\nexport interface HttpRequestInfo {\n  ip: string\n  ips: string[]\n  headers: IncomingHttpHeaders\n}\n\ndeclare global {\n  module Express {\n    interface Request {\n      env: BotSecrets\n      tracer?: PluginTypes.Tracer\n    }\n    interface Response {\n      yields?: Promise<any>[]\n    }\n  }\n  module NodeJS {\n    interface Global {\n      automatronSlackEventCache?: Set<string>\n    }\n  }\n}\n\nexport { FlexMessage, TextMessage } from '@line/bot-sdk'\n\nexport type AutomatronResponse =\n  | string\n  | messagingApi.TextMessage\n  | messagingApi.TextMessage[]\n  | messagingApi.FlexMessage\n  | messagingApi.FlexMessage[]\n\nexport type TextMessageHandler = (\n  text: string,\n  context: AutomatronContext\n) => (() => Promise<AutomatronResponse>) | undefined\n"
  },
  {
    "path": "core/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es2020\",\n    \"module\": \"commonjs\",\n    \"noEmit\": true,\n    \"lib\": [\"es2020\"],\n    \"esModuleInterop\": true,\n    \"strict\": true,\n    \"rootDir\": \"src\",\n    \"skipLibCheck\": true\n  }\n}\n"
  },
  {
    "path": "fnox.toml",
    "content": "default_provider = \"age\"\n\n[providers.age]\ntype = \"age\"\nrecipients = [\n  \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHac2M/WdCsejGpA87JlU2uwvVokPhqD7eufdMDoEU8z\",\n  \"age1234vw9hka4p6eurluezk49kn46ywqpshywy6eypvs0kw0dep6a4sn6gyaz\",\n]\n\n[secrets]\nAUTOMATRON_ENV_GS_URI = { provider = \"age\", value = \"YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDU1NTU1QSBuUEs0cnFxTmowMWVGNFQ1WG41NUVIKzdoUHNodjFReW0wQW9LUFNIa2hNCnZEVFNWQ1FkYmhaaGR4cnhaNnBKQTFJcmlIblo3TWxlQTRKYTVyWHBRUjgKLT4gWDI1NTE5IHhYL3dOY0hUWWNwQzV1WTg5ejM2QUdKNTdUVVNUWVJEZlFlZk8wbU9GeWsKMS96TUdIWXpxbVJOOW5JQStRSnRWMHJJeEFYQmpmeXl5UnNFU0cvUmJrSQotLS0gWmErQlZXM1J3L2FCY1JTcHExZTVYWW1aN2xvV0FaT1FNTXZ1QXRvZWR5awoMoFXvpKR5HptiKYIwCNP1Nc2QygS/o6S1c3PY6V5kdAxAku0plOQMAef1PNR/ZZOUUdcAh8Eux38Yw+Cf6ARWPXSIewIt/csh\" }\nAGE_SECRET_KEY = { provider = \"age\", value = \"YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDU1NTU1QSBmTjZmKy9lMzVmZDdjanE2NGttZHVtMTR0VEVQVHRMVVRTYmNLWC9DTVZZCjd2NHo5ZU5wd251NCtNd0cvNTREa3VtaCs3eXA4R2VuOVdsSUhueE1LZUEKLT4gWDI1NTE5IERleis4WFB6K2lLRC8wdjlVdTkxTDlxa01wb1BkMjJtOWc1aTU4ajY0SGcKVlpMbkRNZlZKNXFYRW9IQlBzVXl0OGlUYndCdVJMbTBzYWdMNWRlQWtrdwotLS0ga1RNaDVlVm5zUXc3cFF4UTVCMDhqS3ZjTk13bnFtd0xWcmJNeGxOSHhKMArxpe14F0CnSZsC3ULOoT+Ux+4LCbzE91ocIW15MnN6S6ltSKz7R22qN5gp5THqgb5D4wWiwgAJly6Zbi4lRr7QEXHEztHfMxKZbteRIQyFzXhpE0cijc7r9tz8fl2ZOjbBJzwe2Pxbl7b/\" }\nFRP_SERVER_ADDR = { provider = \"age\", value = \"YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IDU1NTU1QSBITld6M2xlMS8ya1lyTW9UZEdnWVJZMnE1RDZnMzBseVEvdHZ1Y3NJeHk4Ck03c0YzOGRvQmlUckdJVk9td3V5WkxnZG93QnlKRlNtWjRiU3dZK243NzgKLT4gWDI1NTE5IDg4L2tURkdLN250VThHQVNBTUFqeHpHNG5GVDFDdGlNemZYQ3YzaGozM0EKVjU0TUJYSHVSSEdzMUxjbmdOY2srT0dBTGxuanhweGJCaWQ2MDdiSTlLRQotLS0gZkVkVXZMSXd2YlMvbFI2a1l2VGQzcmgrbHBjS0wzL3hXbXpHTzVzRWNlQQo2o4ALYA0LvVvDchUo6X6Jg6uoIlAVsT7vI9BFsWER2q8d0XQn9Kp7TzCMYl8=\" }\n"
  },
  {
    "path": "frpc.toml",
    "content": "serverAddr = \"{{ .Envs.FRP_SERVER_ADDR }}\"\nserverPort = 7000\n\n[[proxies]]\nname = \"automatron\"\ntype = \"http\"\nlocalPort = 28364\nsubdomain = \"automatron-tunnel\"\n"
  },
  {
    "path": "images/.gitkeep",
    "content": "\n"
  },
  {
    "path": "mise.toml",
    "content": "[tools]\nfnox = \"latest\"\nnode = \"24\"\n\n[env]\n_.file = '.env'\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"automatron-workspace\",\n  \"private\": true,\n  \"packageManager\": \"pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247\",\n  \"engines\": {\n    \"node\": \"24.x\"\n  },\n  \"scripts\": {\n    \"dev\": \"fnox exec -- pnpm -C core run dev\",\n    \"tunnel\": \"fnox exec -- frpc -c frpc.toml\",\n    \"env:set\": \"fnox exec -- pnpm -C core exec tsx src/scripts/updateEnv.ts\"\n  }\n}\n"
  },
  {
    "path": "pnpm-workspace.yaml",
    "content": "packages:\n  - core\n  - webui\n"
  },
  {
    "path": "webui/.eslintrc.cjs",
    "content": "/**\n * This is intended to be a basic starting point for linting in your app.\n * It relies on recommended configs out of the box for simplicity, but you can\n * and should modify this configuration to best suit your team's needs.\n */\n\n/** @type {import('eslint').Linter.Config} */\nmodule.exports = {\n  root: true,\n  parserOptions: {\n    ecmaVersion: 'latest',\n    sourceType: 'module',\n    ecmaFeatures: {\n      jsx: true,\n    },\n  },\n  env: {\n    browser: true,\n    commonjs: true,\n    es6: true,\n  },\n\n  // Base config\n  extends: ['eslint:recommended'],\n\n  overrides: [\n    // React\n    {\n      files: ['**/*.{js,jsx,ts,tsx}'],\n      plugins: ['react', 'jsx-a11y'],\n      extends: [\n        'plugin:react/recommended',\n        'plugin:react/jsx-runtime',\n        'plugin:react-hooks/recommended',\n        'plugin:jsx-a11y/recommended',\n      ],\n      settings: {\n        react: {\n          version: 'detect',\n        },\n        formComponents: ['Form'],\n        linkComponents: [\n          { name: 'Link', linkAttribute: 'to' },\n          { name: 'NavLink', linkAttribute: 'to' },\n        ],\n        'import/resolver': {\n          typescript: {},\n        },\n      },\n      rules: {\n        'jsx-a11y/no-autofocus': 'off',\n      },\n    },\n\n    // Typescript\n    {\n      files: ['**/*.{ts,tsx}'],\n      plugins: ['@typescript-eslint', 'import'],\n      parser: '@typescript-eslint/parser',\n      settings: {\n        'import/internal-regex': '^~/',\n        'import/resolver': {\n          node: {\n            extensions: ['.ts', '.tsx'],\n          },\n          typescript: {\n            alwaysTryTypes: true,\n          },\n        },\n      },\n      extends: [\n        'plugin:@typescript-eslint/recommended',\n        'plugin:import/recommended',\n        'plugin:import/typescript',\n      ],\n      rules: {\n        '@typescript-eslint/no-unused-vars': 'off',\n        'import/no-unresolved': 'off',\n        '@typescript-eslint/no-explicit-any': 'off',\n      },\n    },\n\n    // Node\n    {\n      files: ['.eslintrc.js'],\n      env: {\n        node: true,\n      },\n    },\n  ],\n}\n"
  },
  {
    "path": "webui/.gitignore",
    "content": "node_modules\n\n/.cache\n/build\n.env\n/dist/"
  },
  {
    "path": "webui/README.md",
    "content": "# Welcome to Remix + Vite!\n\n📖 See the [Remix docs](https://remix.run/docs) and the [Remix Vite docs](https://remix.run/docs/en/main/future/vite) for details on supported features.\n\n## Development\n\nRun the Vite dev server:\n\n```shellscript\nnpm run dev\n```\n\n## Deployment\n\nFirst, build your app for production:\n\n```sh\nnpm run build\n```\n\nThen run the app in production mode:\n\n```sh\nnpm start\n```\n\nNow you'll need to pick a host to deploy it to.\n\n### DIY\n\nIf you're familiar with deploying Node applications, the built-in Remix app server is production-ready.\n\nMake sure to deploy the output of `npm run build`\n\n- `build/server`\n- `build/client`\n"
  },
  {
    "path": "webui/app/Clock.tsx",
    "content": "import { useEffect, useState } from 'react'\n\nexport function Clock() {\n  const [time, setTime] = useState(getTime)\n  useEffect(() => {\n    const interval = setInterval(() => {\n      setTime(getTime())\n    }, 1000)\n    return () => clearInterval(interval)\n  }, [])\n  return (\n    <div className=\"come-up flex h-screen items-center justify-center text-transparent [font:bold_37.5vw_Arimo] [-webkit-text-stroke:0.5px_#d7fc70]\">\n      {time}\n    </div>\n  )\n}\nconst getTime = () => {\n  return new Date().toString().split(' ')[4].split(':').slice(0, 2).join(':')\n}\n"
  },
  {
    "path": "webui/app/backend.ts",
    "content": "import {\n  getAuth,\n  onAuthStateChanged,\n  User,\n  GoogleAuthProvider,\n  signInWithPopup,\n  signOut as signOutFirebase,\n} from 'firebase/auth'\nimport { getFirestore, doc, getDoc } from 'firebase/firestore'\nimport { app } from './firebase'\nimport { SyncExternalStore } from 'sync-external-store'\nimport axios from 'axios'\n\nconst auth = getAuth(app)\nconst firestore = getFirestore(app)\n\nclass AutomatronBackend implements Backend {\n  authReadyStatePromise: Promise<void>\n  authStore = new SyncExternalStore<User | null | undefined>(undefined)\n  private url?: string\n\n  constructor() {\n    this.authReadyStatePromise = new Promise<void>((resolve) => {\n      onAuthStateChanged(auth, (user) => {\n        this.authStore.state = user\n        resolve()\n        if (user && !this.url) {\n          this.getUrl()\n        }\n      })\n    })\n  }\n\n  private async getUrl() {\n    if (this.url) {\n      return this.url\n    }\n    const s = await getDoc(\n      doc(firestore, 'apps', 'automatron', 'config', 'url')\n    )\n    this.url = s.data()?.service\n    return this.url\n  }\n\n  async signIn() {\n    try {\n      const provider = new GoogleAuthProvider()\n      await signInWithPopup(auth, provider)\n    } catch (error) {\n      console.error(error)\n      alert(`Unable to sign in: ${error}`)\n    }\n  }\n\n  async signOut() {\n    await signOutFirebase(auth)\n  }\n\n  async send(text: string): Promise<any> {\n    const data = await this._post('/webpost-firebase', { text, source: 'web' })\n    if (typeof data.result === 'string') {\n      data.result = [\n        {\n          type: 'text',\n          text: data.result,\n        },\n      ]\n    }\n    return data\n  }\n\n  private async getHeaders() {\n    return {\n      Authorization: `Bearer ${await this.getIdToken()}`,\n    }\n  }\n\n  async getHistory(): Promise<any> {\n    return this._get('/history')\n  }\n\n  async getSpeedDials(): Promise<any> {\n    return this._get('/speed-dials')\n  }\n\n  async getKnobs(): Promise<Ok<{ knobs: Record<string, string> }>> {\n    return this._get('/knobs')\n  }\n\n  private async getIdToken() {\n    return await auth.currentUser!.getIdToken()\n  }\n\n  async _get(url: string) {\n    const response = await axios.get((await this.getUrl()) + url, {\n      headers: await this.getHeaders(),\n    })\n    return response.data\n  }\n\n  async _post(url: string, data: any) {\n    const response = await axios.post((await this.getUrl()) + url, data, {\n      headers: await this.getHeaders(),\n    })\n    return response.data\n  }\n}\n\nclass FakeBackend implements Backend {\n  authReadyStatePromise: Promise<void> = Promise.resolve()\n  authStore = new SyncExternalStore<User | null | undefined>(null)\n\n  async signIn() {\n    this.authStore.state = {} as User\n  }\n\n  async signOut() {\n    this.authStore.state = null\n  }\n\n  async getHistory(): Promise<any> {\n    return { ok: true, result: { history: [] } }\n  }\n\n  async getSpeedDials(): Promise<any> {\n    return { ok: true, result: { speedDials: [] } }\n  }\n\n  async getKnobs(): Promise<Ok<{ knobs: Record<string, string> }>> {\n    return { ok: true, result: { knobs: {} } }\n  }\n\n  async send(text: string): Promise<any> {\n    return JSON.parse(text)\n  }\n}\n\ntype Ok<X> = { ok: true; result: X }\n\ninterface Backend {\n  authReadyStatePromise: Promise<void>\n  authStore: SyncExternalStore<User | null | undefined>\n  signIn(): Promise<void>\n  signOut(): Promise<void>\n  send(text: string): Promise<any>\n  getHistory(): Promise<any>\n  getSpeedDials(): Promise<any>\n  getKnobs(): Promise<Ok<{ knobs: Record<string, string> }>>\n}\n\nexport const backend =\n  typeof location === 'undefined' ||\n  new URLSearchParams(location.search).get('backend') === 'fake'\n    ? new FakeBackend()\n    : new AutomatronBackend()\n\nif (typeof window !== 'undefined') {\n  Object.assign(window, { backend })\n}\n"
  },
  {
    "path": "webui/app/firebase.ts",
    "content": "import { initializeApp } from 'firebase/app'\n\n// Your web app's Firebase configuration\nconst firebaseConfig = {\n  apiKey: 'AIzaSyAmj0axCEWY5ojSMDs25h0hNNfMFCRIqys',\n  authDomain: 'dtinth-automatron.firebaseapp.com',\n  projectId: 'dtinth-automatron',\n  storageBucket: 'dtinth-automatron.appspot.com',\n  messagingSenderId: '347735770628',\n  appId: '1:347735770628:web:8fce6a02b34c2d17c2d751',\n}\n\n// Initialize Firebase\nexport const app = initializeApp(firebaseConfig)\n"
  },
  {
    "path": "webui/app/index.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\nbody {\n  font-family: Arimo, Helvetica, Arial, sans-serif;\n}\n\n.come-up {\n  animation: 0.25s come-up;\n}\n\n@keyframes come-up {\n  from {\n    transform: scale(0.99);\n    opacity: 0;\n  }\n  to {\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\nbody::-webkit-scrollbar {\n  display: none;\n}\n\n.bg-bevel {\n  background: #252423 linear-gradient(to bottom, #454443, #151413);\n}\n\n.bg-emboss {\n  background: #252423 linear-gradient(to bottom, #151413, #292827);\n}\n\n.bg-glossy {\n  background: #252423\n    linear-gradient(\n      to bottom,\n      #353433 0%,\n      #252423 50%,\n      #151413 50%,\n      #252423 100%\n    );\n}\n"
  },
  {
    "path": "webui/app/requireAuth.ts",
    "content": "import { backend } from './backend'\nimport { redirect } from '@remix-run/react'\n\nexport async function requireAuth() {\n  await backend.authReadyStatePromise\n  if (!backend.authStore.state) {\n    throw redirect('/')\n  }\n}\n"
  },
  {
    "path": "webui/app/root.tsx",
    "content": "import {\n  Links,\n  LiveReload,\n  Meta,\n  Outlet,\n  Scripts,\n  ScrollRestoration,\n} from '@remix-run/react'\n\nimport './index.css'\n\nexport default function App() {\n  return (\n    <html lang=\"en\">\n      <head>\n        <meta charSet=\"utf-8\" />\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n        <Meta />\n        <Links />\n      </head>\n      <body className=\"bg-#353433 text-white\">\n        <Outlet />\n        <ScrollRestoration />\n        <Scripts />\n        <LiveReload />\n      </body>\n    </html>\n  )\n}\n"
  },
  {
    "path": "webui/app/routes/_index.tsx",
    "content": "import { ReactNode, useSyncExternalStore } from 'react'\nimport { Clock } from '~/Clock'\nimport { backend } from '~/backend'\nimport { Icon } from '@iconify-icon/react'\nimport running from '@iconify-icons/cil/running'\nimport menu from '@iconify-icons/cil/menu'\nimport { useNavigate } from '@remix-run/react'\n\nexport default function Index() {\n  return (\n    <>\n      <AuthButton />\n      <Clock />\n    </>\n  )\n}\n\nfunction AuthButton() {\n  const authState = useSyncExternalStore(\n    backend.authStore.subscribe,\n    backend.authStore.getSnapshot\n  )\n  const navigate = useNavigate()\n\n  return (\n    <>\n      {authState === undefined ? (\n        <></>\n      ) : authState === null ? (\n        <FloatingButton onClick={() => backend.signIn()} title=\"Sign In\">\n          <Icon icon={running} />\n        </FloatingButton>\n      ) : (\n        <FloatingButton\n          onClick={() => {\n            navigate('/automatron')\n          }}\n          title=\"Automatron\"\n        >\n          <Icon icon={menu} />\n        </FloatingButton>\n      )}\n      <Clock />\n    </>\n  )\n}\n\nexport interface FloatingButton {\n  title: string\n  children: ReactNode\n  onClick?: () => void\n}\n\nexport function FloatingButton(props: FloatingButton) {\n  return (\n    <div className=\"absolute top-2 right-2\">\n      <button\n        onClick={props.onClick}\n        className=\"p-2 text-3xl text-#8b8685\"\n        title={props.title}\n      >\n        {props.children}\n      </button>\n    </div>\n  )\n}\n"
  },
  {
    "path": "webui/app/routes/automatron._index.tsx",
    "content": "import { Icon } from '@iconify-icon/react'\nimport chevronLeft from '@iconify-icons/cil/chevron-left'\nimport chevronRight from '@iconify-icons/cil/chevron-right'\nimport history from '@iconify-icons/cil/history'\nimport send from '@iconify-icons/cil/send'\nimport {\n  Await,\n  ClientActionFunctionArgs,\n  Form,\n  useActionData,\n  useLoaderData,\n  useNavigation,\n} from '@remix-run/react'\nimport clsx from 'clsx'\nimport { ReactNode, Suspense, useState } from 'react'\nimport { z } from 'zod'\nimport { backend } from '~/backend'\nimport { requireAuth } from '~/requireAuth'\n\nexport const clientLoader = async () => {\n  await requireAuth()\n  return {\n    speedDialsPromise: backend.getSpeedDials(),\n    historyPromise: backend.getHistory(),\n  }\n}\n\nexport interface ActionResult {\n  result?: unknown\n  error?: unknown\n}\n\nexport const clientAction = async (\n  args: ClientActionFunctionArgs\n): Promise<ActionResult> => {\n  await requireAuth()\n  const form = await args.request.formData()\n  const text = form.get('text')\n  const result = await backend.send(String(text))\n  try {\n    return { result } as ActionResult\n  } catch (error) {\n    return { error }\n  }\n}\n\nconst classes = {\n  button:\n    'bg-bevel hover:border-#555453 block rounded border border-#454443 p-2 shadow-md shadow-black/50 active:border-#8b8685 flex flex-col items-center justify-center',\n}\n\nexport default function AutomatronConsole() {\n  const data = useLoaderData<typeof clientLoader>()\n  const [speedDialEnabled, setSpeedDialEnabled] = useState(false)\n  const [historyEnabled, setHistoryEnabled] = useState(false)\n  const { error, result } = useActionData<typeof clientAction>() ?? {}\n  const navigation = useNavigation()\n  const isSubmitting = navigation.state === 'submitting'\n\n  return (\n    <>\n      <Form className=\"flex gap-2\" method=\"POST\">\n        <textarea\n          name=\"text\"\n          className=\"bg-emboss hover:border-#555453 block w-full flex-1 rounded border border-#454443 py-1 px-2 font-mono placeholder-#8b8685 shadow-md shadow-black/50 focus:border-#656463 active:border-#8b8685\"\n          placeholder=\"Talk to automatron\"\n          autoFocus\n        />\n        <button\n          className={clsx(classes.button, 'text-xl text-#8b8685')}\n          type=\"submit\"\n          title=\"Send\"\n          disabled={isSubmitting}\n        >\n          <Icon icon={send} />\n        </button>\n      </Form>\n      <div className=\"mt-2 flex gap-2\">\n        <button\n          className={clsx(classes.button, 'text-lg text-#8b8685')}\n          onClick={() => setHistoryEnabled((x) => !x)}\n        >\n          <Icon icon={history} />\n        </button>\n        <button\n          className={clsx(classes.button, 'text-lg text-#8b8685')}\n          onClick={() => setSpeedDialEnabled((x) => !x)}\n        >\n          <Icon icon={speedDialEnabled ? chevronLeft : chevronRight} />\n        </button>\n        {speedDialEnabled && (\n          <Suspense fallback={<div className=\"self-center\">Loading...</div>}>\n            <Await resolve={data.speedDialsPromise}>\n              {(speedDials) => <SpeedDial speedDialData={speedDials} />}\n            </Await>\n          </Suspense>\n        )}\n      </div>\n      {historyEnabled && (\n        <div className=\"mt-4\">\n          <Panel title=\"History\">\n            <Suspense fallback={<div>Loading...</div>}>\n              <Await resolve={data.historyPromise}>\n                {(historyData) => (\n                  <AutomatronHistory historyData={historyData} />\n                )}\n              </Await>\n            </Suspense>\n          </Panel>\n        </div>\n      )}\n      <div className=\"mt-4\">\n        {!!isSubmitting && (\n          <pre className=\"whitespace-pre-wrap font-mono text-yellow-400\">\n            Sending...\n          </pre>\n        )}\n        {!!error && (\n          <pre className=\"whitespace-pre-wrap font-mono text-red-300\">\n            {String(error)}\n          </pre>\n        )}\n        {!!result && <OutputViewer data={result} />}\n      </div>\n    </>\n  )\n}\n\nexport interface OutputViewer {\n  data: unknown\n}\n\ntype OkResult = z.infer<typeof OkResult>\nconst OkResult = z.object({\n  ok: z.literal(true),\n  result: z.array(\n    z\n      .object({\n        type: z.string(),\n      })\n      .passthrough()\n  ),\n})\n\nexport function OutputViewer(props: OutputViewer) {\n  const { data } = props\n  const okResult = OkResult.safeParse(data)\n  if (okResult.success) {\n    const result = okResult.data.result\n    return (\n      <div className=\"flex flex-col gap-2 text-sm\">\n        {result.map((item, index) => (\n          <ResultItem key={index} item={item as any} />\n        ))}\n      </div>\n    )\n  }\n  return (\n    <pre className=\"whitespace-pre-wrap font-mono\">\n      {typeof data === 'string' ? data : JSON.stringify(data, null, 2)}\n    </pre>\n  )\n}\n\ntype ResultEntry = { type: 'text'; text: string }\n\nexport interface ResultItem {\n  item: ResultEntry\n}\n\nexport function ResultItem(props: ResultItem) {\n  const { item } = props\n  const children = (() => {\n    switch (item.type) {\n      case 'text':\n        return <pre className=\"whitespace-pre-wrap font-mono\">{item.text}</pre>\n      default:\n        return (\n          <pre className=\"whitespace-pre-wrap font-mono\">\n            {JSON.stringify(item, null, 2)}\n          </pre>\n        )\n    }\n  })()\n  return (\n    <div className=\"rounded border border-#454443 bg-#090807 p-2 \">\n      {children}\n    </div>\n  )\n}\n\nexport interface AutomatronHistory {\n  historyData: any\n}\nexport function AutomatronHistory(props: AutomatronHistory) {\n  return (\n    <>\n      <div className=\"flex flex-col\">\n        {props.historyData.result.history.map(\n          (item: { text: string }, index: number) => (\n            <div\n              key={index}\n              className=\"border-t border-#454443 bg-#090807 p-2 first:border-t-0\"\n            >\n              <pre className=\"whitespace-pre-wrap font-mono text-sm\">\n                {item.text}\n              </pre>\n            </div>\n          )\n        )}\n      </div>\n    </>\n  )\n}\n\nexport interface Panel {\n  title: ReactNode\n  children: ReactNode\n}\n\nexport function Panel(props: Panel) {\n  return (\n    <section className=\"overflow-hidden rounded border border-#454443 bg-#353433 shadow-md shadow-black/50\">\n      <h2 className=\"bg-glossy py-1 px-2 font-bold text-#8b8685\">\n        <span>{props.title}</span>\n      </h2>\n      {props.children}\n    </section>\n  )\n}\n\nexport interface SpeedDial {\n  speedDialData: any\n}\nexport function SpeedDial(props: SpeedDial) {\n  return (\n    <>\n      {props.speedDialData.result.speedDials.map((item: { _id: string }) => (\n        <Form method=\"POST\" key={item._id} className=\"flex m-0\">\n          <input type=\"hidden\" name=\"text\" value={`;SD '${item._id}'`} />\n          <button className={clsx(classes.button, 'py-0')} type=\"submit\">\n            {item._id}\n          </button>\n        </Form>\n      ))}\n    </>\n  )\n}\n"
  },
  {
    "path": "webui/app/routes/automatron.knobs.tsx",
    "content": "import { Icon } from '@iconify-icon/react'\nimport copy from '@iconify-icons/cil/copy'\nimport { useLoaderData } from '@remix-run/react'\nimport { backend } from '~/backend'\nimport { requireAuth } from '~/requireAuth'\n\nexport interface AutomatronKnobs {}\n\nexport const clientLoader = async () => {\n  await requireAuth()\n  return {\n    knobs: await backend.getKnobs(),\n  }\n}\n\nexport default function AutomatronKnobs() {\n  const { knobs } = useLoaderData<typeof clientLoader>()\n  return (\n    <div className=\"flex flex-col gap-4\">\n      {Object.entries(knobs.result.knobs)\n        .sort((a, b) => a[0].localeCompare(b[0]))\n        .map(([name, value]) => {\n          return (\n            <div key={name}>\n              <div className=\"flex gap-3\">\n                <label className=\"block text-#8b8685\">{name}</label>\n                <button\n                  className=\"text-#8b8685\"\n                  onClick={() => {\n                    const code = `;;ref('${name}').set(${JSON.stringify(\n                      value\n                    )})`\n                    navigator.clipboard.writeText(code)\n                  }}\n                >\n                  <Icon icon={copy} />\n                </button>\n              </div>\n              <input\n                type=\"text\"\n                value={String(value)}\n                readOnly\n                className=\"bg-emboss hover:border-#555453 block w-full rounded border border-#454443 py-1 px-2 font-mono placeholder-#8b8685 shadow-md shadow-black/50 focus:border-#656463 active:border-#8b8685\"\n              />\n            </div>\n          )\n        })}\n    </div>\n  )\n}\n"
  },
  {
    "path": "webui/app/routes/automatron.tsx",
    "content": "import { Link, Outlet, useLocation } from '@remix-run/react'\nimport { Fragment } from 'react'\n\nexport default function AutomatronLayout() {\n  const { pathname } = useLocation()\n  return (\n    <>\n      <div className=\"flex h-16 items-end px-2\">\n        {Array.from(['automatron', 'knobs']).map((key) => {\n          const to = `/automatron${key === 'automatron' ? '' : `/${key}`}`\n          return (\n            <Fragment key={key}>\n              {pathname === to ? (\n                <div className=\"border-x border-t border-#454443 bg-#252423 px-2 py-1 text-sm text-#8b8685\">\n                  {key}\n                </div>\n              ) : (\n                <Link\n                  to={to}\n                  className=\"border-x border-t border-transparent px-2 py-1 text-sm text-#8b8685\"\n                >\n                  {key}\n                </Link>\n              )}\n            </Fragment>\n          )\n        })}\n      </div>\n      <div className=\"-mt-px min-h-screen border-t border-t-#454443 bg-#252423 px-4 py-4\">\n        <Outlet />\n      </div>\n    </>\n  )\n}\n"
  },
  {
    "path": "webui/env.d.ts",
    "content": "/// <reference types=\"@remix-run/node\" />\n/// <reference types=\"vite/client\" />\n"
  },
  {
    "path": "webui/package.json",
    "content": "{\n  \"name\": \"webui-remix\",\n  \"private\": true,\n  \"sideEffects\": false,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"remix vite:build\",\n    \"dev\": \"remix vite:dev --port ${PORT:-22301}\",\n    \"lint\": \"eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .\",\n    \"start\": \"remix-serve ./build/server/index.js\",\n    \"typecheck\": \"tsc\"\n  },\n  \"dependencies\": {\n    \"@fontsource/arimo\": \"^5.0.18\",\n    \"@iconify-icon/react\": \"^1.0.8\",\n    \"@iconify-icons/cil\": \"^1.2.4\",\n    \"@nanostores/react\": \"^0.7.1\",\n    \"@playwright/test\": \"^1.40.1\",\n    \"@remix-run/node\": \"^2.12.0\",\n    \"@remix-run/react\": \"^2.12.0\",\n    \"@remix-run/serve\": \"^2.12.0\",\n    \"axios\": \"^1.6.5\",\n    \"clsx\": \"^1.2.1\",\n    \"firebase\": \"^10.7.1\",\n    \"isbot\": \"^4.1.0\",\n    \"nanostores\": \"^0.9.5\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"sync-external-store\": \"^1.0.0\",\n    \"zod\": \"^3.20.2\"\n  },\n  \"devDependencies\": {\n    \"@remix-run/dev\": \"^2.12.0\",\n    \"@types/react\": \"^18.2.47\",\n    \"@types/react-dom\": \"^18.2.18\",\n    \"@typescript-eslint/eslint-plugin\": \"^6.7.4\",\n    \"autoprefixer\": \"^10.4.13\",\n    \"eslint\": \"^8.38.0\",\n    \"eslint-config-prettier\": \"^9.0.0\",\n    \"eslint-import-resolver-typescript\": \"^3.6.1\",\n    \"eslint-plugin-import\": \"^2.28.1\",\n    \"eslint-plugin-jsx-a11y\": \"^6.7.1\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"postcss\": \"^8.4.33\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"typescript\": \"^5.9.3\",\n    \"vite\": \"^5.0.0\",\n    \"vite-tsconfig-paths\": \"^4.2.1\"\n  },\n  \"engines\": {\n    \"node\": \"24.x\"\n  }\n}\n"
  },
  {
    "path": "webui/playwright-report/index.html",
    "content": "\n\n<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset='UTF-8'>\n    <meta name='color-scheme' content='dark light'>\n    <meta name='viewport' content='width=device-width, initial-scale=1.0'>\n    <title>Playwright Test Report</title>\n    <script type=\"module\">var J0=Object.defineProperty;var _0=(e,t,n)=>t in e?J0(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Rt=(e,t,n)=>(_0(e,typeof t!=\"symbol\"?t+\"\":t,n),n);(function(){const t=document.createElement(\"link\").relList;if(t&&t.supports&&t.supports(\"modulepreload\"))return;for(const o of document.querySelectorAll('link[rel=\"modulepreload\"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type===\"childList\")for(const i of s.addedNodes)i.tagName===\"LINK\"&&i.rel===\"modulepreload\"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin===\"use-credentials\"?s.credentials=\"include\":o.crossOrigin===\"anonymous\"?s.credentials=\"omit\":s.credentials=\"same-origin\",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();var Xn=typeof globalThis<\"u\"?globalThis:typeof window<\"u\"?window:typeof global<\"u\"?global:typeof self<\"u\"?self:{};function $0(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}var tf={exports:{}},xs={},nf={exports:{}},Q={};/**\n * @license React\n * react.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 */var Jr=Symbol.for(\"react.element\"),eh=Symbol.for(\"react.portal\"),th=Symbol.for(\"react.fragment\"),nh=Symbol.for(\"react.strict_mode\"),rh=Symbol.for(\"react.profiler\"),oh=Symbol.for(\"react.provider\"),sh=Symbol.for(\"react.context\"),ih=Symbol.for(\"react.forward_ref\"),lh=Symbol.for(\"react.suspense\"),ch=Symbol.for(\"react.memo\"),ah=Symbol.for(\"react.lazy\"),Vc=Symbol.iterator;function uh(e){return e===null||typeof e!=\"object\"?null:(e=Vc&&e[Vc]||e[\"@@iterator\"],typeof e==\"function\"?e:null)}var rf={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},of=Object.assign,sf={};function tr(e,t,n){this.props=e,this.context=t,this.refs=sf,this.updater=n||rf}tr.prototype.isReactComponent={};tr.prototype.setState=function(e,t){if(typeof e!=\"object\"&&typeof e!=\"function\"&&e!=null)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,e,t,\"setState\")};tr.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")};function lf(){}lf.prototype=tr.prototype;function Il(e,t,n){this.props=e,this.context=t,this.refs=sf,this.updater=n||rf}var bl=Il.prototype=new lf;bl.constructor=Il;of(bl,tr.prototype);bl.isPureReactComponent=!0;var Wc=Array.isArray,cf=Object.prototype.hasOwnProperty,Nl={current:null},af={key:!0,ref:!0,__self:!0,__source:!0};function uf(e,t,n){var r,o={},s=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(s=\"\"+t.key),t)cf.call(t,r)&&!af.hasOwnProperty(r)&&(o[r]=t[r]);var l=arguments.length-2;if(l===1)o.children=n;else if(1<l){for(var c=Array(l),a=0;a<l;a++)c[a]=arguments[a+2];o.children=c}if(e&&e.defaultProps)for(r in l=e.defaultProps,l)o[r]===void 0&&(o[r]=l[r]);return{$$typeof:Jr,type:e,key:s,ref:i,props:o,_owner:Nl.current}}function fh(e,t){return{$$typeof:Jr,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function Ol(e){return typeof e==\"object\"&&e!==null&&e.$$typeof===Jr}function dh(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+e.replace(/[=:]/g,function(n){return t[n]})}var Gc=/\\/+/g;function Vs(e,t){return typeof e==\"object\"&&e!==null&&e.key!=null?dh(\"\"+e.key):t.toString(36)}function bo(e,t,n,r,o){var s=typeof e;(s===\"undefined\"||s===\"boolean\")&&(e=null);var i=!1;if(e===null)i=!0;else switch(s){case\"string\":case\"number\":i=!0;break;case\"object\":switch(e.$$typeof){case Jr:case eh:i=!0}}if(i)return i=e,o=o(i),e=r===\"\"?\".\"+Vs(i,0):r,Wc(o)?(n=\"\",e!=null&&(n=e.replace(Gc,\"$&/\")+\"/\"),bo(o,t,n,\"\",function(a){return a})):o!=null&&(Ol(o)&&(o=fh(o,n+(!o.key||i&&i.key===o.key?\"\":(\"\"+o.key).replace(Gc,\"$&/\")+\"/\")+e)),t.push(o)),1;if(i=0,r=r===\"\"?\".\":r+\":\",Wc(e))for(var l=0;l<e.length;l++){s=e[l];var c=r+Vs(s,l);i+=bo(s,t,n,c,o)}else if(c=uh(e),typeof c==\"function\")for(e=c.call(e),l=0;!(s=e.next()).done;)s=s.value,c=r+Vs(s,l++),i+=bo(s,t,n,c,o);else if(s===\"object\")throw t=String(e),Error(\"Objects are not valid as a React child (found: \"+(t===\"[object Object]\"?\"object with keys {\"+Object.keys(e).join(\", \")+\"}\":t)+\"). If you meant to render a collection of children, use an array instead.\");return i}function oo(e,t,n){if(e==null)return e;var r=[],o=0;return bo(e,r,\"\",\"\",function(s){return t.call(n,s,o++)}),r}function ph(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var ke={current:null},No={transition:null},hh={ReactCurrentDispatcher:ke,ReactCurrentBatchConfig:No,ReactCurrentOwner:Nl};Q.Children={map:oo,forEach:function(e,t,n){oo(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return oo(e,function(){t++}),t},toArray:function(e){return oo(e,function(t){return t})||[]},only:function(e){if(!Ol(e))throw Error(\"React.Children.only expected to receive a single React element child.\");return e}};Q.Component=tr;Q.Fragment=th;Q.Profiler=rh;Q.PureComponent=Il;Q.StrictMode=nh;Q.Suspense=lh;Q.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=hh;Q.cloneElement=function(e,t,n){if(e==null)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+e+\".\");var r=of({},e.props),o=e.key,s=e.ref,i=e._owner;if(t!=null){if(t.ref!==void 0&&(s=t.ref,i=Nl.current),t.key!==void 0&&(o=\"\"+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)cf.call(t,c)&&!af.hasOwnProperty(c)&&(r[c]=t[c]===void 0&&l!==void 0?l[c]:t[c])}var c=arguments.length-2;if(c===1)r.children=n;else if(1<c){l=Array(c);for(var a=0;a<c;a++)l[a]=arguments[a+2];r.children=l}return{$$typeof:Jr,type:e.type,key:o,ref:s,props:r,_owner:i}};Q.createContext=function(e){return e={$$typeof:sh,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:oh,_context:e},e.Consumer=e};Q.createElement=uf;Q.createFactory=function(e){var t=uf.bind(null,e);return t.type=e,t};Q.createRef=function(){return{current:null}};Q.forwardRef=function(e){return{$$typeof:ih,render:e}};Q.isValidElement=Ol;Q.lazy=function(e){return{$$typeof:ah,_payload:{_status:-1,_result:e},_init:ph}};Q.memo=function(e,t){return{$$typeof:ch,type:e,compare:t===void 0?null:t}};Q.startTransition=function(e){var t=No.transition;No.transition={};try{e()}finally{No.transition=t}};Q.unstable_act=function(){throw Error(\"act(...) is not supported in production builds of React.\")};Q.useCallback=function(e,t){return ke.current.useCallback(e,t)};Q.useContext=function(e){return ke.current.useContext(e)};Q.useDebugValue=function(){};Q.useDeferredValue=function(e){return ke.current.useDeferredValue(e)};Q.useEffect=function(e,t){return ke.current.useEffect(e,t)};Q.useId=function(){return ke.current.useId()};Q.useImperativeHandle=function(e,t,n){return ke.current.useImperativeHandle(e,t,n)};Q.useInsertionEffect=function(e,t){return ke.current.useInsertionEffect(e,t)};Q.useLayoutEffect=function(e,t){return ke.current.useLayoutEffect(e,t)};Q.useMemo=function(e,t){return ke.current.useMemo(e,t)};Q.useReducer=function(e,t,n){return ke.current.useReducer(e,t,n)};Q.useRef=function(e){return ke.current.useRef(e)};Q.useState=function(e){return ke.current.useState(e)};Q.useSyncExternalStore=function(e,t,n){return ke.current.useSyncExternalStore(e,t,n)};Q.useTransition=function(){return ke.current.useTransition()};Q.version=\"18.1.0\";nf.exports=Q;var j=nf.exports;/**\n * @license React\n * react-jsx-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 */var gh=j,mh=Symbol.for(\"react.element\"),vh=Symbol.for(\"react.fragment\"),wh=Object.prototype.hasOwnProperty,yh=gh.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Ah={key:!0,ref:!0,__self:!0,__source:!0};function ff(e,t,n){var r,o={},s=null,i=null;n!==void 0&&(s=\"\"+n),t.key!==void 0&&(s=\"\"+t.key),t.ref!==void 0&&(i=t.ref);for(r in t)wh.call(t,r)&&!Ah.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)o[r]===void 0&&(o[r]=t[r]);return{$$typeof:mh,type:e,key:s,ref:i,props:o,_owner:yh.current}}xs.Fragment=vh;xs.jsx=ff;xs.jsxs=ff;tf.exports=xs;var Pl=tf.exports;const yn=Pl.Fragment,A=Pl.jsx,L=Pl.jsxs,Eh=15,V=0,yt=1,xh=2,De=-2,J=-3,Yc=-4,At=-5,Pe=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],df=1440,Sh=0,kh=4,Ch=9,Dh=5,Rh=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],Th=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],Ih=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],bh=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],Nh=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],Oh=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],Tt=15;function ki(){const e=this;let t,n,r,o,s,i;function l(a,p,m,h,x,E,v,g,u,f,d){let y,k,w,S,C,R,D,T,M,O,q,U,B,Y,I;O=0,C=m;do r[a[p+O]]++,O++,C--;while(C!==0);if(r[0]==m)return v[0]=-1,g[0]=0,V;for(T=g[0],R=1;R<=Tt&&r[R]===0;R++);for(D=R,T<R&&(T=R),C=Tt;C!==0&&r[C]===0;C--);for(w=C,T>C&&(T=C),g[0]=T,Y=1<<R;R<C;R++,Y<<=1)if((Y-=r[R])<0)return J;if((Y-=r[C])<0)return J;for(r[C]+=Y,i[1]=R=0,O=1,B=2;--C!==0;)i[B]=R+=r[O],B++,O++;C=0,O=0;do(R=a[p+O])!==0&&(d[i[R]++]=C),O++;while(++C<m);for(m=i[w],i[0]=C=0,O=0,S=-1,U=-T,s[0]=0,q=0,I=0;D<=w;D++)for(y=r[D];y--!==0;){for(;D>U+T;){if(S++,U+=T,I=w-U,I=I>T?T:I,(k=1<<(R=D-U))>y+1&&(k-=y+1,B=D,R<I))for(;++R<I&&!((k<<=1)<=r[++B]);)k-=r[B];if(I=1<<R,f[0]+I>df)return J;s[S]=q=f[0],f[0]+=I,S!==0?(i[S]=C,o[0]=R,o[1]=T,R=C>>>U-T,o[2]=q-s[S-1]-R,u.set(o,(s[S-1]+R)*3)):v[0]=q}for(o[1]=D-U,O>=m?o[0]=128+64:d[O]<h?(o[0]=d[O]<256?0:32+64,o[2]=d[O++]):(o[0]=E[d[O]-h]+16+64,o[2]=x[d[O++]-h]),k=1<<D-U,R=C>>>U;R<I;R+=k)u.set(o,(q+R)*3);for(R=1<<D-1;C&R;R>>>=1)C^=R;for(C^=R,M=(1<<U)-1;(C&M)!=i[S];)S--,U-=T,M=(1<<U)-1}return Y!==0&&w!=1?At:V}function c(a){let p;for(t||(t=[],n=[],r=new Int32Array(Tt+1),o=[],s=new Int32Array(Tt),i=new Int32Array(Tt+1)),n.length<a&&(n=[]),p=0;p<a;p++)n[p]=0;for(p=0;p<Tt+1;p++)r[p]=0;for(p=0;p<3;p++)o[p]=0;s.set(r.subarray(0,Tt),0),i.set(r.subarray(0,Tt+1),0)}e.inflate_trees_bits=function(a,p,m,h,x){let E;return c(19),t[0]=0,E=l(a,0,19,19,null,null,m,p,h,t,n),E==J?x.msg=\"oversubscribed dynamic bit lengths tree\":(E==At||p[0]===0)&&(x.msg=\"incomplete dynamic bit lengths tree\",E=J),E},e.inflate_trees_dynamic=function(a,p,m,h,x,E,v,g,u){let f;return c(288),t[0]=0,f=l(m,0,a,257,Ih,bh,E,h,g,t,n),f!=V||h[0]===0?(f==J?u.msg=\"oversubscribed literal/length tree\":f!=Yc&&(u.msg=\"incomplete literal/length tree\",f=J),f):(c(288),f=l(m,a,p,0,Nh,Oh,v,x,g,t,n),f!=V||x[0]===0&&a>257?(f==J?u.msg=\"oversubscribed distance tree\":f==At?(u.msg=\"incomplete distance tree\",f=J):f!=Yc&&(u.msg=\"empty distance tree with lengths\",f=J),f):V)}}ki.inflate_trees_fixed=function(e,t,n,r){return e[0]=Ch,t[0]=Dh,n[0]=Rh,r[0]=Th,V};const so=0,zc=1,Xc=2,Kc=3,Zc=4,Jc=5,_c=6,Ws=7,$c=8,io=9;function Ph(){const e=this;let t,n=0,r,o=0,s=0,i=0,l=0,c=0,a=0,p=0,m,h=0,x,E=0;function v(g,u,f,d,y,k,w,S){let C,R,D,T,M,O,q,U,B,Y,I,H,N,z,F,G;q=S.next_in_index,U=S.avail_in,M=w.bitb,O=w.bitk,B=w.write,Y=B<w.read?w.read-B-1:w.end-B,I=Pe[g],H=Pe[u];do{for(;O<20;)U--,M|=(S.read_byte(q++)&255)<<O,O+=8;if(C=M&I,R=f,D=d,G=(D+C)*3,(T=R[G])===0){M>>=R[G+1],O-=R[G+1],w.win[B++]=R[G+2],Y--;continue}do{if(M>>=R[G+1],O-=R[G+1],T&16){for(T&=15,N=R[G+2]+(M&Pe[T]),M>>=T,O-=T;O<15;)U--,M|=(S.read_byte(q++)&255)<<O,O+=8;C=M&H,R=y,D=k,G=(D+C)*3,T=R[G];do if(M>>=R[G+1],O-=R[G+1],T&16){for(T&=15;O<T;)U--,M|=(S.read_byte(q++)&255)<<O,O+=8;if(z=R[G+2]+(M&Pe[T]),M>>=T,O-=T,Y-=N,B>=z)F=B-z,B-F>0&&2>B-F?(w.win[B++]=w.win[F++],w.win[B++]=w.win[F++],N-=2):(w.win.set(w.win.subarray(F,F+2),B),B+=2,F+=2,N-=2);else{F=B-z;do F+=w.end;while(F<0);if(T=w.end-F,N>T){if(N-=T,B-F>0&&T>B-F)do w.win[B++]=w.win[F++];while(--T!==0);else w.win.set(w.win.subarray(F,F+T),B),B+=T,F+=T,T=0;F=0}}if(B-F>0&&N>B-F)do w.win[B++]=w.win[F++];while(--N!==0);else w.win.set(w.win.subarray(F,F+N),B),B+=N,F+=N,N=0;break}else if(!(T&64))C+=R[G+2],C+=M&Pe[T],G=(D+C)*3,T=R[G];else return S.msg=\"invalid distance code\",N=S.avail_in-U,N=O>>3<N?O>>3:N,U+=N,q-=N,O-=N<<3,w.bitb=M,w.bitk=O,S.avail_in=U,S.total_in+=q-S.next_in_index,S.next_in_index=q,w.write=B,J;while(!0);break}if(T&64)return T&32?(N=S.avail_in-U,N=O>>3<N?O>>3:N,U+=N,q-=N,O-=N<<3,w.bitb=M,w.bitk=O,S.avail_in=U,S.total_in+=q-S.next_in_index,S.next_in_index=q,w.write=B,yt):(S.msg=\"invalid literal/length code\",N=S.avail_in-U,N=O>>3<N?O>>3:N,U+=N,q-=N,O-=N<<3,w.bitb=M,w.bitk=O,S.avail_in=U,S.total_in+=q-S.next_in_index,S.next_in_index=q,w.write=B,J);if(C+=R[G+2],C+=M&Pe[T],G=(D+C)*3,(T=R[G])===0){M>>=R[G+1],O-=R[G+1],w.win[B++]=R[G+2],Y--;break}}while(!0)}while(Y>=258&&U>=10);return N=S.avail_in-U,N=O>>3<N?O>>3:N,U+=N,q-=N,O-=N<<3,w.bitb=M,w.bitk=O,S.avail_in=U,S.total_in+=q-S.next_in_index,S.next_in_index=q,w.write=B,V}e.init=function(g,u,f,d,y,k){t=so,a=g,p=u,m=f,h=d,x=y,E=k,r=null},e.proc=function(g,u,f){let d,y,k,w=0,S=0,C=0,R,D,T,M;for(C=u.next_in_index,R=u.avail_in,w=g.bitb,S=g.bitk,D=g.write,T=D<g.read?g.read-D-1:g.end-D;;)switch(t){case so:if(T>=258&&R>=10&&(g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,f=v(a,p,m,h,x,E,g,u),C=u.next_in_index,R=u.avail_in,w=g.bitb,S=g.bitk,D=g.write,T=D<g.read?g.read-D-1:g.end-D,f!=V)){t=f==yt?Ws:io;break}s=a,r=m,o=h,t=zc;case zc:for(d=s;S<d;){if(R!==0)f=V;else return g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);R--,w|=(u.read_byte(C++)&255)<<S,S+=8}if(y=(o+(w&Pe[d]))*3,w>>>=r[y+1],S-=r[y+1],k=r[y],k===0){i=r[y+2],t=_c;break}if(k&16){l=k&15,n=r[y+2],t=Xc;break}if(!(k&64)){s=k,o=y/3+r[y+2];break}if(k&32){t=Ws;break}return t=io,u.msg=\"invalid literal/length code\",f=J,g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);case Xc:for(d=l;S<d;){if(R!==0)f=V;else return g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);R--,w|=(u.read_byte(C++)&255)<<S,S+=8}n+=w&Pe[d],w>>=d,S-=d,s=p,r=x,o=E,t=Kc;case Kc:for(d=s;S<d;){if(R!==0)f=V;else return g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);R--,w|=(u.read_byte(C++)&255)<<S,S+=8}if(y=(o+(w&Pe[d]))*3,w>>=r[y+1],S-=r[y+1],k=r[y],k&16){l=k&15,c=r[y+2],t=Zc;break}if(!(k&64)){s=k,o=y/3+r[y+2];break}return t=io,u.msg=\"invalid distance code\",f=J,g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);case Zc:for(d=l;S<d;){if(R!==0)f=V;else return g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);R--,w|=(u.read_byte(C++)&255)<<S,S+=8}c+=w&Pe[d],w>>=d,S-=d,t=Jc;case Jc:for(M=D-c;M<0;)M+=g.end;for(;n!==0;){if(T===0&&(D==g.end&&g.read!==0&&(D=0,T=D<g.read?g.read-D-1:g.end-D),T===0&&(g.write=D,f=g.inflate_flush(u,f),D=g.write,T=D<g.read?g.read-D-1:g.end-D,D==g.end&&g.read!==0&&(D=0,T=D<g.read?g.read-D-1:g.end-D),T===0)))return g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);g.win[D++]=g.win[M++],T--,M==g.end&&(M=0),n--}t=so;break;case _c:if(T===0&&(D==g.end&&g.read!==0&&(D=0,T=D<g.read?g.read-D-1:g.end-D),T===0&&(g.write=D,f=g.inflate_flush(u,f),D=g.write,T=D<g.read?g.read-D-1:g.end-D,D==g.end&&g.read!==0&&(D=0,T=D<g.read?g.read-D-1:g.end-D),T===0)))return g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);f=V,g.win[D++]=i,T--,t=so;break;case Ws:if(S>7&&(S-=8,R++,C--),g.write=D,f=g.inflate_flush(u,f),D=g.write,T=D<g.read?g.read-D-1:g.end-D,g.read!=g.write)return g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);t=$c;case $c:return f=yt,g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);case io:return f=J,g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f);default:return f=De,g.bitb=w,g.bitk=S,u.avail_in=R,u.total_in+=C-u.next_in_index,u.next_in_index=C,g.write=D,g.inflate_flush(u,f)}},e.free=function(){}}const ea=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],kn=0,Gs=1,ta=2,na=3,ra=4,oa=5,lo=6,co=7,sa=8,nn=9;function Lh(e,t){const n=this;let r=kn,o=0,s=0,i=0,l;const c=[0],a=[0],p=new Ph;let m=0,h=new Int32Array(df*3);const x=0,E=new ki;n.bitk=0,n.bitb=0,n.win=new Uint8Array(t),n.end=t,n.read=0,n.write=0,n.reset=function(v,g){g&&(g[0]=x),r==lo&&p.free(v),r=kn,n.bitk=0,n.bitb=0,n.read=n.write=0},n.reset(e,null),n.inflate_flush=function(v,g){let u,f,d;return f=v.next_out_index,d=n.read,u=(d<=n.write?n.write:n.end)-d,u>v.avail_out&&(u=v.avail_out),u!==0&&g==At&&(g=V),v.avail_out-=u,v.total_out+=u,v.next_out.set(n.win.subarray(d,d+u),f),f+=u,d+=u,d==n.end&&(d=0,n.write==n.end&&(n.write=0),u=n.write-d,u>v.avail_out&&(u=v.avail_out),u!==0&&g==At&&(g=V),v.avail_out-=u,v.total_out+=u,v.next_out.set(n.win.subarray(d,d+u),f),f+=u,d+=u),v.next_out_index=f,n.read=d,g},n.proc=function(v,g){let u,f,d,y,k,w,S,C;for(y=v.next_in_index,k=v.avail_in,f=n.bitb,d=n.bitk,w=n.write,S=w<n.read?n.read-w-1:n.end-w;;){let R,D,T,M,O,q,U,B;switch(r){case kn:for(;d<3;){if(k!==0)g=V;else return n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);k--,f|=(v.read_byte(y++)&255)<<d,d+=8}switch(u=f&7,m=u&1,u>>>1){case 0:f>>>=3,d-=3,u=d&7,f>>>=u,d-=u,r=Gs;break;case 1:R=[],D=[],T=[[]],M=[[]],ki.inflate_trees_fixed(R,D,T,M),p.init(R[0],D[0],T[0],0,M[0],0),f>>>=3,d-=3,r=lo;break;case 2:f>>>=3,d-=3,r=na;break;case 3:return f>>>=3,d-=3,r=nn,v.msg=\"invalid block type\",g=J,n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g)}break;case Gs:for(;d<32;){if(k!==0)g=V;else return n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);k--,f|=(v.read_byte(y++)&255)<<d,d+=8}if((~f>>>16&65535)!=(f&65535))return r=nn,v.msg=\"invalid stored block lengths\",g=J,n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);o=f&65535,f=d=0,r=o!==0?ta:m!==0?co:kn;break;case ta:if(k===0||S===0&&(w==n.end&&n.read!==0&&(w=0,S=w<n.read?n.read-w-1:n.end-w),S===0&&(n.write=w,g=n.inflate_flush(v,g),w=n.write,S=w<n.read?n.read-w-1:n.end-w,w==n.end&&n.read!==0&&(w=0,S=w<n.read?n.read-w-1:n.end-w),S===0)))return n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);if(g=V,u=o,u>k&&(u=k),u>S&&(u=S),n.win.set(v.read_buf(y,u),w),y+=u,k-=u,w+=u,S-=u,(o-=u)!==0)break;r=m!==0?co:kn;break;case na:for(;d<14;){if(k!==0)g=V;else return n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);k--,f|=(v.read_byte(y++)&255)<<d,d+=8}if(s=u=f&16383,(u&31)>29||(u>>5&31)>29)return r=nn,v.msg=\"too many length or distance symbols\",g=J,n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);if(u=258+(u&31)+(u>>5&31),!l||l.length<u)l=[];else for(C=0;C<u;C++)l[C]=0;f>>>=14,d-=14,i=0,r=ra;case ra:for(;i<4+(s>>>10);){for(;d<3;){if(k!==0)g=V;else return n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);k--,f|=(v.read_byte(y++)&255)<<d,d+=8}l[ea[i++]]=f&7,f>>>=3,d-=3}for(;i<19;)l[ea[i++]]=0;if(c[0]=7,u=E.inflate_trees_bits(l,c,a,h,v),u!=V)return g=u,g==J&&(l=null,r=nn),n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);i=0,r=oa;case oa:for(;u=s,!(i>=258+(u&31)+(u>>5&31));){let Y,I;for(u=c[0];d<u;){if(k!==0)g=V;else return n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);k--,f|=(v.read_byte(y++)&255)<<d,d+=8}if(u=h[(a[0]+(f&Pe[u]))*3+1],I=h[(a[0]+(f&Pe[u]))*3+2],I<16)f>>>=u,d-=u,l[i++]=I;else{for(C=I==18?7:I-14,Y=I==18?11:3;d<u+C;){if(k!==0)g=V;else return n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);k--,f|=(v.read_byte(y++)&255)<<d,d+=8}if(f>>>=u,d-=u,Y+=f&Pe[C],f>>>=C,d-=C,C=i,u=s,C+Y>258+(u&31)+(u>>5&31)||I==16&&C<1)return l=null,r=nn,v.msg=\"invalid bit length repeat\",g=J,n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);I=I==16?l[C-1]:0;do l[C++]=I;while(--Y!==0);i=C}}if(a[0]=-1,O=[],q=[],U=[],B=[],O[0]=9,q[0]=6,u=s,u=E.inflate_trees_dynamic(257+(u&31),1+(u>>5&31),l,O,q,U,B,h,v),u!=V)return u==J&&(l=null,r=nn),g=u,n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);p.init(O[0],q[0],h,U[0],h,B[0]),r=lo;case lo:if(n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,(g=p.proc(n,v,g))!=yt)return n.inflate_flush(v,g);if(g=V,p.free(v),y=v.next_in_index,k=v.avail_in,f=n.bitb,d=n.bitk,w=n.write,S=w<n.read?n.read-w-1:n.end-w,m===0){r=kn;break}r=co;case co:if(n.write=w,g=n.inflate_flush(v,g),w=n.write,S=w<n.read?n.read-w-1:n.end-w,n.read!=n.write)return n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);r=sa;case sa:return g=yt,n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);case nn:return g=J,n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g);default:return g=De,n.bitb=f,n.bitk=d,v.avail_in=k,v.total_in+=y-v.next_in_index,v.next_in_index=y,n.write=w,n.inflate_flush(v,g)}}},n.free=function(v){n.reset(v,null),n.win=null,h=null},n.set_dictionary=function(v,g,u){n.win.set(v.subarray(g,g+u),0),n.read=n.write=u},n.sync_point=function(){return r==Gs?1:0}}const Mh=32,Bh=8,Hh=0,ia=1,la=2,ca=3,aa=4,ua=5,Ys=6,or=7,fa=12,It=13,Fh=[0,0,255,255];function Uh(){const e=this;e.mode=0,e.method=0,e.was=[0],e.need=0,e.marker=0,e.wbits=0;function t(n){return!n||!n.istate?De:(n.total_in=n.total_out=0,n.msg=null,n.istate.mode=or,n.istate.blocks.reset(n,null),V)}e.inflateEnd=function(n){return e.blocks&&e.blocks.free(n),e.blocks=null,V},e.inflateInit=function(n,r){return n.msg=null,e.blocks=null,r<8||r>15?(e.inflateEnd(n),De):(e.wbits=r,n.istate.blocks=new Lh(n,1<<r),t(n),V)},e.inflate=function(n,r){let o,s;if(!n||!n.istate||!n.next_in)return De;const i=n.istate;for(r=r==kh?At:V,o=At;;)switch(i.mode){case Hh:if(n.avail_in===0)return o;if(o=r,n.avail_in--,n.total_in++,((i.method=n.read_byte(n.next_in_index++))&15)!=Bh){i.mode=It,n.msg=\"unknown compression method\",i.marker=5;break}if((i.method>>4)+8>i.wbits){i.mode=It,n.msg=\"invalid win size\",i.marker=5;break}i.mode=ia;case ia:if(n.avail_in===0)return o;if(o=r,n.avail_in--,n.total_in++,s=n.read_byte(n.next_in_index++)&255,((i.method<<8)+s)%31!==0){i.mode=It,n.msg=\"incorrect header check\",i.marker=5;break}if(!(s&Mh)){i.mode=or;break}i.mode=la;case la:if(n.avail_in===0)return o;o=r,n.avail_in--,n.total_in++,i.need=(n.read_byte(n.next_in_index++)&255)<<24&4278190080,i.mode=ca;case ca:if(n.avail_in===0)return o;o=r,n.avail_in--,n.total_in++,i.need+=(n.read_byte(n.next_in_index++)&255)<<16&16711680,i.mode=aa;case aa:if(n.avail_in===0)return o;o=r,n.avail_in--,n.total_in++,i.need+=(n.read_byte(n.next_in_index++)&255)<<8&65280,i.mode=ua;case ua:return n.avail_in===0?o:(o=r,n.avail_in--,n.total_in++,i.need+=n.read_byte(n.next_in_index++)&255,i.mode=Ys,xh);case Ys:return i.mode=It,n.msg=\"need dictionary\",i.marker=0,De;case or:if(o=i.blocks.proc(n,o),o==J){i.mode=It,i.marker=0;break}if(o==V&&(o=r),o!=yt)return o;o=r,i.blocks.reset(n,i.was),i.mode=fa;case fa:return n.avail_in=0,yt;case It:return J;default:return De}},e.inflateSetDictionary=function(n,r,o){let s=0,i=o;if(!n||!n.istate||n.istate.mode!=Ys)return De;const l=n.istate;return i>=1<<l.wbits&&(i=(1<<l.wbits)-1,s=o-i),l.blocks.set_dictionary(r,s,i),l.mode=or,V},e.inflateSync=function(n){let r,o,s,i,l;if(!n||!n.istate)return De;const c=n.istate;if(c.mode!=It&&(c.mode=It,c.marker=0),(r=n.avail_in)===0)return At;for(o=n.next_in_index,s=c.marker;r!==0&&s<4;)n.read_byte(o)==Fh[s]?s++:n.read_byte(o)!==0?s=0:s=4-s,o++,r--;return n.total_in+=o-n.next_in_index,n.next_in_index=o,n.avail_in=r,c.marker=s,s!=4?J:(i=n.total_in,l=n.total_out,t(n),n.total_in=i,n.total_out=l,c.mode=or,V)},e.inflateSyncPoint=function(n){return!n||!n.istate||!n.istate.blocks?De:n.istate.blocks.sync_point()}}function pf(){}pf.prototype={inflateInit(e){const t=this;return t.istate=new Uh,e||(e=Eh),t.istate.inflateInit(t,e)},inflate(e){const t=this;return t.istate?t.istate.inflate(t,e):De},inflateEnd(){const e=this;if(!e.istate)return De;const t=e.istate.inflateEnd(e);return e.istate=null,t},inflateSync(){const e=this;return e.istate?e.istate.inflateSync(e):De},inflateSetDictionary(e,t){const n=this;return n.istate?n.istate.inflateSetDictionary(n,e,t):De},read_byte(e){return this.next_in[e]},read_buf(e,t){return this.next_in.subarray(e,e+t)}};function qh(e){const t=this,n=new pf,r=e&&e.chunkSize?Math.floor(e.chunkSize*2):128*1024,o=Sh,s=new Uint8Array(r);let i=!1;n.inflateInit(),n.next_out=s,t.append=function(l,c){const a=[];let p,m,h=0,x=0,E=0;if(l.length!==0){n.next_in_index=0,n.next_in=l,n.avail_in=l.length;do{if(n.next_out_index=0,n.avail_out=r,n.avail_in===0&&!i&&(n.next_in_index=0,i=!0),p=n.inflate(o),i&&p===At){if(n.avail_in!==0)throw new Error(\"inflating: bad input\")}else if(p!==V&&p!==yt)throw new Error(\"inflating: \"+n.msg);if((i||p===yt)&&n.avail_in===l.length)throw new Error(\"inflating: bad input\");n.next_out_index&&(n.next_out_index===r?a.push(new Uint8Array(s)):a.push(s.subarray(0,n.next_out_index))),E+=n.next_out_index,c&&n.next_in_index>0&&n.next_in_index!=h&&(c(n.next_in_index),h=n.next_in_index)}while(n.avail_in>0||n.avail_out===0);return a.length>1?(m=new Uint8Array(E),a.forEach(function(v){m.set(v,x),x+=v.length})):m=a[0]?new Uint8Array(a[0]):new Uint8Array,m}},t.flush=function(){n.inflateEnd()}}const un=4294967295,Lt=65535,Qh=8,jh=0,Vh=99,Wh=67324752,Gh=134695760,da=33639248,Yh=101010256,pa=101075792,zh=117853008,ao=22,zs=20,Xs=56,Xh=1,Kh=39169,Zh=10,Jh=1,_h=21589,$h=28789,eg=25461,tg=6534,ha=1,ng=6,ga=8,ma=2048,va=16,rg=\"/\",Ge=void 0,Yo=\"undefined\",hf=\"function\";class wa{constructor(t){return class extends TransformStream{constructor(n,r){const o=new t(r);super({transform(s,i){i.enqueue(o.append(s))},flush(s){const i=o.flush();i&&s.enqueue(i)}})}}}}const og=64;let gf=2;try{typeof navigator!=Yo&&navigator.hardwareConcurrency&&(gf=navigator.hardwareConcurrency)}catch{}const sg={chunkSize:512*1024,maxWorkers:gf,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:Ge,CompressionStreamNative:typeof CompressionStream!=Yo&&CompressionStream,DecompressionStreamNative:typeof DecompressionStream!=Yo&&DecompressionStream},Mt=Object.assign({},sg);function mf(){return Mt}function ig(e){return Math.max(e.chunkSize,og)}function vf(e){const{baseURL:t,chunkSize:n,maxWorkers:r,terminateWorkerTimeout:o,useCompressionStream:s,useWebWorkers:i,Deflate:l,Inflate:c,CompressionStream:a,DecompressionStream:p,workerScripts:m}=e;if(bt(\"baseURL\",t),bt(\"chunkSize\",n),bt(\"maxWorkers\",r),bt(\"terminateWorkerTimeout\",o),bt(\"useCompressionStream\",s),bt(\"useWebWorkers\",i),l&&(Mt.CompressionStream=new wa(l)),c&&(Mt.DecompressionStream=new wa(c)),bt(\"CompressionStream\",a),bt(\"DecompressionStream\",p),m!==Ge){const{deflate:h,inflate:x}=m;if((h||x)&&(Mt.workerScripts||(Mt.workerScripts={})),h){if(!Array.isArray(h))throw new Error(\"workerScripts.deflate must be an array\");Mt.workerScripts.deflate=h}if(x){if(!Array.isArray(x))throw new Error(\"workerScripts.inflate must be an array\");Mt.workerScripts.inflate=x}}}function bt(e,t){t!==Ge&&(Mt[e]=t)}function lg(){return\"application/octet-stream\"}const wf=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t&1?t=t>>>1^3988292384:t=t>>>1;wf[e]=t}class zo{constructor(t){this.crc=t||-1}append(t){let n=this.crc|0;for(let r=0,o=t.length|0;r<o;r++)n=n>>>8^wf[(n^t[r])&255];this.crc=n}get(){return~this.crc}}class yf extends TransformStream{constructor(){let t;const n=new zo;super({transform(r,o){n.append(r),o.enqueue(r)},flush(){const r=new Uint8Array(4);new DataView(r.buffer).setUint32(0,n.get()),t.value=r}}),t=this}}function cg(e){if(typeof TextEncoder>\"u\"){e=unescape(encodeURIComponent(e));const t=new Uint8Array(e.length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}else return new TextEncoder().encode(e)}const xe={concat(e,t){if(e.length===0||t.length===0)return e.concat(t);const n=e[e.length-1],r=xe.getPartial(n);return r===32?e.concat(t):xe._shiftRight(t,r,n|0,e.slice(0,e.length-1))},bitLength(e){const t=e.length;if(t===0)return 0;const n=e[t-1];return(t-1)*32+xe.getPartial(n)},clamp(e,t){if(e.length*32<t)return e;e=e.slice(0,Math.ceil(t/32));const n=e.length;return t=t&31,n>0&&t&&(e[n-1]=xe.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial(e,t,n){return e===32?t:(n?t|0:t<<32-e)+e*1099511627776},getPartial(e){return Math.round(e/1099511627776)||32},_shiftRight(e,t,n,r){for(r===void 0&&(r=[]);t>=32;t-=32)r.push(n),n=0;if(t===0)return r.concat(e);for(let i=0;i<e.length;i++)r.push(n|e[i]>>>t),n=e[i]<<32-t;const o=e.length?e[e.length-1]:0,s=xe.getPartial(o);return r.push(xe.partial(t+s&31,t+s>32?n:r.pop(),1)),r}},Xo={bytes:{fromBits(e){const n=xe.bitLength(e)/8,r=new Uint8Array(n);let o;for(let s=0;s<n;s++)s&3||(o=e[s/4]),r[s]=o>>>24,o<<=8;return r},toBits(e){const t=[];let n,r=0;for(n=0;n<e.length;n++)r=r<<8|e[n],(n&3)===3&&(t.push(r),r=0);return n&3&&t.push(xe.partial(8*(n&3),r)),t}}},Af={};Af.sha1=class{constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){const t=this;typeof e==\"string\"&&(e=Xo.utf8String.toBits(e));const n=t._buffer=xe.concat(t._buffer,e),r=t._length,o=t._length=r+xe.bitLength(e);if(o>9007199254740991)throw new Error(\"Cannot hash more than 2^53 - 1 bits\");const s=new Uint32Array(n);let i=0;for(let l=t.blockSize+r-(t.blockSize+r&t.blockSize-1);l<=o;l+=t.blockSize)t._block(s.subarray(16*i,16*(i+1))),i+=1;return n.splice(0,16*i),t}finalize(){const e=this;let t=e._buffer;const n=e._h;t=xe.concat(t,[xe.partial(1,1)]);for(let r=t.length+2;r&15;r++)t.push(0);for(t.push(Math.floor(e._length/4294967296)),t.push(e._length|0);t.length;)e._block(t.splice(0,16));return e.reset(),n}_f(e,t,n,r){if(e<=19)return t&n|~t&r;if(e<=39)return t^n^r;if(e<=59)return t&n|t&r|n&r;if(e<=79)return t^n^r}_S(e,t){return t<<e|t>>>32-e}_block(e){const t=this,n=t._h,r=Array(80);for(let a=0;a<16;a++)r[a]=e[a];let o=n[0],s=n[1],i=n[2],l=n[3],c=n[4];for(let a=0;a<=79;a++){a>=16&&(r[a]=t._S(1,r[a-3]^r[a-8]^r[a-14]^r[a-16]));const p=t._S(5,o)+t._f(a,s,i,l)+c+r[a]+t._key[Math.floor(a/20)]|0;c=l,l=i,i=t._S(30,s),s=o,o=p}n[0]=n[0]+o|0,n[1]=n[1]+s|0,n[2]=n[2]+i|0,n[3]=n[3]+l|0,n[4]=n[4]+c|0}};const Ef={};Ef.aes=class{constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();const n=t._tables[0][4],r=t._tables[1],o=e.length;let s,i,l,c=1;if(o!==4&&o!==6&&o!==8)throw new Error(\"invalid aes key size\");for(t._key=[i=e.slice(0),l=[]],s=o;s<4*o+28;s++){let a=i[s-1];(s%o===0||o===8&&s%o===4)&&(a=n[a>>>24]<<24^n[a>>16&255]<<16^n[a>>8&255]<<8^n[a&255],s%o===0&&(a=a<<8^a>>>24^c<<24,c=c<<1^(c>>7)*283)),i[s]=i[s-o]^a}for(let a=0;s;a++,s--){const p=i[a&3?s:s-4];s<=4||a<4?l[a]=p:l[a]=r[0][n[p>>>24]]^r[1][n[p>>16&255]]^r[2][n[p>>8&255]]^r[3][n[p&255]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){const e=this._tables[0],t=this._tables[1],n=e[4],r=t[4],o=[],s=[];let i,l,c,a;for(let p=0;p<256;p++)s[(o[p]=p<<1^(p>>7)*283)^p]=p;for(let p=i=0;!n[p];p^=l||1,i=s[i]||1){let m=i^i<<1^i<<2^i<<3^i<<4;m=m>>8^m&255^99,n[p]=m,r[m]=p,a=o[c=o[l=o[p]]];let h=a*16843009^c*65537^l*257^p*16843008,x=o[m]*257^m*16843008;for(let E=0;E<4;E++)e[E][p]=x=x<<24^x>>>8,t[E][m]=h=h<<24^h>>>8}for(let p=0;p<5;p++)e[p]=e[p].slice(0),t[p]=t[p].slice(0)}_crypt(e,t){if(e.length!==4)throw new Error(\"invalid aes block size\");const n=this._key[t],r=n.length/4-2,o=[0,0,0,0],s=this._tables[t],i=s[0],l=s[1],c=s[2],a=s[3],p=s[4];let m=e[0]^n[0],h=e[t?3:1]^n[1],x=e[2]^n[2],E=e[t?1:3]^n[3],v=4,g,u,f;for(let d=0;d<r;d++)g=i[m>>>24]^l[h>>16&255]^c[x>>8&255]^a[E&255]^n[v],u=i[h>>>24]^l[x>>16&255]^c[E>>8&255]^a[m&255]^n[v+1],f=i[x>>>24]^l[E>>16&255]^c[m>>8&255]^a[h&255]^n[v+2],E=i[E>>>24]^l[m>>16&255]^c[h>>8&255]^a[x&255]^n[v+3],v+=4,m=g,h=u,x=f;for(let d=0;d<4;d++)o[t?3&-d:d]=p[m>>>24]<<24^p[h>>16&255]<<16^p[x>>8&255]<<8^p[E&255]^n[v++],g=m,m=h,h=x,x=E,E=g;return o}};const ag={getRandomValues(e){const t=new Uint32Array(e.buffer),n=r=>{let o=987654321;const s=4294967295;return function(){return o=36969*(o&65535)+(o>>16)&s,r=18e3*(r&65535)+(r>>16)&s,(((o<<16)+r&s)/4294967296+.5)*(Math.random()>.5?1:-1)}};for(let r=0,o;r<e.length;r+=4){const s=n((o||Math.random())*4294967296);o=s()*987654071,t[r/4]=s()*4294967296|0}return e}},xf={};xf.ctrGladman=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if((e>>24&255)===255){let t=e>>16&255,n=e>>8&255,r=e&255;t===255?(t=0,n===255?(n=0,r===255?r=0:++r):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=r}else e+=1<<24;return e}incCounter(e){(e[0]=this.incWord(e[0]))===0&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let r;if(!(r=t.length))return[];const o=xe.bitLength(t);for(let s=0;s<r;s+=4){this.incCounter(n);const i=e.encrypt(n);t[s]^=i[0],t[s+1]^=i[1],t[s+2]^=i[2],t[s+3]^=i[3]}return xe.clamp(t,o)}};const pn={importKey(e){return new pn.hmacSha1(Xo.bytes.toBits(e))},pbkdf2(e,t,n,r){if(n=n||1e4,r<0||n<0)throw new Error(\"invalid params to pbkdf2\");const o=(r>>5)+1<<2;let s,i,l,c,a;const p=new ArrayBuffer(o),m=new DataView(p);let h=0;const x=xe;for(t=Xo.bytes.toBits(t),a=1;h<(o||1);a++){for(s=i=e.encrypt(x.concat(t,[a])),l=1;l<n;l++)for(i=e.encrypt(i),c=0;c<i.length;c++)s[c]^=i[c];for(l=0;h<(o||1)&&l<s.length;l++)m.setInt32(h,s[l]),h+=4}return p.slice(0,r/8)}};pn.hmacSha1=class{constructor(e){const t=this,n=t._hash=Af.sha1,r=[[],[]];t._baseHash=[new n,new n];const o=t._baseHash[0].blockSize/32;e.length>o&&(e=new n().update(e).finalize());for(let s=0;s<o;s++)r[0][s]=e[s]^909522486,r[1][s]=e[s]^1549556828;t._baseHash[0].update(r[0]),t._baseHash[1].update(r[1]),t._resultHash=new n(t._baseHash[0])}reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){const t=this;t._updated=!0,t._resultHash.update(e)}digest(){const e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new Error(\"encrypt on already updated hmac called!\");return this.update(e),this.digest(e)}};const ug=typeof crypto<\"u\"&&typeof crypto.getRandomValues==\"function\",Ll=\"Invalid password\",Ml=\"Invalid signature\",Bl=\"zipjs-abort-check-password\";function Sf(e){return ug?crypto.getRandomValues(e):ag.getRandomValues(e)}const Rn=16,fg=\"raw\",kf={name:\"PBKDF2\"},dg={name:\"HMAC\"},pg=\"SHA-1\",hg=Object.assign({hash:dg},kf),Ci=Object.assign({iterations:1e3,hash:{name:pg}},kf),gg=[\"deriveBits\"],Tr=[8,12,16],sr=[16,24,32],Ot=10,mg=[0,0,0,0],Cf=\"undefined\",Df=\"function\",Ss=typeof crypto!=Cf,_r=Ss&&crypto.subtle,Rf=Ss&&typeof _r!=Cf,ut=Xo.bytes,vg=Ef.aes,wg=xf.ctrGladman,yg=pn.hmacSha1;let ya=Ss&&Rf&&typeof _r.importKey==Df,Aa=Ss&&Rf&&typeof _r.deriveBits==Df;class Ag extends TransformStream{constructor({password:t,signed:n,encryptionStrength:r,checkPasswordOnly:o}){super({start(){Object.assign(this,{ready:new Promise(s=>this.resolveReady=s),password:t,signed:n,strength:r-1,pending:new Uint8Array})},async transform(s,i){const l=this,{password:c,strength:a,resolveReady:p,ready:m}=l;c?(await xg(l,a,c,Ve(s,0,Tr[a]+2)),s=Ve(s,Tr[a]+2),o?i.error(new Error(Bl)):p()):await m;const h=new Uint8Array(s.length-Ot-(s.length-Ot)%Rn);i.enqueue(Tf(l,s,h,0,Ot,!0))},async flush(s){const{signed:i,ctr:l,hmac:c,pending:a,ready:p}=this;await p;const m=Ve(a,0,a.length-Ot),h=Ve(a,a.length-Ot);let x=new Uint8Array;if(m.length){const E=br(ut,m);c.update(E);const v=l.update(E);x=Ir(ut,v)}if(i){const E=Ve(Ir(ut,c.digest()),0,Ot);for(let v=0;v<Ot;v++)if(E[v]!=h[v])throw new Error(Ml)}s.enqueue(x)}})}}class Eg extends TransformStream{constructor({password:t,encryptionStrength:n}){let r;super({start(){Object.assign(this,{ready:new Promise(o=>this.resolveReady=o),password:t,strength:n-1,pending:new Uint8Array})},async transform(o,s){const i=this,{password:l,strength:c,resolveReady:a,ready:p}=i;let m=new Uint8Array;l?(m=await Sg(i,c,l),a()):await p;const h=new Uint8Array(m.length+o.length-o.length%Rn);h.set(m,0),s.enqueue(Tf(i,o,h,m.length,0))},async flush(o){const{ctr:s,hmac:i,pending:l,ready:c}=this;await c;let a=new Uint8Array;if(l.length){const p=s.update(br(ut,l));i.update(p),a=Ir(ut,p)}r.signature=Ir(ut,i.digest()).slice(0,Ot),o.enqueue(Hl(a,r.signature))}}),r=this}}function Tf(e,t,n,r,o,s){const{ctr:i,hmac:l,pending:c}=e,a=t.length-o;c.length&&(t=Hl(c,t),n=Dg(n,a-a%Rn));let p;for(p=0;p<=a-Rn;p+=Rn){const m=br(ut,Ve(t,p,p+Rn));s&&l.update(m);const h=i.update(m);s||l.update(h),n.set(Ir(ut,h),p+r)}return e.pending=Ve(t,p),n}async function xg(e,t,n,r){const o=await If(e,t,n,Ve(r,0,Tr[t])),s=Ve(r,Tr[t]);if(o[0]!=s[0]||o[1]!=s[1])throw new Error(Ll)}async function Sg(e,t,n){const r=Sf(new Uint8Array(Tr[t])),o=await If(e,t,n,r);return Hl(r,o)}async function If(e,t,n,r){e.password=null;const o=cg(n),s=await kg(fg,o,hg,!1,gg),i=await Cg(Object.assign({salt:r},Ci),s,8*(sr[t]*2+2)),l=new Uint8Array(i),c=br(ut,Ve(l,0,sr[t])),a=br(ut,Ve(l,sr[t],sr[t]*2)),p=Ve(l,sr[t]*2);return Object.assign(e,{keys:{key:c,authentication:a,passwordVerification:p},ctr:new wg(new vg(c),Array.from(mg)),hmac:new yg(a)}),p}async function kg(e,t,n,r,o){if(ya)try{return await _r.importKey(e,t,n,r,o)}catch{return ya=!1,pn.importKey(t)}else return pn.importKey(t)}async function Cg(e,t,n){if(Aa)try{return await _r.deriveBits(e,t,n)}catch{return Aa=!1,pn.pbkdf2(t,e.salt,Ci.iterations,n)}else return pn.pbkdf2(t,e.salt,Ci.iterations,n)}function Hl(e,t){let n=e;return e.length+t.length&&(n=new Uint8Array(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function Dg(e,t){if(t&&t>e.length){const n=e;e=new Uint8Array(t),e.set(n,0)}return e}function Ve(e,t,n){return e.subarray(t,n)}function Ir(e,t){return e.fromBits(t)}function br(e,t){return e.toBits(t)}const qn=12;class Rg extends TransformStream{constructor({password:t,passwordVerification:n,checkPasswordOnly:r}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),bf(this,t)},transform(o,s){const i=this;if(i.password){const l=Ea(i,o.subarray(0,qn));if(i.password=null,l[qn-1]!=i.passwordVerification)throw new Error(Ll);o=o.subarray(qn)}r?s.error(new Error(Bl)):s.enqueue(Ea(i,o))}})}}class Tg extends TransformStream{constructor({password:t,passwordVerification:n}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),bf(this,t)},transform(r,o){const s=this;let i,l;if(s.password){s.password=null;const c=Sf(new Uint8Array(qn));c[qn-1]=s.passwordVerification,i=new Uint8Array(r.length+c.length),i.set(xa(s,c),0),l=qn}else i=new Uint8Array(r.length),l=0;i.set(xa(s,r),l),o.enqueue(i)}})}}function Ea(e,t){const n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=Nf(e)^t[r],Fl(e,n[r]);return n}function xa(e,t){const n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=Nf(e)^t[r],Fl(e,t[r]);return n}function bf(e,t){const n=[305419896,591751049,878082192];Object.assign(e,{keys:n,crcKey0:new zo(n[0]),crcKey2:new zo(n[2])});for(let r=0;r<t.length;r++)Fl(e,t.charCodeAt(r))}function Fl(e,t){let[n,r,o]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),r=Sa(Math.imul(Sa(r+Of(n)),134775813)+1),e.crcKey2.append([r>>>24]),o=~e.crcKey2.get(),e.keys=[n,r,o]}function Nf(e){const t=e.keys[2]|2;return Of(Math.imul(t,t^1)>>>8)}function Of(e){return e&255}function Sa(e){return e&4294967295}const ka=\"deflate-raw\";class Ig extends TransformStream{constructor(t,{chunkSize:n,CompressionStream:r,CompressionStreamNative:o}){super({});const{compressed:s,encrypted:i,useCompressionStream:l,zipCrypto:c,signed:a,level:p}=t,m=this;let h,x,E=Pf(super.readable);(!i||c)&&a&&(h=new yf,E=ft(E,h)),s&&(E=Mf(E,l,{level:p,chunkSize:n},o,r)),i&&(c?E=ft(E,new Tg(t)):(x=new Eg(t),E=ft(E,x))),Lf(m,E,()=>{let v;i&&!c&&(v=x.signature),(!i||c)&&a&&(v=new DataView(h.value.buffer).getUint32(0)),m.signature=v})}}class bg extends TransformStream{constructor(t,{chunkSize:n,DecompressionStream:r,DecompressionStreamNative:o}){super({});const{zipCrypto:s,encrypted:i,signed:l,signature:c,compressed:a,useCompressionStream:p}=t;let m,h,x=Pf(super.readable);i&&(s?x=ft(x,new Rg(t)):(h=new Ag(t),x=ft(x,h))),a&&(x=Mf(x,p,{chunkSize:n},o,r)),(!i||s)&&l&&(m=new yf,x=ft(x,m)),Lf(this,x,()=>{if((!i||s)&&l){const E=new DataView(m.value.buffer);if(c!=E.getUint32(0,!1))throw new Error(Ml)}})}}function Pf(e){return ft(e,new TransformStream({transform(t,n){t&&t.length&&n.enqueue(t)}}))}function Lf(e,t,n){t=ft(t,new TransformStream({flush:n})),Object.defineProperty(e,\"readable\",{get(){return t}})}function Mf(e,t,n,r,o){try{const s=t&&r?r:o;e=ft(e,new s(ka,n))}catch(s){if(t)e=ft(e,new o(ka,n));else throw s}return e}function ft(e,t){return e.pipeThrough(t)}const Ng=\"message\",Og=\"start\",Pg=\"pull\",Ca=\"data\",Lg=\"ack\",Mg=\"close\",Bg=\"deflate\",Bf=\"inflate\";class Hg extends TransformStream{constructor(t,n){super({});const r=this,{codecType:o}=t;let s;o.startsWith(Bg)?s=Ig:o.startsWith(Bf)&&(s=bg);let i=0;const l=new s(t,n),c=super.readable,a=new TransformStream({transform(p,m){p&&p.length&&(i+=p.length,m.enqueue(p))},flush(){const{signature:p}=l;Object.assign(r,{signature:p,size:i})}});Object.defineProperty(r,\"readable\",{get(){return c.pipeThrough(l).pipeThrough(a)}})}}const Fg=typeof Worker!=Yo;class Ks{constructor(t,{readable:n,writable:r},{options:o,config:s,streamOptions:i,useWebWorkers:l,transferStreams:c,scripts:a},p){const{signal:m}=i;return Object.assign(t,{busy:!0,readable:n.pipeThrough(new Ug(n,i,s),{signal:m}),writable:r,options:Object.assign({},o),scripts:a,transferStreams:c,terminate(){const{worker:h,busy:x}=t;h&&!x&&(h.terminate(),t.interface=null)},onTaskFinished(){t.busy=!1,p(t)}}),(l&&Fg?Qg:qg)(t,s)}}class Ug extends TransformStream{constructor(t,{onstart:n,onprogress:r,size:o,onend:s},{chunkSize:i}){let l=0;super({start(){n&&Zs(n,o)},async transform(c,a){l+=c.length,r&&await Zs(r,l,o),a.enqueue(c)},flush(){t.size=l,s&&Zs(s,l)}},{highWaterMark:1,size:()=>i})}}async function Zs(e,...t){try{await e(...t)}catch{}}function qg(e,t){return{run:()=>jg(e,t)}}function Qg(e,{baseURL:t,chunkSize:n}){return e.interface||Object.assign(e,{worker:Gg(e.scripts[0],t,e),interface:{run:()=>Vg(e,{chunkSize:n})}}),e.interface}async function jg({options:e,readable:t,writable:n,onTaskFinished:r},o){const s=new Hg(e,o);try{await t.pipeThrough(s).pipeTo(n,{preventClose:!0,preventAbort:!0});const{signature:i,size:l}=s;return{signature:i,size:l}}finally{r()}}async function Vg(e,t){let n,r;const o=new Promise((h,x)=>{n=h,r=x});Object.assign(e,{reader:null,writer:null,resolveResult:n,rejectResult:r,result:o});const{readable:s,options:i,scripts:l}=e,{writable:c,closed:a}=Wg(e.writable);Di({type:Og,scripts:l.slice(1),options:i,config:t,readable:s,writable:c},e)||Object.assign(e,{reader:s.getReader(),writer:c.getWriter()});const m=await o;try{await c.getWriter().close()}catch{}return await a,m}function Wg(e){const t=e.getWriter();let n;const r=new Promise(s=>n=s);return{writable:new WritableStream({async write(s){await t.ready,await t.write(s)},close(){t.releaseLock(),n()},abort(s){return t.abort(s)}}),closed:r}}let Da=!0,Ra=!0;function Gg(e,t,n){const r={type:\"module\"};let o,s;typeof e==hf&&(e=e());try{o=new URL(e,t)}catch{o=e}if(Da)try{s=new Worker(o)}catch{Da=!1,s=new Worker(o,r)}else s=new Worker(o,r);return s.addEventListener(Ng,i=>Yg(i,n)),s}function Di(e,{worker:t,writer:n,onTaskFinished:r,transferStreams:o}){try{let{value:s,readable:i,writable:l}=e;const c=[];if(s&&(e.value=s.buffer,c.push(e.value)),o&&Ra?(i&&c.push(i),l&&c.push(l)):e.readable=e.writable=null,c.length)try{return t.postMessage(e,c),!0}catch{Ra=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(s){throw n&&n.releaseLock(),r(),s}}async function Yg({data:e},t){const{type:n,value:r,messageId:o,result:s,error:i}=e,{reader:l,writer:c,resolveResult:a,rejectResult:p,onTaskFinished:m}=t;try{if(i){const{message:x,stack:E,code:v,name:g}=i,u=new Error(x);Object.assign(u,{stack:E,code:v,name:g}),h(u)}else{if(n==Pg){const{value:x,done:E}=await l.read();Di({type:Ca,value:x,done:E,messageId:o},t)}n==Ca&&(await c.ready,await c.write(new Uint8Array(r)),Di({type:Lg,messageId:o},t)),n==Mg&&h(null,s)}}catch(x){h(x)}function h(x,E){x?p(x):a(E),c&&c.releaseLock(),m()}}let Pt=[];const Js=[];let Ta=0;async function zg(e,t){const{options:n,config:r}=t,{transferStreams:o,useWebWorkers:s,useCompressionStream:i,codecType:l,compressed:c,signed:a,encrypted:p}=n,{workerScripts:m,maxWorkers:h,terminateWorkerTimeout:x}=r;t.transferStreams=o||o===Ge;const E=!c&&!a&&!p&&!t.transferStreams;t.useWebWorkers=!E&&(s||s===Ge&&r.useWebWorkers),t.scripts=t.useWebWorkers&&m?m[l]:[],n.useCompressionStream=i||i===Ge&&r.useCompressionStream;let v;const g=Pt.find(f=>!f.busy);if(g)Ri(g),v=new Ks(g,e,t,u);else if(Pt.length<h){const f={indexWorker:Ta};Ta++,Pt.push(f),v=new Ks(f,e,t,u)}else v=await new Promise(f=>Js.push({resolve:f,stream:e,workerOptions:t}));return v.run();function u(f){if(Js.length){const[{resolve:d,stream:y,workerOptions:k}]=Js.splice(0,1);d(new Ks(f,y,k,u))}else f.worker?(Ri(f),Number.isFinite(x)&&x>=0&&(f.terminateTimeout=setTimeout(()=>{Pt=Pt.filter(d=>d!=f),f.terminate()},x))):Pt=Pt.filter(d=>d!=f)}}function Ri(e){const{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}function Xg(){Pt.forEach(e=>{Ri(e),e.terminate()})}const Hf=\"HTTP error \",$r=\"HTTP Range not supported\",Ff=\"Writer iterator completed too soon\",Kg=\"text/plain\",Zg=\"Content-Length\",Jg=\"Content-Range\",_g=\"Accept-Ranges\",$g=\"Range\",em=\"Content-Type\",tm=\"HEAD\",Ul=\"GET\",Uf=\"bytes\",nm=64*1024,ql=\"writable\";class ks{constructor(){this.size=0}init(){this.initialized=!0}}class _t extends ks{get readable(){const t=this,{chunkSize:n=nm}=t,r=new ReadableStream({start(){this.chunkOffset=0},async pull(o){const{offset:s=0,size:i,diskNumberStart:l}=r,{chunkOffset:c}=this;o.enqueue(await he(t,s+c,Math.min(n,i-c),l)),c+n>i?o.close():this.chunkOffset+=n}});return r}}class Ql extends ks{constructor(){super();const t=this,n=new WritableStream({write(r){return t.writeUint8Array(r)}});Object.defineProperty(t,ql,{get(){return n}})}writeUint8Array(){}}class rm extends _t{constructor(t){super();let n=t.length;for(;t.charAt(n-1)==\"=\";)n--;const r=t.indexOf(\",\")+1;Object.assign(this,{dataURI:t,dataStart:r,size:Math.floor((n-r)*.75)})}readUint8Array(t,n){const{dataStart:r,dataURI:o}=this,s=new Uint8Array(n),i=Math.floor(t/3)*4,l=atob(o.substring(i+r,Math.ceil((t+n)/3)*4+r)),c=t-Math.floor(i/4)*3;for(let a=c;a<c+n;a++)s[a-c]=l.charCodeAt(a);return s}}class om extends Ql{constructor(t){super(),Object.assign(this,{data:\"data:\"+(t||\"\")+\";base64,\",pending:[]})}writeUint8Array(t){const n=this;let r=0,o=n.pending;const s=n.pending.length;for(n.pending=\"\",r=0;r<Math.floor((s+t.length)/3)*3-s;r++)o+=String.fromCharCode(t[r]);for(;r<t.length;r++)n.pending+=String.fromCharCode(t[r]);o.length>2?n.data+=btoa(o):n.pending=o}getData(){return this.data+btoa(this.pending)}}class jl extends _t{constructor(t){super(),Object.assign(this,{blob:t,size:t.size})}async readUint8Array(t,n){const r=this,o=t+n;let i=await(t||o<r.size?r.blob.slice(t,o):r.blob).arrayBuffer();return i.byteLength>n&&(i=i.slice(t,o)),new Uint8Array(i)}}class qf extends ks{constructor(t){super();const n=this,r=new TransformStream,o=[];t&&o.push([em,t]),Object.defineProperty(n,ql,{get(){return r.writable}}),n.blob=new Response(r.readable,{headers:o}).blob()}getData(){return this.blob}}class sm extends jl{constructor(t){super(new Blob([t],{type:Kg}))}}class im extends qf{constructor(t){super(t),Object.assign(this,{encoding:t,utf8:!t||t.toLowerCase()==\"utf-8\"})}async getData(){const{encoding:t,utf8:n}=this,r=await super.getData();if(r.text&&n)return r.text();{const o=new FileReader;return new Promise((s,i)=>{Object.assign(o,{onload:({target:l})=>s(l.result),onerror:()=>i(o.error)}),o.readAsText(r,t)})}}}class lm extends _t{constructor(t,n){super(),Qf(this,t,n)}async init(){await jf(this,Ti,Ia),super.init()}readUint8Array(t,n){return Vf(this,t,n,Ti,Ia)}}class cm extends _t{constructor(t,n){super(),Qf(this,t,n)}async init(){await jf(this,Ii,ba),super.init()}readUint8Array(t,n){return Vf(this,t,n,Ii,ba)}}function Qf(e,t,n){const{preventHeadRequest:r,useRangeHeader:o,forceRangeRequests:s}=n;n=Object.assign({},n),delete n.preventHeadRequest,delete n.useRangeHeader,delete n.forceRangeRequests,delete n.useXHR,Object.assign(e,{url:t,options:n,preventHeadRequest:r,useRangeHeader:o,forceRangeRequests:s})}async function jf(e,t,n){const{url:r,useRangeHeader:o,forceRangeRequests:s}=e;if(dm(r)&&(o||s)){const{headers:i}=await t(Ul,e,Wf(e));if(!s&&i.get(_g)!=Uf)throw new Error($r);{let l;const c=i.get(Jg);if(c){const a=c.trim().split(/\\s*\\/\\s*/);if(a.length){const p=a[1];p&&p!=\"*\"&&(l=Number(p))}}l===Ge?await Na(e,t,n):e.size=l}}else await Na(e,t,n)}async function Vf(e,t,n,r,o){const{useRangeHeader:s,forceRangeRequests:i,options:l}=e;if(s||i){const c=await r(Ul,e,Wf(e,t,n));if(c.status!=206)throw new Error($r);return new Uint8Array(await c.arrayBuffer())}else{const{data:c}=e;return c||await o(e,l),new Uint8Array(e.data.subarray(t,t+n))}}function Wf(e,t=0,n=1){return Object.assign({},Vl(e),{[$g]:Uf+\"=\"+t+\"-\"+(t+n-1)})}function Vl({options:e}){const{headers:t}=e;if(t)return Symbol.iterator in t?Object.fromEntries(t):t}async function Ia(e){await Gf(e,Ti)}async function ba(e){await Gf(e,Ii)}async function Gf(e,t){const n=await t(Ul,e,Vl(e));e.data=new Uint8Array(await n.arrayBuffer()),e.size||(e.size=e.data.length)}async function Na(e,t,n){if(e.preventHeadRequest)await n(e,e.options);else{const o=(await t(tm,e,Vl(e))).headers.get(Zg);o?e.size=Number(o):await n(e,e.options)}}async function Ti(e,{options:t,url:n},r){const o=await fetch(n,Object.assign({},t,{method:e,headers:r}));if(o.status<400)return o;throw o.status==416?new Error($r):new Error(Hf+(o.statusText||o.status))}function Ii(e,{url:t},n){return new Promise((r,o)=>{const s=new XMLHttpRequest;if(s.addEventListener(\"load\",()=>{if(s.status<400){const i=[];s.getAllResponseHeaders().trim().split(/[\\r\\n]+/).forEach(l=>{const c=l.trim().split(/\\s*:\\s*/);c[0]=c[0].trim().replace(/^[a-z]|-[a-z]/g,a=>a.toUpperCase()),i.push(c)}),r({status:s.status,arrayBuffer:()=>s.response,headers:new Map(i)})}else o(s.status==416?new Error($r):new Error(Hf+(s.statusText||s.status)))},!1),s.addEventListener(\"error\",i=>o(i.detail?i.detail.error:new Error(\"Network error\")),!1),s.open(e,t),n)for(const i of Object.entries(n))s.setRequestHeader(i[0],i[1]);s.responseType=\"arraybuffer\",s.send()})}class Yf extends _t{constructor(t,n={}){super(),Object.assign(this,{url:t,reader:n.useXHR?new cm(t,n):new lm(t,n)})}set size(t){}get size(){return this.reader.size}async init(){await this.reader.init(),super.init()}readUint8Array(t,n){return this.reader.readUint8Array(t,n)}}class am extends Yf{constructor(t,n={}){n.useRangeHeader=!0,super(t,n)}}class um extends _t{constructor(t){super(),Object.assign(this,{array:t,size:t.length})}readUint8Array(t,n){return this.array.slice(t,t+n)}}class fm extends Ql{init(t=0){Object.assign(this,{offset:0,array:new Uint8Array(t)}),super.init()}writeUint8Array(t){const n=this;if(n.offset+t.length>n.array.length){const r=n.array;n.array=new Uint8Array(r.length+t.length),n.array.set(r)}n.array.set(t,n.offset),n.offset+=t.length}getData(){return this.array}}class Wl extends _t{constructor(t){super(),this.readers=t}async init(){const t=this,{readers:n}=t;t.lastDiskNumber=0,t.lastDiskOffset=0,await Promise.all(n.map(async(r,o)=>{await r.init(),o!=n.length-1&&(t.lastDiskOffset+=r.size),t.size+=r.size})),super.init()}async readUint8Array(t,n,r=0){const o=this,{readers:s}=this;let i,l=r;l==-1&&(l=s.length-1);let c=t;for(;c>=s[l].size;)c-=s[l].size,l++;const a=s[l],p=a.size;if(c+n<=p)i=await he(a,c,n);else{const m=p-c;i=new Uint8Array(n),i.set(await he(a,c,m)),i.set(await o.readUint8Array(t+m,n-m,r),m)}return o.lastDiskNumber=Math.max(l,o.lastDiskNumber),i}}class Ko extends ks{constructor(t,n=4294967295){super();const r=this;Object.assign(r,{diskNumber:0,diskOffset:0,size:0,maxSize:n,availableSize:n});let o,s,i;const l=new WritableStream({async write(p){const{availableSize:m}=r;if(i)p.length>=m?(await c(p.slice(0,m)),await a(),r.diskOffset+=o.size,r.diskNumber++,i=null,await this.write(p.slice(m))):await c(p);else{const{value:h,done:x}=await t.next();if(x&&!h)throw new Error(Ff);o=h,o.size=0,o.maxSize&&(r.maxSize=o.maxSize),r.availableSize=r.maxSize,await Nr(o),s=h.writable,i=s.getWriter(),await this.write(p)}},async close(){await i.ready,await a()}});Object.defineProperty(r,ql,{get(){return l}});async function c(p){const m=p.length;m&&(await i.ready,await i.write(p),o.size+=m,r.size+=m,r.availableSize-=m)}async function a(){s.size=o.size,await i.close()}}}function dm(e){const{baseURL:t}=mf(),{protocol:n}=new URL(e,t);return n==\"http:\"||n==\"https:\"}async function Nr(e,t){e.init&&!e.initialized&&await e.init(t)}function zf(e){return Array.isArray(e)&&(e=new Wl(e)),e instanceof ReadableStream&&(e={readable:e}),e}function Xf(e){e.writable===Ge&&typeof e.next==hf&&(e=new Ko(e)),e instanceof WritableStream&&(e={writable:e});const{writable:t}=e;return t.size===Ge&&(t.size=0),e instanceof Ko||Object.assign(e,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),e}function he(e,t,n,r){return e.readUint8Array(t,n,r)}const pm=Wl,hm=Ko,Kf=\"\\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \".split(\"\"),gm=Kf.length==256;function mm(e){if(gm){let t=\"\";for(let n=0;n<e.length;n++)t+=Kf[e[n]];return t}else return new TextDecoder().decode(e)}function bi(e,t){return t&&t.trim().toLowerCase()==\"cp437\"?mm(e):new TextDecoder(t).decode(e)}const Zf=\"filename\",Jf=\"rawFilename\",_f=\"comment\",$f=\"rawComment\",ed=\"uncompressedSize\",td=\"compressedSize\",nd=\"offset\",Ni=\"diskNumberStart\",Oi=\"lastModDate\",Pi=\"rawLastModDate\",rd=\"lastAccessDate\",vm=\"rawLastAccessDate\",od=\"creationDate\",wm=\"rawCreationDate\",ym=\"internalFileAttribute\",Am=\"externalFileAttribute\",Em=\"msDosCompatible\",xm=\"zip64\",Sm=[Zf,Jf,td,ed,Oi,Pi,_f,$f,rd,od,nd,Ni,Ni,ym,Am,Em,xm,\"directory\",\"bitFlag\",\"encrypted\",\"signature\",\"filenameUTF8\",\"commentUTF8\",\"compressionMethod\",\"version\",\"versionMadeBy\",\"extraField\",\"rawExtraField\",\"extraFieldZip64\",\"extraFieldUnicodePath\",\"extraFieldUnicodeComment\",\"extraFieldAES\",\"extraFieldNTFS\",\"extraFieldExtendedTimestamp\"];class Oa{constructor(t){Sm.forEach(n=>this[n]=t[n])}}const Oo=\"File format is not recognized\",sd=\"End of central directory not found\",id=\"End of Zip64 central directory not found\",ld=\"End of Zip64 central directory locator not found\",cd=\"Central directory header not found\",ad=\"Local file header not found\",ud=\"Zip64 extra field not found\",fd=\"File contains encrypted entry\",dd=\"Encryption method not supported\",Li=\"Compression method not supported\",Mi=\"Split zip file\",Pa=\"utf-8\",La=\"cp437\",km=[[ed,un],[td,un],[nd,un],[Ni,Lt]],Cm={[Lt]:{getValue:oe,bytes:4},[un]:{getValue:Po,bytes:8}};class Dm{constructor(t,n={}){Object.assign(this,{reader:zf(t),options:n,config:mf()})}async*getEntriesGenerator(t={}){const n=this;let{reader:r}=n;const{config:o}=n;if(await Nr(r),(r.size===Ge||!r.readUint8Array)&&(r=new jl(await new Response(r.readable).blob()),await Nr(r)),r.size<ao)throw new Error(Oo);r.chunkSize=ig(o);const s=await Om(r,Yh,r.size,ao,Lt*16);if(!s){const D=await he(r,0,4),T=fe(D);throw oe(T)==Gh?new Error(Mi):new Error(sd)}const i=fe(s);let l=oe(i,12),c=oe(i,16);const a=s.offset,p=ue(i,20),m=a+ao+p;let h=ue(i,4);const x=r.lastDiskNumber||0;let E=ue(i,6),v=ue(i,8),g=0,u=0;if(c==un||l==un||v==Lt||E==Lt){const D=await he(r,s.offset-zs,zs),T=fe(D);if(oe(T,0)!=zh)throw new Error(id);c=Po(T,8);let M=await he(r,c,Xs,-1),O=fe(M);const q=s.offset-zs-Xs;if(oe(O,0)!=pa&&c!=q){const U=c;c=q,g=c-U,M=await he(r,c,Xs,-1),O=fe(M)}if(oe(O,0)!=pa)throw new Error(ld);h==Lt&&(h=oe(O,16)),E==Lt&&(E=oe(O,20)),v==Lt&&(v=Po(O,32)),l==un&&(l=Po(O,40)),c-=l}if(x!=h)throw new Error(Mi);if(c<0||c>=r.size)throw new Error(Oo);let f=0,d=await he(r,c,l,E),y=fe(d);if(l){const D=s.offset-l;if(oe(y,f)!=da&&c!=D){const T=c;c=D,g=c-T,d=await he(r,c,l,E),y=fe(d)}}const k=s.offset-c-(r.lastDiskOffset||0);if(l!=k&&k>=0&&(l=k,d=await he(r,c,l,E),y=fe(d)),c<0||c>=r.size)throw new Error(Oo);const w=qe(n,t,\"filenameEncoding\"),S=qe(n,t,\"commentEncoding\");for(let D=0;D<v;D++){const T=new Rm(r,o,n.options);if(oe(y,f)!=da)throw new Error(cd);pd(T,y,f+6);const M=!!T.bitFlag.languageEncodingFlag,O=f+46,q=O+T.filenameLength,U=q+T.extraFieldLength,B=ue(y,f+4),Y=(B&0)==0,I=d.subarray(O,q),H=ue(y,f+32),N=U+H,z=d.subarray(U,N),F=M,G=M,st=Y&&(Qn(y,f+38)&va)==va,xn=oe(y,f+42)+g;Object.assign(T,{versionMadeBy:B,msDosCompatible:Y,compressedSize:0,uncompressedSize:0,commentLength:H,directory:st,offset:xn,diskNumberStart:ue(y,f+34),internalFileAttribute:ue(y,f+36),externalFileAttribute:oe(y,f+38),rawFilename:I,filenameUTF8:F,commentUTF8:G,rawExtraField:d.subarray(q,U)});const[it,Sn]=await Promise.all([bi(I,F?Pa:w||La),bi(z,G?Pa:S||La)]);Object.assign(T,{rawComment:z,filename:it,comment:Sn,directory:st||it.endsWith(rg)}),u=Math.max(xn,u),await hd(T,T,y,f+6);const js=new Oa(T);js.getData=(jc,Z0)=>T.getData(jc,js,Z0),f=N;const{onprogress:Qc}=t;if(Qc)try{await Qc(D+1,v,new Oa(T))}catch{}yield js}const C=qe(n,t,\"extractPrependedData\"),R=qe(n,t,\"extractAppendedData\");return C&&(n.prependedData=u>0?await he(r,0,u):new Uint8Array),n.comment=p?await he(r,a+ao,p):new Uint8Array,R&&(n.appendedData=m<r.size?await he(r,m,r.size-m):new Uint8Array),!0}async getEntries(t={}){const n=[];for await(const r of this.getEntriesGenerator(t))n.push(r);return n}async close(){}}class Rm{constructor(t,n,r){Object.assign(this,{reader:t,config:n,options:r})}async getData(t,n,r={}){const o=this,{reader:s,offset:i,diskNumberStart:l,extraFieldAES:c,compressionMethod:a,config:p,bitFlag:m,signature:h,rawLastModDate:x,uncompressedSize:E,compressedSize:v}=o,g=n.localDirectory={},u=await he(s,i,30,l),f=fe(u);let d=qe(o,r,\"password\");if(d=d&&d.length&&d,c&&c.originalCompressionMethod!=Vh)throw new Error(Li);if(a!=jh&&a!=Qh)throw new Error(Li);if(oe(f,0)!=Wh)throw new Error(ad);pd(g,f,4),g.rawExtraField=g.extraFieldLength?await he(s,i+30+g.filenameLength,g.extraFieldLength,l):new Uint8Array,await hd(o,g,f,4,!0),Object.assign(n,{lastAccessDate:g.lastAccessDate,creationDate:g.creationDate});const y=o.encrypted&&g.encrypted,k=y&&!c;if(y){if(!k&&c.strength===Ge)throw new Error(dd);if(!d)throw new Error(fd)}const w=i+30+g.filenameLength+g.extraFieldLength,S=v,C=s.readable;Object.assign(C,{diskNumberStart:l,offset:w,size:S});const R=qe(o,r,\"signal\"),D=qe(o,r,\"checkPasswordOnly\");D&&(t=new WritableStream),t=Xf(t),await Nr(t,E);const{writable:T}=t,{onstart:M,onprogress:O,onend:q}=r,U={options:{codecType:Bf,password:d,zipCrypto:k,encryptionStrength:c&&c.strength,signed:qe(o,r,\"checkSignature\"),passwordVerification:k&&(m.dataDescriptor?x>>>8&255:h>>>24&255),signature:h,compressed:a!=0,encrypted:y,useWebWorkers:qe(o,r,\"useWebWorkers\"),useCompressionStream:qe(o,r,\"useCompressionStream\"),transferStreams:qe(o,r,\"transferStreams\"),checkPasswordOnly:D},config:p,streamOptions:{signal:R,size:S,onstart:M,onprogress:O,onend:q}};let B=0;try{({outputSize:B}=await zg({readable:C,writable:T},U))}catch(Y){if(!D||Y.message!=Bl)throw Y}finally{const Y=qe(o,r,\"preventClose\");T.size+=B,!Y&&!T.locked&&await T.getWriter().close()}return D?void 0:t.getData?t.getData():T}}function pd(e,t,n){const r=e.rawBitFlag=ue(t,n+2),o=(r&ha)==ha,s=oe(t,n+6);Object.assign(e,{encrypted:o,version:ue(t,n),bitFlag:{level:(r&ng)>>1,dataDescriptor:(r&ga)==ga,languageEncodingFlag:(r&ma)==ma},rawLastModDate:s,lastModDate:Pm(s),filenameLength:ue(t,n+22),extraFieldLength:ue(t,n+24)})}async function hd(e,t,n,r,o){const{rawExtraField:s}=t,i=t.extraField=new Map,l=fe(new Uint8Array(s));let c=0;try{for(;c<s.length;){const u=ue(l,c),f=ue(l,c+2);i.set(u,{type:u,data:s.slice(c+4,c+4+f)}),c+=4+f}}catch{}const a=ue(n,r+4);Object.assign(t,{signature:oe(n,r+10),uncompressedSize:oe(n,r+18),compressedSize:oe(n,r+14)});const p=i.get(Xh);p&&(Tm(p,t),t.extraFieldZip64=p);const m=i.get($h);m&&(await Ma(m,Zf,Jf,t,e),t.extraFieldUnicodePath=m);const h=i.get(eg);h&&(await Ma(h,_f,$f,t,e),t.extraFieldUnicodeComment=h);const x=i.get(Kh);x?(Im(x,t,a),t.extraFieldAES=x):t.compressionMethod=a;const E=i.get(Zh);E&&(bm(E,t),t.extraFieldNTFS=E);const v=i.get(_h);v&&(Nm(v,t,o),t.extraFieldExtendedTimestamp=v);const g=i.get(tg);g&&(t.extraFieldUSDZ=g)}function Tm(e,t){t.zip64=!0;const n=fe(e.data),r=km.filter(([o,s])=>t[o]==s);for(let o=0,s=0;o<r.length;o++){const[i,l]=r[o];if(t[i]==l){const c=Cm[l];t[i]=e[i]=c.getValue(n,s),s+=c.bytes}else if(e[i])throw new Error(ud)}}async function Ma(e,t,n,r,o){const s=fe(e.data),i=new zo;i.append(o[n]);const l=fe(new Uint8Array(4));l.setUint32(0,i.get(),!0);const c=oe(s,1);Object.assign(e,{version:Qn(s,0),[t]:bi(e.data.subarray(5)),valid:!o.bitFlag.languageEncodingFlag&&c==oe(l,0)}),e.valid&&(r[t]=e[t],r[t+\"UTF8\"]=!0)}function Im(e,t,n){const r=fe(e.data),o=Qn(r,4);Object.assign(e,{vendorVersion:Qn(r,0),vendorId:Qn(r,2),strength:o,originalCompressionMethod:n,compressionMethod:ue(r,5)}),t.compressionMethod=e.compressionMethod}function bm(e,t){const n=fe(e.data);let r=4,o;try{for(;r<e.data.length&&!o;){const s=ue(n,r),i=ue(n,r+2);s==Jh&&(o=e.data.slice(r+4,r+4+i)),r+=4+i}}catch{}try{if(o&&o.length==24){const s=fe(o),i=s.getBigUint64(0,!0),l=s.getBigUint64(8,!0),c=s.getBigUint64(16,!0);Object.assign(e,{rawLastModDate:i,rawLastAccessDate:l,rawCreationDate:c});const a=_s(i),p=_s(l),m=_s(c),h={lastModDate:a,lastAccessDate:p,creationDate:m};Object.assign(e,h),Object.assign(t,h)}}catch{}}function Nm(e,t,n){const r=fe(e.data),o=Qn(r,0),s=[],i=[];n?((o&1)==1&&(s.push(Oi),i.push(Pi)),(o&2)==2&&(s.push(rd),i.push(vm)),(o&4)==4&&(s.push(od),i.push(wm))):e.data.length>=5&&(s.push(Oi),i.push(Pi));let l=1;s.forEach((c,a)=>{if(e.data.length>=l+4){const p=oe(r,l);t[c]=e[c]=new Date(p*1e3);const m=i[a];e[m]=p}l+=4})}async function Om(e,t,n,r,o){const s=new Uint8Array(4),i=fe(s);Lm(i,0,t);const l=r+o;return await c(r)||await c(Math.min(l,n));async function c(a){const p=n-a,m=await he(e,p,a);for(let h=m.length-r;h>=0;h--)if(m[h]==s[0]&&m[h+1]==s[1]&&m[h+2]==s[2]&&m[h+3]==s[3])return{offset:p+h,buffer:m.slice(h,h+r).buffer}}}function qe(e,t,n){return t[n]===Ge?e.options[n]:t[n]}function Pm(e){const t=(e&4294901760)>>16,n=e&65535;try{return new Date(1980+((t&65024)>>9),((t&480)>>5)-1,t&31,(n&63488)>>11,(n&2016)>>5,(n&31)*2,0)}catch{}}function _s(e){return new Date(Number(e/BigInt(1e4)-BigInt(116444736e5)))}function Qn(e,t){return e.getUint8(t)}function ue(e,t){return e.getUint16(t,!0)}function oe(e,t){return e.getUint32(t,!0)}function Po(e,t){return Number(e.getBigUint64(t,!0))}function Lm(e,t,n){e.setUint32(t,n,!0)}function fe(e){return new DataView(e.buffer)}vf({Inflate:qh});const Mm=Object.freeze(Object.defineProperty({__proto__:null,BlobReader:jl,BlobWriter:qf,Data64URIReader:rm,Data64URIWriter:om,ERR_BAD_FORMAT:Oo,ERR_CENTRAL_DIRECTORY_NOT_FOUND:cd,ERR_ENCRYPTED:fd,ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND:ld,ERR_EOCDR_NOT_FOUND:sd,ERR_EOCDR_ZIP64_NOT_FOUND:id,ERR_EXTRAFIELD_ZIP64_NOT_FOUND:ud,ERR_HTTP_RANGE:$r,ERR_INVALID_PASSWORD:Ll,ERR_INVALID_SIGNATURE:Ml,ERR_ITERATOR_COMPLETED_TOO_SOON:Ff,ERR_LOCAL_FILE_HEADER_NOT_FOUND:ad,ERR_SPLIT_ZIP_FILE:Mi,ERR_UNSUPPORTED_COMPRESSION:Li,ERR_UNSUPPORTED_ENCRYPTION:dd,HttpRangeReader:am,HttpReader:Yf,Reader:_t,SplitDataReader:Wl,SplitDataWriter:Ko,SplitZipReader:pm,SplitZipWriter:hm,TextReader:sm,TextWriter:im,Uint8ArrayReader:um,Uint8ArrayWriter:fm,Writer:Ql,ZipReader:Dm,configure:vf,getMimeType:lg,initReader:zf,initStream:Nr,initWriter:Xf,readUint8Array:he,terminateWorkers:Xg},Symbol.toStringTag,{value:\"Module\"}));var gd={exports:{}},Fe={},md={exports:{}},vd={};/**\n * @license React\n * scheduler.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 */(function(e){function t(I,H){var N=I.length;I.push(H);e:for(;0<N;){var z=N-1>>>1,F=I[z];if(0<o(F,H))I[z]=H,I[N]=F,N=z;else break e}}function n(I){return I.length===0?null:I[0]}function r(I){if(I.length===0)return null;var H=I[0],N=I.pop();if(N!==H){I[0]=N;e:for(var z=0,F=I.length,G=F>>>1;z<G;){var st=2*(z+1)-1,xn=I[st],it=st+1,Sn=I[it];if(0>o(xn,N))it<F&&0>o(Sn,xn)?(I[z]=Sn,I[it]=N,z=it):(I[z]=xn,I[st]=N,z=st);else if(it<F&&0>o(Sn,N))I[z]=Sn,I[it]=N,z=it;else break e}}return H}function o(I,H){var N=I.sortIndex-H.sortIndex;return N!==0?N:I.id-H.id}if(typeof performance==\"object\"&&typeof performance.now==\"function\"){var s=performance;e.unstable_now=function(){return s.now()}}else{var i=Date,l=i.now();e.unstable_now=function(){return i.now()-l}}var c=[],a=[],p=1,m=null,h=3,x=!1,E=!1,v=!1,g=typeof setTimeout==\"function\"?setTimeout:null,u=typeof clearTimeout==\"function\"?clearTimeout:null,f=typeof setImmediate<\"u\"?setImmediate:null;typeof navigator<\"u\"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(I){for(var H=n(a);H!==null;){if(H.callback===null)r(a);else if(H.startTime<=I)r(a),H.sortIndex=H.expirationTime,t(c,H);else break;H=n(a)}}function y(I){if(v=!1,d(I),!E)if(n(c)!==null)E=!0,B(k);else{var H=n(a);H!==null&&Y(y,H.startTime-I)}}function k(I,H){E=!1,v&&(v=!1,u(C),C=-1),x=!0;var N=h;try{for(d(H),m=n(c);m!==null&&(!(m.expirationTime>H)||I&&!T());){var z=m.callback;if(typeof z==\"function\"){m.callback=null,h=m.priorityLevel;var F=z(m.expirationTime<=H);H=e.unstable_now(),typeof F==\"function\"?m.callback=F:m===n(c)&&r(c),d(H)}else r(c);m=n(c)}if(m!==null)var G=!0;else{var st=n(a);st!==null&&Y(y,st.startTime-H),G=!1}return G}finally{m=null,h=N,x=!1}}var w=!1,S=null,C=-1,R=5,D=-1;function T(){return!(e.unstable_now()-D<R)}function M(){if(S!==null){var I=e.unstable_now();D=I;var H=!0;try{H=S(!0,I)}finally{H?O():(w=!1,S=null)}}else w=!1}var O;if(typeof f==\"function\")O=function(){f(M)};else if(typeof MessageChannel<\"u\"){var q=new MessageChannel,U=q.port2;q.port1.onmessage=M,O=function(){U.postMessage(null)}}else O=function(){g(M,0)};function B(I){S=I,w||(w=!0,O())}function Y(I,H){C=g(function(){I(e.unstable_now())},H)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(I){I.callback=null},e.unstable_continueExecution=function(){E||x||(E=!0,B(k))},e.unstable_forceFrameRate=function(I){0>I||125<I?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):R=0<I?Math.floor(1e3/I):5},e.unstable_getCurrentPriorityLevel=function(){return h},e.unstable_getFirstCallbackNode=function(){return n(c)},e.unstable_next=function(I){switch(h){case 1:case 2:case 3:var H=3;break;default:H=h}var N=h;h=H;try{return I()}finally{h=N}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(I,H){switch(I){case 1:case 2:case 3:case 4:case 5:break;default:I=3}var N=h;h=I;try{return H()}finally{h=N}},e.unstable_scheduleCallback=function(I,H,N){var z=e.unstable_now();switch(typeof N==\"object\"&&N!==null?(N=N.delay,N=typeof N==\"number\"&&0<N?z+N:z):N=z,I){case 1:var F=-1;break;case 2:F=250;break;case 5:F=1073741823;break;case 4:F=1e4;break;default:F=5e3}return F=N+F,I={id:p++,callback:H,priorityLevel:I,startTime:N,expirationTime:F,sortIndex:-1},N>z?(I.sortIndex=N,t(a,I),n(c)===null&&I===n(a)&&(v?(u(C),C=-1):v=!0,Y(y,N-z))):(I.sortIndex=F,t(c,I),E||x||(E=!0,B(k))),I},e.unstable_shouldYield=T,e.unstable_wrapCallback=function(I){var H=h;return function(){var N=h;h=H;try{return I.apply(this,arguments)}finally{h=N}}}})(vd);md.exports=vd;var Bm=md.exports;/**\n * @license React\n * react-dom.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 */var wd=j,He=Bm;function b(e){for(var t=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,n=1;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n]);return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var yd=new Set,Or={};function An(e,t){Kn(e,t),Kn(e+\"Capture\",t)}function Kn(e,t){for(Or[e]=t,e=0;e<t.length;e++)yd.add(t[e])}var St=!(typeof window>\"u\"||typeof window.document>\"u\"||typeof window.document.createElement>\"u\"),Bi=Object.prototype.hasOwnProperty,Hm=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Ba={},Ha={};function Fm(e){return Bi.call(Ha,e)?!0:Bi.call(Ba,e)?!1:Hm.test(e)?Ha[e]=!0:(Ba[e]=!0,!1)}function Um(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case\"function\":case\"symbol\":return!0;case\"boolean\":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!==\"data-\"&&e!==\"aria-\");default:return!1}}function qm(e,t,n,r){if(t===null||typeof t>\"u\"||Um(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Ce(e,t,n,r,o,s,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=s,this.removeEmptyString=i}var me={};\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(e){me[e]=new Ce(e,0,!1,e,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(e){var t=e[0];me[t]=new Ce(t,1,!1,e[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(e){me[e]=new Ce(e,2,!1,e.toLowerCase(),null,!1,!1)});[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(e){me[e]=new Ce(e,2,!1,e,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(e){me[e]=new Ce(e,3,!1,e.toLowerCase(),null,!1,!1)});[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(e){me[e]=new Ce(e,3,!0,e,null,!1,!1)});[\"capture\",\"download\"].forEach(function(e){me[e]=new Ce(e,4,!1,e,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(e){me[e]=new Ce(e,6,!1,e,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(e){me[e]=new Ce(e,5,!1,e.toLowerCase(),null,!1,!1)});var Gl=/[\\-:]([a-z])/g;function Yl(e){return e[1].toUpperCase()}\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(e){var t=e.replace(Gl,Yl);me[t]=new Ce(t,1,!1,e,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(e){var t=e.replace(Gl,Yl);me[t]=new Ce(t,1,!1,e,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(e){var t=e.replace(Gl,Yl);me[t]=new Ce(t,1,!1,e,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(e){me[e]=new Ce(e,1,!1,e.toLowerCase(),null,!1,!1)});me.xlinkHref=new Ce(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(e){me[e]=new Ce(e,1,!1,e.toLowerCase(),null,!0,!0)});function zl(e,t,n,r){var o=me.hasOwnProperty(t)?me[t]:null;(o!==null?o.type!==0:r||!(2<t.length)||t[0]!==\"o\"&&t[0]!==\"O\"||t[1]!==\"n\"&&t[1]!==\"N\")&&(qm(t,n,o,r)&&(n=null),r||o===null?Fm(t)&&(n===null?e.removeAttribute(t):e.setAttribute(t,\"\"+n)):o.mustUseProperty?e[o.propertyName]=n===null?o.type===3?!1:\"\":n:(t=o.attributeName,r=o.attributeNamespace,n===null?e.removeAttribute(t):(o=o.type,n=o===3||o===4&&n===!0?\"\":\"\"+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}var Dt=wd.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,uo=Symbol.for(\"react.element\"),Tn=Symbol.for(\"react.portal\"),In=Symbol.for(\"react.fragment\"),Xl=Symbol.for(\"react.strict_mode\"),Hi=Symbol.for(\"react.profiler\"),Ad=Symbol.for(\"react.provider\"),Ed=Symbol.for(\"react.context\"),Kl=Symbol.for(\"react.forward_ref\"),Fi=Symbol.for(\"react.suspense\"),Ui=Symbol.for(\"react.suspense_list\"),Zl=Symbol.for(\"react.memo\"),Bt=Symbol.for(\"react.lazy\"),xd=Symbol.for(\"react.offscreen\"),Fa=Symbol.iterator;function ir(e){return e===null||typeof e!=\"object\"?null:(e=Fa&&e[Fa]||e[\"@@iterator\"],typeof e==\"function\"?e:null)}var ne=Object.assign,$s;function gr(e){if($s===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\\n( *(at )?)/);$s=t&&t[1]||\"\"}return`\n`+$s+e}var ei=!1;function ti(e,t){if(!e||ei)return\"\";ei=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,\"props\",{set:function(){throw Error()}}),typeof Reflect==\"object\"&&Reflect.construct){try{Reflect.construct(t,[])}catch(a){var r=a}Reflect.construct(e,[],t)}else{try{t.call()}catch(a){r=a}e.call(t.prototype)}else{try{throw Error()}catch(a){r=a}e()}}catch(a){if(a&&r&&typeof a.stack==\"string\"){for(var o=a.stack.split(`\n`),s=r.stack.split(`\n`),i=o.length-1,l=s.length-1;1<=i&&0<=l&&o[i]!==s[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==s[l]){if(i!==1||l!==1)do if(i--,l--,0>l||o[i]!==s[l]){var c=`\n`+o[i].replace(\" at new \",\" at \");return e.displayName&&c.includes(\"<anonymous>\")&&(c=c.replace(\"<anonymous>\",e.displayName)),c}while(1<=i&&0<=l);break}}}finally{ei=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:\"\")?gr(e):\"\"}function Qm(e){switch(e.tag){case 5:return gr(e.type);case 16:return gr(\"Lazy\");case 13:return gr(\"Suspense\");case 19:return gr(\"SuspenseList\");case 0:case 2:case 15:return e=ti(e.type,!1),e;case 11:return e=ti(e.type.render,!1),e;case 1:return e=ti(e.type,!0),e;default:return\"\"}}function qi(e){if(e==null)return null;if(typeof e==\"function\")return e.displayName||e.name||null;if(typeof e==\"string\")return e;switch(e){case In:return\"Fragment\";case Tn:return\"Portal\";case Hi:return\"Profiler\";case Xl:return\"StrictMode\";case Fi:return\"Suspense\";case Ui:return\"SuspenseList\"}if(typeof e==\"object\")switch(e.$$typeof){case Ed:return(e.displayName||\"Context\")+\".Consumer\";case Ad:return(e._context.displayName||\"Context\")+\".Provider\";case Kl:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||\"\",e=e!==\"\"?\"ForwardRef(\"+e+\")\":\"ForwardRef\"),e;case Zl:return t=e.displayName||null,t!==null?t:qi(e.type)||\"Memo\";case Bt:t=e._payload,e=e._init;try{return qi(e(t))}catch{}}return null}function jm(e){var t=e.type;switch(e.tag){case 24:return\"Cache\";case 9:return(t.displayName||\"Context\")+\".Consumer\";case 10:return(t._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return e=t.render,e=e.displayName||e.name||\"\",t.displayName||(e!==\"\"?\"ForwardRef(\"+e+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return t;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return qi(t);case 8:return t===Xl?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";case 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t==\"function\")return t.displayName||t.name||null;if(typeof t==\"string\")return t}return null}function Kt(e){switch(typeof e){case\"boolean\":case\"number\":case\"string\":case\"undefined\":return e;case\"object\":return e;default:return\"\"}}function Sd(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()===\"input\"&&(t===\"checkbox\"||t===\"radio\")}function Vm(e){var t=Sd(e)?\"checked\":\"value\",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=\"\"+e[t];if(!e.hasOwnProperty(t)&&typeof n<\"u\"&&typeof n.get==\"function\"&&typeof n.set==\"function\"){var o=n.get,s=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(i){r=\"\"+i,s.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=\"\"+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function fo(e){e._valueTracker||(e._valueTracker=Vm(e))}function kd(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=\"\";return e&&(r=Sd(e)?e.checked?\"true\":\"false\":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Zo(e){if(e=e||(typeof document<\"u\"?document:void 0),typeof e>\"u\")return null;try{return e.activeElement||e.body}catch{return e.body}}function Qi(e,t){var n=t.checked;return ne({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Ua(e,t){var n=t.defaultValue==null?\"\":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Kt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type===\"checkbox\"||t.type===\"radio\"?t.checked!=null:t.value!=null}}function Cd(e,t){t=t.checked,t!=null&&zl(e,\"checked\",t,!1)}function ji(e,t){Cd(e,t);var n=Kt(t.value),r=t.type;if(n!=null)r===\"number\"?(n===0&&e.value===\"\"||e.value!=n)&&(e.value=\"\"+n):e.value!==\"\"+n&&(e.value=\"\"+n);else if(r===\"submit\"||r===\"reset\"){e.removeAttribute(\"value\");return}t.hasOwnProperty(\"value\")?Vi(e,t.type,n):t.hasOwnProperty(\"defaultValue\")&&Vi(e,t.type,Kt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function qa(e,t,n){if(t.hasOwnProperty(\"value\")||t.hasOwnProperty(\"defaultValue\")){var r=t.type;if(!(r!==\"submit\"&&r!==\"reset\"||t.value!==void 0&&t.value!==null))return;t=\"\"+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==\"\"&&(e.name=\"\"),e.defaultChecked=!!e._wrapperState.initialChecked,n!==\"\"&&(e.name=n)}function Vi(e,t,n){(t!==\"number\"||Zo(e.ownerDocument)!==e)&&(n==null?e.defaultValue=\"\"+e._wrapperState.initialValue:e.defaultValue!==\"\"+n&&(e.defaultValue=\"\"+n))}var mr=Array.isArray;function jn(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t[\"$\"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty(\"$\"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=\"\"+Kt(n),t=null,o=0;o<e.length;o++){if(e[o].value===n){e[o].selected=!0,r&&(e[o].defaultSelected=!0);return}t!==null||e[o].disabled||(t=e[o])}t!==null&&(t.selected=!0)}}function Wi(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(b(91));return ne({},t,{value:void 0,defaultValue:void 0,children:\"\"+e._wrapperState.initialValue})}function Qa(e,t){var n=t.value;if(n==null){if(n=t.children,t=t.defaultValue,n!=null){if(t!=null)throw Error(b(92));if(mr(n)){if(1<n.length)throw Error(b(93));n=n[0]}t=n}t==null&&(t=\"\"),n=t}e._wrapperState={initialValue:Kt(n)}}function Dd(e,t){var n=Kt(t.value),r=Kt(t.defaultValue);n!=null&&(n=\"\"+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=\"\"+r)}function ja(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==\"\"&&t!==null&&(e.value=t)}function Rd(e){switch(e){case\"svg\":return\"http://www.w3.org/2000/svg\";case\"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Gi(e,t){return e==null||e===\"http://www.w3.org/1999/xhtml\"?Rd(t):e===\"http://www.w3.org/2000/svg\"&&t===\"foreignObject\"?\"http://www.w3.org/1999/xhtml\":e}var po,Td=function(e){return typeof MSApp<\"u\"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!==\"http://www.w3.org/2000/svg\"||\"innerHTML\"in e)e.innerHTML=t;else{for(po=po||document.createElement(\"div\"),po.innerHTML=\"<svg>\"+t.valueOf().toString()+\"</svg>\",t=po.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Pr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var yr={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Wm=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(yr).forEach(function(e){Wm.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),yr[t]=yr[e]})});function Id(e,t,n){return t==null||typeof t==\"boolean\"||t===\"\"?\"\":n||typeof t!=\"number\"||t===0||yr.hasOwnProperty(e)&&yr[e]?(\"\"+t).trim():t+\"px\"}function bd(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf(\"--\")===0,o=Id(n,t[n],r);n===\"float\"&&(n=\"cssFloat\"),r?e.setProperty(n,o):e[n]=o}}var Gm=ne({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Yi(e,t){if(t){if(Gm[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(b(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(b(60));if(typeof t.dangerouslySetInnerHTML!=\"object\"||!(\"__html\"in t.dangerouslySetInnerHTML))throw Error(b(61))}if(t.style!=null&&typeof t.style!=\"object\")throw Error(b(62))}}function zi(e,t){if(e.indexOf(\"-\")===-1)return typeof t.is==\"string\";switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}var Xi=null;function Jl(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Ki=null,Vn=null,Wn=null;function Va(e){if(e=no(e)){if(typeof Ki!=\"function\")throw Error(b(280));var t=e.stateNode;t&&(t=Is(t),Ki(e.stateNode,e.type,t))}}function Nd(e){Vn?Wn?Wn.push(e):Wn=[e]:Vn=e}function Od(){if(Vn){var e=Vn,t=Wn;if(Wn=Vn=null,Va(e),t)for(e=0;e<t.length;e++)Va(t[e])}}function Pd(e,t){return e(t)}function Ld(){}var ni=!1;function Md(e,t,n){if(ni)return e(t,n);ni=!0;try{return Pd(e,t,n)}finally{ni=!1,(Vn!==null||Wn!==null)&&(Ld(),Od())}}function Lr(e,t){var n=e.stateNode;if(n===null)return null;var r=Is(n);if(r===null)return null;n=r[t];e:switch(t){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":case\"onMouseEnter\":(r=!r.disabled)||(e=e.type,r=!(e===\"button\"||e===\"input\"||e===\"select\"||e===\"textarea\")),e=!r;break e;default:e=!1}if(e)return null;if(n&&typeof n!=\"function\")throw Error(b(231,t,typeof n));return n}var Zi=!1;if(St)try{var lr={};Object.defineProperty(lr,\"passive\",{get:function(){Zi=!0}}),window.addEventListener(\"test\",lr,lr),window.removeEventListener(\"test\",lr,lr)}catch{Zi=!1}function Ym(e,t,n,r,o,s,i,l,c){var a=Array.prototype.slice.call(arguments,3);try{t.apply(n,a)}catch(p){this.onError(p)}}var Ar=!1,Jo=null,_o=!1,Ji=null,zm={onError:function(e){Ar=!0,Jo=e}};function Xm(e,t,n,r,o,s,i,l,c){Ar=!1,Jo=null,Ym.apply(zm,arguments)}function Km(e,t,n,r,o,s,i,l,c){if(Xm.apply(this,arguments),Ar){if(Ar){var a=Jo;Ar=!1,Jo=null}else throw Error(b(198));_o||(_o=!0,Ji=a)}}function En(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function Bd(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function Wa(e){if(En(e)!==e)throw Error(b(188))}function Zm(e){var t=e.alternate;if(!t){if(t=En(e),t===null)throw Error(b(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(o===null)break;var s=o.alternate;if(s===null){if(r=o.return,r!==null){n=r;continue}break}if(o.child===s.child){for(s=o.child;s;){if(s===n)return Wa(o),e;if(s===r)return Wa(o),t;s=s.sibling}throw Error(b(188))}if(n.return!==r.return)n=o,r=s;else{for(var i=!1,l=o.child;l;){if(l===n){i=!0,n=o,r=s;break}if(l===r){i=!0,r=o,n=s;break}l=l.sibling}if(!i){for(l=s.child;l;){if(l===n){i=!0,n=s,r=o;break}if(l===r){i=!0,r=s,n=o;break}l=l.sibling}if(!i)throw Error(b(189))}}if(n.alternate!==r)throw Error(b(190))}if(n.tag!==3)throw Error(b(188));return n.stateNode.current===n?e:t}function Hd(e){return e=Zm(e),e!==null?Fd(e):null}function Fd(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=Fd(e);if(t!==null)return t;e=e.sibling}return null}var Ud=He.unstable_scheduleCallback,Ga=He.unstable_cancelCallback,Jm=He.unstable_shouldYield,_m=He.unstable_requestPaint,se=He.unstable_now,$m=He.unstable_getCurrentPriorityLevel,_l=He.unstable_ImmediatePriority,qd=He.unstable_UserBlockingPriority,$o=He.unstable_NormalPriority,e1=He.unstable_LowPriority,Qd=He.unstable_IdlePriority,Cs=null,dt=null;function t1(e){if(dt&&typeof dt.onCommitFiberRoot==\"function\")try{dt.onCommitFiberRoot(Cs,e,void 0,(e.current.flags&128)===128)}catch{}}var rt=Math.clz32?Math.clz32:o1,n1=Math.log,r1=Math.LN2;function o1(e){return e>>>=0,e===0?32:31-(n1(e)/r1|0)|0}var ho=64,go=4194304;function vr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function es(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,o=e.suspendedLanes,s=e.pingedLanes,i=n&268435455;if(i!==0){var l=i&~o;l!==0?r=vr(l):(s&=i,s!==0&&(r=vr(s)))}else i=n&~o,i!==0?r=vr(i):s!==0&&(r=vr(s));if(r===0)return 0;if(t!==0&&t!==r&&!(t&o)&&(o=r&-r,s=t&-t,o>=s||o===16&&(s&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0<t;)n=31-rt(t),o=1<<n,r|=e[n],t&=~o;return r}function s1(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function i1(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,s=e.pendingLanes;0<s;){var i=31-rt(s),l=1<<i,c=o[i];c===-1?(!(l&n)||l&r)&&(o[i]=s1(l,t)):c<=t&&(e.expiredLanes|=l),s&=~l}}function _i(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function jd(){var e=ho;return ho<<=1,!(ho&4194240)&&(ho=64),e}function ri(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function eo(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-rt(t),e[t]=n}function l1(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-rt(n),s=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~s}}function $l(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-rt(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var X=0;function Vd(e){return e&=-e,1<e?4<e?e&268435455?16:536870912:4:1}var Wd,ec,Gd,Yd,zd,$i=!1,mo=[],Vt=null,Wt=null,Gt=null,Mr=new Map,Br=new Map,Ft=[],c1=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");function Ya(e,t){switch(e){case\"focusin\":case\"focusout\":Vt=null;break;case\"dragenter\":case\"dragleave\":Wt=null;break;case\"mouseover\":case\"mouseout\":Gt=null;break;case\"pointerover\":case\"pointerout\":Mr.delete(t.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":Br.delete(t.pointerId)}}function cr(e,t,n,r,o,s){return e===null||e.nativeEvent!==s?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:s,targetContainers:[o]},t!==null&&(t=no(t),t!==null&&ec(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,o!==null&&t.indexOf(o)===-1&&t.push(o),e)}function a1(e,t,n,r,o){switch(t){case\"focusin\":return Vt=cr(Vt,e,t,n,r,o),!0;case\"dragenter\":return Wt=cr(Wt,e,t,n,r,o),!0;case\"mouseover\":return Gt=cr(Gt,e,t,n,r,o),!0;case\"pointerover\":var s=o.pointerId;return Mr.set(s,cr(Mr.get(s)||null,e,t,n,r,o)),!0;case\"gotpointercapture\":return s=o.pointerId,Br.set(s,cr(Br.get(s)||null,e,t,n,r,o)),!0}return!1}function Xd(e){var t=ln(e.target);if(t!==null){var n=En(t);if(n!==null){if(t=n.tag,t===13){if(t=Bd(n),t!==null){e.blockedOn=t,zd(e.priority,function(){Gd(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Lo(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=el(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(n===null){n=e.nativeEvent;var r=new n.constructor(n.type,n);Xi=r,n.target.dispatchEvent(r),Xi=null}else return t=no(n),t!==null&&ec(t),e.blockedOn=n,!1;t.shift()}return!0}function za(e,t,n){Lo(e)&&n.delete(t)}function u1(){$i=!1,Vt!==null&&Lo(Vt)&&(Vt=null),Wt!==null&&Lo(Wt)&&(Wt=null),Gt!==null&&Lo(Gt)&&(Gt=null),Mr.forEach(za),Br.forEach(za)}function ar(e,t){e.blockedOn===t&&(e.blockedOn=null,$i||($i=!0,He.unstable_scheduleCallback(He.unstable_NormalPriority,u1)))}function Hr(e){function t(o){return ar(o,e)}if(0<mo.length){ar(mo[0],e);for(var n=1;n<mo.length;n++){var r=mo[n];r.blockedOn===e&&(r.blockedOn=null)}}for(Vt!==null&&ar(Vt,e),Wt!==null&&ar(Wt,e),Gt!==null&&ar(Gt,e),Mr.forEach(t),Br.forEach(t),n=0;n<Ft.length;n++)r=Ft[n],r.blockedOn===e&&(r.blockedOn=null);for(;0<Ft.length&&(n=Ft[0],n.blockedOn===null);)Xd(n),n.blockedOn===null&&Ft.shift()}var Gn=Dt.ReactCurrentBatchConfig,ts=!0;function f1(e,t,n,r){var o=X,s=Gn.transition;Gn.transition=null;try{X=1,tc(e,t,n,r)}finally{X=o,Gn.transition=s}}function d1(e,t,n,r){var o=X,s=Gn.transition;Gn.transition=null;try{X=4,tc(e,t,n,r)}finally{X=o,Gn.transition=s}}function tc(e,t,n,r){if(ts){var o=el(e,t,n,r);if(o===null)pi(e,t,r,ns,n),Ya(e,r);else if(a1(o,e,t,n,r))r.stopPropagation();else if(Ya(e,r),t&4&&-1<c1.indexOf(e)){for(;o!==null;){var s=no(o);if(s!==null&&Wd(s),s=el(e,t,n,r),s===null&&pi(e,t,r,ns,n),s===o)break;o=s}o!==null&&r.stopPropagation()}else pi(e,t,r,null,n)}}var ns=null;function el(e,t,n,r){if(ns=null,e=Jl(r),e=ln(e),e!==null)if(t=En(e),t===null)e=null;else if(n=t.tag,n===13){if(e=Bd(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return ns=e,null}function Kd(e){switch(e){case\"cancel\":case\"click\":case\"close\":case\"contextmenu\":case\"copy\":case\"cut\":case\"auxclick\":case\"dblclick\":case\"dragend\":case\"dragstart\":case\"drop\":case\"focusin\":case\"focusout\":case\"input\":case\"invalid\":case\"keydown\":case\"keypress\":case\"keyup\":case\"mousedown\":case\"mouseup\":case\"paste\":case\"pause\":case\"play\":case\"pointercancel\":case\"pointerdown\":case\"pointerup\":case\"ratechange\":case\"reset\":case\"resize\":case\"seeked\":case\"submit\":case\"touchcancel\":case\"touchend\":case\"touchstart\":case\"volumechange\":case\"change\":case\"selectionchange\":case\"textInput\":case\"compositionstart\":case\"compositionend\":case\"compositionupdate\":case\"beforeblur\":case\"afterblur\":case\"beforeinput\":case\"blur\":case\"fullscreenchange\":case\"focus\":case\"hashchange\":case\"popstate\":case\"select\":case\"selectstart\":return 1;case\"drag\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"mousemove\":case\"mouseout\":case\"mouseover\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"scroll\":case\"toggle\":case\"touchmove\":case\"wheel\":case\"mouseenter\":case\"mouseleave\":case\"pointerenter\":case\"pointerleave\":return 4;case\"message\":switch($m()){case _l:return 1;case qd:return 4;case $o:case e1:return 16;case Qd:return 536870912;default:return 16}default:return 16}}var Qt=null,nc=null,Mo=null;function Zd(){if(Mo)return Mo;var e,t=nc,n=t.length,r,o=\"value\"in Qt?Qt.value:Qt.textContent,s=o.length;for(e=0;e<n&&t[e]===o[e];e++);var i=n-e;for(r=1;r<=i&&t[n-r]===o[s-r];r++);return Mo=o.slice(e,1<r?1-r:void 0)}function Bo(e){var t=e.keyCode;return\"charCode\"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function vo(){return!0}function Xa(){return!1}function Ue(e){function t(n,r,o,s,i){this._reactName=n,this._targetInst=o,this.type=r,this.nativeEvent=s,this.target=i,this.currentTarget=null;for(var l in e)e.hasOwnProperty(l)&&(n=e[l],this[l]=n?n(s):s[l]);return this.isDefaultPrevented=(s.defaultPrevented!=null?s.defaultPrevented:s.returnValue===!1)?vo:Xa,this.isPropagationStopped=Xa,this}return ne(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!=\"unknown\"&&(n.returnValue=!1),this.isDefaultPrevented=vo)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!=\"unknown\"&&(n.cancelBubble=!0),this.isPropagationStopped=vo)},persist:function(){},isPersistent:vo}),t}var nr={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},rc=Ue(nr),to=ne({},nr,{view:0,detail:0}),p1=Ue(to),oi,si,ur,Ds=ne({},to,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:oc,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\"movementX\"in e?e.movementX:(e!==ur&&(ur&&e.type===\"mousemove\"?(oi=e.screenX-ur.screenX,si=e.screenY-ur.screenY):si=oi=0,ur=e),oi)},movementY:function(e){return\"movementY\"in e?e.movementY:si}}),Ka=Ue(Ds),h1=ne({},Ds,{dataTransfer:0}),g1=Ue(h1),m1=ne({},to,{relatedTarget:0}),ii=Ue(m1),v1=ne({},nr,{animationName:0,elapsedTime:0,pseudoElement:0}),w1=Ue(v1),y1=ne({},nr,{clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}}),A1=Ue(y1),E1=ne({},nr,{data:0}),Za=Ue(E1),x1={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},S1={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},k1={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function C1(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=k1[e])?!!t[e]:!1}function oc(){return C1}var D1=ne({},to,{key:function(e){if(e.key){var t=x1[e.key]||e.key;if(t!==\"Unidentified\")return t}return e.type===\"keypress\"?(e=Bo(e),e===13?\"Enter\":String.fromCharCode(e)):e.type===\"keydown\"||e.type===\"keyup\"?S1[e.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:oc,charCode:function(e){return e.type===\"keypress\"?Bo(e):0},keyCode:function(e){return e.type===\"keydown\"||e.type===\"keyup\"?e.keyCode:0},which:function(e){return e.type===\"keypress\"?Bo(e):e.type===\"keydown\"||e.type===\"keyup\"?e.keyCode:0}}),R1=Ue(D1),T1=ne({},Ds,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Ja=Ue(T1),I1=ne({},to,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:oc}),b1=Ue(I1),N1=ne({},nr,{propertyName:0,elapsedTime:0,pseudoElement:0}),O1=Ue(N1),P1=ne({},Ds,{deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),L1=Ue(P1),M1=[9,13,27,32],sc=St&&\"CompositionEvent\"in window,Er=null;St&&\"documentMode\"in document&&(Er=document.documentMode);var B1=St&&\"TextEvent\"in window&&!Er,Jd=St&&(!sc||Er&&8<Er&&11>=Er),_a=String.fromCharCode(32),$a=!1;function _d(e,t){switch(e){case\"keyup\":return M1.indexOf(t.keyCode)!==-1;case\"keydown\":return t.keyCode!==229;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function $d(e){return e=e.detail,typeof e==\"object\"&&\"data\"in e?e.data:null}var bn=!1;function H1(e,t){switch(e){case\"compositionend\":return $d(t);case\"keypress\":return t.which!==32?null:($a=!0,_a);case\"textInput\":return e=t.data,e===_a&&$a?null:e;default:return null}}function F1(e,t){if(bn)return e===\"compositionend\"||!sc&&_d(e,t)?(e=Zd(),Mo=nc=Qt=null,bn=!1,e):null;switch(e){case\"paste\":return null;case\"keypress\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case\"compositionend\":return Jd&&t.locale!==\"ko\"?null:t.data;default:return null}}var U1={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function eu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t===\"input\"?!!U1[e.type]:t===\"textarea\"}function ep(e,t,n,r){Nd(r),t=rs(t,\"onChange\"),0<t.length&&(n=new rc(\"onChange\",\"change\",null,n,r),e.push({event:n,listeners:t}))}var xr=null,Fr=null;function q1(e){fp(e,0)}function Rs(e){var t=Pn(e);if(kd(t))return e}function Q1(e,t){if(e===\"change\")return t}var tp=!1;if(St){var li;if(St){var ci=\"oninput\"in document;if(!ci){var tu=document.createElement(\"div\");tu.setAttribute(\"oninput\",\"return;\"),ci=typeof tu.oninput==\"function\"}li=ci}else li=!1;tp=li&&(!document.documentMode||9<document.documentMode)}function nu(){xr&&(xr.detachEvent(\"onpropertychange\",np),Fr=xr=null)}function np(e){if(e.propertyName===\"value\"&&Rs(Fr)){var t=[];ep(t,Fr,e,Jl(e)),Md(q1,t)}}function j1(e,t,n){e===\"focusin\"?(nu(),xr=t,Fr=n,xr.attachEvent(\"onpropertychange\",np)):e===\"focusout\"&&nu()}function V1(e){if(e===\"selectionchange\"||e===\"keyup\"||e===\"keydown\")return Rs(Fr)}function W1(e,t){if(e===\"click\")return Rs(t)}function G1(e,t){if(e===\"input\"||e===\"change\")return Rs(t)}function Y1(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var ot=typeof Object.is==\"function\"?Object.is:Y1;function Ur(e,t){if(ot(e,t))return!0;if(typeof e!=\"object\"||e===null||typeof t!=\"object\"||t===null)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!Bi.call(t,o)||!ot(e[o],t[o]))return!1}return!0}function ru(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ou(e,t){var n=ru(e);e=0;for(var r;n;){if(n.nodeType===3){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ru(n)}}function rp(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?rp(e,t.parentNode):\"contains\"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function op(){for(var e=window,t=Zo();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==\"string\"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Zo(e.document)}return t}function ic(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===\"input\"&&(e.type===\"text\"||e.type===\"search\"||e.type===\"tel\"||e.type===\"url\"||e.type===\"password\")||t===\"textarea\"||e.contentEditable===\"true\")}function z1(e){var t=op(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&rp(n.ownerDocument.documentElement,n)){if(r!==null&&ic(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),\"selectionStart\"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=n.textContent.length,s=Math.min(r.start,o);r=r.end===void 0?s:Math.min(r.end,o),!e.extend&&s>r&&(o=r,r=s,s=o),o=ou(n,s);var i=ou(n,r);o&&i&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),s>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus==\"function\"&&n.focus(),n=0;n<t.length;n++)e=t[n],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var X1=St&&\"documentMode\"in document&&11>=document.documentMode,Nn=null,tl=null,Sr=null,nl=!1;function su(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;nl||Nn==null||Nn!==Zo(r)||(r=Nn,\"selectionStart\"in r&&ic(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Sr&&Ur(Sr,r)||(Sr=r,r=rs(tl,\"onSelect\"),0<r.length&&(t=new rc(\"onSelect\",\"select\",null,t,n),e.push({event:t,listeners:r}),t.target=Nn)))}function wo(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n[\"Webkit\"+e]=\"webkit\"+t,n[\"Moz\"+e]=\"moz\"+t,n}var On={animationend:wo(\"Animation\",\"AnimationEnd\"),animationiteration:wo(\"Animation\",\"AnimationIteration\"),animationstart:wo(\"Animation\",\"AnimationStart\"),transitionend:wo(\"Transition\",\"TransitionEnd\")},ai={},sp={};St&&(sp=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete On.animationend.animation,delete On.animationiteration.animation,delete On.animationstart.animation),\"TransitionEvent\"in window||delete On.transitionend.transition);function Ts(e){if(ai[e])return ai[e];if(!On[e])return e;var t=On[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in sp)return ai[e]=t[n];return e}var ip=Ts(\"animationend\"),lp=Ts(\"animationiteration\"),cp=Ts(\"animationstart\"),ap=Ts(\"transitionend\"),up=new Map,iu=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");function $t(e,t){up.set(e,t),An(t,[e])}for(var ui=0;ui<iu.length;ui++){var fi=iu[ui],K1=fi.toLowerCase(),Z1=fi[0].toUpperCase()+fi.slice(1);$t(K1,\"on\"+Z1)}$t(ip,\"onAnimationEnd\");$t(lp,\"onAnimationIteration\");$t(cp,\"onAnimationStart\");$t(\"dblclick\",\"onDoubleClick\");$t(\"focusin\",\"onFocus\");$t(\"focusout\",\"onBlur\");$t(ap,\"onTransitionEnd\");Kn(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);Kn(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);Kn(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);Kn(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);An(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));An(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));An(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);An(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));An(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));An(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var wr=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),J1=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(wr));function lu(e,t,n){var r=e.type||\"unknown-event\";e.currentTarget=n,Km(r,t,void 0,e),e.currentTarget=null}function fp(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var s=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],c=l.instance,a=l.currentTarget;if(l=l.listener,c!==s&&o.isPropagationStopped())break e;lu(o,l,a),s=c}else for(i=0;i<r.length;i++){if(l=r[i],c=l.instance,a=l.currentTarget,l=l.listener,c!==s&&o.isPropagationStopped())break e;lu(o,l,a),s=c}}}if(_o)throw e=Ji,_o=!1,Ji=null,e}function Z(e,t){var n=t[ll];n===void 0&&(n=t[ll]=new Set);var r=e+\"__bubble\";n.has(r)||(dp(t,e,2,!1),n.add(r))}function di(e,t,n){var r=0;t&&(r|=4),dp(n,e,r,t)}var yo=\"_reactListening\"+Math.random().toString(36).slice(2);function qr(e){if(!e[yo]){e[yo]=!0,yd.forEach(function(n){n!==\"selectionchange\"&&(J1.has(n)||di(n,!1,e),di(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[yo]||(t[yo]=!0,di(\"selectionchange\",!1,t))}}function dp(e,t,n,r){switch(Kd(t)){case 1:var o=f1;break;case 4:o=d1;break;default:o=tc}n=o.bind(null,t,n,e),o=void 0,!Zi||t!==\"touchstart\"&&t!==\"touchmove\"&&t!==\"wheel\"||(o=!0),r?o!==void 0?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):o!==void 0?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function pi(e,t,n,r,o){var s=r;if(!(t&1)&&!(t&2)&&r!==null)e:for(;;){if(r===null)return;var i=r.tag;if(i===3||i===4){var l=r.stateNode.containerInfo;if(l===o||l.nodeType===8&&l.parentNode===o)break;if(i===4)for(i=r.return;i!==null;){var c=i.tag;if((c===3||c===4)&&(c=i.stateNode.containerInfo,c===o||c.nodeType===8&&c.parentNode===o))return;i=i.return}for(;l!==null;){if(i=ln(l),i===null)return;if(c=i.tag,c===5||c===6){r=s=i;continue e}l=l.parentNode}}r=r.return}Md(function(){var a=s,p=Jl(n),m=[];e:{var h=up.get(e);if(h!==void 0){var x=rc,E=e;switch(e){case\"keypress\":if(Bo(n)===0)break e;case\"keydown\":case\"keyup\":x=R1;break;case\"focusin\":E=\"focus\",x=ii;break;case\"focusout\":E=\"blur\",x=ii;break;case\"beforeblur\":case\"afterblur\":x=ii;break;case\"click\":if(n.button===2)break e;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":x=Ka;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":x=g1;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":x=b1;break;case ip:case lp:case cp:x=w1;break;case ap:x=O1;break;case\"scroll\":x=p1;break;case\"wheel\":x=L1;break;case\"copy\":case\"cut\":case\"paste\":x=A1;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":x=Ja}var v=(t&4)!==0,g=!v&&e===\"scroll\",u=v?h!==null?h+\"Capture\":null:h;v=[];for(var f=a,d;f!==null;){d=f;var y=d.stateNode;if(d.tag===5&&y!==null&&(d=y,u!==null&&(y=Lr(f,u),y!=null&&v.push(Qr(f,y,d)))),g)break;f=f.return}0<v.length&&(h=new x(h,E,null,n,p),m.push({event:h,listeners:v}))}}if(!(t&7)){e:{if(h=e===\"mouseover\"||e===\"pointerover\",x=e===\"mouseout\"||e===\"pointerout\",h&&n!==Xi&&(E=n.relatedTarget||n.fromElement)&&(ln(E)||E[kt]))break e;if((x||h)&&(h=p.window===p?p:(h=p.ownerDocument)?h.defaultView||h.parentWindow:window,x?(E=n.relatedTarget||n.toElement,x=a,E=E?ln(E):null,E!==null&&(g=En(E),E!==g||E.tag!==5&&E.tag!==6)&&(E=null)):(x=null,E=a),x!==E)){if(v=Ka,y=\"onMouseLeave\",u=\"onMouseEnter\",f=\"mouse\",(e===\"pointerout\"||e===\"pointerover\")&&(v=Ja,y=\"onPointerLeave\",u=\"onPointerEnter\",f=\"pointer\"),g=x==null?h:Pn(x),d=E==null?h:Pn(E),h=new v(y,f+\"leave\",x,n,p),h.target=g,h.relatedTarget=d,y=null,ln(p)===a&&(v=new v(u,f+\"enter\",E,n,p),v.target=d,v.relatedTarget=g,y=v),g=y,x&&E)t:{for(v=x,u=E,f=0,d=v;d;d=Cn(d))f++;for(d=0,y=u;y;y=Cn(y))d++;for(;0<f-d;)v=Cn(v),f--;for(;0<d-f;)u=Cn(u),d--;for(;f--;){if(v===u||u!==null&&v===u.alternate)break t;v=Cn(v),u=Cn(u)}v=null}else v=null;x!==null&&cu(m,h,x,v,!1),E!==null&&g!==null&&cu(m,g,E,v,!0)}}e:{if(h=a?Pn(a):window,x=h.nodeName&&h.nodeName.toLowerCase(),x===\"select\"||x===\"input\"&&h.type===\"file\")var k=Q1;else if(eu(h))if(tp)k=G1;else{k=V1;var w=j1}else(x=h.nodeName)&&x.toLowerCase()===\"input\"&&(h.type===\"checkbox\"||h.type===\"radio\")&&(k=W1);if(k&&(k=k(e,a))){ep(m,k,n,p);break e}w&&w(e,h,a),e===\"focusout\"&&(w=h._wrapperState)&&w.controlled&&h.type===\"number\"&&Vi(h,\"number\",h.value)}switch(w=a?Pn(a):window,e){case\"focusin\":(eu(w)||w.contentEditable===\"true\")&&(Nn=w,tl=a,Sr=null);break;case\"focusout\":Sr=tl=Nn=null;break;case\"mousedown\":nl=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":nl=!1,su(m,n,p);break;case\"selectionchange\":if(X1)break;case\"keydown\":case\"keyup\":su(m,n,p)}var S;if(sc)e:{switch(e){case\"compositionstart\":var C=\"onCompositionStart\";break e;case\"compositionend\":C=\"onCompositionEnd\";break e;case\"compositionupdate\":C=\"onCompositionUpdate\";break e}C=void 0}else bn?_d(e,n)&&(C=\"onCompositionEnd\"):e===\"keydown\"&&n.keyCode===229&&(C=\"onCompositionStart\");C&&(Jd&&n.locale!==\"ko\"&&(bn||C!==\"onCompositionStart\"?C===\"onCompositionEnd\"&&bn&&(S=Zd()):(Qt=p,nc=\"value\"in Qt?Qt.value:Qt.textContent,bn=!0)),w=rs(a,C),0<w.length&&(C=new Za(C,e,null,n,p),m.push({event:C,listeners:w}),S?C.data=S:(S=$d(n),S!==null&&(C.data=S)))),(S=B1?H1(e,n):F1(e,n))&&(a=rs(a,\"onBeforeInput\"),0<a.length&&(p=new Za(\"onBeforeInput\",\"beforeinput\",null,n,p),m.push({event:p,listeners:a}),p.data=S))}fp(m,t)})}function Qr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function rs(e,t){for(var n=t+\"Capture\",r=[];e!==null;){var o=e,s=o.stateNode;o.tag===5&&s!==null&&(o=s,s=Lr(e,n),s!=null&&r.unshift(Qr(e,s,o)),s=Lr(e,t),s!=null&&r.push(Qr(e,s,o))),e=e.return}return r}function Cn(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function cu(e,t,n,r,o){for(var s=t._reactName,i=[];n!==null&&n!==r;){var l=n,c=l.alternate,a=l.stateNode;if(c!==null&&c===r)break;l.tag===5&&a!==null&&(l=a,o?(c=Lr(n,s),c!=null&&i.unshift(Qr(n,c,l))):o||(c=Lr(n,s),c!=null&&i.push(Qr(n,c,l)))),n=n.return}i.length!==0&&e.push({event:t,listeners:i})}var _1=/\\r\\n?/g,$1=/\\u0000|\\uFFFD/g;function au(e){return(typeof e==\"string\"?e:\"\"+e).replace(_1,`\n`).replace($1,\"\")}function Ao(e,t,n){if(t=au(t),au(e)!==t&&n)throw Error(b(425))}function os(){}var rl=null,ol=null;function sl(e,t){return e===\"textarea\"||e===\"noscript\"||typeof t.children==\"string\"||typeof t.children==\"number\"||typeof t.dangerouslySetInnerHTML==\"object\"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var il=typeof setTimeout==\"function\"?setTimeout:void 0,ev=typeof clearTimeout==\"function\"?clearTimeout:void 0,uu=typeof Promise==\"function\"?Promise:void 0,tv=typeof queueMicrotask==\"function\"?queueMicrotask:typeof uu<\"u\"?function(e){return uu.resolve(null).then(e).catch(nv)}:il;function nv(e){setTimeout(function(){throw e})}function hi(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&o.nodeType===8)if(n=o.data,n===\"/$\"){if(r===0){e.removeChild(o),Hr(t);return}r--}else n!==\"$\"&&n!==\"$?\"&&n!==\"$!\"||r++;n=o}while(n);Hr(t)}function mt(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t===\"$\"||t===\"$!\"||t===\"$?\")break;if(t===\"/$\")return null}}return e}function fu(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n===\"$\"||n===\"$!\"||n===\"$?\"){if(t===0)return e;t--}else n===\"/$\"&&t++}e=e.previousSibling}return null}var rr=Math.random().toString(36).slice(2),at=\"__reactFiber$\"+rr,jr=\"__reactProps$\"+rr,kt=\"__reactContainer$\"+rr,ll=\"__reactEvents$\"+rr,rv=\"__reactListeners$\"+rr,ov=\"__reactHandles$\"+rr;function ln(e){var t=e[at];if(t)return t;for(var n=e.parentNode;n;){if(t=n[kt]||n[at]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=fu(e);e!==null;){if(n=e[at])return n;e=fu(e)}return t}e=n,n=e.parentNode}return null}function no(e){return e=e[at]||e[kt],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function Pn(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(b(33))}function Is(e){return e[jr]||null}var cl=[],Ln=-1;function en(e){return{current:e}}function _(e){0>Ln||(e.current=cl[Ln],cl[Ln]=null,Ln--)}function K(e,t){Ln++,cl[Ln]=e.current,e.current=t}var Zt={},Ae=en(Zt),be=en(!1),hn=Zt;function Zn(e,t){var n=e.type.contextTypes;if(!n)return Zt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},s;for(s in n)o[s]=t[s];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Ne(e){return e=e.childContextTypes,e!=null}function ss(){_(be),_(Ae)}function du(e,t,n){if(Ae.current!==Zt)throw Error(b(168));K(Ae,t),K(be,n)}function pp(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!=\"function\")return n;r=r.getChildContext();for(var o in r)if(!(o in t))throw Error(b(108,jm(e)||\"Unknown\",o));return ne({},n,r)}function is(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Zt,hn=Ae.current,K(Ae,e),K(be,be.current),!0}function pu(e,t,n){var r=e.stateNode;if(!r)throw Error(b(169));n?(e=pp(e,t,hn),r.__reactInternalMemoizedMergedChildContext=e,_(be),_(Ae),K(Ae,e)):_(be),K(be,n)}var gt=null,bs=!1,gi=!1;function hp(e){gt===null?gt=[e]:gt.push(e)}function sv(e){bs=!0,hp(e)}function tn(){if(!gi&&gt!==null){gi=!0;var e=0,t=X;try{var n=gt;for(X=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}gt=null,bs=!1}catch(o){throw gt!==null&&(gt=gt.slice(e+1)),Ud(_l,tn),o}finally{X=t,gi=!1}}return null}var iv=Dt.ReactCurrentBatchConfig;function Je(e,t){if(e&&e.defaultProps){t=ne({},t),e=e.defaultProps;for(var n in e)t[n]===void 0&&(t[n]=e[n]);return t}return t}var ls=en(null),cs=null,Mn=null,lc=null;function cc(){lc=Mn=cs=null}function ac(e){var t=ls.current;_(ls),e._currentValue=t}function al(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Yn(e,t){cs=e,lc=Mn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Ie=!0),e.firstContext=null)}function Xe(e){var t=e._currentValue;if(lc!==e)if(e={context:e,memoizedValue:t,next:null},Mn===null){if(cs===null)throw Error(b(308));Mn=e,cs.dependencies={lanes:0,firstContext:e}}else Mn=Mn.next=e;return t}var nt=null,Ht=!1;function uc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function gp(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Et(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Yt(e,t){var n=e.updateQueue;n!==null&&(n=n.shared,o0(e)?(e=n.interleaved,e===null?(t.next=t,nt===null?nt=[n]:nt.push(n)):(t.next=e.next,e.next=t),n.interleaved=t):(e=n.pending,e===null?t.next=t:(t.next=e.next,e.next=t),n.pending=t))}function Ho(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,$l(e,n)}}function hu(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var o=null,s=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};s===null?o=s=i:s=s.next=i,n=n.next}while(n!==null);s===null?o=s=t:s=s.next=t}else o=s=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:s,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function as(e,t,n,r){var o=e.updateQueue;Ht=!1;var s=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(l!==null){o.shared.pending=null;var c=l,a=c.next;c.next=null,i===null?s=a:i.next=a,i=c;var p=e.alternate;p!==null&&(p=p.updateQueue,l=p.lastBaseUpdate,l!==i&&(l===null?p.firstBaseUpdate=a:l.next=a,p.lastBaseUpdate=c))}if(s!==null){var m=o.baseState;i=0,p=a=c=null,l=s;do{var h=l.lane,x=l.eventTime;if((r&h)===h){p!==null&&(p=p.next={eventTime:x,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var E=e,v=l;switch(h=t,x=n,v.tag){case 1:if(E=v.payload,typeof E==\"function\"){m=E.call(x,m,h);break e}m=E;break e;case 3:E.flags=E.flags&-65537|128;case 0:if(E=v.payload,h=typeof E==\"function\"?E.call(x,m,h):E,h==null)break e;m=ne({},m,h);break e;case 2:Ht=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,h=o.effects,h===null?o.effects=[l]:h.push(l))}else x={eventTime:x,lane:h,tag:l.tag,payload:l.payload,callback:l.callback,next:null},p===null?(a=p=x,c=m):p=p.next=x,i|=h;if(l=l.next,l===null){if(l=o.shared.pending,l===null)break;h=l,l=h.next,h.next=null,o.lastBaseUpdate=h,o.shared.pending=null}}while(1);if(p===null&&(c=m),o.baseState=c,o.firstBaseUpdate=a,o.lastBaseUpdate=p,t=o.shared.interleaved,t!==null){o=t;do i|=o.lane,o=o.next;while(o!==t)}else s===null&&(o.shared.lanes=0);vn|=i,e.lanes=i,e.memoizedState=m}}function gu(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(o!==null){if(r.callback=null,r=n,typeof o!=\"function\")throw Error(b(191,o));o.call(r)}}}var mp=new wd.Component().refs;function ul(e,t,n,r){t=e.memoizedState,n=n(r,t),n=n==null?t:ne({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var Ns={isMounted:function(e){return(e=e._reactInternals)?En(e)===e:!1},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Se(),o=Xt(e),s=Et(r,o);s.payload=t,n!=null&&(s.callback=n),Yt(e,s),t=ze(e,o,r),t!==null&&Ho(t,e,o)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Se(),o=Xt(e),s=Et(r,o);s.tag=1,s.payload=t,n!=null&&(s.callback=n),Yt(e,s),t=ze(e,o,r),t!==null&&Ho(t,e,o)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Se(),r=Xt(e),o=Et(n,r);o.tag=2,t!=null&&(o.callback=t),Yt(e,o),t=ze(e,r,n),t!==null&&Ho(t,e,r)}};function mu(e,t,n,r,o,s,i){return e=e.stateNode,typeof e.shouldComponentUpdate==\"function\"?e.shouldComponentUpdate(r,s,i):t.prototype&&t.prototype.isPureReactComponent?!Ur(n,r)||!Ur(o,s):!0}function vp(e,t,n){var r=!1,o=Zt,s=t.contextType;return typeof s==\"object\"&&s!==null?s=Xe(s):(o=Ne(t)?hn:Ae.current,r=t.contextTypes,s=(r=r!=null)?Zn(e,o):Zt),t=new t(n,s),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=Ns,e.stateNode=t,t._reactInternals=e,r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=s),t}function vu(e,t,n,r){e=t.state,typeof t.componentWillReceiveProps==\"function\"&&t.componentWillReceiveProps(n,r),typeof t.UNSAFE_componentWillReceiveProps==\"function\"&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Ns.enqueueReplaceState(t,t.state,null)}function fl(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=mp,uc(e);var s=t.contextType;typeof s==\"object\"&&s!==null?o.context=Xe(s):(s=Ne(t)?hn:Ae.current,o.context=Zn(e,s)),o.state=e.memoizedState,s=t.getDerivedStateFromProps,typeof s==\"function\"&&(ul(e,t,s,n),o.state=e.memoizedState),typeof t.getDerivedStateFromProps==\"function\"||typeof o.getSnapshotBeforeUpdate==\"function\"||typeof o.UNSAFE_componentWillMount!=\"function\"&&typeof o.componentWillMount!=\"function\"||(t=o.state,typeof o.componentWillMount==\"function\"&&o.componentWillMount(),typeof o.UNSAFE_componentWillMount==\"function\"&&o.UNSAFE_componentWillMount(),t!==o.state&&Ns.enqueueReplaceState(o,o.state,null),as(e,n,o,r),o.state=e.memoizedState),typeof o.componentDidMount==\"function\"&&(e.flags|=4194308)}var Bn=[],Hn=0,us=null,fs=0,Qe=[],je=0,gn=null,vt=1,wt=\"\";function on(e,t){Bn[Hn++]=fs,Bn[Hn++]=us,us=e,fs=t}function wp(e,t,n){Qe[je++]=vt,Qe[je++]=wt,Qe[je++]=gn,gn=e;var r=vt;e=wt;var o=32-rt(r)-1;r&=~(1<<o),n+=1;var s=32-rt(t)+o;if(30<s){var i=o-o%5;s=(r&(1<<i)-1).toString(32),r>>=i,o-=i,vt=1<<32-rt(t)+o|n<<o|r,wt=s+e}else vt=1<<s|n<<o|r,wt=e}function fc(e){e.return!==null&&(on(e,1),wp(e,1,0))}function dc(e){for(;e===us;)us=Bn[--Hn],Bn[Hn]=null,fs=Bn[--Hn],Bn[Hn]=null;for(;e===gn;)gn=Qe[--je],Qe[je]=null,wt=Qe[--je],Qe[je]=null,vt=Qe[--je],Qe[je]=null}var Be=null,Te=null,$=!1,et=null;function yp(e,t){var n=We(5,null,null,0);n.elementType=\"DELETED\",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function wu(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,Be=e,Te=mt(t.firstChild),!0):!1;case 6:return t=e.pendingProps===\"\"||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,Be=e,Te=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=gn!==null?{id:vt,overflow:wt}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=We(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,Be=e,Te=null,!0):!1;default:return!1}}function dl(e){return(e.mode&1)!==0&&(e.flags&128)===0}function pl(e){if($){var t=Te;if(t){var n=t;if(!wu(e,t)){if(dl(e))throw Error(b(418));t=mt(n.nextSibling);var r=Be;t&&wu(e,t)?yp(r,n):(e.flags=e.flags&-4097|2,$=!1,Be=e)}}else{if(dl(e))throw Error(b(418));e.flags=e.flags&-4097|2,$=!1,Be=e}}}function yu(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Be=e}function fr(e){if(e!==Be)return!1;if(!$)return yu(e),$=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!==\"head\"&&t!==\"body\"&&!sl(e.type,e.memoizedProps)),t&&(t=Te)){if(dl(e)){for(e=Te;e;)e=mt(e.nextSibling);throw Error(b(418))}for(;t;)yp(e,t),t=mt(t.nextSibling)}if(yu(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(b(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n===\"/$\"){if(t===0){Te=mt(e.nextSibling);break e}t--}else n!==\"$\"&&n!==\"$!\"&&n!==\"$?\"||t++}e=e.nextSibling}Te=null}}else Te=Be?mt(e.stateNode.nextSibling):null;return!0}function Jn(){Te=Be=null,$=!1}function pc(e){et===null?et=[e]:et.push(e)}function dr(e,t,n){if(e=n.ref,e!==null&&typeof e!=\"function\"&&typeof e!=\"object\"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(b(309));var r=n.stateNode}if(!r)throw Error(b(147,e));var o=r,s=\"\"+e;return t!==null&&t.ref!==null&&typeof t.ref==\"function\"&&t.ref._stringRef===s?t.ref:(t=function(i){var l=o.refs;l===mp&&(l=o.refs={}),i===null?delete l[s]:l[s]=i},t._stringRef=s,t)}if(typeof e!=\"string\")throw Error(b(284));if(!n._owner)throw Error(b(290,e))}return e}function Eo(e,t){throw e=Object.prototype.toString.call(t),Error(b(31,e===\"[object Object]\"?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":e))}function Au(e){var t=e._init;return t(e._payload)}function Ap(e){function t(u,f){if(e){var d=u.deletions;d===null?(u.deletions=[f],u.flags|=16):d.push(f)}}function n(u,f){if(!e)return null;for(;f!==null;)t(u,f),f=f.sibling;return null}function r(u,f){for(u=new Map;f!==null;)f.key!==null?u.set(f.key,f):u.set(f.index,f),f=f.sibling;return u}function o(u,f){return u=Jt(u,f),u.index=0,u.sibling=null,u}function s(u,f,d){return u.index=d,e?(d=u.alternate,d!==null?(d=d.index,d<f?(u.flags|=2,f):d):(u.flags|=2,f)):(u.flags|=1048576,f)}function i(u){return e&&u.alternate===null&&(u.flags|=2),u}function l(u,f,d,y){return f===null||f.tag!==6?(f=Ei(d,u.mode,y),f.return=u,f):(f=o(f,d),f.return=u,f)}function c(u,f,d,y){var k=d.type;return k===In?p(u,f,d.props.children,y,d.key):f!==null&&(f.elementType===k||typeof k==\"object\"&&k!==null&&k.$$typeof===Bt&&Au(k)===f.type)?(y=o(f,d.props),y.ref=dr(u,f,d),y.return=u,y):(y=jo(d.type,d.key,d.props,null,u.mode,y),y.ref=dr(u,f,d),y.return=u,y)}function a(u,f,d,y){return f===null||f.tag!==4||f.stateNode.containerInfo!==d.containerInfo||f.stateNode.implementation!==d.implementation?(f=xi(d,u.mode,y),f.return=u,f):(f=o(f,d.children||[]),f.return=u,f)}function p(u,f,d,y,k){return f===null||f.tag!==7?(f=dn(d,u.mode,y,k),f.return=u,f):(f=o(f,d),f.return=u,f)}function m(u,f,d){if(typeof f==\"string\"&&f!==\"\"||typeof f==\"number\")return f=Ei(\"\"+f,u.mode,d),f.return=u,f;if(typeof f==\"object\"&&f!==null){switch(f.$$typeof){case uo:return d=jo(f.type,f.key,f.props,null,u.mode,d),d.ref=dr(u,null,f),d.return=u,d;case Tn:return f=xi(f,u.mode,d),f.return=u,f;case Bt:var y=f._init;return m(u,y(f._payload),d)}if(mr(f)||ir(f))return f=dn(f,u.mode,d,null),f.return=u,f;Eo(u,f)}return null}function h(u,f,d,y){var k=f!==null?f.key:null;if(typeof d==\"string\"&&d!==\"\"||typeof d==\"number\")return k!==null?null:l(u,f,\"\"+d,y);if(typeof d==\"object\"&&d!==null){switch(d.$$typeof){case uo:return d.key===k?c(u,f,d,y):null;case Tn:return d.key===k?a(u,f,d,y):null;case Bt:return k=d._init,h(u,f,k(d._payload),y)}if(mr(d)||ir(d))return k!==null?null:p(u,f,d,y,null);Eo(u,d)}return null}function x(u,f,d,y,k){if(typeof y==\"string\"&&y!==\"\"||typeof y==\"number\")return u=u.get(d)||null,l(f,u,\"\"+y,k);if(typeof y==\"object\"&&y!==null){switch(y.$$typeof){case uo:return u=u.get(y.key===null?d:y.key)||null,c(f,u,y,k);case Tn:return u=u.get(y.key===null?d:y.key)||null,a(f,u,y,k);case Bt:var w=y._init;return x(u,f,d,w(y._payload),k)}if(mr(y)||ir(y))return u=u.get(d)||null,p(f,u,y,k,null);Eo(f,y)}return null}function E(u,f,d,y){for(var k=null,w=null,S=f,C=f=0,R=null;S!==null&&C<d.length;C++){S.index>C?(R=S,S=null):R=S.sibling;var D=h(u,S,d[C],y);if(D===null){S===null&&(S=R);break}e&&S&&D.alternate===null&&t(u,S),f=s(D,f,C),w===null?k=D:w.sibling=D,w=D,S=R}if(C===d.length)return n(u,S),$&&on(u,C),k;if(S===null){for(;C<d.length;C++)S=m(u,d[C],y),S!==null&&(f=s(S,f,C),w===null?k=S:w.sibling=S,w=S);return $&&on(u,C),k}for(S=r(u,S);C<d.length;C++)R=x(S,u,C,d[C],y),R!==null&&(e&&R.alternate!==null&&S.delete(R.key===null?C:R.key),f=s(R,f,C),w===null?k=R:w.sibling=R,w=R);return e&&S.forEach(function(T){return t(u,T)}),$&&on(u,C),k}function v(u,f,d,y){var k=ir(d);if(typeof k!=\"function\")throw Error(b(150));if(d=k.call(d),d==null)throw Error(b(151));for(var w=k=null,S=f,C=f=0,R=null,D=d.next();S!==null&&!D.done;C++,D=d.next()){S.index>C?(R=S,S=null):R=S.sibling;var T=h(u,S,D.value,y);if(T===null){S===null&&(S=R);break}e&&S&&T.alternate===null&&t(u,S),f=s(T,f,C),w===null?k=T:w.sibling=T,w=T,S=R}if(D.done)return n(u,S),$&&on(u,C),k;if(S===null){for(;!D.done;C++,D=d.next())D=m(u,D.value,y),D!==null&&(f=s(D,f,C),w===null?k=D:w.sibling=D,w=D);return $&&on(u,C),k}for(S=r(u,S);!D.done;C++,D=d.next())D=x(S,u,C,D.value,y),D!==null&&(e&&D.alternate!==null&&S.delete(D.key===null?C:D.key),f=s(D,f,C),w===null?k=D:w.sibling=D,w=D);return e&&S.forEach(function(M){return t(u,M)}),$&&on(u,C),k}function g(u,f,d,y){if(typeof d==\"object\"&&d!==null&&d.type===In&&d.key===null&&(d=d.props.children),typeof d==\"object\"&&d!==null){switch(d.$$typeof){case uo:e:{for(var k=d.key,w=f;w!==null;){if(w.key===k){if(k=d.type,k===In){if(w.tag===7){n(u,w.sibling),f=o(w,d.props.children),f.return=u,u=f;break e}}else if(w.elementType===k||typeof k==\"object\"&&k!==null&&k.$$typeof===Bt&&Au(k)===w.type){n(u,w.sibling),f=o(w,d.props),f.ref=dr(u,w,d),f.return=u,u=f;break e}n(u,w);break}else t(u,w);w=w.sibling}d.type===In?(f=dn(d.props.children,u.mode,y,d.key),f.return=u,u=f):(y=jo(d.type,d.key,d.props,null,u.mode,y),y.ref=dr(u,f,d),y.return=u,u=y)}return i(u);case Tn:e:{for(w=d.key;f!==null;){if(f.key===w)if(f.tag===4&&f.stateNode.containerInfo===d.containerInfo&&f.stateNode.implementation===d.implementation){n(u,f.sibling),f=o(f,d.children||[]),f.return=u,u=f;break e}else{n(u,f);break}else t(u,f);f=f.sibling}f=xi(d,u.mode,y),f.return=u,u=f}return i(u);case Bt:return w=d._init,g(u,f,w(d._payload),y)}if(mr(d))return E(u,f,d,y);if(ir(d))return v(u,f,d,y);Eo(u,d)}return typeof d==\"string\"&&d!==\"\"||typeof d==\"number\"?(d=\"\"+d,f!==null&&f.tag===6?(n(u,f.sibling),f=o(f,d),f.return=u,u=f):(n(u,f),f=Ei(d,u.mode,y),f.return=u,u=f),i(u)):n(u,f)}return g}var _n=Ap(!0),Ep=Ap(!1),ro={},pt=en(ro),Vr=en(ro),Wr=en(ro);function cn(e){if(e===ro)throw Error(b(174));return e}function hc(e,t){switch(K(Wr,t),K(Vr,e),K(pt,ro),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Gi(null,\"\");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Gi(t,e)}_(pt),K(pt,t)}function $n(){_(pt),_(Vr),_(Wr)}function xp(e){cn(Wr.current);var t=cn(pt.current),n=Gi(t,e.type);t!==n&&(K(Vr,e),K(pt,n))}function gc(e){Vr.current===e&&(_(pt),_(Vr))}var ee=en(0);function ds(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data===\"$?\"||n.data===\"$!\"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var mi=[];function mc(){for(var e=0;e<mi.length;e++)mi[e]._workInProgressVersionPrimary=null;mi.length=0}var Fo=Dt.ReactCurrentDispatcher,vi=Dt.ReactCurrentBatchConfig,mn=0,te=null,le=null,de=null,ps=!1,kr=!1,Gr=0,lv=0;function ve(){throw Error(b(321))}function vc(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ot(e[n],t[n]))return!1;return!0}function wc(e,t,n,r,o,s){if(mn=s,te=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Fo.current=e===null||e.memoizedState===null?fv:dv,e=n(r,o),kr){s=0;do{if(kr=!1,Gr=0,25<=s)throw Error(b(301));s+=1,de=le=null,t.updateQueue=null,Fo.current=pv,e=n(r,o)}while(kr)}if(Fo.current=hs,t=le!==null&&le.next!==null,mn=0,de=le=te=null,ps=!1,t)throw Error(b(300));return e}function yc(){var e=Gr!==0;return Gr=0,e}function ct(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return de===null?te.memoizedState=de=e:de=de.next=e,de}function Ke(){if(le===null){var e=te.alternate;e=e!==null?e.memoizedState:null}else e=le.next;var t=de===null?te.memoizedState:de.next;if(t!==null)de=t,le=e;else{if(e===null)throw Error(b(310));le=e,e={memoizedState:le.memoizedState,baseState:le.baseState,baseQueue:le.baseQueue,queue:le.queue,next:null},de===null?te.memoizedState=de=e:de=de.next=e}return de}function Yr(e,t){return typeof t==\"function\"?t(e):t}function wi(e){var t=Ke(),n=t.queue;if(n===null)throw Error(b(311));n.lastRenderedReducer=e;var r=le,o=r.baseQueue,s=n.pending;if(s!==null){if(o!==null){var i=o.next;o.next=s.next,s.next=i}r.baseQueue=o=s,n.pending=null}if(o!==null){s=o.next,r=r.baseState;var l=i=null,c=null,a=s;do{var p=a.lane;if((mn&p)===p)c!==null&&(c=c.next={lane:0,action:a.action,hasEagerState:a.hasEagerState,eagerState:a.eagerState,next:null}),r=a.hasEagerState?a.eagerState:e(r,a.action);else{var m={lane:p,action:a.action,hasEagerState:a.hasEagerState,eagerState:a.eagerState,next:null};c===null?(l=c=m,i=r):c=c.next=m,te.lanes|=p,vn|=p}a=a.next}while(a!==null&&a!==s);c===null?i=r:c.next=l,ot(r,t.memoizedState)||(Ie=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=c,n.lastRenderedState=r}if(e=n.interleaved,e!==null){o=e;do s=o.lane,te.lanes|=s,vn|=s,o=o.next;while(o!==e)}else o===null&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function yi(e){var t=Ke(),n=t.queue;if(n===null)throw Error(b(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,s=t.memoizedState;if(o!==null){n.pending=null;var i=o=o.next;do s=e(s,i.action),i=i.next;while(i!==o);ot(s,t.memoizedState)||(Ie=!0),t.memoizedState=s,t.baseQueue===null&&(t.baseState=s),n.lastRenderedState=s}return[s,r]}function Sp(){}function kp(e,t){var n=te,r=Ke(),o=t(),s=!ot(r.memoizedState,o);if(s&&(r.memoizedState=o,Ie=!0),r=r.queue,Ac(Rp.bind(null,n,r,e),[e]),r.getSnapshot!==t||s||de!==null&&de.memoizedState.tag&1){if(n.flags|=2048,zr(9,Dp.bind(null,n,r,o,t),void 0,null),ae===null)throw Error(b(349));mn&30||Cp(n,t,o)}return o}function Cp(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=te.updateQueue,t===null?(t={lastEffect:null,stores:null},te.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function Dp(e,t,n,r){t.value=n,t.getSnapshot=r,Tp(t)&&ze(e,1,-1)}function Rp(e,t,n){return n(function(){Tp(t)&&ze(e,1,-1)})}function Tp(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!ot(e,n)}catch{return!0}}function Eu(e){var t=ct();return typeof e==\"function\"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Yr,lastRenderedState:e},t.queue=e,e=e.dispatch=uv.bind(null,te,e),[t.memoizedState,e]}function zr(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},t=te.updateQueue,t===null?(t={lastEffect:null,stores:null},te.updateQueue=t,t.lastEffect=e.next=e):(n=t.lastEffect,n===null?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e)),e}function Ip(){return Ke().memoizedState}function Uo(e,t,n,r){var o=ct();te.flags|=e,o.memoizedState=zr(1|t,n,void 0,r===void 0?null:r)}function Os(e,t,n,r){var o=Ke();r=r===void 0?null:r;var s=void 0;if(le!==null){var i=le.memoizedState;if(s=i.destroy,r!==null&&vc(r,i.deps)){o.memoizedState=zr(t,n,s,r);return}}te.flags|=e,o.memoizedState=zr(1|t,n,s,r)}function xu(e,t){return Uo(8390656,8,e,t)}function Ac(e,t){return Os(2048,8,e,t)}function bp(e,t){return Os(4,2,e,t)}function Np(e,t){return Os(4,4,e,t)}function Op(e,t){if(typeof t==\"function\")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function Pp(e,t,n){return n=n!=null?n.concat([e]):null,Os(4,4,Op.bind(null,t,e),n)}function Ec(){}function Lp(e,t){var n=Ke();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&vc(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Mp(e,t){var n=Ke();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&vc(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Bp(e,t,n){return mn&21?(ot(n,t)||(n=jd(),te.lanes|=n,vn|=n,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,Ie=!0),e.memoizedState=n)}function cv(e,t){var n=X;X=n!==0&&4>n?n:4,e(!0);var r=vi.transition;vi.transition={};try{e(!1),t()}finally{X=n,vi.transition=r}}function Hp(){return Ke().memoizedState}function av(e,t,n){var r=Xt(e);n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Fp(e)?Up(t,n):(qp(e,t,n),n=Se(),e=ze(e,r,n),e!==null&&Qp(e,t,r))}function uv(e,t,n){var r=Xt(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fp(e))Up(t,o);else{qp(e,t,o);var s=e.alternate;if(e.lanes===0&&(s===null||s.lanes===0)&&(s=t.lastRenderedReducer,s!==null))try{var i=t.lastRenderedState,l=s(i,n);if(o.hasEagerState=!0,o.eagerState=l,ot(l,i))return}catch{}finally{}n=Se(),e=ze(e,r,n),e!==null&&Qp(e,t,r)}}function Fp(e){var t=e.alternate;return e===te||t!==null&&t===te}function Up(e,t){kr=ps=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function qp(e,t,n){o0(e)?(e=t.interleaved,e===null?(n.next=n,nt===null?nt=[t]:nt.push(t)):(n.next=e.next,e.next=n),t.interleaved=n):(e=t.pending,e===null?n.next=n:(n.next=e.next,e.next=n),t.pending=n)}function Qp(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,$l(e,n)}}var hs={readContext:Xe,useCallback:ve,useContext:ve,useEffect:ve,useImperativeHandle:ve,useInsertionEffect:ve,useLayoutEffect:ve,useMemo:ve,useReducer:ve,useRef:ve,useState:ve,useDebugValue:ve,useDeferredValue:ve,useTransition:ve,useMutableSource:ve,useSyncExternalStore:ve,useId:ve,unstable_isNewReconciler:!1},fv={readContext:Xe,useCallback:function(e,t){return ct().memoizedState=[e,t===void 0?null:t],e},useContext:Xe,useEffect:xu,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Uo(4194308,4,Op.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Uo(4194308,4,e,t)},useInsertionEffect:function(e,t){return Uo(4,2,e,t)},useMemo:function(e,t){var n=ct();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ct();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=av.bind(null,te,e),[r.memoizedState,e]},useRef:function(e){var t=ct();return e={current:e},t.memoizedState=e},useState:Eu,useDebugValue:Ec,useDeferredValue:function(e){return ct().memoizedState=e},useTransition:function(){var e=Eu(!1),t=e[0];return e=cv.bind(null,e[1]),ct().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=te,o=ct();if($){if(n===void 0)throw Error(b(407));n=n()}else{if(n=t(),ae===null)throw Error(b(349));mn&30||Cp(r,t,n)}o.memoizedState=n;var s={value:n,getSnapshot:t};return o.queue=s,xu(Rp.bind(null,r,s,e),[e]),r.flags|=2048,zr(9,Dp.bind(null,r,s,n,t),void 0,null),n},useId:function(){var e=ct(),t=ae.identifierPrefix;if($){var n=wt,r=vt;n=(r&~(1<<32-rt(r)-1)).toString(32)+n,t=\":\"+t+\"R\"+n,n=Gr++,0<n&&(t+=\"H\"+n.toString(32)),t+=\":\"}else n=lv++,t=\":\"+t+\"r\"+n.toString(32)+\":\";return e.memoizedState=t},unstable_isNewReconciler:!1},dv={readContext:Xe,useCallback:Lp,useContext:Xe,useEffect:Ac,useImperativeHandle:Pp,useInsertionEffect:bp,useLayoutEffect:Np,useMemo:Mp,useReducer:wi,useRef:Ip,useState:function(){return wi(Yr)},useDebugValue:Ec,useDeferredValue:function(e){var t=Ke();return Bp(t,le.memoizedState,e)},useTransition:function(){var e=wi(Yr)[0],t=Ke().memoizedState;return[e,t]},useMutableSource:Sp,useSyncExternalStore:kp,useId:Hp,unstable_isNewReconciler:!1},pv={readContext:Xe,useCallback:Lp,useContext:Xe,useEffect:Ac,useImperativeHandle:Pp,useInsertionEffect:bp,useLayoutEffect:Np,useMemo:Mp,useReducer:yi,useRef:Ip,useState:function(){return yi(Yr)},useDebugValue:Ec,useDeferredValue:function(e){var t=Ke();return le===null?t.memoizedState=e:Bp(t,le.memoizedState,e)},useTransition:function(){var e=yi(Yr)[0],t=Ke().memoizedState;return[e,t]},useMutableSource:Sp,useSyncExternalStore:kp,useId:Hp,unstable_isNewReconciler:!1};function xc(e,t){try{var n=\"\",r=t;do n+=Qm(r),r=r.return;while(r);var o=n}catch(s){o=`\nError generating stack: `+s.message+`\n`+s.stack}return{value:e,source:t,stack:o}}function hl(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var hv=typeof WeakMap==\"function\"?WeakMap:Map;function jp(e,t,n){n=Et(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){ms||(ms=!0,Sl=r),hl(e,t)},n}function Vp(e,t,n){n=Et(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r==\"function\"){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){hl(e,t)}}var s=e.stateNode;return s!==null&&typeof s.componentDidCatch==\"function\"&&(n.callback=function(){hl(e,t),typeof r!=\"function\"&&(zt===null?zt=new Set([this]):zt.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:\"\"})}),n}function Su(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new hv;var o=new Set;r.set(t,o)}else o=r.get(t),o===void 0&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Rv.bind(null,e,t,n),t.then(e,e))}function ku(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Cu(e,t,n,r,o){return e.mode&1?(e.flags|=65536,e.lanes=o,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Et(-1,1),t.tag=2,Yt(n,t))),n.lanes|=1),e)}var Wp,gl,Gp,Yp;Wp=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};gl=function(){};Gp=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,cn(pt.current);var s=null;switch(n){case\"input\":o=Qi(e,o),r=Qi(e,r),s=[];break;case\"select\":o=ne({},o,{value:void 0}),r=ne({},r,{value:void 0}),s=[];break;case\"textarea\":o=Wi(e,o),r=Wi(e,r),s=[];break;default:typeof o.onClick!=\"function\"&&typeof r.onClick==\"function\"&&(e.onclick=os)}Yi(n,r);var i;n=null;for(a in o)if(!r.hasOwnProperty(a)&&o.hasOwnProperty(a)&&o[a]!=null)if(a===\"style\"){var l=o[a];for(i in l)l.hasOwnProperty(i)&&(n||(n={}),n[i]=\"\")}else a!==\"dangerouslySetInnerHTML\"&&a!==\"children\"&&a!==\"suppressContentEditableWarning\"&&a!==\"suppressHydrationWarning\"&&a!==\"autoFocus\"&&(Or.hasOwnProperty(a)?s||(s=[]):(s=s||[]).push(a,null));for(a in r){var c=r[a];if(l=o!=null?o[a]:void 0,r.hasOwnProperty(a)&&c!==l&&(c!=null||l!=null))if(a===\"style\")if(l){for(i in l)!l.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]=\"\");for(i in c)c.hasOwnProperty(i)&&l[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(s||(s=[]),s.push(a,n)),n=c;else a===\"dangerouslySetInnerHTML\"?(c=c?c.__html:void 0,l=l?l.__html:void 0,c!=null&&l!==c&&(s=s||[]).push(a,c)):a===\"children\"?typeof c!=\"string\"&&typeof c!=\"number\"||(s=s||[]).push(a,\"\"+c):a!==\"suppressContentEditableWarning\"&&a!==\"suppressHydrationWarning\"&&(Or.hasOwnProperty(a)?(c!=null&&a===\"onScroll\"&&Z(\"scroll\",e),s||l===c||(s=[])):(s=s||[]).push(a,c))}n&&(s=s||[]).push(\"style\",n);var a=s;(t.updateQueue=a)&&(t.flags|=4)}};Yp=function(e,t,n,r){n!==r&&(t.flags|=4)};function pr(e,t){if(!$)switch(e.tailMode){case\"hidden\":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case\"collapsed\":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function we(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;o!==null;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags&14680064,r|=o.flags&14680064,o.return=e,o=o.sibling;else for(o=e.child;o!==null;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function gv(e,t,n){var r=t.pendingProps;switch(dc(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return we(t),null;case 1:return Ne(t.type)&&ss(),we(t),null;case 3:return r=t.stateNode,$n(),_(be),_(Ae),mc(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(fr(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,et!==null&&(Dl(et),et=null))),gl(e,t),we(t),null;case 5:gc(t);var o=cn(Wr.current);if(n=t.type,e!==null&&t.stateNode!=null)Gp(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(b(166));return we(t),null}if(e=cn(pt.current),fr(t)){r=t.stateNode,n=t.type;var s=t.memoizedProps;switch(r[at]=t,r[jr]=s,e=(t.mode&1)!==0,n){case\"dialog\":Z(\"cancel\",r),Z(\"close\",r);break;case\"iframe\":case\"object\":case\"embed\":Z(\"load\",r);break;case\"video\":case\"audio\":for(o=0;o<wr.length;o++)Z(wr[o],r);break;case\"source\":Z(\"error\",r);break;case\"img\":case\"image\":case\"link\":Z(\"error\",r),Z(\"load\",r);break;case\"details\":Z(\"toggle\",r);break;case\"input\":Ua(r,s),Z(\"invalid\",r);break;case\"select\":r._wrapperState={wasMultiple:!!s.multiple},Z(\"invalid\",r);break;case\"textarea\":Qa(r,s),Z(\"invalid\",r)}Yi(n,s),o=null;for(var i in s)if(s.hasOwnProperty(i)){var l=s[i];i===\"children\"?typeof l==\"string\"?r.textContent!==l&&(s.suppressHydrationWarning!==!0&&Ao(r.textContent,l,e),o=[\"children\",l]):typeof l==\"number\"&&r.textContent!==\"\"+l&&(s.suppressHydrationWarning!==!0&&Ao(r.textContent,l,e),o=[\"children\",\"\"+l]):Or.hasOwnProperty(i)&&l!=null&&i===\"onScroll\"&&Z(\"scroll\",r)}switch(n){case\"input\":fo(r),qa(r,s,!0);break;case\"textarea\":fo(r),ja(r);break;case\"select\":case\"option\":break;default:typeof s.onClick==\"function\"&&(r.onclick=os)}r=o,t.updateQueue=r,r!==null&&(t.flags|=4)}else{i=o.nodeType===9?o:o.ownerDocument,e===\"http://www.w3.org/1999/xhtml\"&&(e=Rd(n)),e===\"http://www.w3.org/1999/xhtml\"?n===\"script\"?(e=i.createElement(\"div\"),e.innerHTML=\"<script><\\/script>\",e=e.removeChild(e.firstChild)):typeof r.is==\"string\"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n===\"select\"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[at]=t,e[jr]=r,Wp(e,t,!1,!1),t.stateNode=e;e:{switch(i=zi(n,r),n){case\"dialog\":Z(\"cancel\",e),Z(\"close\",e),o=r;break;case\"iframe\":case\"object\":case\"embed\":Z(\"load\",e),o=r;break;case\"video\":case\"audio\":for(o=0;o<wr.length;o++)Z(wr[o],e);o=r;break;case\"source\":Z(\"error\",e),o=r;break;case\"img\":case\"image\":case\"link\":Z(\"error\",e),Z(\"load\",e),o=r;break;case\"details\":Z(\"toggle\",e),o=r;break;case\"input\":Ua(e,r),o=Qi(e,r),Z(\"invalid\",e);break;case\"option\":o=r;break;case\"select\":e._wrapperState={wasMultiple:!!r.multiple},o=ne({},r,{value:void 0}),Z(\"invalid\",e);break;case\"textarea\":Qa(e,r),o=Wi(e,r),Z(\"invalid\",e);break;default:o=r}Yi(n,o),l=o;for(s in l)if(l.hasOwnProperty(s)){var c=l[s];s===\"style\"?bd(e,c):s===\"dangerouslySetInnerHTML\"?(c=c?c.__html:void 0,c!=null&&Td(e,c)):s===\"children\"?typeof c==\"string\"?(n!==\"textarea\"||c!==\"\")&&Pr(e,c):typeof c==\"number\"&&Pr(e,\"\"+c):s!==\"suppressContentEditableWarning\"&&s!==\"suppressHydrationWarning\"&&s!==\"autoFocus\"&&(Or.hasOwnProperty(s)?c!=null&&s===\"onScroll\"&&Z(\"scroll\",e):c!=null&&zl(e,s,c,i))}switch(n){case\"input\":fo(e),qa(e,r,!1);break;case\"textarea\":fo(e),ja(e);break;case\"option\":r.value!=null&&e.setAttribute(\"value\",\"\"+Kt(r.value));break;case\"select\":e.multiple=!!r.multiple,s=r.value,s!=null?jn(e,!!r.multiple,s,!1):r.defaultValue!=null&&jn(e,!!r.multiple,r.defaultValue,!0);break;default:typeof o.onClick==\"function\"&&(e.onclick=os)}switch(n){case\"button\":case\"input\":case\"select\":case\"textarea\":r=!!r.autoFocus;break e;case\"img\":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return we(t),null;case 6:if(e&&t.stateNode!=null)Yp(e,t,e.memoizedProps,r);else{if(typeof r!=\"string\"&&t.stateNode===null)throw Error(b(166));if(n=cn(Wr.current),cn(pt.current),fr(t)){if(r=t.stateNode,n=t.memoizedProps,r[at]=t,(s=r.nodeValue!==n)&&(e=Be,e!==null))switch(e.tag){case 3:Ao(r.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&Ao(r.nodeValue,n,(e.mode&1)!==0)}s&&(t.flags|=4)}else r=(n.nodeType===9?n:n.ownerDocument).createTextNode(r),r[at]=t,t.stateNode=r}return we(t),null;case 13:if(_(ee),r=t.memoizedState,$&&Te!==null&&t.mode&1&&!(t.flags&128)){for(r=Te;r;)r=mt(r.nextSibling);return Jn(),t.flags|=98560,t}if(r!==null&&r.dehydrated!==null){if(r=fr(t),e===null){if(!r)throw Error(b(318));if(r=t.memoizedState,r=r!==null?r.dehydrated:null,!r)throw Error(b(317));r[at]=t}else Jn(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;return we(t),null}return et!==null&&(Dl(et),et=null),t.flags&128?(t.lanes=n,t):(r=r!==null,n=!1,e===null?fr(t):n=e.memoizedState!==null,r!==n&&r&&(t.child.flags|=8192,t.mode&1&&(e===null||ee.current&1?ce===0&&(ce=3):Tc())),t.updateQueue!==null&&(t.flags|=4),we(t),null);case 4:return $n(),gl(e,t),e===null&&qr(t.stateNode.containerInfo),we(t),null;case 10:return ac(t.type._context),we(t),null;case 17:return Ne(t.type)&&ss(),we(t),null;case 19:if(_(ee),s=t.memoizedState,s===null)return we(t),null;if(r=(t.flags&128)!==0,i=s.rendering,i===null)if(r)pr(s,!1);else{if(ce!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(i=ds(e),i!==null){for(t.flags|=128,pr(s,!1),r=i.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;n!==null;)s=n,e=r,s.flags&=14680066,i=s.alternate,i===null?(s.childLanes=0,s.lanes=e,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=i.childLanes,s.lanes=i.lanes,s.child=i.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=i.memoizedProps,s.memoizedState=i.memoizedState,s.updateQueue=i.updateQueue,s.type=i.type,e=i.dependencies,s.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return K(ee,ee.current&1|2),t.child}e=e.sibling}s.tail!==null&&se()>er&&(t.flags|=128,r=!0,pr(s,!1),t.lanes=4194304)}else{if(!r)if(e=ds(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),pr(s,!0),s.tail===null&&s.tailMode===\"hidden\"&&!i.alternate&&!$)return we(t),null}else 2*se()-s.renderingStartTime>er&&n!==1073741824&&(t.flags|=128,r=!0,pr(s,!1),t.lanes=4194304);s.isBackwards?(i.sibling=t.child,t.child=i):(n=s.last,n!==null?n.sibling=i:t.child=i,s.last=i)}return s.tail!==null?(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=se(),t.sibling=null,n=ee.current,K(ee,r?n&1|2:n&1),t):(we(t),null);case 22:case 23:return Rc(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Le&1073741824&&(we(t),t.subtreeFlags&6&&(t.flags|=8192)):we(t),null;case 24:return null;case 25:return null}throw Error(b(156,t.tag))}var mv=Dt.ReactCurrentOwner,Ie=!1;function Ee(e,t,n,r){t.child=e===null?Ep(t,null,n,r):_n(t,e.child,n,r)}function Du(e,t,n,r,o){n=n.render;var s=t.ref;return Yn(t,o),r=wc(e,t,n,r,s,o),n=yc(),e!==null&&!Ie?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Ct(e,t,o)):($&&n&&fc(t),t.flags|=1,Ee(e,t,r,o),t.child)}function Ru(e,t,n,r,o){if(e===null){var s=n.type;return typeof s==\"function\"&&!Ic(s)&&s.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=s,zp(e,t,s,r,o)):(e=jo(n.type,null,r,t,t.mode,o),e.ref=t.ref,e.return=t,t.child=e)}if(s=e.child,!(e.lanes&o)){var i=s.memoizedProps;if(n=n.compare,n=n!==null?n:Ur,n(i,r)&&e.ref===t.ref)return Ct(e,t,o)}return t.flags|=1,e=Jt(s,r),e.ref=t.ref,e.return=t,t.child=e}function zp(e,t,n,r,o){if(e!==null){var s=e.memoizedProps;if(Ur(s,r)&&e.ref===t.ref)if(Ie=!1,t.pendingProps=r=s,(e.lanes&o)!==0)e.flags&131072&&(Ie=!0);else return t.lanes=e.lanes,Ct(e,t,o)}return ml(e,t,n,r,o)}function Xp(e,t,n){var r=t.pendingProps,o=r.children,s=e!==null?e.memoizedState:null;if(r.mode===\"hidden\")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},K(Un,Le),Le|=n;else if(n&1073741824)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=s!==null?s.baseLanes:n,K(Un,Le),Le|=r;else return e=s!==null?s.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,K(Un,Le),Le|=e,null;else s!==null?(r=s.baseLanes|n,t.memoizedState=null):r=n,K(Un,Le),Le|=r;return Ee(e,t,o,n),t.child}function Kp(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function ml(e,t,n,r,o){var s=Ne(n)?hn:Ae.current;return s=Zn(t,s),Yn(t,o),n=wc(e,t,n,r,s,o),r=yc(),e!==null&&!Ie?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Ct(e,t,o)):($&&r&&fc(t),t.flags|=1,Ee(e,t,n,o),t.child)}function Tu(e,t,n,r,o){if(Ne(n)){var s=!0;is(t)}else s=!1;if(Yn(t,o),t.stateNode===null)e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),vp(t,n,r),fl(t,n,r,o),r=!0;else if(e===null){var i=t.stateNode,l=t.memoizedProps;i.props=l;var c=i.context,a=n.contextType;typeof a==\"object\"&&a!==null?a=Xe(a):(a=Ne(n)?hn:Ae.current,a=Zn(t,a));var p=n.getDerivedStateFromProps,m=typeof p==\"function\"||typeof i.getSnapshotBeforeUpdate==\"function\";m||typeof i.UNSAFE_componentWillReceiveProps!=\"function\"&&typeof i.componentWillReceiveProps!=\"function\"||(l!==r||c!==a)&&vu(t,i,r,a),Ht=!1;var h=t.memoizedState;i.state=h,as(t,r,i,o),c=t.memoizedState,l!==r||h!==c||be.current||Ht?(typeof p==\"function\"&&(ul(t,n,p,r),c=t.memoizedState),(l=Ht||mu(t,n,l,r,h,c,a))?(m||typeof i.UNSAFE_componentWillMount!=\"function\"&&typeof i.componentWillMount!=\"function\"||(typeof i.componentWillMount==\"function\"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount==\"function\"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount==\"function\"&&(t.flags|=4194308)):(typeof i.componentDidMount==\"function\"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=c),i.props=r,i.state=c,i.context=a,r=l):(typeof i.componentDidMount==\"function\"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,gp(e,t),l=t.memoizedProps,a=t.type===t.elementType?l:Je(t.type,l),i.props=a,m=t.pendingProps,h=i.context,c=n.contextType,typeof c==\"object\"&&c!==null?c=Xe(c):(c=Ne(n)?hn:Ae.current,c=Zn(t,c));var x=n.getDerivedStateFromProps;(p=typeof x==\"function\"||typeof i.getSnapshotBeforeUpdate==\"function\")||typeof i.UNSAFE_componentWillReceiveProps!=\"function\"&&typeof i.componentWillReceiveProps!=\"function\"||(l!==m||h!==c)&&vu(t,i,r,c),Ht=!1,h=t.memoizedState,i.state=h,as(t,r,i,o);var E=t.memoizedState;l!==m||h!==E||be.current||Ht?(typeof x==\"function\"&&(ul(t,n,x,r),E=t.memoizedState),(a=Ht||mu(t,n,a,r,h,E,c)||!1)?(p||typeof i.UNSAFE_componentWillUpdate!=\"function\"&&typeof i.componentWillUpdate!=\"function\"||(typeof i.componentWillUpdate==\"function\"&&i.componentWillUpdate(r,E,c),typeof i.UNSAFE_componentWillUpdate==\"function\"&&i.UNSAFE_componentWillUpdate(r,E,c)),typeof i.componentDidUpdate==\"function\"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate==\"function\"&&(t.flags|=1024)):(typeof i.componentDidUpdate!=\"function\"||l===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!=\"function\"||l===e.memoizedProps&&h===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=E),i.props=r,i.state=E,i.context=c,r=a):(typeof i.componentDidUpdate!=\"function\"||l===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!=\"function\"||l===e.memoizedProps&&h===e.memoizedState||(t.flags|=1024),r=!1)}return vl(e,t,n,r,s,o)}function vl(e,t,n,r,o,s){Kp(e,t);var i=(t.flags&128)!==0;if(!r&&!i)return o&&pu(t,n,!1),Ct(e,t,s);r=t.stateNode,mv.current=t;var l=i&&typeof n.getDerivedStateFromError!=\"function\"?null:r.render();return t.flags|=1,e!==null&&i?(t.child=_n(t,e.child,null,s),t.child=_n(t,null,l,s)):Ee(e,t,l,s),t.memoizedState=r.state,o&&pu(t,n,!0),t.child}function Zp(e){var t=e.stateNode;t.pendingContext?du(e,t.pendingContext,t.pendingContext!==t.context):t.context&&du(e,t.context,!1),hc(e,t.containerInfo)}function Iu(e,t,n,r,o){return Jn(),pc(o),t.flags|=256,Ee(e,t,n,r),t.child}var xo={dehydrated:null,treeContext:null,retryLane:0};function So(e){return{baseLanes:e,cachePool:null,transitions:null}}function bu(e,t){return{baseLanes:e.baseLanes|t,cachePool:null,transitions:e.transitions}}function Jp(e,t,n){var r=t.pendingProps,o=ee.current,s=!1,i=(t.flags&128)!==0,l;if((l=i)||(l=e!==null&&e.memoizedState===null?!1:(o&2)!==0),l?(s=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(o|=1),K(ee,o&1),e===null)return pl(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data===\"$!\"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(o=r.children,e=r.fallback,s?(r=t.mode,s=t.child,o={mode:\"hidden\",children:o},!(r&1)&&s!==null?(s.childLanes=0,s.pendingProps=o):s=ys(o,r,0,null),e=dn(e,r,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=So(n),t.memoizedState=xo,e):wl(t,o));if(o=e.memoizedState,o!==null){if(l=o.dehydrated,l!==null){if(i)return t.flags&256?(t.flags&=-257,ko(e,t,n,Error(b(422)))):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(s=r.fallback,o=t.mode,r=ys({mode:\"visible\",children:r.children},o,0,null),s=dn(s,o,n,null),s.flags|=2,r.return=t,s.return=t,r.sibling=s,t.child=r,t.mode&1&&_n(t,e.child,null,n),t.child.memoizedState=So(n),t.memoizedState=xo,s);if(!(t.mode&1))t=ko(e,t,n,null);else if(l.data===\"$!\")t=ko(e,t,n,Error(b(419)));else if(r=(n&e.childLanes)!==0,Ie||r){if(r=ae,r!==null){switch(n&-n){case 4:s=2;break;case 16:s=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:s=32;break;case 536870912:s=268435456;break;default:s=0}r=s&(r.suspendedLanes|n)?0:s,r!==0&&r!==o.retryLane&&(o.retryLane=r,ze(e,r,-1))}Tc(),t=ko(e,t,n,Error(b(421)))}else l.data===\"$?\"?(t.flags|=128,t.child=e.child,t=Tv.bind(null,e),l._reactRetry=t,t=null):(n=o.treeContext,Te=mt(l.nextSibling),Be=t,$=!0,et=null,n!==null&&(Qe[je++]=vt,Qe[je++]=wt,Qe[je++]=gn,vt=n.id,wt=n.overflow,gn=t),t=wl(t,t.pendingProps.children),t.flags|=4096);return t}return s?(r=Ou(e,t,r.children,r.fallback,n),s=t.child,o=e.child.memoizedState,s.memoizedState=o===null?So(n):bu(o,n),s.childLanes=e.childLanes&~n,t.memoizedState=xo,r):(n=Nu(e,t,r.children,n),t.memoizedState=null,n)}return s?(r=Ou(e,t,r.children,r.fallback,n),s=t.child,o=e.child.memoizedState,s.memoizedState=o===null?So(n):bu(o,n),s.childLanes=e.childLanes&~n,t.memoizedState=xo,r):(n=Nu(e,t,r.children,n),t.memoizedState=null,n)}function wl(e,t){return t=ys({mode:\"visible\",children:t},e.mode,0,null),t.return=e,e.child=t}function Nu(e,t,n,r){var o=e.child;return e=o.sibling,n=Jt(o,{mode:\"visible\",children:n}),!(t.mode&1)&&(n.lanes=r),n.return=t,n.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n}function Ou(e,t,n,r,o){var s=t.mode;e=e.child;var i=e.sibling,l={mode:\"hidden\",children:n};return!(s&1)&&t.child!==e?(n=t.child,n.childLanes=0,n.pendingProps=l,t.deletions=null):(n=Jt(e,l),n.subtreeFlags=e.subtreeFlags&14680064),i!==null?r=Jt(i,r):(r=dn(r,s,o,null),r.flags|=2),r.return=t,n.return=t,n.sibling=r,t.child=n,r}function ko(e,t,n,r){return r!==null&&pc(r),_n(t,e.child,null,n),e=wl(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Pu(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),al(e.return,t,n)}function Ai(e,t,n,r,o){var s=e.memoizedState;s===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(s.isBackwards=t,s.rendering=null,s.renderingStartTime=0,s.last=r,s.tail=n,s.tailMode=o)}function _p(e,t,n){var r=t.pendingProps,o=r.revealOrder,s=r.tail;if(Ee(e,t,r.children,n),r=ee.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Pu(e,n,t);else if(e.tag===19)Pu(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(K(ee,r),!(t.mode&1))t.memoizedState=null;else switch(o){case\"forwards\":for(n=t.child,o=null;n!==null;)e=n.alternate,e!==null&&ds(e)===null&&(o=n),n=n.sibling;n=o,n===null?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Ai(t,!1,o,n,s);break;case\"backwards\":for(n=null,o=t.child,t.child=null;o!==null;){if(e=o.alternate,e!==null&&ds(e)===null){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Ai(t,!0,n,null,s);break;case\"together\":Ai(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Ct(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),vn|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(b(153));if(t.child!==null){for(e=t.child,n=Jt(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Jt(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function vv(e,t,n){switch(t.tag){case 3:Zp(t),Jn();break;case 5:xp(t);break;case 1:Ne(t.type)&&is(t);break;case 4:hc(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;K(ls,r._currentValue),r._currentValue=o;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?(K(ee,ee.current&1),t.flags|=128,null):n&t.child.childLanes?Jp(e,t,n):(K(ee,ee.current&1),e=Ct(e,t,n),e!==null?e.sibling:null);K(ee,ee.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return _p(e,t,n);t.flags|=128}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),K(ee,ee.current),r)break;return null;case 22:case 23:return t.lanes=0,Xp(e,t,n)}return Ct(e,t,n)}function wv(e,t){switch(dc(t),t.tag){case 1:return Ne(t.type)&&ss(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return $n(),_(be),_(Ae),mc(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return gc(t),null;case 13:if(_(ee),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(b(340));Jn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return _(ee),null;case 4:return $n(),null;case 10:return ac(t.type._context),null;case 22:case 23:return Rc(),null;case 24:return null;default:return null}}var Co=!1,ye=!1,yv=typeof WeakSet==\"function\"?WeakSet:Set,P=null;function Fn(e,t){var n=e.ref;if(n!==null)if(typeof n==\"function\")try{n(null)}catch(r){re(e,t,r)}else n.current=null}function yl(e,t,n){try{n()}catch(r){re(e,t,r)}}var Lu=!1;function Av(e,t){if(rl=ts,e=op(),ic(e)){if(\"selectionStart\"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var o=r.anchorOffset,s=r.focusNode;r=r.focusOffset;try{n.nodeType,s.nodeType}catch{n=null;break e}var i=0,l=-1,c=-1,a=0,p=0,m=e,h=null;t:for(;;){for(var x;m!==n||o!==0&&m.nodeType!==3||(l=i+o),m!==s||r!==0&&m.nodeType!==3||(c=i+r),m.nodeType===3&&(i+=m.nodeValue.length),(x=m.firstChild)!==null;)h=m,m=x;for(;;){if(m===e)break t;if(h===n&&++a===o&&(l=i),h===s&&++p===r&&(c=i),(x=m.nextSibling)!==null)break;m=h,h=m.parentNode}m=x}n=l===-1||c===-1?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(ol={focusedElem:e,selectionRange:n},ts=!1,P=t;P!==null;)if(t=P,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,P=e;else for(;P!==null;){t=P;try{var E=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(E!==null){var v=E.memoizedProps,g=E.memoizedState,u=t.stateNode,f=u.getSnapshotBeforeUpdate(t.elementType===t.type?v:Je(t.type,v),g);u.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var d=t.stateNode.containerInfo;if(d.nodeType===1)d.textContent=\"\";else if(d.nodeType===9){var y=d.body;y!=null&&(y.textContent=\"\")}break;case 5:case 6:case 4:case 17:break;default:throw Error(b(163))}}catch(k){re(t,t.return,k)}if(e=t.sibling,e!==null){e.return=t.return,P=e;break}P=t.return}return E=Lu,Lu=!1,E}function Cr(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var o=r=r.next;do{if((o.tag&e)===e){var s=o.destroy;o.destroy=void 0,s!==void 0&&yl(t,n,s)}o=o.next}while(o!==r)}}function Ps(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Al(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t==\"function\"?t(e):t.current=e}}function $p(e){var t=e.alternate;t!==null&&(e.alternate=null,$p(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[at],delete t[jr],delete t[ll],delete t[rv],delete t[ov])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function e0(e){return e.tag===5||e.tag===3||e.tag===4}function Mu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||e0(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function El(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=os));else if(r!==4&&(e=e.child,e!==null))for(El(e,t,n),e=e.sibling;e!==null;)El(e,t,n),e=e.sibling}function xl(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(xl(e,t,n),e=e.sibling;e!==null;)xl(e,t,n),e=e.sibling}var pe=null,_e=!1;function Nt(e,t,n){for(n=n.child;n!==null;)t0(e,t,n),n=n.sibling}function t0(e,t,n){if(dt&&typeof dt.onCommitFiberUnmount==\"function\")try{dt.onCommitFiberUnmount(Cs,n)}catch{}switch(n.tag){case 5:ye||Fn(n,t);case 6:var r=pe,o=_e;pe=null,Nt(e,t,n),pe=r,_e=o,pe!==null&&(_e?(e=pe,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):pe.removeChild(n.stateNode));break;case 18:pe!==null&&(_e?(e=pe,n=n.stateNode,e.nodeType===8?hi(e.parentNode,n):e.nodeType===1&&hi(e,n),Hr(e)):hi(pe,n.stateNode));break;case 4:r=pe,o=_e,pe=n.stateNode.containerInfo,_e=!0,Nt(e,t,n),pe=r,_e=o;break;case 0:case 11:case 14:case 15:if(!ye&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){o=r=r.next;do{var s=o,i=s.destroy;s=s.tag,i!==void 0&&(s&2||s&4)&&yl(n,t,i),o=o.next}while(o!==r)}Nt(e,t,n);break;case 1:if(!ye&&(Fn(n,t),r=n.stateNode,typeof r.componentWillUnmount==\"function\"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(l){re(n,t,l)}Nt(e,t,n);break;case 21:Nt(e,t,n);break;case 22:n.mode&1?(ye=(r=ye)||n.memoizedState!==null,Nt(e,t,n),ye=r):Nt(e,t,n);break;default:Nt(e,t,n)}}function Bu(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new yv),t.forEach(function(r){var o=Iv.bind(null,e,r);n.has(r)||(n.add(r),r.then(o,o))})}}function Ze(e,t){var n=t.deletions;if(n!==null)for(var r=0;r<n.length;r++){var o=n[r];try{var s=e,i=t,l=i;e:for(;l!==null;){switch(l.tag){case 5:pe=l.stateNode,_e=!1;break e;case 3:pe=l.stateNode.containerInfo,_e=!0;break e;case 4:pe=l.stateNode.containerInfo,_e=!0;break e}l=l.return}if(pe===null)throw Error(b(160));t0(s,i,o),pe=null,_e=!1;var c=o.alternate;c!==null&&(c.return=null),o.return=null}catch(a){re(o,t,a)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)n0(t,e),t=t.sibling}function n0(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(Ze(t,e),lt(e),r&4){try{Cr(3,e,e.return),Ps(3,e)}catch(E){re(e,e.return,E)}try{Cr(5,e,e.return)}catch(E){re(e,e.return,E)}}break;case 1:Ze(t,e),lt(e),r&512&&n!==null&&Fn(n,n.return);break;case 5:if(Ze(t,e),lt(e),r&512&&n!==null&&Fn(n,n.return),e.flags&32){var o=e.stateNode;try{Pr(o,\"\")}catch(E){re(e,e.return,E)}}if(r&4&&(o=e.stateNode,o!=null)){var s=e.memoizedProps,i=n!==null?n.memoizedProps:s,l=e.type,c=e.updateQueue;if(e.updateQueue=null,c!==null)try{l===\"input\"&&s.type===\"radio\"&&s.name!=null&&Cd(o,s),zi(l,i);var a=zi(l,s);for(i=0;i<c.length;i+=2){var p=c[i],m=c[i+1];p===\"style\"?bd(o,m):p===\"dangerouslySetInnerHTML\"?Td(o,m):p===\"children\"?Pr(o,m):zl(o,p,m,a)}switch(l){case\"input\":ji(o,s);break;case\"textarea\":Dd(o,s);break;case\"select\":var h=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!s.multiple;var x=s.value;x!=null?jn(o,!!s.multiple,x,!1):h!==!!s.multiple&&(s.defaultValue!=null?jn(o,!!s.multiple,s.defaultValue,!0):jn(o,!!s.multiple,s.multiple?[]:\"\",!1))}o[jr]=s}catch(E){re(e,e.return,E)}}break;case 6:if(Ze(t,e),lt(e),r&4){if(e.stateNode===null)throw Error(b(162));a=e.stateNode,p=e.memoizedProps;try{a.nodeValue=p}catch(E){re(e,e.return,E)}}break;case 3:if(Ze(t,e),lt(e),r&4&&n!==null&&n.memoizedState.isDehydrated)try{Hr(t.containerInfo)}catch(E){re(e,e.return,E)}break;case 4:Ze(t,e),lt(e);break;case 13:Ze(t,e),lt(e),a=e.child,a.flags&8192&&a.memoizedState!==null&&(a.alternate===null||a.alternate.memoizedState===null)&&(Cc=se()),r&4&&Bu(e);break;case 22:if(a=n!==null&&n.memoizedState!==null,e.mode&1?(ye=(p=ye)||a,Ze(t,e),ye=p):Ze(t,e),lt(e),r&8192){p=e.memoizedState!==null;e:for(m=null,h=e;;){if(h.tag===5){if(m===null){m=h;try{o=h.stateNode,p?(s=o.style,typeof s.setProperty==\"function\"?s.setProperty(\"display\",\"none\",\"important\"):s.display=\"none\"):(l=h.stateNode,c=h.memoizedProps.style,i=c!=null&&c.hasOwnProperty(\"display\")?c.display:null,l.style.display=Id(\"display\",i))}catch(E){re(e,e.return,E)}}}else if(h.tag===6){if(m===null)try{h.stateNode.nodeValue=p?\"\":h.memoizedProps}catch(E){re(e,e.return,E)}}else if((h.tag!==22&&h.tag!==23||h.memoizedState===null||h===e)&&h.child!==null){h.child.return=h,h=h.child;continue}if(h===e)break e;for(;h.sibling===null;){if(h.return===null||h.return===e)break e;m===h&&(m=null),h=h.return}m===h&&(m=null),h.sibling.return=h.return,h=h.sibling}if(p&&!a&&e.mode&1)for(P=e,e=e.child;e!==null;){for(a=P=e;P!==null;){switch(p=P,m=p.child,p.tag){case 0:case 11:case 14:case 15:Cr(4,p,p.return);break;case 1:if(Fn(p,p.return),s=p.stateNode,typeof s.componentWillUnmount==\"function\"){h=p,x=p.return;try{o=h,s.props=o.memoizedProps,s.state=o.memoizedState,s.componentWillUnmount()}catch(E){re(h,x,E)}}break;case 5:Fn(p,p.return);break;case 22:if(p.memoizedState!==null){Fu(a);continue}}m!==null?(m.return=p,P=m):Fu(a)}e=e.sibling}}break;case 19:Ze(t,e),lt(e),r&4&&Bu(e);break;case 21:break;default:Ze(t,e),lt(e)}}function lt(e){var t=e.flags;if(t&2){try{e:{for(var n=e.return;n!==null;){if(e0(n)){var r=n;break e}n=n.return}throw Error(b(160))}switch(r.tag){case 5:var o=r.stateNode;r.flags&32&&(Pr(o,\"\"),r.flags&=-33);var s=Mu(e);xl(e,s,o);break;case 3:case 4:var i=r.stateNode.containerInfo,l=Mu(e);El(e,l,i);break;default:throw Error(b(161))}}catch(c){re(e,e.return,c)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function Ev(e,t,n){P=e,r0(e)}function r0(e,t,n){for(var r=(e.mode&1)!==0;P!==null;){var o=P,s=o.child;if(o.tag===22&&r){var i=o.memoizedState!==null||Co;if(!i){var l=o.alternate,c=l!==null&&l.memoizedState!==null||ye;l=Co;var a=ye;if(Co=i,(ye=c)&&!a)for(P=o;P!==null;)i=P,c=i.child,i.tag===22&&i.memoizedState!==null?Uu(o):c!==null?(c.return=i,P=c):Uu(o);for(;s!==null;)P=s,r0(s),s=s.sibling;P=o,Co=l,ye=a}Hu(e)}else o.subtreeFlags&8772&&s!==null?(s.return=o,P=s):Hu(e)}}function Hu(e){for(;P!==null;){var t=P;if(t.flags&8772){var n=t.alternate;try{if(t.flags&8772)switch(t.tag){case 0:case 11:case 15:ye||Ps(5,t);break;case 1:var r=t.stateNode;if(t.flags&4&&!ye)if(n===null)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:Je(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var s=t.updateQueue;s!==null&&gu(t,s,r);break;case 3:var i=t.updateQueue;if(i!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}gu(t,i,n)}break;case 5:var l=t.stateNode;if(n===null&&t.flags&4){n=l;var c=t.memoizedProps;switch(t.type){case\"button\":case\"input\":case\"select\":case\"textarea\":c.autoFocus&&n.focus();break;case\"img\":c.src&&(n.src=c.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var a=t.alternate;if(a!==null){var p=a.memoizedState;if(p!==null){var m=p.dehydrated;m!==null&&Hr(m)}}}break;case 19:case 17:case 21:case 22:case 23:break;default:throw Error(b(163))}ye||t.flags&512&&Al(t)}catch(h){re(t,t.return,h)}}if(t===e){P=null;break}if(n=t.sibling,n!==null){n.return=t.return,P=n;break}P=t.return}}function Fu(e){for(;P!==null;){var t=P;if(t===e){P=null;break}var n=t.sibling;if(n!==null){n.return=t.return,P=n;break}P=t.return}}function Uu(e){for(;P!==null;){var t=P;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{Ps(4,t)}catch(c){re(t,n,c)}break;case 1:var r=t.stateNode;if(typeof r.componentDidMount==\"function\"){var o=t.return;try{r.componentDidMount()}catch(c){re(t,o,c)}}var s=t.return;try{Al(t)}catch(c){re(t,s,c)}break;case 5:var i=t.return;try{Al(t)}catch(c){re(t,i,c)}}}catch(c){re(t,t.return,c)}if(t===e){P=null;break}var l=t.sibling;if(l!==null){l.return=t.return,P=l;break}P=t.return}}var xv=Math.ceil,gs=Dt.ReactCurrentDispatcher,Sc=Dt.ReactCurrentOwner,Ye=Dt.ReactCurrentBatchConfig,W=0,ae=null,ie=null,ge=0,Le=0,Un=en(0),ce=0,Xr=null,vn=0,Ls=0,kc=0,Dr=null,Re=null,Cc=0,er=1/0,ht=null,ms=!1,Sl=null,zt=null,Do=!1,jt=null,vs=0,Rr=0,kl=null,qo=-1,Qo=0;function Se(){return W&6?se():qo!==-1?qo:qo=se()}function Xt(e){return e.mode&1?W&2&&ge!==0?ge&-ge:iv.transition!==null?(Qo===0&&(Qo=jd()),Qo):(e=X,e!==0||(e=window.event,e=e===void 0?16:Kd(e.type)),e):1}function ze(e,t,n){if(50<Rr)throw Rr=0,kl=null,Error(b(185));var r=Ms(e,t);return r===null?null:(eo(r,t,n),(!(W&2)||r!==ae)&&(r===ae&&(!(W&2)&&(Ls|=t),ce===4&&Ut(r,ge)),Oe(r,n),t===1&&W===0&&!(e.mode&1)&&(er=se()+500,bs&&tn())),r)}function Ms(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}function o0(e){return(ae!==null||nt!==null)&&(e.mode&1)!==0&&(W&2)===0}function Oe(e,t){var n=e.callbackNode;i1(e,t);var r=es(e,e===ae?ge:0);if(r===0)n!==null&&Ga(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(n!=null&&Ga(n),t===1)e.tag===0?sv(qu.bind(null,e)):hp(qu.bind(null,e)),tv(function(){W===0&&tn()}),n=null;else{switch(Vd(r)){case 1:n=_l;break;case 4:n=qd;break;case 16:n=$o;break;case 536870912:n=Qd;break;default:n=$o}n=d0(n,s0.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function s0(e,t){if(qo=-1,Qo=0,W&6)throw Error(b(327));var n=e.callbackNode;if(zn()&&e.callbackNode!==n)return null;var r=es(e,e===ae?ge:0);if(r===0)return null;if(r&30||r&e.expiredLanes||t)t=ws(e,r);else{t=r;var o=W;W|=2;var s=l0();(ae!==e||ge!==t)&&(ht=null,er=se()+500,fn(e,t));do try{Cv();break}catch(l){i0(e,l)}while(1);cc(),gs.current=s,W=o,ie!==null?t=0:(ae=null,ge=0,t=ce)}if(t!==0){if(t===2&&(o=_i(e),o!==0&&(r=o,t=Cl(e,o))),t===1)throw n=Xr,fn(e,0),Ut(e,r),Oe(e,se()),n;if(t===6)Ut(e,r);else{if(o=e.current.alternate,!(r&30)&&!Sv(o)&&(t=ws(e,r),t===2&&(s=_i(e),s!==0&&(r=s,t=Cl(e,s))),t===1))throw n=Xr,fn(e,0),Ut(e,r),Oe(e,se()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(b(345));case 2:sn(e,Re,ht);break;case 3:if(Ut(e,r),(r&130023424)===r&&(t=Cc+500-se(),10<t)){if(es(e,0)!==0)break;if(o=e.suspendedLanes,(o&r)!==r){Se(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=il(sn.bind(null,e,Re,ht),t);break}sn(e,Re,ht);break;case 4:if(Ut(e,r),(r&4194240)===r)break;for(t=e.eventTimes,o=-1;0<r;){var i=31-rt(r);s=1<<i,i=t[i],i>o&&(o=i),r&=~s}if(r=o,r=se()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*xv(r/1960))-r,10<r){e.timeoutHandle=il(sn.bind(null,e,Re,ht),r);break}sn(e,Re,ht);break;case 5:sn(e,Re,ht);break;default:throw Error(b(329))}}}return Oe(e,se()),e.callbackNode===n?s0.bind(null,e):null}function Cl(e,t){var n=Dr;return e.current.memoizedState.isDehydrated&&(fn(e,t).flags|=256),e=ws(e,t),e!==2&&(t=Re,Re=n,t!==null&&Dl(t)),e}function Dl(e){Re===null?Re=e:Re.push.apply(Re,e)}function Sv(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var r=0;r<n.length;r++){var o=n[r],s=o.getSnapshot;o=o.value;try{if(!ot(s(),o))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Ut(e,t){for(t&=~kc,t&=~Ls,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-rt(t),r=1<<n;e[n]=-1,t&=~r}}function qu(e){if(W&6)throw Error(b(327));zn();var t=es(e,0);if(!(t&1))return Oe(e,se()),null;var n=ws(e,t);if(e.tag!==0&&n===2){var r=_i(e);r!==0&&(t=r,n=Cl(e,r))}if(n===1)throw n=Xr,fn(e,0),Ut(e,t),Oe(e,se()),n;if(n===6)throw Error(b(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,sn(e,Re,ht),Oe(e,se()),null}function Dc(e,t){var n=W;W|=1;try{return e(t)}finally{W=n,W===0&&(er=se()+500,bs&&tn())}}function wn(e){jt!==null&&jt.tag===0&&!(W&6)&&zn();var t=W;W|=1;var n=Ye.transition,r=X;try{if(Ye.transition=null,X=1,e)return e()}finally{X=r,Ye.transition=n,W=t,!(W&6)&&tn()}}function Rc(){Le=Un.current,_(Un)}function fn(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,ev(n)),ie!==null)for(n=ie.return;n!==null;){var r=n;switch(dc(r),r.tag){case 1:r=r.type.childContextTypes,r!=null&&ss();break;case 3:$n(),_(be),_(Ae),mc();break;case 5:gc(r);break;case 4:$n();break;case 13:_(ee);break;case 19:_(ee);break;case 10:ac(r.type._context);break;case 22:case 23:Rc()}n=n.return}if(ae=e,ie=e=Jt(e.current,null),ge=Le=t,ce=0,Xr=null,kc=Ls=vn=0,Re=Dr=null,nt!==null){for(t=0;t<nt.length;t++)if(n=nt[t],r=n.interleaved,r!==null){n.interleaved=null;var o=r.next,s=n.pending;if(s!==null){var i=s.next;s.next=o,r.next=i}n.pending=r}nt=null}return e}function i0(e,t){do{var n=ie;try{if(cc(),Fo.current=hs,ps){for(var r=te.memoizedState;r!==null;){var o=r.queue;o!==null&&(o.pending=null),r=r.next}ps=!1}if(mn=0,de=le=te=null,kr=!1,Gr=0,Sc.current=null,n===null||n.return===null){ce=1,Xr=t,ie=null;break}e:{var s=e,i=n.return,l=n,c=t;if(t=ge,l.flags|=32768,c!==null&&typeof c==\"object\"&&typeof c.then==\"function\"){var a=c,p=l,m=p.tag;if(!(p.mode&1)&&(m===0||m===11||m===15)){var h=p.alternate;h?(p.updateQueue=h.updateQueue,p.memoizedState=h.memoizedState,p.lanes=h.lanes):(p.updateQueue=null,p.memoizedState=null)}var x=ku(i);if(x!==null){x.flags&=-257,Cu(x,i,l,s,t),x.mode&1&&Su(s,a,t),t=x,c=a;var E=t.updateQueue;if(E===null){var v=new Set;v.add(c),t.updateQueue=v}else E.add(c);break e}else{if(!(t&1)){Su(s,a,t),Tc();break e}c=Error(b(426))}}else if($&&l.mode&1){var g=ku(i);if(g!==null){!(g.flags&65536)&&(g.flags|=256),Cu(g,i,l,s,t),pc(c);break e}}s=c,ce!==4&&(ce=2),Dr===null?Dr=[s]:Dr.push(s),c=xc(c,l),l=i;do{switch(l.tag){case 3:l.flags|=65536,t&=-t,l.lanes|=t;var u=jp(l,c,t);hu(l,u);break e;case 1:s=c;var f=l.type,d=l.stateNode;if(!(l.flags&128)&&(typeof f.getDerivedStateFromError==\"function\"||d!==null&&typeof d.componentDidCatch==\"function\"&&(zt===null||!zt.has(d)))){l.flags|=65536,t&=-t,l.lanes|=t;var y=Vp(l,s,t);hu(l,y);break e}}l=l.return}while(l!==null)}a0(n)}catch(k){t=k,ie===n&&n!==null&&(ie=n=n.return);continue}break}while(1)}function l0(){var e=gs.current;return gs.current=hs,e===null?hs:e}function Tc(){(ce===0||ce===3||ce===2)&&(ce=4),ae===null||!(vn&268435455)&&!(Ls&268435455)||Ut(ae,ge)}function ws(e,t){var n=W;W|=2;var r=l0();(ae!==e||ge!==t)&&(ht=null,fn(e,t));do try{kv();break}catch(o){i0(e,o)}while(1);if(cc(),W=n,gs.current=r,ie!==null)throw Error(b(261));return ae=null,ge=0,ce}function kv(){for(;ie!==null;)c0(ie)}function Cv(){for(;ie!==null&&!Jm();)c0(ie)}function c0(e){var t=f0(e.alternate,e,Le);e.memoizedProps=e.pendingProps,t===null?a0(e):ie=t,Sc.current=null}function a0(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&32768){if(n=wv(n,t),n!==null){n.flags&=32767,ie=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{ce=6,ie=null;return}}else if(n=gv(n,t,Le),n!==null){ie=n;return}if(t=t.sibling,t!==null){ie=t;return}ie=t=e}while(t!==null);ce===0&&(ce=5)}function sn(e,t,n){var r=X,o=Ye.transition;try{Ye.transition=null,X=1,Dv(e,t,n,r)}finally{Ye.transition=o,X=r}return null}function Dv(e,t,n,r){do zn();while(jt!==null);if(W&6)throw Error(b(327));n=e.finishedWork;var o=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(b(177));e.callbackNode=null,e.callbackPriority=0;var s=n.lanes|n.childLanes;if(l1(e,s),e===ae&&(ie=ae=null,ge=0),!(n.subtreeFlags&2064)&&!(n.flags&2064)||Do||(Do=!0,d0($o,function(){return zn(),null})),s=(n.flags&15990)!==0,n.subtreeFlags&15990||s){s=Ye.transition,Ye.transition=null;var i=X;X=1;var l=W;W|=4,Sc.current=null,Av(e,n),n0(n,e),z1(ol),ts=!!rl,ol=rl=null,e.current=n,Ev(n),_m(),W=l,X=i,Ye.transition=s}else e.current=n;if(Do&&(Do=!1,jt=e,vs=o),s=e.pendingLanes,s===0&&(zt=null),t1(n.stateNode),Oe(e,se()),t!==null)for(r=e.onRecoverableError,n=0;n<t.length;n++)r(t[n]);if(ms)throw ms=!1,e=Sl,Sl=null,e;return vs&1&&e.tag!==0&&zn(),s=e.pendingLanes,s&1?e===kl?Rr++:(Rr=0,kl=e):Rr=0,tn(),null}function zn(){if(jt!==null){var e=Vd(vs),t=Ye.transition,n=X;try{if(Ye.transition=null,X=16>e?16:e,jt===null)var r=!1;else{if(e=jt,jt=null,vs=0,W&6)throw Error(b(331));var o=W;for(W|=4,P=e.current;P!==null;){var s=P,i=s.child;if(P.flags&16){var l=s.deletions;if(l!==null){for(var c=0;c<l.length;c++){var a=l[c];for(P=a;P!==null;){var p=P;switch(p.tag){case 0:case 11:case 15:Cr(8,p,s)}var m=p.child;if(m!==null)m.return=p,P=m;else for(;P!==null;){p=P;var h=p.sibling,x=p.return;if($p(p),p===a){P=null;break}if(h!==null){h.return=x,P=h;break}P=x}}}var E=s.alternate;if(E!==null){var v=E.child;if(v!==null){E.child=null;do{var g=v.sibling;v.sibling=null,v=g}while(v!==null)}}P=s}}if(s.subtreeFlags&2064&&i!==null)i.return=s,P=i;else e:for(;P!==null;){if(s=P,s.flags&2048)switch(s.tag){case 0:case 11:case 15:Cr(9,s,s.return)}var u=s.sibling;if(u!==null){u.return=s.return,P=u;break e}P=s.return}}var f=e.current;for(P=f;P!==null;){i=P;var d=i.child;if(i.subtreeFlags&2064&&d!==null)d.return=i,P=d;else e:for(i=f;P!==null;){if(l=P,l.flags&2048)try{switch(l.tag){case 0:case 11:case 15:Ps(9,l)}}catch(k){re(l,l.return,k)}if(l===i){P=null;break e}var y=l.sibling;if(y!==null){y.return=l.return,P=y;break e}P=l.return}}if(W=o,tn(),dt&&typeof dt.onPostCommitFiberRoot==\"function\")try{dt.onPostCommitFiberRoot(Cs,e)}catch{}r=!0}return r}finally{X=n,Ye.transition=t}}return!1}function Qu(e,t,n){t=xc(n,t),t=jp(e,t,1),Yt(e,t),t=Se(),e=Ms(e,1),e!==null&&(eo(e,1,t),Oe(e,t))}function re(e,t,n){if(e.tag===3)Qu(e,e,n);else for(;t!==null;){if(t.tag===3){Qu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==\"function\"||typeof r.componentDidCatch==\"function\"&&(zt===null||!zt.has(r))){e=xc(n,e),e=Vp(t,e,1),Yt(t,e),e=Se(),t=Ms(t,1),t!==null&&(eo(t,1,e),Oe(t,e));break}}t=t.return}}function Rv(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),t=Se(),e.pingedLanes|=e.suspendedLanes&n,ae===e&&(ge&n)===n&&(ce===4||ce===3&&(ge&130023424)===ge&&500>se()-Cc?fn(e,0):kc|=n),Oe(e,t)}function u0(e,t){t===0&&(e.mode&1?(t=go,go<<=1,!(go&130023424)&&(go=4194304)):t=1);var n=Se();e=Ms(e,t),e!==null&&(eo(e,t,n),Oe(e,n))}function Tv(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),u0(e,n)}function Iv(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(b(314))}r!==null&&r.delete(t),u0(e,n)}var f0;f0=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||be.current)Ie=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Ie=!1,vv(e,t,n);Ie=!!(e.flags&131072)}else Ie=!1,$&&t.flags&1048576&&wp(t,fs,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps;var o=Zn(t,Ae.current);Yn(t,n),o=wc(null,t,r,e,o,n);var s=yc();return t.flags|=1,typeof o==\"object\"&&o!==null&&typeof o.render==\"function\"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ne(r)?(s=!0,is(t)):s=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,uc(t),o.updater=Ns,t.stateNode=o,o._reactInternals=t,fl(t,r,e,n),t=vl(null,t,r,!0,s,n)):(t.tag=0,$&&s&&fc(t),Ee(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=r._init,r=o(r._payload),t.type=r,o=t.tag=Nv(r),e=Je(r,e),o){case 0:t=ml(null,t,r,e,n);break e;case 1:t=Tu(null,t,r,e,n);break e;case 11:t=Du(null,t,r,e,n);break e;case 14:t=Ru(null,t,r,Je(r.type,e),n);break e}throw Error(b(306,r,\"\"))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Je(r,o),ml(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Je(r,o),Tu(e,t,r,o,n);case 3:e:{if(Zp(t),e===null)throw Error(b(387));r=t.pendingProps,s=t.memoizedState,o=s.element,gp(e,t),as(t,r,null,n);var i=t.memoizedState;if(r=i.element,s.isDehydrated)if(s={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=s,t.memoizedState=s,t.flags&256){o=Error(b(423)),t=Iu(e,t,r,n,o);break e}else if(r!==o){o=Error(b(424)),t=Iu(e,t,r,n,o);break e}else for(Te=mt(t.stateNode.containerInfo.firstChild),Be=t,$=!0,et=null,n=Ep(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Jn(),r===o){t=Ct(e,t,n);break e}Ee(e,t,r,n)}t=t.child}return t;case 5:return xp(t),e===null&&pl(t),r=t.type,o=t.pendingProps,s=e!==null?e.memoizedProps:null,i=o.children,sl(r,o)?i=null:s!==null&&sl(r,s)&&(t.flags|=32),Kp(e,t),Ee(e,t,i,n),t.child;case 6:return e===null&&pl(t),null;case 13:return Jp(e,t,n);case 4:return hc(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=_n(t,null,r,n):Ee(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Je(r,o),Du(e,t,r,o,n);case 7:return Ee(e,t,t.pendingProps,n),t.child;case 8:return Ee(e,t,t.pendingProps.children,n),t.child;case 12:return Ee(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,s=t.memoizedProps,i=o.value,K(ls,r._currentValue),r._currentValue=i,s!==null)if(ot(s.value,i)){if(s.children===o.children&&!be.current){t=Ct(e,t,n);break e}}else for(s=t.child,s!==null&&(s.return=t);s!==null;){var l=s.dependencies;if(l!==null){i=s.child;for(var c=l.firstContext;c!==null;){if(c.context===r){if(s.tag===1){c=Et(-1,n&-n),c.tag=2;var a=s.updateQueue;if(a!==null){a=a.shared;var p=a.pending;p===null?c.next=c:(c.next=p.next,p.next=c),a.pending=c}}s.lanes|=n,c=s.alternate,c!==null&&(c.lanes|=n),al(s.return,n,t),l.lanes|=n;break}c=c.next}}else if(s.tag===10)i=s.type===t.type?null:s.child;else if(s.tag===18){if(i=s.return,i===null)throw Error(b(341));i.lanes|=n,l=i.alternate,l!==null&&(l.lanes|=n),al(i,n,t),i=s.sibling}else i=s.child;if(i!==null)i.return=s;else for(i=s;i!==null;){if(i===t){i=null;break}if(s=i.sibling,s!==null){s.return=i.return,i=s;break}i=i.return}s=i}Ee(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Yn(t,n),o=Xe(o),r=r(o),t.flags|=1,Ee(e,t,r,n),t.child;case 14:return r=t.type,o=Je(r,t.pendingProps),o=Je(r.type,o),Ru(e,t,r,o,n);case 15:return zp(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Je(r,o),e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,Ne(r)?(e=!0,is(t)):e=!1,Yn(t,n),vp(t,r,o),fl(t,r,o,n),vl(null,t,r,!0,e,n);case 19:return _p(e,t,n);case 22:return Xp(e,t,n)}throw Error(b(156,t.tag))};function d0(e,t){return Ud(e,t)}function bv(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function We(e,t,n,r){return new bv(e,t,n,r)}function Ic(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Nv(e){if(typeof e==\"function\")return Ic(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Kl)return 11;if(e===Zl)return 14}return 2}function Jt(e,t){var n=e.alternate;return n===null?(n=We(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function jo(e,t,n,r,o,s){var i=2;if(r=e,typeof e==\"function\")Ic(e)&&(i=1);else if(typeof e==\"string\")i=5;else e:switch(e){case In:return dn(n.children,o,s,t);case Xl:i=8,o|=8;break;case Hi:return e=We(12,n,t,o|2),e.elementType=Hi,e.lanes=s,e;case Fi:return e=We(13,n,t,o),e.elementType=Fi,e.lanes=s,e;case Ui:return e=We(19,n,t,o),e.elementType=Ui,e.lanes=s,e;case xd:return ys(n,o,s,t);default:if(typeof e==\"object\"&&e!==null)switch(e.$$typeof){case Ad:i=10;break e;case Ed:i=9;break e;case Kl:i=11;break e;case Zl:i=14;break e;case Bt:i=16,r=null;break e}throw Error(b(130,e==null?e:typeof e,\"\"))}return t=We(i,n,t,o),t.elementType=e,t.type=r,t.lanes=s,t}function dn(e,t,n,r){return e=We(7,e,r,t),e.lanes=n,e}function ys(e,t,n,r){return e=We(22,e,r,t),e.elementType=xd,e.lanes=n,e.stateNode={},e}function Ei(e,t,n){return e=We(6,e,null,t),e.lanes=n,e}function xi(e,t,n){return t=We(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Ov(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=ri(0),this.expirationTimes=ri(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ri(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function bc(e,t,n,r,o,s,i,l,c){return e=new Ov(e,t,n,l,c),t===1?(t=1,s===!0&&(t|=8)):t=0,s=We(3,null,null,t),e.current=s,s.stateNode=e,s.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},uc(s),e}function Pv(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Tn,key:r==null?null:\"\"+r,children:e,containerInfo:t,implementation:n}}function p0(e){if(!e)return Zt;e=e._reactInternals;e:{if(En(e)!==e||e.tag!==1)throw Error(b(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ne(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(b(171))}if(e.tag===1){var n=e.type;if(Ne(n))return pp(e,n,t)}return t}function h0(e,t,n,r,o,s,i,l,c){return e=bc(n,r,!0,e,o,s,i,l,c),e.context=p0(null),n=e.current,r=Se(),o=Xt(n),s=Et(r,o),s.callback=t??null,Yt(n,s),e.current.lanes=o,eo(e,o,r),Oe(e,r),e}function Bs(e,t,n,r){var o=t.current,s=Se(),i=Xt(o);return n=p0(n),t.context===null?t.context=n:t.pendingContext=n,t=Et(s,i),t.payload={element:e},r=r===void 0?null:r,r!==null&&(t.callback=r),Yt(o,t),e=ze(o,i,s),e!==null&&Ho(e,o,i),i}function As(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function ju(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function Nc(e,t){ju(e,t),(e=e.alternate)&&ju(e,t)}function Lv(){return null}var g0=typeof reportError==\"function\"?reportError:function(e){console.error(e)};function Oc(e){this._internalRoot=e}Hs.prototype.render=Oc.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(b(409));Bs(e,t,null,null)};Hs.prototype.unmount=Oc.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;wn(function(){Bs(null,e,null,null)}),t[kt]=null}};function Hs(e){this._internalRoot=e}Hs.prototype.unstable_scheduleHydration=function(e){if(e){var t=Yd();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Ft.length&&t!==0&&t<Ft[n].priority;n++);Ft.splice(n,0,e),n===0&&Xd(e)}};function Pc(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function Fs(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==\" react-mount-point-unstable \"))}function Vu(){}function Mv(e,t,n,r,o){if(o){if(typeof r==\"function\"){var s=r;r=function(){var a=As(i);s.call(a)}}var i=h0(t,r,e,0,null,!1,!1,\"\",Vu);return e._reactRootContainer=i,e[kt]=i.current,qr(e.nodeType===8?e.parentNode:e),wn(),i}for(;o=e.lastChild;)e.removeChild(o);if(typeof r==\"function\"){var l=r;r=function(){var a=As(c);l.call(a)}}var c=bc(e,0,!1,null,null,!1,!1,\"\",Vu);return e._reactRootContainer=c,e[kt]=c.current,qr(e.nodeType===8?e.parentNode:e),wn(function(){Bs(t,c,n,r)}),c}function Us(e,t,n,r,o){var s=n._reactRootContainer;if(s){var i=s;if(typeof o==\"function\"){var l=o;o=function(){var c=As(i);l.call(c)}}Bs(t,i,e,o)}else i=Mv(n,t,e,o,r);return As(i)}Wd=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=vr(t.pendingLanes);n!==0&&($l(t,n|1),Oe(t,se()),!(W&6)&&(er=se()+500,tn()))}break;case 13:var r=Se();wn(function(){return ze(e,1,r)}),Nc(e,1)}};ec=function(e){if(e.tag===13){var t=Se();ze(e,134217728,t),Nc(e,134217728)}};Gd=function(e){if(e.tag===13){var t=Se(),n=Xt(e);ze(e,n,t),Nc(e,n)}};Yd=function(){return X};zd=function(e,t){var n=X;try{return X=e,t()}finally{X=n}};Ki=function(e,t,n){switch(t){case\"input\":if(ji(e,n),t=n.name,n.type===\"radio\"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+t)+'][type=\"radio\"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=Is(r);if(!o)throw Error(b(90));kd(r),ji(r,o)}}}break;case\"textarea\":Dd(e,n);break;case\"select\":t=n.value,t!=null&&jn(e,!!n.multiple,t,!1)}};Pd=Dc;Ld=wn;var Bv={usingClientEntryPoint:!1,Events:[no,Pn,Is,Nd,Od,Dc]},hr={findFiberByHostInstance:ln,bundleType:0,version:\"18.1.0\",rendererPackageName:\"react-dom\"},Hv={bundleType:hr.bundleType,version:hr.version,rendererPackageName:hr.rendererPackageName,rendererConfig:hr.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Dt.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=Hd(e),e===null?null:e.stateNode},findFiberByHostInstance:hr.findFiberByHostInstance||Lv,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.1.0-next-22edb9f77-20220426\"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<\"u\"){var Ro=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Ro.isDisabled&&Ro.supportsFiber)try{Cs=Ro.inject(Hv),dt=Ro}catch{}}Fe.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Bv;Fe.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!Pc(t))throw Error(b(200));return Pv(e,t,null,n)};Fe.createRoot=function(e,t){if(!Pc(e))throw Error(b(299));var n=!1,r=\"\",o=g0;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(r=t.identifierPrefix),t.onRecoverableError!==void 0&&(o=t.onRecoverableError)),t=bc(e,1,!1,null,null,n,!1,r,o),e[kt]=t.current,qr(e.nodeType===8?e.parentNode:e),new Oc(t)};Fe.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render==\"function\"?Error(b(188)):(e=Object.keys(e).join(\",\"),Error(b(268,e)));return e=Hd(t),e=e===null?null:e.stateNode,e};Fe.flushSync=function(e){return wn(e)};Fe.hydrate=function(e,t,n){if(!Fs(t))throw Error(b(200));return Us(null,e,t,!0,n)};Fe.hydrateRoot=function(e,t,n){if(!Pc(e))throw Error(b(405));var r=n!=null&&n.hydratedSources||null,o=!1,s=\"\",i=g0;if(n!=null&&(n.unstable_strictMode===!0&&(o=!0),n.identifierPrefix!==void 0&&(s=n.identifierPrefix),n.onRecoverableError!==void 0&&(i=n.onRecoverableError)),t=h0(t,null,e,1,n??null,o,!1,s,i),e[kt]=t.current,qr(e),r)for(e=0;e<r.length;e++)n=r[e],o=n._getVersion,o=o(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Hs(t)};Fe.render=function(e,t,n){if(!Fs(t))throw Error(b(200));return Us(null,e,t,!1,n)};Fe.unmountComponentAtNode=function(e){if(!Fs(e))throw Error(b(40));return e._reactRootContainer?(wn(function(){Us(null,null,e,!1,function(){e._reactRootContainer=null,e[kt]=null})}),!0):!1};Fe.unstable_batchedUpdates=Dc;Fe.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Fs(n))throw Error(b(200));if(e==null||e._reactInternals===void 0)throw Error(b(38));return Us(e,t,n,!1,r)};Fe.version=\"18.1.0-next-22edb9f77-20220426\";function m0(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>\"u\"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=\"function\"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(m0)}catch(e){console.error(e)}}m0(),gd.exports=Fe;var Fv=gd.exports;function Uv(e){const t=/[\\\\^$.*+?()[\\]{}|]/g,n=RegExp(t.source);return e&&n.test(e)?e.replace(t,\"\\\\$&\"):e||\"\"}function v0(e){const t=qv(e.path.join(\" \")+\" \"+e.title).sort((n,r)=>n.localeCompare(r));return e.reportName&&t.unshift(e.reportName),t}function qv(e){return e.match(/@([\\S]+)/g)||[]}function w0(e){let t=0;for(let n=0;n<e.length;n++)t=e.charCodeAt(n)+((t<<8)-t);return Math.abs(t%6)}let Qv=class Rl{constructor(){Rt(this,\"project\",[]);Rt(this,\"status\",[]);Rt(this,\"text\",[]);Rt(this,\"labels\",[])}empty(){return this.project.length+this.status.length+this.text.length===0}static parse(t){const n=Rl.tokenize(t),r=new Set,o=new Set,s=[],i=new Set;for(const c of n){if(c.startsWith(\"p:\")){r.add(c.slice(2));continue}if(c.startsWith(\"s:\")){o.add(c.slice(2));continue}if(c.startsWith(\"@\")){i.add(c);continue}s.push(c.toLowerCase())}const l=new Rl;return l.text=s,l.project=[...r],l.status=[...o],l.labels=[...i],l}static tokenize(t){const n=[];let r,o=[];for(let s=0;s<t.length;++s){const i=t[s];if(r&&i===\"\\\\\"&&t[s+1]===r){o.push(r),++s;continue}if(i==='\"'||i===\"'\"){r===i?(n.push(o.join(\"\").toLowerCase()),o=[],r=void 0):r?o.push(i):r=i;continue}if(r){o.push(i);continue}if(i===\" \"){o.length&&(n.push(o.join(\"\").toLowerCase()),o=[]);continue}o.push(i)}return o.length&&n.push(o.join(\"\").toLowerCase()),n}matches(t){if(!t.searchValues){let r=\"passed\";t.outcome===\"unexpected\"&&(r=\"failed\"),t.outcome===\"flaky\"&&(r=\"flaky\"),t.outcome===\"skipped\"&&(r=\"skipped\");const o={text:(r+\" \"+t.projectName+\" \"+(t.reportName||\"\")+\" \"+t.location.file+\" \"+t.path.join(\" \")+\" \"+t.title).toLowerCase(),project:t.projectName.toLowerCase(),status:r,file:t.location.file,line:String(t.location.line),column:String(t.location.column)};t.searchValues=o}const n=t.searchValues;if(this.project.length&&!!!this.project.find(o=>n.project.includes(o))||this.status.length&&!!!this.status.find(o=>n.status.includes(o)))return!1;if(this.text.length)for(const r of this.text){if(n.text.includes(r))continue;const[o,s,i]=r.split(\":\");if(!(n.file.includes(o)&&n.line===s&&(i===void 0||n.column===i)))return!1}return!(this.labels.length&&!this.labels.every(o=>{var s;return(s=n.text)==null?void 0:s.match(new RegExp(`(\\\\s|^)${Uv(o)}(\\\\s|$)`,\"g\"))}))}};const y0=()=>A(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon subnav-search-icon\",children:A(\"path\",{fillRule:\"evenodd\",d:\"M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z\"})}),Lc=()=>A(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",className:\"octicon color-fg-muted\",children:A(\"path\",{fillRule:\"evenodd\",d:\"M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z\"})}),Es=()=>A(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-fg-muted\",children:A(\"path\",{fillRule:\"evenodd\",d:\"M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z\"})}),Mc=()=>A(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-text-warning\",children:A(\"path\",{fillRule:\"evenodd\",d:\"M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z\"})}),A0=()=>A(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-fg-muted\",children:A(\"path\",{fillRule:\"evenodd\",d:\"M3.5 1.75a.25.25 0 01.25-.25h3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h2.086a.25.25 0 01.177.073l2.914 2.914a.25.25 0 01.073.177v8.586a.25.25 0 01-.25.25h-.5a.75.75 0 000 1.5h.5A1.75 1.75 0 0014 13.25V4.664c0-.464-.184-.909-.513-1.237L10.573.513A1.75 1.75 0 009.336 0H3.75A1.75 1.75 0 002 1.75v11.5c0 .649.353 1.214.874 1.515a.75.75 0 10.752-1.298.25.25 0 01-.126-.217V1.75zM8.75 3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM6 5.25a.75.75 0 01.75-.75h.5a.75.75 0 010 1.5h-.5A.75.75 0 016 5.25zm2 1.5A.75.75 0 018.75 6h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 6.75zm-1.25.75a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM8 9.75A.75.75 0 018.75 9h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 9.75zm-.75.75a1.75 1.75 0 00-1.75 1.75v3c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75v-3a1.75 1.75 0 00-1.75-1.75h-.5zM7 12.25a.25.25 0 01.25-.25h.5a.25.25 0 01.25.25v2.25H7v-2.25z\"})}),Bc=()=>A(\"svg\",{className:\"octicon color-text-danger\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",height:\"16\",\"aria-hidden\":\"true\",children:A(\"path\",{fillRule:\"evenodd\",d:\"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z\"})}),Hc=()=>A(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-icon-success\",children:A(\"path\",{fillRule:\"evenodd\",d:\"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z\"})}),E0=()=>A(\"svg\",{\"aria-hidden\":\"true\",height:\"16\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",\"data-view-component\":\"true\",className:\"octicon color-text-danger\",children:A(\"path\",{fillRule:\"evenodd\",d:\"M5.75.75A.75.75 0 016.5 0h3a.75.75 0 010 1.5h-.75v1l-.001.041a6.718 6.718 0 013.464 1.435l.007-.006.75-.75a.75.75 0 111.06 1.06l-.75.75-.006.007a6.75 6.75 0 11-10.548 0L2.72 5.03l-.75-.75a.75.75 0 011.06-1.06l.75.75.007.006A6.718 6.718 0 017.25 2.541a.756.756 0 010-.041v-1H6.5a.75.75 0 01-.75-.75zM8 14.5A5.25 5.25 0 108 4a5.25 5.25 0 000 10.5zm.389-6.7l1.33-1.33a.75.75 0 111.061 1.06L9.45 8.861A1.502 1.502 0 018 10.75a1.5 1.5 0 11.389-2.95z\"})}),x0=()=>A(\"svg\",{className:\"octicon\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",height:\"16\",\"aria-hidden\":\"true\"}),jv=()=>A(\"svg\",{className:\"octicon\",viewBox:\"0 0 16 16\",width:\"16\",height:\"16\",children:A(\"path\",{\"fill-rule\":\"evenodd\",d:\"M10.604 1h4.146a.25.25 0 01.25.25v4.146a.25.25 0 01-.427.177L13.03 4.03 9.28 7.78a.75.75 0 01-1.06-1.06l3.75-3.75-1.543-1.543A.25.25 0 0110.604 1zM3.75 2A1.75 1.75 0 002 3.75v8.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 12.25v-3.5a.75.75 0 00-1.5 0v3.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-8.5a.25.25 0 01.25-.25h3.5a.75.75 0 000-1.5h-3.5z\"})}),Vv=()=>A(\"svg\",{className:\"octicon\",viewBox:\"0 0 16 16\",width:\"16\",height:\"16\",children:A(\"path\",{\"fill-rule\":\"evenodd\",d:\"M4.75 0a.75.75 0 01.75.75V2h5V.75a.75.75 0 011.5 0V2h1.25c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0113.25 16H2.75A1.75 1.75 0 011 14.25V3.75C1 2.784 1.784 2 2.75 2H4V.75A.75.75 0 014.75 0zm0 3.5h8.5a.25.25 0 01.25.25V6h-11V3.75a.25.25 0 01.25-.25h2zm-2.25 4v6.75c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25V7.5h-11z\"})}),Wv=()=>A(\"svg\",{className:\"octicon\",viewBox:\"0 0 16 16\",width:\"16\",height:\"16\",children:A(\"path\",{\"fill-rule\":\"evenodd\",d:\"M10.5 5a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0zm.061 3.073a4 4 0 10-5.123 0 6.004 6.004 0 00-3.431 5.142.75.75 0 001.498.07 4.5 4.5 0 018.99 0 .75.75 0 101.498-.07 6.005 6.005 0 00-3.432-5.142z\"})}),Gv=()=>A(\"svg\",{className:\"octicon\",viewBox:\"0 0 16 16\",width:\"16\",height:\"16\",children:A(\"path\",{\"fill-rule\":\"evenodd\",d:\"M10.5 7.75a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0zm1.43.75a4.002 4.002 0 01-7.86 0H.75a.75.75 0 110-1.5h3.32a4.001 4.001 0 017.86 0h3.32a.75.75 0 110 1.5h-3.32z\"})}),S0=()=>A(\"svg\",{className:\"octicon\",viewBox:\"0 0 48 48\",version:\"1.1\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",children:A(\"path\",{xmlns:\"http://www.w3.org/2000/svg\",d:\"M11.85 32H36.2l-7.35-9.95-6.55 8.7-4.6-6.45ZM7 40q-1.2 0-2.1-.9Q4 38.2 4 37V11q0-1.2.9-2.1Q5.8 8 7 8h34q1.2 0 2.1.9.9.9.9 2.1v26q0 1.2-.9 2.1-.9.9-2.1.9Zm0-29v26-26Zm34 26V11H7v26Z\"})}),k0=()=>A(\"svg\",{className:\"octicon\",viewBox:\"0 0 48 48\",version:\"1.1\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",children:A(\"path\",{xmlns:\"http://www.w3.org/2000/svg\",d:\"m19.6 32.35 13-8.45-13-8.45ZM7 40q-1.2 0-2.1-.9Q4 38.2 4 37V11q0-1.2.9-2.1Q5.8 8 7 8h34q1.2 0 2.1.9.9.9.9 2.1v26q0 1.2-.9 2.1-.9.9-2.1.9Zm0-3h34V11H7v26Zm0 0V11v26Z\"})}),C0=()=>A(\"svg\",{className:\"octicon\",viewBox:\"0 0 48 48\",version:\"1.1\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",children:A(\"path\",{xmlns:\"http://www.w3.org/2000/svg\",d:\"M7 37h9.35V11H7v26Zm12.35 0h9.3V11h-9.3v26Zm12.3 0H41V11h-9.35v26ZM7 40q-1.2 0-2.1-.9Q4 38.2 4 37V11q0-1.2.9-2.1Q5.8 8 7 8h34q1.2 0 2.1.9.9.9.9 2.1v26q0 1.2-.9 2.1-.9.9-2.1.9Z\"})}),Yv=()=>A(\"svg\",{className:\"octicon\",viewBox:\"0 0 16 16\",version:\"1.1\",width:\"16\",height:\"16\",\"aria-hidden\":\"true\"}),D0=()=>L(\"svg\",{className:\"octicon\",viewBox:\"0 0 16 16\",width:\"16\",height:\"16\",\"aria-hidden\":\"true\",children:[A(\"path\",{d:\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"}),A(\"path\",{d:\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"})]}),zv=Object.freeze(Object.defineProperty({__proto__:null,attachment:A0,blank:x0,calendar:Vv,check:Hc,clock:E0,commit:Gv,copy:D0,cross:Bc,downArrow:Lc,empty:Yv,externalLink:jv,image:S0,person:Wv,rightArrow:Es,search:y0,trace:C0,video:k0,warning:Mc},Symbol.toStringTag,{value:\"Module\"}));const R0=({title:e,loadChildren:t,onClick:n,expandByDefault:r,depth:o,selected:s,style:i})=>{const[l,c]=j.useState(r||!1);return L(\"div\",{className:\"tree-item\",style:i,children:[L(\"span\",{className:s?\"tree-item-title selected\":\"tree-item-title\",style:{whiteSpace:\"nowrap\",paddingLeft:o*22+4},onClick:()=>{n==null||n(),c(!l)},children:[t&&!!l&&Lc(),t&&!l&&Es(),!t&&A(\"span\",{style:{visibility:\"hidden\"},children:Es()}),e]}),l&&(t==null?void 0:t())]})};const Xv=({value:e})=>{const[t,n]=j.useState(\"copy\"),r=j.useCallback(()=>{navigator.clipboard.writeText(e).then(()=>{n(\"check\"),setTimeout(()=>{n(\"copy\")},3e3)},()=>{n(\"cross\")})},[e]),o=t===\"check\"?Hc():t===\"cross\"?Bc():D0();return A(\"button\",{className:\"copy-icon\",onClick:r,children:o})};function T0(e){window.history.pushState({},\"\",e);const t=new PopStateEvent(\"popstate\");window.dispatchEvent(t)}const Wu=({predicate:e,children:t})=>{const[n,r]=j.useState(e(new URLSearchParams(window.location.hash.slice(1))));return j.useEffect(()=>{const o=()=>r(e(new URLSearchParams(window.location.hash.slice(1))));return window.addEventListener(\"popstate\",o),()=>window.removeEventListener(\"popstate\",o)},[e]),n?t:null},tt=({href:e,className:t,children:n,title:r})=>A(\"a\",{style:{textDecoration:\"none\",color:\"var(--color-fg-default)\"},className:`${t||\"\"}`,href:e,title:r,children:n}),I0=({projectNames:e,projectName:t})=>{const n=encodeURIComponent(t),r=t===n?t:`\"${n.replace(/%22/g,\"%5C%22\")}\"`;return A(tt,{href:`#?q=p:${r}`,children:A(\"span\",{className:\"label label-color-\"+e.indexOf(t)%6,style:{margin:\"6px 0 0 6px\"},children:t})})},an=({attachment:e,href:t,linkName:n})=>A(R0,{title:L(\"span\",{children:[e.contentType===Zv?Mc():A0(),e.path&&A(\"a\",{href:t||e.path,download:Kv(e),children:n||e.name}),e.body&&A(\"span\",{children:e.name})]}),loadChildren:e.body?()=>[L(\"div\",{className:\"attachment-body\",children:[A(Xv,{value:e.body}),e.body]})]:void 0,depth:0,style:{lineHeight:\"32px\"}});function Kv(e){if(e.name.includes(\".\")||!e.path)return e.name;const t=e.path.indexOf(\".\");return t===-1?e.name:e.name+e.path.slice(t,e.path.length)}function b0(e){return`trace/index.html?${e.map((t,n)=>`trace=${new URL(t.path,window.location.href)}`).join(\"&\")}`}const Zv=\"x-playwright/missing\";function Kr(e){switch(e){case\"failed\":case\"unexpected\":return Bc();case\"passed\":case\"expected\":return Hc();case\"timedOut\":return E0();case\"flaky\":return Mc();case\"skipped\":case\"interrupted\":return x0()}}const Jv=({stats:e,filterText:t,setFilterText:n})=>(j.useEffect(()=>{const r=()=>{const o=new URLSearchParams(window.location.hash.slice(1));n(o.get(\"q\")||\"\")};return window.addEventListener(\"popstate\",r),()=>{window.removeEventListener(\"popstate\",r)}},[n]),A(yn,{children:L(\"div\",{className:\"pt-3\",children:[A(\"div\",{className:\"header-view-status-container ml-2 pl-2 d-flex\",children:A(_v,{stats:e})}),L(\"form\",{className:\"subnav-search\",onSubmit:r=>{r.preventDefault(),T0(`#?q=${t?encodeURIComponent(t):\"\"}`)},children:[y0(),A(\"input\",{type:\"search\",spellCheck:!1,className:\"form-control subnav-search-input input-contrast width-full\",value:t,onChange:r=>{n(r.target.value)}})]})]})})),_v=({stats:e})=>L(\"nav\",{children:[L(tt,{className:\"subnav-item\",href:\"#?\",children:[\"All \",A(\"span\",{className:\"d-inline counter\",children:e.total})]}),L(tt,{className:\"subnav-item\",href:\"#?q=s:passed\",children:[\"Passed \",A(\"span\",{className:\"d-inline counter\",children:e.expected})]}),L(tt,{className:\"subnav-item\",href:\"#?q=s:failed\",children:[!!e.unexpected&&Kr(\"unexpected\"),\" Failed \",A(\"span\",{className:\"d-inline counter\",children:e.unexpected})]}),L(tt,{className:\"subnav-item\",href:\"#?q=s:flaky\",children:[!!e.flaky&&Kr(\"flaky\"),\" Flaky \",A(\"span\",{className:\"d-inline counter\",children:e.flaky})]}),L(tt,{className:\"subnav-item\",href:\"#?q=s:skipped\",children:[\"Skipped \",A(\"span\",{className:\"d-inline counter\",children:e.skipped})]})]});const N0=({header:e,expanded:t,setExpanded:n,children:r,noInsets:o,dataTestId:s,targetRef:i})=>L(\"div\",{className:\"chip\",\"data-testid\":s,ref:i,children:[L(\"div\",{className:\"chip-header\"+(n?\" expanded-\"+t:\"\"),onClick:()=>n==null?void 0:n(!t),title:typeof e==\"string\"?e:void 0,children:[n&&!!t&&Lc(),n&&!t&&Es(),e]}),(!n||t)&&A(\"div\",{className:\"chip-body\"+(o?\" chip-body-no-insets\":\"\"),children:r})]}),$e=({header:e,initialExpanded:t,noInsets:n,children:r,dataTestId:o,targetRef:s})=>{const[i,l]=j.useState(t||t===void 0);return A(N0,{header:e,expanded:i,setExpanded:l,noInsets:n,dataTestId:o,targetRef:s,children:r})};class $v extends j.Component{constructor(){super(...arguments);Rt(this,\"state\",{error:null,errorInfo:null})}componentDidCatch(n,r){this.setState({error:n,errorInfo:r})}render(){var n,r,o;return this.state.error||this.state.errorInfo?L($e,{header:\"Commit Metainfo Error\",dataTestId:\"metadata-error\",children:[A(\"p\",{children:\"An error was encountered when trying to render Commit Metainfo. Please file a GitHub issue to report this error.\"}),A(\"p\",{children:L(\"pre\",{style:{overflow:\"scroll\"},children:[(n=this.state.error)==null?void 0:n.message,A(\"br\",{}),(r=this.state.error)==null?void 0:r.stack,A(\"br\",{}),(o=this.state.errorInfo)==null?void 0:o.componentStack]})})]}):this.props.children}}const ew=e=>A($v,{children:A(tw,{...e})}),tw=e=>Object.keys(e).find(t=>t.startsWith(\"revision.\")||t.startsWith(\"ci.\"))?L($e,{header:L(\"span\",{children:[e[\"revision.id\"]&&A(\"span\",{style:{float:\"right\"},children:e[\"revision.id\"].slice(0,7)}),e[\"revision.subject\"]||\"Commit Metainfo\"]}),initialExpanded:!1,dataTestId:\"metadata-chip\",children:[e[\"revision.subject\"]&&A(Dn,{testId:\"revision.subject\",content:A(\"span\",{children:e[\"revision.subject\"]})}),e[\"revision.id\"]&&A(Dn,{testId:\"revision.id\",content:A(\"span\",{children:e[\"revision.id\"]}),href:e[\"revision.link\"],icon:\"commit\"}),(e[\"revision.author\"]||e[\"revision.email\"])&&A(Dn,{content:`${e[\"revision.author\"]} ${e[\"revision.email\"]}`,icon:\"person\"}),e[\"revision.timestamp\"]&&A(Dn,{testId:\"revision.timestamp\",content:L(yn,{children:[Intl.DateTimeFormat(void 0,{dateStyle:\"full\"}).format(e[\"revision.timestamp\"]),\" \",Intl.DateTimeFormat(void 0,{timeStyle:\"long\"}).format(e[\"revision.timestamp\"])]}),icon:\"calendar\"}),e[\"ci.link\"]&&A(Dn,{content:\"CI/CD Logs\",href:e[\"ci.link\"],icon:\"externalLink\"}),e.timestamp&&A(Dn,{content:L(\"span\",{style:{color:\"var(--color-fg-subtle)\"},children:[\"Report generated on \",Intl.DateTimeFormat(void 0,{dateStyle:\"full\",timeStyle:\"long\"}).format(e.timestamp)]})})]}):null,Dn=({content:e,icon:t,href:n,testId:r})=>L(\"div\",{className:\"my-1 hbox\",\"data-testid\":r,children:[A(\"div\",{className:\"mr-2\",children:zv[t||\"blank\"]()}),A(\"div\",{style:{flex:1},children:n?A(\"a\",{href:n,target:\"_blank\",rel:\"noopener noreferrer\",children:e}):e})]});const O0=({tabs:e,selectedTab:t,setSelectedTab:n})=>A(\"div\",{className:\"tabbed-pane\",children:L(\"div\",{className:\"vbox\",children:[A(\"div\",{className:\"hbox\",style:{flex:\"none\"},children:A(\"div\",{className:\"tabbed-pane-tab-strip\",children:e.map(r=>A(\"div\",{className:\"tabbed-pane-tab-element \"+(t===r.id?\"selected\":\"\"),onClick:()=>n(r.id),children:A(\"div\",{className:\"tabbed-pane-tab-label\",children:r.title})},r.id))})}),e.map(r=>{if(t===r.id)return A(\"div\",{className:\"tab-content\",children:r.render()},r.id)})]})});function Zr(e){if(!isFinite(e))return\"-\";if(e===0)return\"0\";if(e<1e3)return e.toFixed(0)+\"ms\";const t=e/1e3;if(t<60)return t.toFixed(1)+\"s\";const n=t/60;if(n<60)return n.toFixed(1)+\"m\";const r=n/60;return r<24?r.toFixed(1)+\"h\":(r/24).toFixed(1)+\"d\"}const nw=\"data:image/png;base64,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\";const rw=({imageDiff:e})=>{const[t,n]=j.useState(\"diff\"),r=j.useRef(null),o=j.useRef(null),[s,i]=j.useState(0),l=a=>{if(r.current&&(r.current.style.minHeight=r.current.offsetHeight+\"px\"),a&&r.current&&o.current){const p=Math.max(0,(r.current.offsetWidth-o.current.offsetWidth)/2-20);a===\"left\"?i(p):a===\"right\"&&i(r.current.offsetWidth-p)}},c=[];return e.diff?(c.push({id:\"diff\",title:\"Diff\",render:()=>A(rn,{src:e.diff.attachment.path,onLoad:()=>l()})}),c.push({id:\"actual\",title:\"Actual\",render:()=>L(Gu,{sliderPosition:s,setSliderPosition:i,children:[A(rn,{src:e.expected.attachment.path,onLoad:()=>l(\"right\"),imageRef:o,style:{boxShadow:\"none\"}}),A(rn,{src:e.actual.attachment.path})]})}),c.push({id:\"expected\",title:e.expected.title,render:()=>L(Gu,{sliderPosition:s,setSliderPosition:i,children:[A(rn,{src:e.expected.attachment.path,onLoad:()=>l(\"left\"),imageRef:o}),A(rn,{src:e.actual.attachment.path,style:{boxShadow:\"none\"}})]})})):(c.push({id:\"actual\",title:\"Actual\",render:()=>A(rn,{src:e.actual.attachment.path,onLoad:()=>l()})}),c.push({id:\"expected\",title:e.expected.title,render:()=>A(rn,{src:e.expected.attachment.path,onLoad:()=>l()})})),L(\"div\",{className:\"vbox image-diff-view\",\"data-testid\":\"test-result-image-mismatch\",ref:r,children:[A(O0,{tabs:c,selectedTab:t,setSelectedTab:n}),e.diff&&A(an,{attachment:e.diff.attachment}),A(an,{attachment:e.actual.attachment}),A(an,{attachment:e.expected.attachment})]})},Gu=({children:e,sliderPosition:t,setSliderPosition:n})=>{const[r,o]=j.useState(null),s=t,i=j.Children.toArray(e);document.body.style.userSelect=r?\"none\":\"inherit\";const l={...To,zIndex:100,cursor:\"ew-resize\",left:r?0:s-4,right:r?0:void 0,width:r?\"initial\":8};return L(yn,{children:[i[0],L(\"div\",{style:{...To},children:[A(\"div\",{style:{...To,display:\"flex\",zIndex:50,clip:`rect(0, ${s}px, auto, 0)`,backgroundColor:\"var(--color-canvas-default)\"},children:i[1]}),A(\"div\",{style:l,onMouseDown:c=>o({offset:c.clientX,size:s}),onMouseUp:()=>o(null),onMouseMove:c=>{if(!c.buttons)o(null);else if(r){const p=c.clientX-r.offset,m=r.size+p,x=c.target.parentElement.getBoundingClientRect(),E=Math.min(Math.max(0,m),x.width);n(E)}}}),L(\"div\",{\"data-testid\":\"test-result-image-mismatch-grip\",style:{...To,left:s-1,width:20,zIndex:80,margin:\"10px -10px\",pointerEvents:\"none\",display:\"flex\"},children:[A(\"div\",{style:{position:\"absolute\",top:0,bottom:0,left:9,width:2,backgroundColor:\"var(--color-diff-blob-expander-icon)\"}}),L(\"svg\",{style:{fill:\"var(--color-diff-blob-expander-icon)\"},viewBox:\"0 0 27 20\",children:[A(\"path\",{d:\"M9.6 0L0 9.6l9.6 9.6z\"}),A(\"path\",{d:\"M17 19.2l9.5-9.6L16.9 0z\"})]})]})]})]})},rn=({src:e,onLoad:t,imageRef:n,style:r})=>{const o=j.useRef(null),s=n??o,[i,l]=j.useState(null);return L(\"div\",{className:\"image-wrapper\",children:[L(\"div\",{children:[A(\"span\",{style:{flex:\"1 1 0\",textAlign:\"end\"},children:i?i.width:\"\"}),A(\"span\",{style:{flex:\"none\",margin:\"0 5px\"},children:\"x\"}),A(\"span\",{style:{flex:\"1 1 0\",textAlign:\"start\"},children:i?i.height:\"\"})]}),A(\"img\",{src:e,onLoad:()=>{t==null||t(),s.current&&l({width:s.current.naturalWidth,height:s.current.naturalHeight})},ref:s,style:r})]})},To={position:\"absolute\",top:0,right:0,bottom:0,left:0};var P0={},xt={};const ow=\"Á\",sw=\"á\",iw=\"Ă\",lw=\"ă\",cw=\"∾\",aw=\"∿\",uw=\"∾̳\",fw=\"Â\",dw=\"â\",pw=\"´\",hw=\"А\",gw=\"а\",mw=\"Æ\",vw=\"æ\",ww=\"⁡\",yw=\"𝔄\",Aw=\"𝔞\",Ew=\"À\",xw=\"à\",Sw=\"ℵ\",kw=\"ℵ\",Cw=\"Α\",Dw=\"α\",Rw=\"Ā\",Tw=\"ā\",Iw=\"⨿\",bw=\"&\",Nw=\"&\",Ow=\"⩕\",Pw=\"⩓\",Lw=\"∧\",Mw=\"⩜\",Bw=\"⩘\",Hw=\"⩚\",Fw=\"∠\",Uw=\"⦤\",qw=\"∠\",Qw=\"⦨\",jw=\"⦩\",Vw=\"⦪\",Ww=\"⦫\",Gw=\"⦬\",Yw=\"⦭\",zw=\"⦮\",Xw=\"⦯\",Kw=\"∡\",Zw=\"∟\",Jw=\"⊾\",_w=\"⦝\",$w=\"∢\",ey=\"Å\",ty=\"⍼\",ny=\"Ą\",ry=\"ą\",oy=\"𝔸\",sy=\"𝕒\",iy=\"⩯\",ly=\"≈\",cy=\"⩰\",ay=\"≊\",uy=\"≋\",fy=\"'\",dy=\"⁡\",py=\"≈\",hy=\"≊\",gy=\"Å\",my=\"å\",vy=\"𝒜\",wy=\"𝒶\",yy=\"≔\",Ay=\"*\",Ey=\"≈\",xy=\"≍\",Sy=\"Ã\",ky=\"ã\",Cy=\"Ä\",Dy=\"ä\",Ry=\"∳\",Ty=\"⨑\",Iy=\"≌\",by=\"϶\",Ny=\"‵\",Oy=\"∽\",Py=\"⋍\",Ly=\"∖\",My=\"⫧\",By=\"⊽\",Hy=\"⌅\",Fy=\"⌆\",Uy=\"⌅\",qy=\"⎵\",Qy=\"⎶\",jy=\"≌\",Vy=\"Б\",Wy=\"б\",Gy=\"„\",Yy=\"∵\",zy=\"∵\",Xy=\"∵\",Ky=\"⦰\",Zy=\"϶\",Jy=\"ℬ\",_y=\"ℬ\",$y=\"Β\",eA=\"β\",tA=\"ℶ\",nA=\"≬\",rA=\"𝔅\",oA=\"𝔟\",sA=\"⋂\",iA=\"◯\",lA=\"⋃\",cA=\"⨀\",aA=\"⨁\",uA=\"⨂\",fA=\"⨆\",dA=\"★\",pA=\"▽\",hA=\"△\",gA=\"⨄\",mA=\"⋁\",vA=\"⋀\",wA=\"⤍\",yA=\"⧫\",AA=\"▪\",EA=\"▴\",xA=\"▾\",SA=\"◂\",kA=\"▸\",CA=\"␣\",DA=\"▒\",RA=\"░\",TA=\"▓\",IA=\"█\",bA=\"=⃥\",NA=\"≡⃥\",OA=\"⫭\",PA=\"⌐\",LA=\"𝔹\",MA=\"𝕓\",BA=\"⊥\",HA=\"⊥\",FA=\"⋈\",UA=\"⧉\",qA=\"┐\",QA=\"╕\",jA=\"╖\",VA=\"╗\",WA=\"┌\",GA=\"╒\",YA=\"╓\",zA=\"╔\",XA=\"─\",KA=\"═\",ZA=\"┬\",JA=\"╤\",_A=\"╥\",$A=\"╦\",eE=\"┴\",tE=\"╧\",nE=\"╨\",rE=\"╩\",oE=\"⊟\",sE=\"⊞\",iE=\"⊠\",lE=\"┘\",cE=\"╛\",aE=\"╜\",uE=\"╝\",fE=\"└\",dE=\"╘\",pE=\"╙\",hE=\"╚\",gE=\"│\",mE=\"║\",vE=\"┼\",wE=\"╪\",yE=\"╫\",AE=\"╬\",EE=\"┤\",xE=\"╡\",SE=\"╢\",kE=\"╣\",CE=\"├\",DE=\"╞\",RE=\"╟\",TE=\"╠\",IE=\"‵\",bE=\"˘\",NE=\"˘\",OE=\"¦\",PE=\"𝒷\",LE=\"ℬ\",ME=\"⁏\",BE=\"∽\",HE=\"⋍\",FE=\"⧅\",UE=\"\\\\\",qE=\"⟈\",QE=\"•\",jE=\"•\",VE=\"≎\",WE=\"⪮\",GE=\"≏\",YE=\"≎\",zE=\"≏\",XE=\"Ć\",KE=\"ć\",ZE=\"⩄\",JE=\"⩉\",_E=\"⩋\",$E=\"∩\",e2=\"⋒\",t2=\"⩇\",n2=\"⩀\",r2=\"ⅅ\",o2=\"∩︀\",s2=\"⁁\",i2=\"ˇ\",l2=\"ℭ\",c2=\"⩍\",a2=\"Č\",u2=\"č\",f2=\"Ç\",d2=\"ç\",p2=\"Ĉ\",h2=\"ĉ\",g2=\"∰\",m2=\"⩌\",v2=\"⩐\",w2=\"Ċ\",y2=\"ċ\",A2=\"¸\",E2=\"¸\",x2=\"⦲\",S2=\"¢\",k2=\"·\",C2=\"·\",D2=\"𝔠\",R2=\"ℭ\",T2=\"Ч\",I2=\"ч\",b2=\"✓\",N2=\"✓\",O2=\"Χ\",P2=\"χ\",L2=\"ˆ\",M2=\"≗\",B2=\"↺\",H2=\"↻\",F2=\"⊛\",U2=\"⊚\",q2=\"⊝\",Q2=\"⊙\",j2=\"®\",V2=\"Ⓢ\",W2=\"⊖\",G2=\"⊕\",Y2=\"⊗\",z2=\"○\",X2=\"⧃\",K2=\"≗\",Z2=\"⨐\",J2=\"⫯\",_2=\"⧂\",$2=\"∲\",ex=\"”\",tx=\"’\",nx=\"♣\",rx=\"♣\",ox=\":\",sx=\"∷\",ix=\"⩴\",lx=\"≔\",cx=\"≔\",ax=\",\",ux=\"@\",fx=\"∁\",dx=\"∘\",px=\"∁\",hx=\"ℂ\",gx=\"≅\",mx=\"⩭\",vx=\"≡\",wx=\"∮\",yx=\"∯\",Ax=\"∮\",Ex=\"𝕔\",xx=\"ℂ\",Sx=\"∐\",kx=\"∐\",Cx=\"©\",Dx=\"©\",Rx=\"℗\",Tx=\"∳\",Ix=\"↵\",bx=\"✗\",Nx=\"⨯\",Ox=\"𝒞\",Px=\"𝒸\",Lx=\"⫏\",Mx=\"⫑\",Bx=\"⫐\",Hx=\"⫒\",Fx=\"⋯\",Ux=\"⤸\",qx=\"⤵\",Qx=\"⋞\",jx=\"⋟\",Vx=\"↶\",Wx=\"⤽\",Gx=\"⩈\",Yx=\"⩆\",zx=\"≍\",Xx=\"∪\",Kx=\"⋓\",Zx=\"⩊\",Jx=\"⊍\",_x=\"⩅\",$x=\"∪︀\",e5=\"↷\",t5=\"⤼\",n5=\"⋞\",r5=\"⋟\",o5=\"⋎\",s5=\"⋏\",i5=\"¤\",l5=\"↶\",c5=\"↷\",a5=\"⋎\",u5=\"⋏\",f5=\"∲\",d5=\"∱\",p5=\"⌭\",h5=\"†\",g5=\"‡\",m5=\"ℸ\",v5=\"↓\",w5=\"↡\",y5=\"⇓\",A5=\"‐\",E5=\"⫤\",x5=\"⊣\",S5=\"⤏\",k5=\"˝\",C5=\"Ď\",D5=\"ď\",R5=\"Д\",T5=\"д\",I5=\"‡\",b5=\"⇊\",N5=\"ⅅ\",O5=\"ⅆ\",P5=\"⤑\",L5=\"⩷\",M5=\"°\",B5=\"∇\",H5=\"Δ\",F5=\"δ\",U5=\"⦱\",q5=\"⥿\",Q5=\"𝔇\",j5=\"𝔡\",V5=\"⥥\",W5=\"⇃\",G5=\"⇂\",Y5=\"´\",z5=\"˙\",X5=\"˝\",K5=\"`\",Z5=\"˜\",J5=\"⋄\",_5=\"⋄\",$5=\"⋄\",e8=\"♦\",t8=\"♦\",n8=\"¨\",r8=\"ⅆ\",o8=\"ϝ\",s8=\"⋲\",i8=\"÷\",l8=\"÷\",c8=\"⋇\",a8=\"⋇\",u8=\"Ђ\",f8=\"ђ\",d8=\"⌞\",p8=\"⌍\",h8=\"$\",g8=\"𝔻\",m8=\"𝕕\",v8=\"¨\",w8=\"˙\",y8=\"⃜\",A8=\"≐\",E8=\"≑\",x8=\"≐\",S8=\"∸\",k8=\"∔\",C8=\"⊡\",D8=\"⌆\",R8=\"∯\",T8=\"¨\",I8=\"⇓\",b8=\"⇐\",N8=\"⇔\",O8=\"⫤\",P8=\"⟸\",L8=\"⟺\",M8=\"⟹\",B8=\"⇒\",H8=\"⊨\",F8=\"⇑\",U8=\"⇕\",q8=\"∥\",Q8=\"⤓\",j8=\"↓\",V8=\"↓\",W8=\"⇓\",G8=\"⇵\",Y8=\"̑\",z8=\"⇊\",X8=\"⇃\",K8=\"⇂\",Z8=\"⥐\",J8=\"⥞\",_8=\"⥖\",$8=\"↽\",eS=\"⥟\",tS=\"⥗\",nS=\"⇁\",rS=\"↧\",oS=\"⊤\",sS=\"⤐\",iS=\"⌟\",lS=\"⌌\",cS=\"𝒟\",aS=\"𝒹\",uS=\"Ѕ\",fS=\"ѕ\",dS=\"⧶\",pS=\"Đ\",hS=\"đ\",gS=\"⋱\",mS=\"▿\",vS=\"▾\",wS=\"⇵\",yS=\"⥯\",AS=\"⦦\",ES=\"Џ\",xS=\"џ\",SS=\"⟿\",kS=\"É\",CS=\"é\",DS=\"⩮\",RS=\"Ě\",TS=\"ě\",IS=\"Ê\",bS=\"ê\",NS=\"≖\",OS=\"≕\",PS=\"Э\",LS=\"э\",MS=\"⩷\",BS=\"Ė\",HS=\"ė\",FS=\"≑\",US=\"ⅇ\",qS=\"≒\",QS=\"𝔈\",jS=\"𝔢\",VS=\"⪚\",WS=\"È\",GS=\"è\",YS=\"⪖\",zS=\"⪘\",XS=\"⪙\",KS=\"∈\",ZS=\"⏧\",JS=\"ℓ\",_S=\"⪕\",$S=\"⪗\",e3=\"Ē\",t3=\"ē\",n3=\"∅\",r3=\"∅\",o3=\"◻\",s3=\"∅\",i3=\"▫\",l3=\" \",c3=\" \",a3=\" \",u3=\"Ŋ\",f3=\"ŋ\",d3=\" \",p3=\"Ę\",h3=\"ę\",g3=\"𝔼\",m3=\"𝕖\",v3=\"⋕\",w3=\"⧣\",y3=\"⩱\",A3=\"ε\",E3=\"Ε\",x3=\"ε\",S3=\"ϵ\",k3=\"≖\",C3=\"≕\",D3=\"≂\",R3=\"⪖\",T3=\"⪕\",I3=\"⩵\",b3=\"=\",N3=\"≂\",O3=\"≟\",P3=\"⇌\",L3=\"≡\",M3=\"⩸\",B3=\"⧥\",H3=\"⥱\",F3=\"≓\",U3=\"ℯ\",q3=\"ℰ\",Q3=\"≐\",j3=\"⩳\",V3=\"≂\",W3=\"Η\",G3=\"η\",Y3=\"Ð\",z3=\"ð\",X3=\"Ë\",K3=\"ë\",Z3=\"€\",J3=\"!\",_3=\"∃\",$3=\"∃\",ek=\"ℰ\",tk=\"ⅇ\",nk=\"ⅇ\",rk=\"≒\",ok=\"Ф\",sk=\"ф\",ik=\"♀\",lk=\"ﬃ\",ck=\"ﬀ\",ak=\"ﬄ\",uk=\"𝔉\",fk=\"𝔣\",dk=\"ﬁ\",pk=\"◼\",hk=\"▪\",gk=\"fj\",mk=\"♭\",vk=\"ﬂ\",wk=\"▱\",yk=\"ƒ\",Ak=\"𝔽\",Ek=\"𝕗\",xk=\"∀\",Sk=\"∀\",kk=\"⋔\",Ck=\"⫙\",Dk=\"ℱ\",Rk=\"⨍\",Tk=\"½\",Ik=\"⅓\",bk=\"¼\",Nk=\"⅕\",Ok=\"⅙\",Pk=\"⅛\",Lk=\"⅔\",Mk=\"⅖\",Bk=\"¾\",Hk=\"⅗\",Fk=\"⅜\",Uk=\"⅘\",qk=\"⅚\",Qk=\"⅝\",jk=\"⅞\",Vk=\"⁄\",Wk=\"⌢\",Gk=\"𝒻\",Yk=\"ℱ\",zk=\"ǵ\",Xk=\"Γ\",Kk=\"γ\",Zk=\"Ϝ\",Jk=\"ϝ\",_k=\"⪆\",$k=\"Ğ\",eC=\"ğ\",tC=\"Ģ\",nC=\"Ĝ\",rC=\"ĝ\",oC=\"Г\",sC=\"г\",iC=\"Ġ\",lC=\"ġ\",cC=\"≥\",aC=\"≧\",uC=\"⪌\",fC=\"⋛\",dC=\"≥\",pC=\"≧\",hC=\"⩾\",gC=\"⪩\",mC=\"⩾\",vC=\"⪀\",wC=\"⪂\",yC=\"⪄\",AC=\"⋛︀\",EC=\"⪔\",xC=\"𝔊\",SC=\"𝔤\",kC=\"≫\",CC=\"⋙\",DC=\"⋙\",RC=\"ℷ\",TC=\"Ѓ\",IC=\"ѓ\",bC=\"⪥\",NC=\"≷\",OC=\"⪒\",PC=\"⪤\",LC=\"⪊\",MC=\"⪊\",BC=\"⪈\",HC=\"≩\",FC=\"⪈\",UC=\"≩\",qC=\"⋧\",QC=\"𝔾\",jC=\"𝕘\",VC=\"`\",WC=\"≥\",GC=\"⋛\",YC=\"≧\",zC=\"⪢\",XC=\"≷\",KC=\"⩾\",ZC=\"≳\",JC=\"𝒢\",_C=\"ℊ\",$C=\"≳\",e4=\"⪎\",t4=\"⪐\",n4=\"⪧\",r4=\"⩺\",o4=\">\",s4=\">\",i4=\"≫\",l4=\"⋗\",c4=\"⦕\",a4=\"⩼\",u4=\"⪆\",f4=\"⥸\",d4=\"⋗\",p4=\"⋛\",h4=\"⪌\",g4=\"≷\",m4=\"≳\",v4=\"≩︀\",w4=\"≩︀\",y4=\"ˇ\",A4=\" \",E4=\"½\",x4=\"ℋ\",S4=\"Ъ\",k4=\"ъ\",C4=\"⥈\",D4=\"↔\",R4=\"⇔\",T4=\"↭\",I4=\"^\",b4=\"ℏ\",N4=\"Ĥ\",O4=\"ĥ\",P4=\"♥\",L4=\"♥\",M4=\"…\",B4=\"⊹\",H4=\"𝔥\",F4=\"ℌ\",U4=\"ℋ\",q4=\"⤥\",Q4=\"⤦\",j4=\"⇿\",V4=\"∻\",W4=\"↩\",G4=\"↪\",Y4=\"𝕙\",z4=\"ℍ\",X4=\"―\",K4=\"─\",Z4=\"𝒽\",J4=\"ℋ\",_4=\"ℏ\",$4=\"Ħ\",e7=\"ħ\",t7=\"≎\",n7=\"≏\",r7=\"⁃\",o7=\"‐\",s7=\"Í\",i7=\"í\",l7=\"⁣\",c7=\"Î\",a7=\"î\",u7=\"И\",f7=\"и\",d7=\"İ\",p7=\"Е\",h7=\"е\",g7=\"¡\",m7=\"⇔\",v7=\"𝔦\",w7=\"ℑ\",y7=\"Ì\",A7=\"ì\",E7=\"ⅈ\",x7=\"⨌\",S7=\"∭\",k7=\"⧜\",C7=\"℩\",D7=\"Ĳ\",R7=\"ĳ\",T7=\"Ī\",I7=\"ī\",b7=\"ℑ\",N7=\"ⅈ\",O7=\"ℐ\",P7=\"ℑ\",L7=\"ı\",M7=\"ℑ\",B7=\"⊷\",H7=\"Ƶ\",F7=\"⇒\",U7=\"℅\",q7=\"∞\",Q7=\"⧝\",j7=\"ı\",V7=\"⊺\",W7=\"∫\",G7=\"∬\",Y7=\"ℤ\",z7=\"∫\",X7=\"⊺\",K7=\"⋂\",Z7=\"⨗\",J7=\"⨼\",_7=\"⁣\",$7=\"⁢\",eD=\"Ё\",tD=\"ё\",nD=\"Į\",rD=\"į\",oD=\"𝕀\",sD=\"𝕚\",iD=\"Ι\",lD=\"ι\",cD=\"⨼\",aD=\"¿\",uD=\"𝒾\",fD=\"ℐ\",dD=\"∈\",pD=\"⋵\",hD=\"⋹\",gD=\"⋴\",mD=\"⋳\",vD=\"∈\",wD=\"⁢\",yD=\"Ĩ\",AD=\"ĩ\",ED=\"І\",xD=\"і\",SD=\"Ï\",kD=\"ï\",CD=\"Ĵ\",DD=\"ĵ\",RD=\"Й\",TD=\"й\",ID=\"𝔍\",bD=\"𝔧\",ND=\"ȷ\",OD=\"𝕁\",PD=\"𝕛\",LD=\"𝒥\",MD=\"𝒿\",BD=\"Ј\",HD=\"ј\",FD=\"Є\",UD=\"є\",qD=\"Κ\",QD=\"κ\",jD=\"ϰ\",VD=\"Ķ\",WD=\"ķ\",GD=\"К\",YD=\"к\",zD=\"𝔎\",XD=\"𝔨\",KD=\"ĸ\",ZD=\"Х\",JD=\"х\",_D=\"Ќ\",$D=\"ќ\",eR=\"𝕂\",tR=\"𝕜\",nR=\"𝒦\",rR=\"𝓀\",oR=\"⇚\",sR=\"Ĺ\",iR=\"ĺ\",lR=\"⦴\",cR=\"ℒ\",aR=\"Λ\",uR=\"λ\",fR=\"⟨\",dR=\"⟪\",pR=\"⦑\",hR=\"⟨\",gR=\"⪅\",mR=\"ℒ\",vR=\"«\",wR=\"⇤\",yR=\"⤟\",AR=\"←\",ER=\"↞\",xR=\"⇐\",SR=\"⤝\",kR=\"↩\",CR=\"↫\",DR=\"⤹\",RR=\"⥳\",TR=\"↢\",IR=\"⤙\",bR=\"⤛\",NR=\"⪫\",OR=\"⪭\",PR=\"⪭︀\",LR=\"⤌\",MR=\"⤎\",BR=\"❲\",HR=\"{\",FR=\"[\",UR=\"⦋\",qR=\"⦏\",QR=\"⦍\",jR=\"Ľ\",VR=\"ľ\",WR=\"Ļ\",GR=\"ļ\",YR=\"⌈\",zR=\"{\",XR=\"Л\",KR=\"л\",ZR=\"⤶\",JR=\"“\",_R=\"„\",$R=\"⥧\",eT=\"⥋\",tT=\"↲\",nT=\"≤\",rT=\"≦\",oT=\"⟨\",sT=\"⇤\",iT=\"←\",lT=\"←\",cT=\"⇐\",aT=\"⇆\",uT=\"↢\",fT=\"⌈\",dT=\"⟦\",pT=\"⥡\",hT=\"⥙\",gT=\"⇃\",mT=\"⌊\",vT=\"↽\",wT=\"↼\",yT=\"⇇\",AT=\"↔\",ET=\"↔\",xT=\"⇔\",ST=\"⇆\",kT=\"⇋\",CT=\"↭\",DT=\"⥎\",RT=\"↤\",TT=\"⊣\",IT=\"⥚\",bT=\"⋋\",NT=\"⧏\",OT=\"⊲\",PT=\"⊴\",LT=\"⥑\",MT=\"⥠\",BT=\"⥘\",HT=\"↿\",FT=\"⥒\",UT=\"↼\",qT=\"⪋\",QT=\"⋚\",jT=\"≤\",VT=\"≦\",WT=\"⩽\",GT=\"⪨\",YT=\"⩽\",zT=\"⩿\",XT=\"⪁\",KT=\"⪃\",ZT=\"⋚︀\",JT=\"⪓\",_T=\"⪅\",$T=\"⋖\",eI=\"⋚\",tI=\"⪋\",nI=\"⋚\",rI=\"≦\",oI=\"≶\",sI=\"≶\",iI=\"⪡\",lI=\"≲\",cI=\"⩽\",aI=\"≲\",uI=\"⥼\",fI=\"⌊\",dI=\"𝔏\",pI=\"𝔩\",hI=\"≶\",gI=\"⪑\",mI=\"⥢\",vI=\"↽\",wI=\"↼\",yI=\"⥪\",AI=\"▄\",EI=\"Љ\",xI=\"љ\",SI=\"⇇\",kI=\"≪\",CI=\"⋘\",DI=\"⌞\",RI=\"⇚\",TI=\"⥫\",II=\"◺\",bI=\"Ŀ\",NI=\"ŀ\",OI=\"⎰\",PI=\"⎰\",LI=\"⪉\",MI=\"⪉\",BI=\"⪇\",HI=\"≨\",FI=\"⪇\",UI=\"≨\",qI=\"⋦\",QI=\"⟬\",jI=\"⇽\",VI=\"⟦\",WI=\"⟵\",GI=\"⟵\",YI=\"⟸\",zI=\"⟷\",XI=\"⟷\",KI=\"⟺\",ZI=\"⟼\",JI=\"⟶\",_I=\"⟶\",$I=\"⟹\",e6=\"↫\",t6=\"↬\",n6=\"⦅\",r6=\"𝕃\",o6=\"𝕝\",s6=\"⨭\",i6=\"⨴\",l6=\"∗\",c6=\"_\",a6=\"↙\",u6=\"↘\",f6=\"◊\",d6=\"◊\",p6=\"⧫\",h6=\"(\",g6=\"⦓\",m6=\"⇆\",v6=\"⌟\",w6=\"⇋\",y6=\"⥭\",A6=\"‎\",E6=\"⊿\",x6=\"‹\",S6=\"𝓁\",k6=\"ℒ\",C6=\"↰\",D6=\"↰\",R6=\"≲\",T6=\"⪍\",I6=\"⪏\",b6=\"[\",N6=\"‘\",O6=\"‚\",P6=\"Ł\",L6=\"ł\",M6=\"⪦\",B6=\"⩹\",H6=\"<\",F6=\"<\",U6=\"≪\",q6=\"⋖\",Q6=\"⋋\",j6=\"⋉\",V6=\"⥶\",W6=\"⩻\",G6=\"◃\",Y6=\"⊴\",z6=\"◂\",X6=\"⦖\",K6=\"⥊\",Z6=\"⥦\",J6=\"≨︀\",_6=\"≨︀\",$6=\"¯\",eb=\"♂\",tb=\"✠\",nb=\"✠\",rb=\"↦\",ob=\"↦\",sb=\"↧\",ib=\"↤\",lb=\"↥\",cb=\"▮\",ab=\"⨩\",ub=\"М\",fb=\"м\",db=\"—\",pb=\"∺\",hb=\"∡\",gb=\" \",mb=\"ℳ\",vb=\"𝔐\",wb=\"𝔪\",yb=\"℧\",Ab=\"µ\",Eb=\"*\",xb=\"⫰\",Sb=\"∣\",kb=\"·\",Cb=\"⊟\",Db=\"−\",Rb=\"∸\",Tb=\"⨪\",Ib=\"∓\",bb=\"⫛\",Nb=\"…\",Ob=\"∓\",Pb=\"⊧\",Lb=\"𝕄\",Mb=\"𝕞\",Bb=\"∓\",Hb=\"𝓂\",Fb=\"ℳ\",Ub=\"∾\",qb=\"Μ\",Qb=\"μ\",jb=\"⊸\",Vb=\"⊸\",Wb=\"∇\",Gb=\"Ń\",Yb=\"ń\",zb=\"∠⃒\",Xb=\"≉\",Kb=\"⩰̸\",Zb=\"≋̸\",Jb=\"ŉ\",_b=\"≉\",$b=\"♮\",eN=\"ℕ\",tN=\"♮\",nN=\" \",rN=\"≎̸\",oN=\"≏̸\",sN=\"⩃\",iN=\"Ň\",lN=\"ň\",cN=\"Ņ\",aN=\"ņ\",uN=\"≇\",fN=\"⩭̸\",dN=\"⩂\",pN=\"Н\",hN=\"н\",gN=\"–\",mN=\"⤤\",vN=\"↗\",wN=\"⇗\",yN=\"↗\",AN=\"≠\",EN=\"≐̸\",xN=\"​\",SN=\"​\",kN=\"​\",CN=\"​\",DN=\"≢\",RN=\"⤨\",TN=\"≂̸\",IN=\"≫\",bN=\"≪\",NN=`\n`,ON=\"∄\",PN=\"∄\",LN=\"𝔑\",MN=\"𝔫\",BN=\"≧̸\",HN=\"≱\",FN=\"≱\",UN=\"≧̸\",qN=\"⩾̸\",QN=\"⩾̸\",jN=\"⋙̸\",VN=\"≵\",WN=\"≫⃒\",GN=\"≯\",YN=\"≯\",zN=\"≫̸\",XN=\"↮\",KN=\"⇎\",ZN=\"⫲\",JN=\"∋\",_N=\"⋼\",$N=\"⋺\",eO=\"∋\",tO=\"Њ\",nO=\"њ\",rO=\"↚\",oO=\"⇍\",sO=\"‥\",iO=\"≦̸\",lO=\"≰\",cO=\"↚\",aO=\"⇍\",uO=\"↮\",fO=\"⇎\",dO=\"≰\",pO=\"≦̸\",hO=\"⩽̸\",gO=\"⩽̸\",mO=\"≮\",vO=\"⋘̸\",wO=\"≴\",yO=\"≪⃒\",AO=\"≮\",EO=\"⋪\",xO=\"⋬\",SO=\"≪̸\",kO=\"∤\",CO=\"⁠\",DO=\" \",RO=\"𝕟\",TO=\"ℕ\",IO=\"⫬\",bO=\"¬\",NO=\"≢\",OO=\"≭\",PO=\"∦\",LO=\"∉\",MO=\"≠\",BO=\"≂̸\",HO=\"∄\",FO=\"≯\",UO=\"≱\",qO=\"≧̸\",QO=\"≫̸\",jO=\"≹\",VO=\"⩾̸\",WO=\"≵\",GO=\"≎̸\",YO=\"≏̸\",zO=\"∉\",XO=\"⋵̸\",KO=\"⋹̸\",ZO=\"∉\",JO=\"⋷\",_O=\"⋶\",$O=\"⧏̸\",eP=\"⋪\",tP=\"⋬\",nP=\"≮\",rP=\"≰\",oP=\"≸\",sP=\"≪̸\",iP=\"⩽̸\",lP=\"≴\",cP=\"⪢̸\",aP=\"⪡̸\",uP=\"∌\",fP=\"∌\",dP=\"⋾\",pP=\"⋽\",hP=\"⊀\",gP=\"⪯̸\",mP=\"⋠\",vP=\"∌\",wP=\"⧐̸\",yP=\"⋫\",AP=\"⋭\",EP=\"⊏̸\",xP=\"⋢\",SP=\"⊐̸\",kP=\"⋣\",CP=\"⊂⃒\",DP=\"⊈\",RP=\"⊁\",TP=\"⪰̸\",IP=\"⋡\",bP=\"≿̸\",NP=\"⊃⃒\",OP=\"⊉\",PP=\"≁\",LP=\"≄\",MP=\"≇\",BP=\"≉\",HP=\"∤\",FP=\"∦\",UP=\"∦\",qP=\"⫽⃥\",QP=\"∂̸\",jP=\"⨔\",VP=\"⊀\",WP=\"⋠\",GP=\"⊀\",YP=\"⪯̸\",zP=\"⪯̸\",XP=\"⤳̸\",KP=\"↛\",ZP=\"⇏\",JP=\"↝̸\",_P=\"↛\",$P=\"⇏\",eL=\"⋫\",tL=\"⋭\",nL=\"⊁\",rL=\"⋡\",oL=\"⪰̸\",sL=\"𝒩\",iL=\"𝓃\",lL=\"∤\",cL=\"∦\",aL=\"≁\",uL=\"≄\",fL=\"≄\",dL=\"∤\",pL=\"∦\",hL=\"⋢\",gL=\"⋣\",mL=\"⊄\",vL=\"⫅̸\",wL=\"⊈\",yL=\"⊂⃒\",AL=\"⊈\",EL=\"⫅̸\",xL=\"⊁\",SL=\"⪰̸\",kL=\"⊅\",CL=\"⫆̸\",DL=\"⊉\",RL=\"⊃⃒\",TL=\"⊉\",IL=\"⫆̸\",bL=\"≹\",NL=\"Ñ\",OL=\"ñ\",PL=\"≸\",LL=\"⋪\",ML=\"⋬\",BL=\"⋫\",HL=\"⋭\",FL=\"Ν\",UL=\"ν\",qL=\"#\",QL=\"№\",jL=\" \",VL=\"≍⃒\",WL=\"⊬\",GL=\"⊭\",YL=\"⊮\",zL=\"⊯\",XL=\"≥⃒\",KL=\">⃒\",ZL=\"⤄\",JL=\"⧞\",_L=\"⤂\",$L=\"≤⃒\",e9=\"<⃒\",t9=\"⊴⃒\",n9=\"⤃\",r9=\"⊵⃒\",o9=\"∼⃒\",s9=\"⤣\",i9=\"↖\",l9=\"⇖\",c9=\"↖\",a9=\"⤧\",u9=\"Ó\",f9=\"ó\",d9=\"⊛\",p9=\"Ô\",h9=\"ô\",g9=\"⊚\",m9=\"О\",v9=\"о\",w9=\"⊝\",y9=\"Ő\",A9=\"ő\",E9=\"⨸\",x9=\"⊙\",S9=\"⦼\",k9=\"Œ\",C9=\"œ\",D9=\"⦿\",R9=\"𝔒\",T9=\"𝔬\",I9=\"˛\",b9=\"Ò\",N9=\"ò\",O9=\"⧁\",P9=\"⦵\",L9=\"Ω\",M9=\"∮\",B9=\"↺\",H9=\"⦾\",F9=\"⦻\",U9=\"‾\",q9=\"⧀\",Q9=\"Ō\",j9=\"ō\",V9=\"Ω\",W9=\"ω\",G9=\"Ο\",Y9=\"ο\",z9=\"⦶\",X9=\"⊖\",K9=\"𝕆\",Z9=\"𝕠\",J9=\"⦷\",_9=\"“\",$9=\"‘\",eM=\"⦹\",tM=\"⊕\",nM=\"↻\",rM=\"⩔\",oM=\"∨\",sM=\"⩝\",iM=\"ℴ\",lM=\"ℴ\",cM=\"ª\",aM=\"º\",uM=\"⊶\",fM=\"⩖\",dM=\"⩗\",pM=\"⩛\",hM=\"Ⓢ\",gM=\"𝒪\",mM=\"ℴ\",vM=\"Ø\",wM=\"ø\",yM=\"⊘\",AM=\"Õ\",EM=\"õ\",xM=\"⨶\",SM=\"⨷\",kM=\"⊗\",CM=\"Ö\",DM=\"ö\",RM=\"⌽\",TM=\"‾\",IM=\"⏞\",bM=\"⎴\",NM=\"⏜\",OM=\"¶\",PM=\"∥\",LM=\"∥\",MM=\"⫳\",BM=\"⫽\",HM=\"∂\",FM=\"∂\",UM=\"П\",qM=\"п\",QM=\"%\",jM=\".\",VM=\"‰\",WM=\"⊥\",GM=\"‱\",YM=\"𝔓\",zM=\"𝔭\",XM=\"Φ\",KM=\"φ\",ZM=\"ϕ\",JM=\"ℳ\",_M=\"☎\",$M=\"Π\",eB=\"π\",tB=\"⋔\",nB=\"ϖ\",rB=\"ℏ\",oB=\"ℎ\",sB=\"ℏ\",iB=\"⨣\",lB=\"⊞\",cB=\"⨢\",aB=\"+\",uB=\"∔\",fB=\"⨥\",dB=\"⩲\",pB=\"±\",hB=\"±\",gB=\"⨦\",mB=\"⨧\",vB=\"±\",wB=\"ℌ\",yB=\"⨕\",AB=\"𝕡\",EB=\"ℙ\",xB=\"£\",SB=\"⪷\",kB=\"⪻\",CB=\"≺\",DB=\"≼\",RB=\"⪷\",TB=\"≺\",IB=\"≼\",bB=\"≺\",NB=\"⪯\",OB=\"≼\",PB=\"≾\",LB=\"⪯\",MB=\"⪹\",BB=\"⪵\",HB=\"⋨\",FB=\"⪯\",UB=\"⪳\",qB=\"≾\",QB=\"′\",jB=\"″\",VB=\"ℙ\",WB=\"⪹\",GB=\"⪵\",YB=\"⋨\",zB=\"∏\",XB=\"∏\",KB=\"⌮\",ZB=\"⌒\",JB=\"⌓\",_B=\"∝\",$B=\"∝\",eH=\"∷\",tH=\"∝\",nH=\"≾\",rH=\"⊰\",oH=\"𝒫\",sH=\"𝓅\",iH=\"Ψ\",lH=\"ψ\",cH=\" \",aH=\"𝔔\",uH=\"𝔮\",fH=\"⨌\",dH=\"𝕢\",pH=\"ℚ\",hH=\"⁗\",gH=\"𝒬\",mH=\"𝓆\",vH=\"ℍ\",wH=\"⨖\",yH=\"?\",AH=\"≟\",EH='\"',xH='\"',SH=\"⇛\",kH=\"∽̱\",CH=\"Ŕ\",DH=\"ŕ\",RH=\"√\",TH=\"⦳\",IH=\"⟩\",bH=\"⟫\",NH=\"⦒\",OH=\"⦥\",PH=\"⟩\",LH=\"»\",MH=\"⥵\",BH=\"⇥\",HH=\"⤠\",FH=\"⤳\",UH=\"→\",qH=\"↠\",QH=\"⇒\",jH=\"⤞\",VH=\"↪\",WH=\"↬\",GH=\"⥅\",YH=\"⥴\",zH=\"⤖\",XH=\"↣\",KH=\"↝\",ZH=\"⤚\",JH=\"⤜\",_H=\"∶\",$H=\"ℚ\",eF=\"⤍\",tF=\"⤏\",nF=\"⤐\",rF=\"❳\",oF=\"}\",sF=\"]\",iF=\"⦌\",lF=\"⦎\",cF=\"⦐\",aF=\"Ř\",uF=\"ř\",fF=\"Ŗ\",dF=\"ŗ\",pF=\"⌉\",hF=\"}\",gF=\"Р\",mF=\"р\",vF=\"⤷\",wF=\"⥩\",yF=\"”\",AF=\"”\",EF=\"↳\",xF=\"ℜ\",SF=\"ℛ\",kF=\"ℜ\",CF=\"ℝ\",DF=\"ℜ\",RF=\"▭\",TF=\"®\",IF=\"®\",bF=\"∋\",NF=\"⇋\",OF=\"⥯\",PF=\"⥽\",LF=\"⌋\",MF=\"𝔯\",BF=\"ℜ\",HF=\"⥤\",FF=\"⇁\",UF=\"⇀\",qF=\"⥬\",QF=\"Ρ\",jF=\"ρ\",VF=\"ϱ\",WF=\"⟩\",GF=\"⇥\",YF=\"→\",zF=\"→\",XF=\"⇒\",KF=\"⇄\",ZF=\"↣\",JF=\"⌉\",_F=\"⟧\",$F=\"⥝\",eU=\"⥕\",tU=\"⇂\",nU=\"⌋\",rU=\"⇁\",oU=\"⇀\",sU=\"⇄\",iU=\"⇌\",lU=\"⇉\",cU=\"↝\",aU=\"↦\",uU=\"⊢\",fU=\"⥛\",dU=\"⋌\",pU=\"⧐\",hU=\"⊳\",gU=\"⊵\",mU=\"⥏\",vU=\"⥜\",wU=\"⥔\",yU=\"↾\",AU=\"⥓\",EU=\"⇀\",xU=\"˚\",SU=\"≓\",kU=\"⇄\",CU=\"⇌\",DU=\"‏\",RU=\"⎱\",TU=\"⎱\",IU=\"⫮\",bU=\"⟭\",NU=\"⇾\",OU=\"⟧\",PU=\"⦆\",LU=\"𝕣\",MU=\"ℝ\",BU=\"⨮\",HU=\"⨵\",FU=\"⥰\",UU=\")\",qU=\"⦔\",QU=\"⨒\",jU=\"⇉\",VU=\"⇛\",WU=\"›\",GU=\"𝓇\",YU=\"ℛ\",zU=\"↱\",XU=\"↱\",KU=\"]\",ZU=\"’\",JU=\"’\",_U=\"⋌\",$U=\"⋊\",eq=\"▹\",tq=\"⊵\",nq=\"▸\",rq=\"⧎\",oq=\"⧴\",sq=\"⥨\",iq=\"℞\",lq=\"Ś\",cq=\"ś\",aq=\"‚\",uq=\"⪸\",fq=\"Š\",dq=\"š\",pq=\"⪼\",hq=\"≻\",gq=\"≽\",mq=\"⪰\",vq=\"⪴\",wq=\"Ş\",yq=\"ş\",Aq=\"Ŝ\",Eq=\"ŝ\",xq=\"⪺\",Sq=\"⪶\",kq=\"⋩\",Cq=\"⨓\",Dq=\"≿\",Rq=\"С\",Tq=\"с\",Iq=\"⊡\",bq=\"⋅\",Nq=\"⩦\",Oq=\"⤥\",Pq=\"↘\",Lq=\"⇘\",Mq=\"↘\",Bq=\"§\",Hq=\";\",Fq=\"⤩\",Uq=\"∖\",qq=\"∖\",Qq=\"✶\",jq=\"𝔖\",Vq=\"𝔰\",Wq=\"⌢\",Gq=\"♯\",Yq=\"Щ\",zq=\"щ\",Xq=\"Ш\",Kq=\"ш\",Zq=\"↓\",Jq=\"←\",_q=\"∣\",$q=\"∥\",eQ=\"→\",tQ=\"↑\",nQ=\"­\",rQ=\"Σ\",oQ=\"σ\",sQ=\"ς\",iQ=\"ς\",lQ=\"∼\",cQ=\"⩪\",aQ=\"≃\",uQ=\"≃\",fQ=\"⪞\",dQ=\"⪠\",pQ=\"⪝\",hQ=\"⪟\",gQ=\"≆\",mQ=\"⨤\",vQ=\"⥲\",wQ=\"←\",yQ=\"∘\",AQ=\"∖\",EQ=\"⨳\",xQ=\"⧤\",SQ=\"∣\",kQ=\"⌣\",CQ=\"⪪\",DQ=\"⪬\",RQ=\"⪬︀\",TQ=\"Ь\",IQ=\"ь\",bQ=\"⌿\",NQ=\"⧄\",OQ=\"/\",PQ=\"𝕊\",LQ=\"𝕤\",MQ=\"♠\",BQ=\"♠\",HQ=\"∥\",FQ=\"⊓\",UQ=\"⊓︀\",qQ=\"⊔\",QQ=\"⊔︀\",jQ=\"√\",VQ=\"⊏\",WQ=\"⊑\",GQ=\"⊏\",YQ=\"⊑\",zQ=\"⊐\",XQ=\"⊒\",KQ=\"⊐\",ZQ=\"⊒\",JQ=\"□\",_Q=\"□\",$Q=\"⊓\",ej=\"⊏\",tj=\"⊑\",nj=\"⊐\",rj=\"⊒\",oj=\"⊔\",sj=\"▪\",ij=\"□\",lj=\"▪\",cj=\"→\",aj=\"𝒮\",uj=\"𝓈\",fj=\"∖\",dj=\"⌣\",pj=\"⋆\",hj=\"⋆\",gj=\"☆\",mj=\"★\",vj=\"ϵ\",wj=\"ϕ\",yj=\"¯\",Aj=\"⊂\",Ej=\"⋐\",xj=\"⪽\",Sj=\"⫅\",kj=\"⊆\",Cj=\"⫃\",Dj=\"⫁\",Rj=\"⫋\",Tj=\"⊊\",Ij=\"⪿\",bj=\"⥹\",Nj=\"⊂\",Oj=\"⋐\",Pj=\"⊆\",Lj=\"⫅\",Mj=\"⊆\",Bj=\"⊊\",Hj=\"⫋\",Fj=\"⫇\",Uj=\"⫕\",qj=\"⫓\",Qj=\"⪸\",jj=\"≻\",Vj=\"≽\",Wj=\"≻\",Gj=\"⪰\",Yj=\"≽\",zj=\"≿\",Xj=\"⪰\",Kj=\"⪺\",Zj=\"⪶\",Jj=\"⋩\",_j=\"≿\",$j=\"∋\",eV=\"∑\",tV=\"∑\",nV=\"♪\",rV=\"¹\",oV=\"²\",sV=\"³\",iV=\"⊃\",lV=\"⋑\",cV=\"⪾\",aV=\"⫘\",uV=\"⫆\",fV=\"⊇\",dV=\"⫄\",pV=\"⊃\",hV=\"⊇\",gV=\"⟉\",mV=\"⫗\",vV=\"⥻\",wV=\"⫂\",yV=\"⫌\",AV=\"⊋\",EV=\"⫀\",xV=\"⊃\",SV=\"⋑\",kV=\"⊇\",CV=\"⫆\",DV=\"⊋\",RV=\"⫌\",TV=\"⫈\",IV=\"⫔\",bV=\"⫖\",NV=\"⤦\",OV=\"↙\",PV=\"⇙\",LV=\"↙\",MV=\"⤪\",BV=\"ß\",HV=\"\t\",FV=\"⌖\",UV=\"Τ\",qV=\"τ\",QV=\"⎴\",jV=\"Ť\",VV=\"ť\",WV=\"Ţ\",GV=\"ţ\",YV=\"Т\",zV=\"т\",XV=\"⃛\",KV=\"⌕\",ZV=\"𝔗\",JV=\"𝔱\",_V=\"∴\",$V=\"∴\",eW=\"∴\",tW=\"Θ\",nW=\"θ\",rW=\"ϑ\",oW=\"ϑ\",sW=\"≈\",iW=\"∼\",lW=\"  \",cW=\" \",aW=\" \",uW=\"≈\",fW=\"∼\",dW=\"Þ\",pW=\"þ\",hW=\"˜\",gW=\"∼\",mW=\"≃\",vW=\"≅\",wW=\"≈\",yW=\"⨱\",AW=\"⊠\",EW=\"×\",xW=\"⨰\",SW=\"∭\",kW=\"⤨\",CW=\"⌶\",DW=\"⫱\",RW=\"⊤\",TW=\"𝕋\",IW=\"𝕥\",bW=\"⫚\",NW=\"⤩\",OW=\"‴\",PW=\"™\",LW=\"™\",MW=\"▵\",BW=\"▿\",HW=\"◃\",FW=\"⊴\",UW=\"≜\",qW=\"▹\",QW=\"⊵\",jW=\"◬\",VW=\"≜\",WW=\"⨺\",GW=\"⃛\",YW=\"⨹\",zW=\"⧍\",XW=\"⨻\",KW=\"⏢\",ZW=\"𝒯\",JW=\"𝓉\",_W=\"Ц\",$W=\"ц\",eG=\"Ћ\",tG=\"ћ\",nG=\"Ŧ\",rG=\"ŧ\",oG=\"≬\",sG=\"↞\",iG=\"↠\",lG=\"Ú\",cG=\"ú\",aG=\"↑\",uG=\"↟\",fG=\"⇑\",dG=\"⥉\",pG=\"Ў\",hG=\"ў\",gG=\"Ŭ\",mG=\"ŭ\",vG=\"Û\",wG=\"û\",yG=\"У\",AG=\"у\",EG=\"⇅\",xG=\"Ű\",SG=\"ű\",kG=\"⥮\",CG=\"⥾\",DG=\"𝔘\",RG=\"𝔲\",TG=\"Ù\",IG=\"ù\",bG=\"⥣\",NG=\"↿\",OG=\"↾\",PG=\"▀\",LG=\"⌜\",MG=\"⌜\",BG=\"⌏\",HG=\"◸\",FG=\"Ū\",UG=\"ū\",qG=\"¨\",QG=\"_\",jG=\"⏟\",VG=\"⎵\",WG=\"⏝\",GG=\"⋃\",YG=\"⊎\",zG=\"Ų\",XG=\"ų\",KG=\"𝕌\",ZG=\"𝕦\",JG=\"⤒\",_G=\"↑\",$G=\"↑\",eY=\"⇑\",tY=\"⇅\",nY=\"↕\",rY=\"↕\",oY=\"⇕\",sY=\"⥮\",iY=\"↿\",lY=\"↾\",cY=\"⊎\",aY=\"↖\",uY=\"↗\",fY=\"υ\",dY=\"ϒ\",pY=\"ϒ\",hY=\"Υ\",gY=\"υ\",mY=\"↥\",vY=\"⊥\",wY=\"⇈\",yY=\"⌝\",AY=\"⌝\",EY=\"⌎\",xY=\"Ů\",SY=\"ů\",kY=\"◹\",CY=\"𝒰\",DY=\"𝓊\",RY=\"⋰\",TY=\"Ũ\",IY=\"ũ\",bY=\"▵\",NY=\"▴\",OY=\"⇈\",PY=\"Ü\",LY=\"ü\",MY=\"⦧\",BY=\"⦜\",HY=\"ϵ\",FY=\"ϰ\",UY=\"∅\",qY=\"ϕ\",QY=\"ϖ\",jY=\"∝\",VY=\"↕\",WY=\"⇕\",GY=\"ϱ\",YY=\"ς\",zY=\"⊊︀\",XY=\"⫋︀\",KY=\"⊋︀\",ZY=\"⫌︀\",JY=\"ϑ\",_Y=\"⊲\",$Y=\"⊳\",ez=\"⫨\",tz=\"⫫\",nz=\"⫩\",rz=\"В\",oz=\"в\",sz=\"⊢\",iz=\"⊨\",lz=\"⊩\",cz=\"⊫\",az=\"⫦\",uz=\"⊻\",fz=\"∨\",dz=\"⋁\",pz=\"≚\",hz=\"⋮\",gz=\"|\",mz=\"‖\",vz=\"|\",wz=\"‖\",yz=\"∣\",Az=\"|\",Ez=\"❘\",xz=\"≀\",Sz=\" \",kz=\"𝔙\",Cz=\"𝔳\",Dz=\"⊲\",Rz=\"⊂⃒\",Tz=\"⊃⃒\",Iz=\"𝕍\",bz=\"𝕧\",Nz=\"∝\",Oz=\"⊳\",Pz=\"𝒱\",Lz=\"𝓋\",Mz=\"⫋︀\",Bz=\"⊊︀\",Hz=\"⫌︀\",Fz=\"⊋︀\",Uz=\"⊪\",qz=\"⦚\",Qz=\"Ŵ\",jz=\"ŵ\",Vz=\"⩟\",Wz=\"∧\",Gz=\"⋀\",Yz=\"≙\",zz=\"℘\",Xz=\"𝔚\",Kz=\"𝔴\",Zz=\"𝕎\",Jz=\"𝕨\",_z=\"℘\",$z=\"≀\",eX=\"≀\",tX=\"𝒲\",nX=\"𝓌\",rX=\"⋂\",oX=\"◯\",sX=\"⋃\",iX=\"▽\",lX=\"𝔛\",cX=\"𝔵\",aX=\"⟷\",uX=\"⟺\",fX=\"Ξ\",dX=\"ξ\",pX=\"⟵\",hX=\"⟸\",gX=\"⟼\",mX=\"⋻\",vX=\"⨀\",wX=\"𝕏\",yX=\"𝕩\",AX=\"⨁\",EX=\"⨂\",xX=\"⟶\",SX=\"⟹\",kX=\"𝒳\",CX=\"𝓍\",DX=\"⨆\",RX=\"⨄\",TX=\"△\",IX=\"⋁\",bX=\"⋀\",NX=\"Ý\",OX=\"ý\",PX=\"Я\",LX=\"я\",MX=\"Ŷ\",BX=\"ŷ\",HX=\"Ы\",FX=\"ы\",UX=\"¥\",qX=\"𝔜\",QX=\"𝔶\",jX=\"Ї\",VX=\"ї\",WX=\"𝕐\",GX=\"𝕪\",YX=\"𝒴\",zX=\"𝓎\",XX=\"Ю\",KX=\"ю\",ZX=\"ÿ\",JX=\"Ÿ\",_X=\"Ź\",$X=\"ź\",eK=\"Ž\",tK=\"ž\",nK=\"З\",rK=\"з\",oK=\"Ż\",sK=\"ż\",iK=\"ℨ\",lK=\"​\",cK=\"Ζ\",aK=\"ζ\",uK=\"𝔷\",fK=\"ℨ\",dK=\"Ж\",pK=\"ж\",hK=\"⇝\",gK=\"𝕫\",mK=\"ℤ\",vK=\"𝒵\",wK=\"𝓏\",yK=\"‍\",AK=\"‌\",L0={Aacute:ow,aacute:sw,Abreve:iw,abreve:lw,ac:cw,acd:aw,acE:uw,Acirc:fw,acirc:dw,acute:pw,Acy:hw,acy:gw,AElig:mw,aelig:vw,af:ww,Afr:yw,afr:Aw,Agrave:Ew,agrave:xw,alefsym:Sw,aleph:kw,Alpha:Cw,alpha:Dw,Amacr:Rw,amacr:Tw,amalg:Iw,amp:bw,AMP:Nw,andand:Ow,And:Pw,and:Lw,andd:Mw,andslope:Bw,andv:Hw,ang:Fw,ange:Uw,angle:qw,angmsdaa:Qw,angmsdab:jw,angmsdac:Vw,angmsdad:Ww,angmsdae:Gw,angmsdaf:Yw,angmsdag:zw,angmsdah:Xw,angmsd:Kw,angrt:Zw,angrtvb:Jw,angrtvbd:_w,angsph:$w,angst:ey,angzarr:ty,Aogon:ny,aogon:ry,Aopf:oy,aopf:sy,apacir:iy,ap:ly,apE:cy,ape:ay,apid:uy,apos:fy,ApplyFunction:dy,approx:py,approxeq:hy,Aring:gy,aring:my,Ascr:vy,ascr:wy,Assign:yy,ast:Ay,asymp:Ey,asympeq:xy,Atilde:Sy,atilde:ky,Auml:Cy,auml:Dy,awconint:Ry,awint:Ty,backcong:Iy,backepsilon:by,backprime:Ny,backsim:Oy,backsimeq:Py,Backslash:Ly,Barv:My,barvee:By,barwed:Hy,Barwed:Fy,barwedge:Uy,bbrk:qy,bbrktbrk:Qy,bcong:jy,Bcy:Vy,bcy:Wy,bdquo:Gy,becaus:Yy,because:zy,Because:Xy,bemptyv:Ky,bepsi:Zy,bernou:Jy,Bernoullis:_y,Beta:$y,beta:eA,beth:tA,between:nA,Bfr:rA,bfr:oA,bigcap:sA,bigcirc:iA,bigcup:lA,bigodot:cA,bigoplus:aA,bigotimes:uA,bigsqcup:fA,bigstar:dA,bigtriangledown:pA,bigtriangleup:hA,biguplus:gA,bigvee:mA,bigwedge:vA,bkarow:wA,blacklozenge:yA,blacksquare:AA,blacktriangle:EA,blacktriangledown:xA,blacktriangleleft:SA,blacktriangleright:kA,blank:CA,blk12:DA,blk14:RA,blk34:TA,block:IA,bne:bA,bnequiv:NA,bNot:OA,bnot:PA,Bopf:LA,bopf:MA,bot:BA,bottom:HA,bowtie:FA,boxbox:UA,boxdl:qA,boxdL:QA,boxDl:jA,boxDL:VA,boxdr:WA,boxdR:GA,boxDr:YA,boxDR:zA,boxh:XA,boxH:KA,boxhd:ZA,boxHd:JA,boxhD:_A,boxHD:$A,boxhu:eE,boxHu:tE,boxhU:nE,boxHU:rE,boxminus:oE,boxplus:sE,boxtimes:iE,boxul:lE,boxuL:cE,boxUl:aE,boxUL:uE,boxur:fE,boxuR:dE,boxUr:pE,boxUR:hE,boxv:gE,boxV:mE,boxvh:vE,boxvH:wE,boxVh:yE,boxVH:AE,boxvl:EE,boxvL:xE,boxVl:SE,boxVL:kE,boxvr:CE,boxvR:DE,boxVr:RE,boxVR:TE,bprime:IE,breve:bE,Breve:NE,brvbar:OE,bscr:PE,Bscr:LE,bsemi:ME,bsim:BE,bsime:HE,bsolb:FE,bsol:UE,bsolhsub:qE,bull:QE,bullet:jE,bump:VE,bumpE:WE,bumpe:GE,Bumpeq:YE,bumpeq:zE,Cacute:XE,cacute:KE,capand:ZE,capbrcup:JE,capcap:_E,cap:$E,Cap:e2,capcup:t2,capdot:n2,CapitalDifferentialD:r2,caps:o2,caret:s2,caron:i2,Cayleys:l2,ccaps:c2,Ccaron:a2,ccaron:u2,Ccedil:f2,ccedil:d2,Ccirc:p2,ccirc:h2,Cconint:g2,ccups:m2,ccupssm:v2,Cdot:w2,cdot:y2,cedil:A2,Cedilla:E2,cemptyv:x2,cent:S2,centerdot:k2,CenterDot:C2,cfr:D2,Cfr:R2,CHcy:T2,chcy:I2,check:b2,checkmark:N2,Chi:O2,chi:P2,circ:L2,circeq:M2,circlearrowleft:B2,circlearrowright:H2,circledast:F2,circledcirc:U2,circleddash:q2,CircleDot:Q2,circledR:j2,circledS:V2,CircleMinus:W2,CirclePlus:G2,CircleTimes:Y2,cir:z2,cirE:X2,cire:K2,cirfnint:Z2,cirmid:J2,cirscir:_2,ClockwiseContourIntegral:$2,CloseCurlyDoubleQuote:ex,CloseCurlyQuote:tx,clubs:nx,clubsuit:rx,colon:ox,Colon:sx,Colone:ix,colone:lx,coloneq:cx,comma:ax,commat:ux,comp:fx,compfn:dx,complement:px,complexes:hx,cong:gx,congdot:mx,Congruent:vx,conint:wx,Conint:yx,ContourIntegral:Ax,copf:Ex,Copf:xx,coprod:Sx,Coproduct:kx,copy:Cx,COPY:Dx,copysr:Rx,CounterClockwiseContourIntegral:Tx,crarr:Ix,cross:bx,Cross:Nx,Cscr:Ox,cscr:Px,csub:Lx,csube:Mx,csup:Bx,csupe:Hx,ctdot:Fx,cudarrl:Ux,cudarrr:qx,cuepr:Qx,cuesc:jx,cularr:Vx,cularrp:Wx,cupbrcap:Gx,cupcap:Yx,CupCap:zx,cup:Xx,Cup:Kx,cupcup:Zx,cupdot:Jx,cupor:_x,cups:$x,curarr:e5,curarrm:t5,curlyeqprec:n5,curlyeqsucc:r5,curlyvee:o5,curlywedge:s5,curren:i5,curvearrowleft:l5,curvearrowright:c5,cuvee:a5,cuwed:u5,cwconint:f5,cwint:d5,cylcty:p5,dagger:h5,Dagger:g5,daleth:m5,darr:v5,Darr:w5,dArr:y5,dash:A5,Dashv:E5,dashv:x5,dbkarow:S5,dblac:k5,Dcaron:C5,dcaron:D5,Dcy:R5,dcy:T5,ddagger:I5,ddarr:b5,DD:N5,dd:O5,DDotrahd:P5,ddotseq:L5,deg:M5,Del:B5,Delta:H5,delta:F5,demptyv:U5,dfisht:q5,Dfr:Q5,dfr:j5,dHar:V5,dharl:W5,dharr:G5,DiacriticalAcute:Y5,DiacriticalDot:z5,DiacriticalDoubleAcute:X5,DiacriticalGrave:K5,DiacriticalTilde:Z5,diam:J5,diamond:_5,Diamond:$5,diamondsuit:e8,diams:t8,die:n8,DifferentialD:r8,digamma:o8,disin:s8,div:i8,divide:l8,divideontimes:c8,divonx:a8,DJcy:u8,djcy:f8,dlcorn:d8,dlcrop:p8,dollar:h8,Dopf:g8,dopf:m8,Dot:v8,dot:w8,DotDot:y8,doteq:A8,doteqdot:E8,DotEqual:x8,dotminus:S8,dotplus:k8,dotsquare:C8,doublebarwedge:D8,DoubleContourIntegral:R8,DoubleDot:T8,DoubleDownArrow:I8,DoubleLeftArrow:b8,DoubleLeftRightArrow:N8,DoubleLeftTee:O8,DoubleLongLeftArrow:P8,DoubleLongLeftRightArrow:L8,DoubleLongRightArrow:M8,DoubleRightArrow:B8,DoubleRightTee:H8,DoubleUpArrow:F8,DoubleUpDownArrow:U8,DoubleVerticalBar:q8,DownArrowBar:Q8,downarrow:j8,DownArrow:V8,Downarrow:W8,DownArrowUpArrow:G8,DownBreve:Y8,downdownarrows:z8,downharpoonleft:X8,downharpoonright:K8,DownLeftRightVector:Z8,DownLeftTeeVector:J8,DownLeftVectorBar:_8,DownLeftVector:$8,DownRightTeeVector:eS,DownRightVectorBar:tS,DownRightVector:nS,DownTeeArrow:rS,DownTee:oS,drbkarow:sS,drcorn:iS,drcrop:lS,Dscr:cS,dscr:aS,DScy:uS,dscy:fS,dsol:dS,Dstrok:pS,dstrok:hS,dtdot:gS,dtri:mS,dtrif:vS,duarr:wS,duhar:yS,dwangle:AS,DZcy:ES,dzcy:xS,dzigrarr:SS,Eacute:kS,eacute:CS,easter:DS,Ecaron:RS,ecaron:TS,Ecirc:IS,ecirc:bS,ecir:NS,ecolon:OS,Ecy:PS,ecy:LS,eDDot:MS,Edot:BS,edot:HS,eDot:FS,ee:US,efDot:qS,Efr:QS,efr:jS,eg:VS,Egrave:WS,egrave:GS,egs:YS,egsdot:zS,el:XS,Element:KS,elinters:ZS,ell:JS,els:_S,elsdot:$S,Emacr:e3,emacr:t3,empty:n3,emptyset:r3,EmptySmallSquare:o3,emptyv:s3,EmptyVerySmallSquare:i3,emsp13:l3,emsp14:c3,emsp:a3,ENG:u3,eng:f3,ensp:d3,Eogon:p3,eogon:h3,Eopf:g3,eopf:m3,epar:v3,eparsl:w3,eplus:y3,epsi:A3,Epsilon:E3,epsilon:x3,epsiv:S3,eqcirc:k3,eqcolon:C3,eqsim:D3,eqslantgtr:R3,eqslantless:T3,Equal:I3,equals:b3,EqualTilde:N3,equest:O3,Equilibrium:P3,equiv:L3,equivDD:M3,eqvparsl:B3,erarr:H3,erDot:F3,escr:U3,Escr:q3,esdot:Q3,Esim:j3,esim:V3,Eta:W3,eta:G3,ETH:Y3,eth:z3,Euml:X3,euml:K3,euro:Z3,excl:J3,exist:_3,Exists:$3,expectation:ek,exponentiale:tk,ExponentialE:nk,fallingdotseq:rk,Fcy:ok,fcy:sk,female:ik,ffilig:lk,fflig:ck,ffllig:ak,Ffr:uk,ffr:fk,filig:dk,FilledSmallSquare:pk,FilledVerySmallSquare:hk,fjlig:gk,flat:mk,fllig:vk,fltns:wk,fnof:yk,Fopf:Ak,fopf:Ek,forall:xk,ForAll:Sk,fork:kk,forkv:Ck,Fouriertrf:Dk,fpartint:Rk,frac12:Tk,frac13:Ik,frac14:bk,frac15:Nk,frac16:Ok,frac18:Pk,frac23:Lk,frac25:Mk,frac34:Bk,frac35:Hk,frac38:Fk,frac45:Uk,frac56:qk,frac58:Qk,frac78:jk,frasl:Vk,frown:Wk,fscr:Gk,Fscr:Yk,gacute:zk,Gamma:Xk,gamma:Kk,Gammad:Zk,gammad:Jk,gap:_k,Gbreve:$k,gbreve:eC,Gcedil:tC,Gcirc:nC,gcirc:rC,Gcy:oC,gcy:sC,Gdot:iC,gdot:lC,ge:cC,gE:aC,gEl:uC,gel:fC,geq:dC,geqq:pC,geqslant:hC,gescc:gC,ges:mC,gesdot:vC,gesdoto:wC,gesdotol:yC,gesl:AC,gesles:EC,Gfr:xC,gfr:SC,gg:kC,Gg:CC,ggg:DC,gimel:RC,GJcy:TC,gjcy:IC,gla:bC,gl:NC,glE:OC,glj:PC,gnap:LC,gnapprox:MC,gne:BC,gnE:HC,gneq:FC,gneqq:UC,gnsim:qC,Gopf:QC,gopf:jC,grave:VC,GreaterEqual:WC,GreaterEqualLess:GC,GreaterFullEqual:YC,GreaterGreater:zC,GreaterLess:XC,GreaterSlantEqual:KC,GreaterTilde:ZC,Gscr:JC,gscr:_C,gsim:$C,gsime:e4,gsiml:t4,gtcc:n4,gtcir:r4,gt:o4,GT:s4,Gt:i4,gtdot:l4,gtlPar:c4,gtquest:a4,gtrapprox:u4,gtrarr:f4,gtrdot:d4,gtreqless:p4,gtreqqless:h4,gtrless:g4,gtrsim:m4,gvertneqq:v4,gvnE:w4,Hacek:y4,hairsp:A4,half:E4,hamilt:x4,HARDcy:S4,hardcy:k4,harrcir:C4,harr:D4,hArr:R4,harrw:T4,Hat:I4,hbar:b4,Hcirc:N4,hcirc:O4,hearts:P4,heartsuit:L4,hellip:M4,hercon:B4,hfr:H4,Hfr:F4,HilbertSpace:U4,hksearow:q4,hkswarow:Q4,hoarr:j4,homtht:V4,hookleftarrow:W4,hookrightarrow:G4,hopf:Y4,Hopf:z4,horbar:X4,HorizontalLine:K4,hscr:Z4,Hscr:J4,hslash:_4,Hstrok:$4,hstrok:e7,HumpDownHump:t7,HumpEqual:n7,hybull:r7,hyphen:o7,Iacute:s7,iacute:i7,ic:l7,Icirc:c7,icirc:a7,Icy:u7,icy:f7,Idot:d7,IEcy:p7,iecy:h7,iexcl:g7,iff:m7,ifr:v7,Ifr:w7,Igrave:y7,igrave:A7,ii:E7,iiiint:x7,iiint:S7,iinfin:k7,iiota:C7,IJlig:D7,ijlig:R7,Imacr:T7,imacr:I7,image:b7,ImaginaryI:N7,imagline:O7,imagpart:P7,imath:L7,Im:M7,imof:B7,imped:H7,Implies:F7,incare:U7,in:\"∈\",infin:q7,infintie:Q7,inodot:j7,intcal:V7,int:W7,Int:G7,integers:Y7,Integral:z7,intercal:X7,Intersection:K7,intlarhk:Z7,intprod:J7,InvisibleComma:_7,InvisibleTimes:$7,IOcy:eD,iocy:tD,Iogon:nD,iogon:rD,Iopf:oD,iopf:sD,Iota:iD,iota:lD,iprod:cD,iquest:aD,iscr:uD,Iscr:fD,isin:dD,isindot:pD,isinE:hD,isins:gD,isinsv:mD,isinv:vD,it:wD,Itilde:yD,itilde:AD,Iukcy:ED,iukcy:xD,Iuml:SD,iuml:kD,Jcirc:CD,jcirc:DD,Jcy:RD,jcy:TD,Jfr:ID,jfr:bD,jmath:ND,Jopf:OD,jopf:PD,Jscr:LD,jscr:MD,Jsercy:BD,jsercy:HD,Jukcy:FD,jukcy:UD,Kappa:qD,kappa:QD,kappav:jD,Kcedil:VD,kcedil:WD,Kcy:GD,kcy:YD,Kfr:zD,kfr:XD,kgreen:KD,KHcy:ZD,khcy:JD,KJcy:_D,kjcy:$D,Kopf:eR,kopf:tR,Kscr:nR,kscr:rR,lAarr:oR,Lacute:sR,lacute:iR,laemptyv:lR,lagran:cR,Lambda:aR,lambda:uR,lang:fR,Lang:dR,langd:pR,langle:hR,lap:gR,Laplacetrf:mR,laquo:vR,larrb:wR,larrbfs:yR,larr:AR,Larr:ER,lArr:xR,larrfs:SR,larrhk:kR,larrlp:CR,larrpl:DR,larrsim:RR,larrtl:TR,latail:IR,lAtail:bR,lat:NR,late:OR,lates:PR,lbarr:LR,lBarr:MR,lbbrk:BR,lbrace:HR,lbrack:FR,lbrke:UR,lbrksld:qR,lbrkslu:QR,Lcaron:jR,lcaron:VR,Lcedil:WR,lcedil:GR,lceil:YR,lcub:zR,Lcy:XR,lcy:KR,ldca:ZR,ldquo:JR,ldquor:_R,ldrdhar:$R,ldrushar:eT,ldsh:tT,le:nT,lE:rT,LeftAngleBracket:oT,LeftArrowBar:sT,leftarrow:iT,LeftArrow:lT,Leftarrow:cT,LeftArrowRightArrow:aT,leftarrowtail:uT,LeftCeiling:fT,LeftDoubleBracket:dT,LeftDownTeeVector:pT,LeftDownVectorBar:hT,LeftDownVector:gT,LeftFloor:mT,leftharpoondown:vT,leftharpoonup:wT,leftleftarrows:yT,leftrightarrow:AT,LeftRightArrow:ET,Leftrightarrow:xT,leftrightarrows:ST,leftrightharpoons:kT,leftrightsquigarrow:CT,LeftRightVector:DT,LeftTeeArrow:RT,LeftTee:TT,LeftTeeVector:IT,leftthreetimes:bT,LeftTriangleBar:NT,LeftTriangle:OT,LeftTriangleEqual:PT,LeftUpDownVector:LT,LeftUpTeeVector:MT,LeftUpVectorBar:BT,LeftUpVector:HT,LeftVectorBar:FT,LeftVector:UT,lEg:qT,leg:QT,leq:jT,leqq:VT,leqslant:WT,lescc:GT,les:YT,lesdot:zT,lesdoto:XT,lesdotor:KT,lesg:ZT,lesges:JT,lessapprox:_T,lessdot:$T,lesseqgtr:eI,lesseqqgtr:tI,LessEqualGreater:nI,LessFullEqual:rI,LessGreater:oI,lessgtr:sI,LessLess:iI,lesssim:lI,LessSlantEqual:cI,LessTilde:aI,lfisht:uI,lfloor:fI,Lfr:dI,lfr:pI,lg:hI,lgE:gI,lHar:mI,lhard:vI,lharu:wI,lharul:yI,lhblk:AI,LJcy:EI,ljcy:xI,llarr:SI,ll:kI,Ll:CI,llcorner:DI,Lleftarrow:RI,llhard:TI,lltri:II,Lmidot:bI,lmidot:NI,lmoustache:OI,lmoust:PI,lnap:LI,lnapprox:MI,lne:BI,lnE:HI,lneq:FI,lneqq:UI,lnsim:qI,loang:QI,loarr:jI,lobrk:VI,longleftarrow:WI,LongLeftArrow:GI,Longleftarrow:YI,longleftrightarrow:zI,LongLeftRightArrow:XI,Longleftrightarrow:KI,longmapsto:ZI,longrightarrow:JI,LongRightArrow:_I,Longrightarrow:$I,looparrowleft:e6,looparrowright:t6,lopar:n6,Lopf:r6,lopf:o6,loplus:s6,lotimes:i6,lowast:l6,lowbar:c6,LowerLeftArrow:a6,LowerRightArrow:u6,loz:f6,lozenge:d6,lozf:p6,lpar:h6,lparlt:g6,lrarr:m6,lrcorner:v6,lrhar:w6,lrhard:y6,lrm:A6,lrtri:E6,lsaquo:x6,lscr:S6,Lscr:k6,lsh:C6,Lsh:D6,lsim:R6,lsime:T6,lsimg:I6,lsqb:b6,lsquo:N6,lsquor:O6,Lstrok:P6,lstrok:L6,ltcc:M6,ltcir:B6,lt:H6,LT:F6,Lt:U6,ltdot:q6,lthree:Q6,ltimes:j6,ltlarr:V6,ltquest:W6,ltri:G6,ltrie:Y6,ltrif:z6,ltrPar:X6,lurdshar:K6,luruhar:Z6,lvertneqq:J6,lvnE:_6,macr:$6,male:eb,malt:tb,maltese:nb,Map:\"⤅\",map:rb,mapsto:ob,mapstodown:sb,mapstoleft:ib,mapstoup:lb,marker:cb,mcomma:ab,Mcy:ub,mcy:fb,mdash:db,mDDot:pb,measuredangle:hb,MediumSpace:gb,Mellintrf:mb,Mfr:vb,mfr:wb,mho:yb,micro:Ab,midast:Eb,midcir:xb,mid:Sb,middot:kb,minusb:Cb,minus:Db,minusd:Rb,minusdu:Tb,MinusPlus:Ib,mlcp:bb,mldr:Nb,mnplus:Ob,models:Pb,Mopf:Lb,mopf:Mb,mp:Bb,mscr:Hb,Mscr:Fb,mstpos:Ub,Mu:qb,mu:Qb,multimap:jb,mumap:Vb,nabla:Wb,Nacute:Gb,nacute:Yb,nang:zb,nap:Xb,napE:Kb,napid:Zb,napos:Jb,napprox:_b,natural:$b,naturals:eN,natur:tN,nbsp:nN,nbump:rN,nbumpe:oN,ncap:sN,Ncaron:iN,ncaron:lN,Ncedil:cN,ncedil:aN,ncong:uN,ncongdot:fN,ncup:dN,Ncy:pN,ncy:hN,ndash:gN,nearhk:mN,nearr:vN,neArr:wN,nearrow:yN,ne:AN,nedot:EN,NegativeMediumSpace:xN,NegativeThickSpace:SN,NegativeThinSpace:kN,NegativeVeryThinSpace:CN,nequiv:DN,nesear:RN,nesim:TN,NestedGreaterGreater:IN,NestedLessLess:bN,NewLine:NN,nexist:ON,nexists:PN,Nfr:LN,nfr:MN,ngE:BN,nge:HN,ngeq:FN,ngeqq:UN,ngeqslant:qN,nges:QN,nGg:jN,ngsim:VN,nGt:WN,ngt:GN,ngtr:YN,nGtv:zN,nharr:XN,nhArr:KN,nhpar:ZN,ni:JN,nis:_N,nisd:$N,niv:eO,NJcy:tO,njcy:nO,nlarr:rO,nlArr:oO,nldr:sO,nlE:iO,nle:lO,nleftarrow:cO,nLeftarrow:aO,nleftrightarrow:uO,nLeftrightarrow:fO,nleq:dO,nleqq:pO,nleqslant:hO,nles:gO,nless:mO,nLl:vO,nlsim:wO,nLt:yO,nlt:AO,nltri:EO,nltrie:xO,nLtv:SO,nmid:kO,NoBreak:CO,NonBreakingSpace:DO,nopf:RO,Nopf:TO,Not:IO,not:bO,NotCongruent:NO,NotCupCap:OO,NotDoubleVerticalBar:PO,NotElement:LO,NotEqual:MO,NotEqualTilde:BO,NotExists:HO,NotGreater:FO,NotGreaterEqual:UO,NotGreaterFullEqual:qO,NotGreaterGreater:QO,NotGreaterLess:jO,NotGreaterSlantEqual:VO,NotGreaterTilde:WO,NotHumpDownHump:GO,NotHumpEqual:YO,notin:zO,notindot:XO,notinE:KO,notinva:ZO,notinvb:JO,notinvc:_O,NotLeftTriangleBar:$O,NotLeftTriangle:eP,NotLeftTriangleEqual:tP,NotLess:nP,NotLessEqual:rP,NotLessGreater:oP,NotLessLess:sP,NotLessSlantEqual:iP,NotLessTilde:lP,NotNestedGreaterGreater:cP,NotNestedLessLess:aP,notni:uP,notniva:fP,notnivb:dP,notnivc:pP,NotPrecedes:hP,NotPrecedesEqual:gP,NotPrecedesSlantEqual:mP,NotReverseElement:vP,NotRightTriangleBar:wP,NotRightTriangle:yP,NotRightTriangleEqual:AP,NotSquareSubset:EP,NotSquareSubsetEqual:xP,NotSquareSuperset:SP,NotSquareSupersetEqual:kP,NotSubset:CP,NotSubsetEqual:DP,NotSucceeds:RP,NotSucceedsEqual:TP,NotSucceedsSlantEqual:IP,NotSucceedsTilde:bP,NotSuperset:NP,NotSupersetEqual:OP,NotTilde:PP,NotTildeEqual:LP,NotTildeFullEqual:MP,NotTildeTilde:BP,NotVerticalBar:HP,nparallel:FP,npar:UP,nparsl:qP,npart:QP,npolint:jP,npr:VP,nprcue:WP,nprec:GP,npreceq:YP,npre:zP,nrarrc:XP,nrarr:KP,nrArr:ZP,nrarrw:JP,nrightarrow:_P,nRightarrow:$P,nrtri:eL,nrtrie:tL,nsc:nL,nsccue:rL,nsce:oL,Nscr:sL,nscr:iL,nshortmid:lL,nshortparallel:cL,nsim:aL,nsime:uL,nsimeq:fL,nsmid:dL,nspar:pL,nsqsube:hL,nsqsupe:gL,nsub:mL,nsubE:vL,nsube:wL,nsubset:yL,nsubseteq:AL,nsubseteqq:EL,nsucc:xL,nsucceq:SL,nsup:kL,nsupE:CL,nsupe:DL,nsupset:RL,nsupseteq:TL,nsupseteqq:IL,ntgl:bL,Ntilde:NL,ntilde:OL,ntlg:PL,ntriangleleft:LL,ntrianglelefteq:ML,ntriangleright:BL,ntrianglerighteq:HL,Nu:FL,nu:UL,num:qL,numero:QL,numsp:jL,nvap:VL,nvdash:WL,nvDash:GL,nVdash:YL,nVDash:zL,nvge:XL,nvgt:KL,nvHarr:ZL,nvinfin:JL,nvlArr:_L,nvle:$L,nvlt:e9,nvltrie:t9,nvrArr:n9,nvrtrie:r9,nvsim:o9,nwarhk:s9,nwarr:i9,nwArr:l9,nwarrow:c9,nwnear:a9,Oacute:u9,oacute:f9,oast:d9,Ocirc:p9,ocirc:h9,ocir:g9,Ocy:m9,ocy:v9,odash:w9,Odblac:y9,odblac:A9,odiv:E9,odot:x9,odsold:S9,OElig:k9,oelig:C9,ofcir:D9,Ofr:R9,ofr:T9,ogon:I9,Ograve:b9,ograve:N9,ogt:O9,ohbar:P9,ohm:L9,oint:M9,olarr:B9,olcir:H9,olcross:F9,oline:U9,olt:q9,Omacr:Q9,omacr:j9,Omega:V9,omega:W9,Omicron:G9,omicron:Y9,omid:z9,ominus:X9,Oopf:K9,oopf:Z9,opar:J9,OpenCurlyDoubleQuote:_9,OpenCurlyQuote:$9,operp:eM,oplus:tM,orarr:nM,Or:rM,or:oM,ord:sM,order:iM,orderof:lM,ordf:cM,ordm:aM,origof:uM,oror:fM,orslope:dM,orv:pM,oS:hM,Oscr:gM,oscr:mM,Oslash:vM,oslash:wM,osol:yM,Otilde:AM,otilde:EM,otimesas:xM,Otimes:SM,otimes:kM,Ouml:CM,ouml:DM,ovbar:RM,OverBar:TM,OverBrace:IM,OverBracket:bM,OverParenthesis:NM,para:OM,parallel:PM,par:LM,parsim:MM,parsl:BM,part:HM,PartialD:FM,Pcy:UM,pcy:qM,percnt:QM,period:jM,permil:VM,perp:WM,pertenk:GM,Pfr:YM,pfr:zM,Phi:XM,phi:KM,phiv:ZM,phmmat:JM,phone:_M,Pi:$M,pi:eB,pitchfork:tB,piv:nB,planck:rB,planckh:oB,plankv:sB,plusacir:iB,plusb:lB,pluscir:cB,plus:aB,plusdo:uB,plusdu:fB,pluse:dB,PlusMinus:pB,plusmn:hB,plussim:gB,plustwo:mB,pm:vB,Poincareplane:wB,pointint:yB,popf:AB,Popf:EB,pound:xB,prap:SB,Pr:kB,pr:CB,prcue:DB,precapprox:RB,prec:TB,preccurlyeq:IB,Precedes:bB,PrecedesEqual:NB,PrecedesSlantEqual:OB,PrecedesTilde:PB,preceq:LB,precnapprox:MB,precneqq:BB,precnsim:HB,pre:FB,prE:UB,precsim:qB,prime:QB,Prime:jB,primes:VB,prnap:WB,prnE:GB,prnsim:YB,prod:zB,Product:XB,profalar:KB,profline:ZB,profsurf:JB,prop:_B,Proportional:$B,Proportion:eH,propto:tH,prsim:nH,prurel:rH,Pscr:oH,pscr:sH,Psi:iH,psi:lH,puncsp:cH,Qfr:aH,qfr:uH,qint:fH,qopf:dH,Qopf:pH,qprime:hH,Qscr:gH,qscr:mH,quaternions:vH,quatint:wH,quest:yH,questeq:AH,quot:EH,QUOT:xH,rAarr:SH,race:kH,Racute:CH,racute:DH,radic:RH,raemptyv:TH,rang:IH,Rang:bH,rangd:NH,range:OH,rangle:PH,raquo:LH,rarrap:MH,rarrb:BH,rarrbfs:HH,rarrc:FH,rarr:UH,Rarr:qH,rArr:QH,rarrfs:jH,rarrhk:VH,rarrlp:WH,rarrpl:GH,rarrsim:YH,Rarrtl:zH,rarrtl:XH,rarrw:KH,ratail:ZH,rAtail:JH,ratio:_H,rationals:$H,rbarr:eF,rBarr:tF,RBarr:nF,rbbrk:rF,rbrace:oF,rbrack:sF,rbrke:iF,rbrksld:lF,rbrkslu:cF,Rcaron:aF,rcaron:uF,Rcedil:fF,rcedil:dF,rceil:pF,rcub:hF,Rcy:gF,rcy:mF,rdca:vF,rdldhar:wF,rdquo:yF,rdquor:AF,rdsh:EF,real:xF,realine:SF,realpart:kF,reals:CF,Re:DF,rect:RF,reg:TF,REG:IF,ReverseElement:bF,ReverseEquilibrium:NF,ReverseUpEquilibrium:OF,rfisht:PF,rfloor:LF,rfr:MF,Rfr:BF,rHar:HF,rhard:FF,rharu:UF,rharul:qF,Rho:QF,rho:jF,rhov:VF,RightAngleBracket:WF,RightArrowBar:GF,rightarrow:YF,RightArrow:zF,Rightarrow:XF,RightArrowLeftArrow:KF,rightarrowtail:ZF,RightCeiling:JF,RightDoubleBracket:_F,RightDownTeeVector:$F,RightDownVectorBar:eU,RightDownVector:tU,RightFloor:nU,rightharpoondown:rU,rightharpoonup:oU,rightleftarrows:sU,rightleftharpoons:iU,rightrightarrows:lU,rightsquigarrow:cU,RightTeeArrow:aU,RightTee:uU,RightTeeVector:fU,rightthreetimes:dU,RightTriangleBar:pU,RightTriangle:hU,RightTriangleEqual:gU,RightUpDownVector:mU,RightUpTeeVector:vU,RightUpVectorBar:wU,RightUpVector:yU,RightVectorBar:AU,RightVector:EU,ring:xU,risingdotseq:SU,rlarr:kU,rlhar:CU,rlm:DU,rmoustache:RU,rmoust:TU,rnmid:IU,roang:bU,roarr:NU,robrk:OU,ropar:PU,ropf:LU,Ropf:MU,roplus:BU,rotimes:HU,RoundImplies:FU,rpar:UU,rpargt:qU,rppolint:QU,rrarr:jU,Rrightarrow:VU,rsaquo:WU,rscr:GU,Rscr:YU,rsh:zU,Rsh:XU,rsqb:KU,rsquo:ZU,rsquor:JU,rthree:_U,rtimes:$U,rtri:eq,rtrie:tq,rtrif:nq,rtriltri:rq,RuleDelayed:oq,ruluhar:sq,rx:iq,Sacute:lq,sacute:cq,sbquo:aq,scap:uq,Scaron:fq,scaron:dq,Sc:pq,sc:hq,sccue:gq,sce:mq,scE:vq,Scedil:wq,scedil:yq,Scirc:Aq,scirc:Eq,scnap:xq,scnE:Sq,scnsim:kq,scpolint:Cq,scsim:Dq,Scy:Rq,scy:Tq,sdotb:Iq,sdot:bq,sdote:Nq,searhk:Oq,searr:Pq,seArr:Lq,searrow:Mq,sect:Bq,semi:Hq,seswar:Fq,setminus:Uq,setmn:qq,sext:Qq,Sfr:jq,sfr:Vq,sfrown:Wq,sharp:Gq,SHCHcy:Yq,shchcy:zq,SHcy:Xq,shcy:Kq,ShortDownArrow:Zq,ShortLeftArrow:Jq,shortmid:_q,shortparallel:$q,ShortRightArrow:eQ,ShortUpArrow:tQ,shy:nQ,Sigma:rQ,sigma:oQ,sigmaf:sQ,sigmav:iQ,sim:lQ,simdot:cQ,sime:aQ,simeq:uQ,simg:fQ,simgE:dQ,siml:pQ,simlE:hQ,simne:gQ,simplus:mQ,simrarr:vQ,slarr:wQ,SmallCircle:yQ,smallsetminus:AQ,smashp:EQ,smeparsl:xQ,smid:SQ,smile:kQ,smt:CQ,smte:DQ,smtes:RQ,SOFTcy:TQ,softcy:IQ,solbar:bQ,solb:NQ,sol:OQ,Sopf:PQ,sopf:LQ,spades:MQ,spadesuit:BQ,spar:HQ,sqcap:FQ,sqcaps:UQ,sqcup:qQ,sqcups:QQ,Sqrt:jQ,sqsub:VQ,sqsube:WQ,sqsubset:GQ,sqsubseteq:YQ,sqsup:zQ,sqsupe:XQ,sqsupset:KQ,sqsupseteq:ZQ,square:JQ,Square:_Q,SquareIntersection:$Q,SquareSubset:ej,SquareSubsetEqual:tj,SquareSuperset:nj,SquareSupersetEqual:rj,SquareUnion:oj,squarf:sj,squ:ij,squf:lj,srarr:cj,Sscr:aj,sscr:uj,ssetmn:fj,ssmile:dj,sstarf:pj,Star:hj,star:gj,starf:mj,straightepsilon:vj,straightphi:wj,strns:yj,sub:Aj,Sub:Ej,subdot:xj,subE:Sj,sube:kj,subedot:Cj,submult:Dj,subnE:Rj,subne:Tj,subplus:Ij,subrarr:bj,subset:Nj,Subset:Oj,subseteq:Pj,subseteqq:Lj,SubsetEqual:Mj,subsetneq:Bj,subsetneqq:Hj,subsim:Fj,subsub:Uj,subsup:qj,succapprox:Qj,succ:jj,succcurlyeq:Vj,Succeeds:Wj,SucceedsEqual:Gj,SucceedsSlantEqual:Yj,SucceedsTilde:zj,succeq:Xj,succnapprox:Kj,succneqq:Zj,succnsim:Jj,succsim:_j,SuchThat:$j,sum:eV,Sum:tV,sung:nV,sup1:rV,sup2:oV,sup3:sV,sup:iV,Sup:lV,supdot:cV,supdsub:aV,supE:uV,supe:fV,supedot:dV,Superset:pV,SupersetEqual:hV,suphsol:gV,suphsub:mV,suplarr:vV,supmult:wV,supnE:yV,supne:AV,supplus:EV,supset:xV,Supset:SV,supseteq:kV,supseteqq:CV,supsetneq:DV,supsetneqq:RV,supsim:TV,supsub:IV,supsup:bV,swarhk:NV,swarr:OV,swArr:PV,swarrow:LV,swnwar:MV,szlig:BV,Tab:HV,target:FV,Tau:UV,tau:qV,tbrk:QV,Tcaron:jV,tcaron:VV,Tcedil:WV,tcedil:GV,Tcy:YV,tcy:zV,tdot:XV,telrec:KV,Tfr:ZV,tfr:JV,there4:_V,therefore:$V,Therefore:eW,Theta:tW,theta:nW,thetasym:rW,thetav:oW,thickapprox:sW,thicksim:iW,ThickSpace:lW,ThinSpace:cW,thinsp:aW,thkap:uW,thksim:fW,THORN:dW,thorn:pW,tilde:hW,Tilde:gW,TildeEqual:mW,TildeFullEqual:vW,TildeTilde:wW,timesbar:yW,timesb:AW,times:EW,timesd:xW,tint:SW,toea:kW,topbot:CW,topcir:DW,top:RW,Topf:TW,topf:IW,topfork:bW,tosa:NW,tprime:OW,trade:PW,TRADE:LW,triangle:MW,triangledown:BW,triangleleft:HW,trianglelefteq:FW,triangleq:UW,triangleright:qW,trianglerighteq:QW,tridot:jW,trie:VW,triminus:WW,TripleDot:GW,triplus:YW,trisb:zW,tritime:XW,trpezium:KW,Tscr:ZW,tscr:JW,TScy:_W,tscy:$W,TSHcy:eG,tshcy:tG,Tstrok:nG,tstrok:rG,twixt:oG,twoheadleftarrow:sG,twoheadrightarrow:iG,Uacute:lG,uacute:cG,uarr:aG,Uarr:uG,uArr:fG,Uarrocir:dG,Ubrcy:pG,ubrcy:hG,Ubreve:gG,ubreve:mG,Ucirc:vG,ucirc:wG,Ucy:yG,ucy:AG,udarr:EG,Udblac:xG,udblac:SG,udhar:kG,ufisht:CG,Ufr:DG,ufr:RG,Ugrave:TG,ugrave:IG,uHar:bG,uharl:NG,uharr:OG,uhblk:PG,ulcorn:LG,ulcorner:MG,ulcrop:BG,ultri:HG,Umacr:FG,umacr:UG,uml:qG,UnderBar:QG,UnderBrace:jG,UnderBracket:VG,UnderParenthesis:WG,Union:GG,UnionPlus:YG,Uogon:zG,uogon:XG,Uopf:KG,uopf:ZG,UpArrowBar:JG,uparrow:_G,UpArrow:$G,Uparrow:eY,UpArrowDownArrow:tY,updownarrow:nY,UpDownArrow:rY,Updownarrow:oY,UpEquilibrium:sY,upharpoonleft:iY,upharpoonright:lY,uplus:cY,UpperLeftArrow:aY,UpperRightArrow:uY,upsi:fY,Upsi:dY,upsih:pY,Upsilon:hY,upsilon:gY,UpTeeArrow:mY,UpTee:vY,upuparrows:wY,urcorn:yY,urcorner:AY,urcrop:EY,Uring:xY,uring:SY,urtri:kY,Uscr:CY,uscr:DY,utdot:RY,Utilde:TY,utilde:IY,utri:bY,utrif:NY,uuarr:OY,Uuml:PY,uuml:LY,uwangle:MY,vangrt:BY,varepsilon:HY,varkappa:FY,varnothing:UY,varphi:qY,varpi:QY,varpropto:jY,varr:VY,vArr:WY,varrho:GY,varsigma:YY,varsubsetneq:zY,varsubsetneqq:XY,varsupsetneq:KY,varsupsetneqq:ZY,vartheta:JY,vartriangleleft:_Y,vartriangleright:$Y,vBar:ez,Vbar:tz,vBarv:nz,Vcy:rz,vcy:oz,vdash:sz,vDash:iz,Vdash:lz,VDash:cz,Vdashl:az,veebar:uz,vee:fz,Vee:dz,veeeq:pz,vellip:hz,verbar:gz,Verbar:mz,vert:vz,Vert:wz,VerticalBar:yz,VerticalLine:Az,VerticalSeparator:Ez,VerticalTilde:xz,VeryThinSpace:Sz,Vfr:kz,vfr:Cz,vltri:Dz,vnsub:Rz,vnsup:Tz,Vopf:Iz,vopf:bz,vprop:Nz,vrtri:Oz,Vscr:Pz,vscr:Lz,vsubnE:Mz,vsubne:Bz,vsupnE:Hz,vsupne:Fz,Vvdash:Uz,vzigzag:qz,Wcirc:Qz,wcirc:jz,wedbar:Vz,wedge:Wz,Wedge:Gz,wedgeq:Yz,weierp:zz,Wfr:Xz,wfr:Kz,Wopf:Zz,wopf:Jz,wp:_z,wr:$z,wreath:eX,Wscr:tX,wscr:nX,xcap:rX,xcirc:oX,xcup:sX,xdtri:iX,Xfr:lX,xfr:cX,xharr:aX,xhArr:uX,Xi:fX,xi:dX,xlarr:pX,xlArr:hX,xmap:gX,xnis:mX,xodot:vX,Xopf:wX,xopf:yX,xoplus:AX,xotime:EX,xrarr:xX,xrArr:SX,Xscr:kX,xscr:CX,xsqcup:DX,xuplus:RX,xutri:TX,xvee:IX,xwedge:bX,Yacute:NX,yacute:OX,YAcy:PX,yacy:LX,Ycirc:MX,ycirc:BX,Ycy:HX,ycy:FX,yen:UX,Yfr:qX,yfr:QX,YIcy:jX,yicy:VX,Yopf:WX,yopf:GX,Yscr:YX,yscr:zX,YUcy:XX,yucy:KX,yuml:ZX,Yuml:JX,Zacute:_X,zacute:$X,Zcaron:eK,zcaron:tK,Zcy:nK,zcy:rK,Zdot:oK,zdot:sK,zeetrf:iK,ZeroWidthSpace:lK,Zeta:cK,zeta:aK,zfr:uK,Zfr:fK,ZHcy:dK,zhcy:pK,zigrarr:hK,zopf:gK,Zopf:mK,Zscr:vK,zscr:wK,zwj:yK,zwnj:AK},EK=\"Á\",xK=\"á\",SK=\"Â\",kK=\"â\",CK=\"´\",DK=\"Æ\",RK=\"æ\",TK=\"À\",IK=\"à\",bK=\"&\",NK=\"&\",OK=\"Å\",PK=\"å\",LK=\"Ã\",MK=\"ã\",BK=\"Ä\",HK=\"ä\",FK=\"¦\",UK=\"Ç\",qK=\"ç\",QK=\"¸\",jK=\"¢\",VK=\"©\",WK=\"©\",GK=\"¤\",YK=\"°\",zK=\"÷\",XK=\"É\",KK=\"é\",ZK=\"Ê\",JK=\"ê\",_K=\"È\",$K=\"è\",eZ=\"Ð\",tZ=\"ð\",nZ=\"Ë\",rZ=\"ë\",oZ=\"½\",sZ=\"¼\",iZ=\"¾\",lZ=\">\",cZ=\">\",aZ=\"Í\",uZ=\"í\",fZ=\"Î\",dZ=\"î\",pZ=\"¡\",hZ=\"Ì\",gZ=\"ì\",mZ=\"¿\",vZ=\"Ï\",wZ=\"ï\",yZ=\"«\",AZ=\"<\",EZ=\"<\",xZ=\"¯\",SZ=\"µ\",kZ=\"·\",CZ=\" \",DZ=\"¬\",RZ=\"Ñ\",TZ=\"ñ\",IZ=\"Ó\",bZ=\"ó\",NZ=\"Ô\",OZ=\"ô\",PZ=\"Ò\",LZ=\"ò\",MZ=\"ª\",BZ=\"º\",HZ=\"Ø\",FZ=\"ø\",UZ=\"Õ\",qZ=\"õ\",QZ=\"Ö\",jZ=\"ö\",VZ=\"¶\",WZ=\"±\",GZ=\"£\",YZ='\"',zZ='\"',XZ=\"»\",KZ=\"®\",ZZ=\"®\",JZ=\"§\",_Z=\"­\",$Z=\"¹\",eJ=\"²\",tJ=\"³\",nJ=\"ß\",rJ=\"Þ\",oJ=\"þ\",sJ=\"×\",iJ=\"Ú\",lJ=\"ú\",cJ=\"Û\",aJ=\"û\",uJ=\"Ù\",fJ=\"ù\",dJ=\"¨\",pJ=\"Ü\",hJ=\"ü\",gJ=\"Ý\",mJ=\"ý\",vJ=\"¥\",wJ=\"ÿ\",yJ={Aacute:EK,aacute:xK,Acirc:SK,acirc:kK,acute:CK,AElig:DK,aelig:RK,Agrave:TK,agrave:IK,amp:bK,AMP:NK,Aring:OK,aring:PK,Atilde:LK,atilde:MK,Auml:BK,auml:HK,brvbar:FK,Ccedil:UK,ccedil:qK,cedil:QK,cent:jK,copy:VK,COPY:WK,curren:GK,deg:YK,divide:zK,Eacute:XK,eacute:KK,Ecirc:ZK,ecirc:JK,Egrave:_K,egrave:$K,ETH:eZ,eth:tZ,Euml:nZ,euml:rZ,frac12:oZ,frac14:sZ,frac34:iZ,gt:lZ,GT:cZ,Iacute:aZ,iacute:uZ,Icirc:fZ,icirc:dZ,iexcl:pZ,Igrave:hZ,igrave:gZ,iquest:mZ,Iuml:vZ,iuml:wZ,laquo:yZ,lt:AZ,LT:EZ,macr:xZ,micro:SZ,middot:kZ,nbsp:CZ,not:DZ,Ntilde:RZ,ntilde:TZ,Oacute:IZ,oacute:bZ,Ocirc:NZ,ocirc:OZ,Ograve:PZ,ograve:LZ,ordf:MZ,ordm:BZ,Oslash:HZ,oslash:FZ,Otilde:UZ,otilde:qZ,Ouml:QZ,ouml:jZ,para:VZ,plusmn:WZ,pound:GZ,quot:YZ,QUOT:zZ,raquo:XZ,reg:KZ,REG:ZZ,sect:JZ,shy:_Z,sup1:$Z,sup2:eJ,sup3:tJ,szlig:nJ,THORN:rJ,thorn:oJ,times:sJ,Uacute:iJ,uacute:lJ,Ucirc:cJ,ucirc:aJ,Ugrave:uJ,ugrave:fJ,uml:dJ,Uuml:pJ,uuml:hJ,Yacute:gJ,yacute:mJ,yen:vJ,yuml:wJ},AJ=\"&\",EJ=\"'\",xJ=\">\",SJ=\"<\",kJ='\"',M0={amp:AJ,apos:EJ,gt:xJ,lt:SJ,quot:kJ};var Fc={};const CJ={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};var DJ=Xn&&Xn.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Fc,\"__esModule\",{value:!0});var Yu=DJ(CJ),RJ=String.fromCodePoint||function(e){var t=\"\";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t};function TJ(e){return e>=55296&&e<=57343||e>1114111?\"�\":(e in Yu.default&&(e=Yu.default[e]),RJ(e))}Fc.default=TJ;var qs=Xn&&Xn.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(xt,\"__esModule\",{value:!0});xt.decodeHTML=xt.decodeHTMLStrict=xt.decodeXML=void 0;var Tl=qs(L0),IJ=qs(yJ),bJ=qs(M0),zu=qs(Fc),NJ=/&(?:[a-zA-Z0-9]+|#[xX][\\da-fA-F]+|#\\d+);/g;xt.decodeXML=B0(bJ.default);xt.decodeHTMLStrict=B0(Tl.default);function B0(e){var t=H0(e);return function(n){return String(n).replace(NJ,t)}}var Xu=function(e,t){return e<t?1:-1};xt.decodeHTML=function(){for(var e=Object.keys(IJ.default).sort(Xu),t=Object.keys(Tl.default).sort(Xu),n=0,r=0;n<t.length;n++)e[r]===t[n]?(t[n]+=\";?\",r++):t[n]+=\";\";var o=new RegExp(\"&(?:\"+t.join(\"|\")+\"|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)\",\"g\"),s=H0(Tl.default);function i(l){return l.substr(-1)!==\";\"&&(l+=\";\"),s(l)}return function(l){return String(l).replace(o,i)}}();function H0(e){return function(n){if(n.charAt(1)===\"#\"){var r=n.charAt(2);return r===\"X\"||r===\"x\"?zu.default(parseInt(n.substr(3),16)):zu.default(parseInt(n.substr(2),10))}return e[n.slice(1,-1)]||n}}var Me={},F0=Xn&&Xn.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Me,\"__esModule\",{value:!0});Me.escapeUTF8=Me.escape=Me.encodeNonAsciiHTML=Me.encodeHTML=Me.encodeXML=void 0;var OJ=F0(M0),U0=Q0(OJ.default),q0=j0(U0);Me.encodeXML=G0(U0);var PJ=F0(L0),Uc=Q0(PJ.default),LJ=j0(Uc);Me.encodeHTML=BJ(Uc,LJ);Me.encodeNonAsciiHTML=G0(Uc);function Q0(e){return Object.keys(e).sort().reduce(function(t,n){return t[e[n]]=\"&\"+n+\";\",t},{})}function j0(e){for(var t=[],n=[],r=0,o=Object.keys(e);r<o.length;r++){var s=o[r];s.length===1?t.push(\"\\\\\"+s):n.push(s)}t.sort();for(var i=0;i<t.length-1;i++){for(var l=i;l<t.length-1&&t[l].charCodeAt(1)+1===t[l+1].charCodeAt(1);)l+=1;var c=1+l-i;c<3||t.splice(i,c,t[i]+\"-\"+t[l])}return n.unshift(\"[\"+t.join(\"\")+\"]\"),new RegExp(n.join(\"|\"),\"g\")}var V0=/(?:[\\x80-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,MJ=String.prototype.codePointAt!=null?function(e){return e.codePointAt(0)}:function(e){return(e.charCodeAt(0)-55296)*1024+e.charCodeAt(1)-56320+65536};function Qs(e){return\"&#x\"+(e.length>1?MJ(e):e.charCodeAt(0)).toString(16).toUpperCase()+\";\"}function BJ(e,t){return function(n){return n.replace(t,function(r){return e[r]}).replace(V0,Qs)}}var W0=new RegExp(q0.source+\"|\"+V0.source,\"g\");function HJ(e){return e.replace(W0,Qs)}Me.escape=HJ;function FJ(e){return e.replace(q0,Qs)}Me.escapeUTF8=FJ;function G0(e){return function(t){return t.replace(W0,function(n){return e[n]||Qs(n)})}}(function(e){Object.defineProperty(e,\"__esModule\",{value:!0}),e.decodeXMLStrict=e.decodeHTML5Strict=e.decodeHTML4Strict=e.decodeHTML5=e.decodeHTML4=e.decodeHTMLStrict=e.decodeHTML=e.decodeXML=e.encodeHTML5=e.encodeHTML4=e.escapeUTF8=e.escape=e.encodeNonAsciiHTML=e.encodeHTML=e.encodeXML=e.encode=e.decodeStrict=e.decode=void 0;var t=xt,n=Me;function r(c,a){return(!a||a<=0?t.decodeXML:t.decodeHTML)(c)}e.decode=r;function o(c,a){return(!a||a<=0?t.decodeXML:t.decodeHTMLStrict)(c)}e.decodeStrict=o;function s(c,a){return(!a||a<=0?n.encodeXML:n.encodeHTML)(c)}e.encode=s;var i=Me;Object.defineProperty(e,\"encodeXML\",{enumerable:!0,get:function(){return i.encodeXML}}),Object.defineProperty(e,\"encodeHTML\",{enumerable:!0,get:function(){return i.encodeHTML}}),Object.defineProperty(e,\"encodeNonAsciiHTML\",{enumerable:!0,get:function(){return i.encodeNonAsciiHTML}}),Object.defineProperty(e,\"escape\",{enumerable:!0,get:function(){return i.escape}}),Object.defineProperty(e,\"escapeUTF8\",{enumerable:!0,get:function(){return i.escapeUTF8}}),Object.defineProperty(e,\"encodeHTML4\",{enumerable:!0,get:function(){return i.encodeHTML}}),Object.defineProperty(e,\"encodeHTML5\",{enumerable:!0,get:function(){return i.encodeHTML}});var l=xt;Object.defineProperty(e,\"decodeXML\",{enumerable:!0,get:function(){return l.decodeXML}}),Object.defineProperty(e,\"decodeHTML\",{enumerable:!0,get:function(){return l.decodeHTML}}),Object.defineProperty(e,\"decodeHTMLStrict\",{enumerable:!0,get:function(){return l.decodeHTMLStrict}}),Object.defineProperty(e,\"decodeHTML4\",{enumerable:!0,get:function(){return l.decodeHTML}}),Object.defineProperty(e,\"decodeHTML5\",{enumerable:!0,get:function(){return l.decodeHTML}}),Object.defineProperty(e,\"decodeHTML4Strict\",{enumerable:!0,get:function(){return l.decodeHTMLStrict}}),Object.defineProperty(e,\"decodeHTML5Strict\",{enumerable:!0,get:function(){return l.decodeHTMLStrict}}),Object.defineProperty(e,\"decodeXMLStrict\",{enumerable:!0,get:function(){return l.decodeXML}})})(P0);function UJ(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function Ku(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function qJ(e,t,n){return t&&Ku(e.prototype,t),n&&Ku(e,n),e}function Y0(e,t){var n=typeof Symbol<\"u\"&&e[Symbol.iterator]||e[\"@@iterator\"];if(!n){if(Array.isArray(e)||(n=QJ(e))||t&&e&&typeof e.length==\"number\"){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(a){throw a},f:o}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var s=!0,i=!1,l;return{s:function(){n=n.call(e)},n:function(){var a=n.next();return s=a.done,a},e:function(a){i=!0,l=a},f:function(){try{!s&&n.return!=null&&n.return()}finally{if(i)throw l}}}}function QJ(e,t){if(e){if(typeof e==\"string\")return Zu(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n===\"Object\"&&e.constructor&&(n=e.constructor.name),n===\"Map\"||n===\"Set\")return Array.from(e);if(n===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Zu(e,t)}}function Zu(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var jJ=P0,Ju={fg:\"#FFF\",bg:\"#000\",newline:!1,escapeXML:!1,stream:!1,colors:VJ()};function VJ(){var e={0:\"#000\",1:\"#A00\",2:\"#0A0\",3:\"#A50\",4:\"#00A\",5:\"#A0A\",6:\"#0AA\",7:\"#AAA\",8:\"#555\",9:\"#F55\",10:\"#5F5\",11:\"#FF5\",12:\"#55F\",13:\"#F5F\",14:\"#5FF\",15:\"#FFF\"};return Io(0,5).forEach(function(t){Io(0,5).forEach(function(n){Io(0,5).forEach(function(r){return WJ(t,n,r,e)})})}),Io(0,23).forEach(function(t){var n=t+232,r=z0(t*10+8);e[n]=\"#\"+r+r+r}),e}function WJ(e,t,n,r){var o=16+e*36+t*6+n,s=e>0?e*40+55:0,i=t>0?t*40+55:0,l=n>0?n*40+55:0;r[o]=GJ([s,i,l])}function z0(e){for(var t=e.toString(16);t.length<2;)t=\"0\"+t;return t}function GJ(e){var t=[],n=Y0(e),r;try{for(n.s();!(r=n.n()).done;){var o=r.value;t.push(z0(o))}}catch(s){n.e(s)}finally{n.f()}return\"#\"+t.join(\"\")}function _u(e,t,n,r){var o;return t===\"text\"?o=KJ(n,r):t===\"display\"?o=zJ(e,n,r):t===\"xterm256Foreground\"?o=Wo(e,r.colors[n]):t===\"xterm256Background\"?o=Go(e,r.colors[n]):t===\"rgb\"&&(o=YJ(e,n)),o}function YJ(e,t){t=t.substring(2).slice(0,-1);var n=+t.substr(0,2),r=t.substring(5).split(\";\"),o=r.map(function(s){return(\"0\"+Number(s).toString(16)).substr(-2)}).join(\"\");return Vo(e,(n===38?\"color:#\":\"background-color:#\")+o)}function zJ(e,t,n){t=parseInt(t,10);var r={\"-1\":function(){return\"<br/>\"},0:function(){return e.length&&X0(e)},1:function(){return qt(e,\"b\")},3:function(){return qt(e,\"i\")},4:function(){return qt(e,\"u\")},8:function(){return Vo(e,\"display:none\")},9:function(){return qt(e,\"strike\")},22:function(){return Vo(e,\"font-weight:normal;text-decoration:none;font-style:normal\")},23:function(){return ef(e,\"i\")},24:function(){return ef(e,\"u\")},39:function(){return Wo(e,n.fg)},49:function(){return Go(e,n.bg)},53:function(){return Vo(e,\"text-decoration:overline\")}},o;return r[t]?o=r[t]():4<t&&t<7?o=qt(e,\"blink\"):29<t&&t<38?o=Wo(e,n.colors[t-30]):39<t&&t<48?o=Go(e,n.colors[t-40]):89<t&&t<98?o=Wo(e,n.colors[8+(t-90)]):99<t&&t<108&&(o=Go(e,n.colors[8+(t-100)])),o}function X0(e){var t=e.slice(0);return e.length=0,t.reverse().map(function(n){return\"</\"+n+\">\"}).join(\"\")}function Io(e,t){for(var n=[],r=e;r<=t;r++)n.push(r);return n}function XJ(e){return function(t){return(e===null||t.category!==e)&&e!==\"all\"}}function $u(e){e=parseInt(e,10);var t=null;return e===0?t=\"all\":e===1?t=\"bold\":2<e&&e<5?t=\"underline\":4<e&&e<7?t=\"blink\":e===8?t=\"hide\":e===9?t=\"strike\":29<e&&e<38||e===39||89<e&&e<98?t=\"foreground-color\":(39<e&&e<48||e===49||99<e&&e<108)&&(t=\"background-color\"),t}function KJ(e,t){return t.escapeXML?jJ.encodeXML(e):e}function qt(e,t,n){return n||(n=\"\"),e.push(t),\"<\".concat(t).concat(n?' style=\"'.concat(n,'\"'):\"\",\">\")}function Vo(e,t){return qt(e,\"span\",t)}function Wo(e,t){return qt(e,\"span\",\"color:\"+t)}function Go(e,t){return qt(e,\"span\",\"background-color:\"+t)}function ef(e,t){var n;if(e.slice(-1)[0]===t&&(n=e.pop()),n)return\"</\"+t+\">\"}function ZJ(e,t,n){var r=!1,o=3;function s(){return\"\"}function i(k,w){return n(\"xterm256Foreground\",w),\"\"}function l(k,w){return n(\"xterm256Background\",w),\"\"}function c(k){return t.newline?n(\"display\",-1):n(\"text\",k),\"\"}function a(k,w){r=!0,w.trim().length===0&&(w=\"0\"),w=w.trimRight(\";\").split(\";\");var S=Y0(w),C;try{for(S.s();!(C=S.n()).done;){var R=C.value;n(\"display\",R)}}catch(D){S.e(D)}finally{S.f()}return\"\"}function p(k){return n(\"text\",k),\"\"}function m(k){return n(\"rgb\",k),\"\"}var h=[{pattern:/^\\x08+/,sub:s},{pattern:/^\\x1b\\[[012]?K/,sub:s},{pattern:/^\\x1b\\[\\(B/,sub:s},{pattern:/^\\x1b\\[[34]8;2;\\d+;\\d+;\\d+m/,sub:m},{pattern:/^\\x1b\\[38;5;(\\d+)m/,sub:i},{pattern:/^\\x1b\\[48;5;(\\d+)m/,sub:l},{pattern:/^\\n/,sub:c},{pattern:/^\\r+\\n/,sub:c},{pattern:/^\\r/,sub:c},{pattern:/^\\x1b\\[((?:\\d{1,3};?)+|)m/,sub:a},{pattern:/^\\x1b\\[\\d?J/,sub:s},{pattern:/^\\x1b\\[\\d{0,3};\\d{0,3}f/,sub:s},{pattern:/^\\x1b\\[?[\\d;]{0,3}/,sub:s},{pattern:/^(([^\\x1b\\x08\\r\\n])+)/,sub:p}];function x(k,w){w>o&&r||(r=!1,e=e.replace(k.pattern,k.sub))}var E=[],v=e,g=v.length;e:for(;g>0;){for(var u=0,f=0,d=h.length;f<d;u=++f){var y=h[u];if(x(y,u),e.length!==g){g=e.length;continue e}}if(e.length===g)break;E.push(0),g=e.length}return E}function JJ(e,t,n){return t!==\"text\"&&(e=e.filter(XJ($u(n))),e.push({token:t,data:n,category:$u(n)})),e}var _J=function(){function e(t){UJ(this,e),t=t||{},t.colors&&(t.colors=Object.assign({},Ju.colors,t.colors)),this.options=Object.assign({},Ju,t),this.stack=[],this.stickyStack=[]}return qJ(e,[{key:\"toHtml\",value:function(n){var r=this;n=typeof n==\"string\"?[n]:n;var o=this.stack,s=this.options,i=[];return this.stickyStack.forEach(function(l){var c=_u(o,l.token,l.data,s);c&&i.push(c)}),ZJ(n.join(\"\"),s,function(l,c){var a=_u(o,l,c,s);a&&i.push(a),s.stream&&(r.stickyStack=JJ(r.stickyStack,l,c))}),o.length&&i.push(X0(o)),i.join(\"\")}}]),e}(),$J=_J;const e_=$0($J);const qc=({error:e})=>{const t=j.useMemo(()=>{const n={bg:\"var(--color-canvas-subtle)\",fg:\"var(--color-fg-default)\"};return n.colors=t_,new e_(n).toHtml(n_(e))},[e]);return A(\"div\",{className:\"test-error-message\",dangerouslySetInnerHTML:{__html:t||\"\"}})},t_={0:\"#000\",1:\"#C00\",2:\"#0C0\",3:\"#C50\",4:\"#00C\",5:\"#C0C\",6:\"#0CC\",7:\"#CCC\",8:\"#555\",9:\"#F55\",10:\"#5F5\",11:\"#FF5\",12:\"#55F\",13:\"#F5F\",14:\"#5FF\",15:\"#FFF\"};function n_(e){return e.replace(/[&\"<>]/g,t=>({\"&\":\"&amp;\",'\"':\"&quot;\",\"<\":\"&lt;\",\">\":\"&gt;\"})[t])}function r_(e){var n;const t=new Map;for(const r of e){const o=r.name.match(/^(.*)-(expected|actual|diff|previous)(\\.[^.]+)?$/);if(!o)continue;const[,s,i,l=\"\"]=o,c=s+l;let a=t.get(c);a||(a={name:c},t.set(c,a)),i===\"actual\"&&(a.actual={attachment:r}),i===\"expected\"&&(a.expected={attachment:r,title:\"Expected\"}),i===\"previous\"&&(a.expected={attachment:r,title:\"Previous\"}),i===\"diff\"&&(a.diff={attachment:r})}for(const[r,o]of t)!o.actual||!o.expected?t.delete(r):(e.delete(o.actual.attachment),e.delete(o.expected.attachment),e.delete((n=o.diff)==null?void 0:n.attachment));return[...t.values()]}const o_=({result:e,anchor:t})=>{const{screenshots:n,videos:r,traces:o,otherAttachments:s,diffs:i}=j.useMemo(()=>{const m=(e==null?void 0:e.attachments)||[],h=new Set(m.filter(u=>u.contentType.startsWith(\"image/\"))),x=m.filter(u=>u.name===\"video\"),E=m.filter(u=>u.name===\"trace\"),v=new Set(m);[...h,...x,...E].forEach(u=>v.delete(u));const g=r_(h);return{screenshots:[...h],videos:x,traces:E,otherAttachments:v,diffs:g}},[e]),l=j.useRef(null),c=j.useRef(null),[a,p]=j.useState(!1);return j.useEffect(()=>{var m,h;a||(p(!0),t===\"video\"&&((m=l.current)==null||m.scrollIntoView({block:\"start\",inline:\"start\"})),t===\"diff\"&&((h=c.current)==null||h.scrollIntoView({block:\"start\",inline:\"start\"})))},[a,t,p,l]),L(\"div\",{className:\"test-result\",children:[!!e.errors.length&&A($e,{header:\"Errors\",children:e.errors.map((m,h)=>A(qc,{error:m},\"test-result-error-message-\"+h))}),!!e.steps.length&&A($e,{header:\"Test Steps\",children:e.steps.map((m,h)=>A(K0,{step:m,depth:0},`step-${h}`))}),i.map((m,h)=>A($e,{header:`Image mismatch: ${m.name}`,targetRef:c,children:A(rw,{imageDiff:m},\"image-diff\")},`diff-${h}`)),!!n.length&&A($e,{header:\"Screenshots\",children:n.map((m,h)=>L(\"div\",{children:[A(\"a\",{href:m.path,children:A(\"img\",{src:m.path})}),A(an,{attachment:m})]},`screenshot-${h}`))}),!!o.length&&A($e,{header:\"Traces\",children:L(\"div\",{children:[A(\"a\",{href:b0(o),children:A(\"img\",{src:nw,style:{width:192,height:117,marginLeft:20}})}),o.map((m,h)=>A(an,{attachment:m,linkName:o.length===1?\"trace\":`trace-${h+1}`},`trace-${h}`))]})}),!!r.length&&A($e,{header:\"Videos\",targetRef:l,children:r.map((m,h)=>L(\"div\",{children:[A(\"video\",{controls:!0,children:A(\"source\",{src:m.path,type:m.contentType})}),A(an,{attachment:m})]},`video-${h}`))}),!!s.size&&A($e,{header:\"Attachments\",children:[...s].map((m,h)=>A(an,{attachment:m},`attachment-link-${h}`))})]})},K0=({step:e,depth:t})=>A(R0,{title:L(\"span\",{children:[A(\"span\",{style:{float:\"right\"},children:Zr(e.duration)}),Kr(e.error||e.duration===-1?\"failed\":\"passed\"),A(\"span\",{children:e.title}),e.count>1&&L(yn,{children:[\" ✕ \",A(\"span\",{className:\"test-result-counter\",children:e.count})]}),e.location&&L(\"span\",{className:\"test-result-path\",children:[\"— \",e.location.file,\":\",e.location.line]})]}),loadChildren:e.steps.length+(e.snippet?1:0)?()=>{const n=e.steps.map((r,o)=>A(K0,{step:r,depth:t+1},o));return e.snippet&&n.unshift(A(qc,{error:e.snippet},\"line\")),n}:void 0,depth:t}),s_=({projectNames:e,test:t,run:n,anchor:r})=>{const[o,s]=j.useState(n),i=j.useMemo(()=>{if(t)return v0(t)},[t]);return L(\"div\",{className:\"test-case-column vbox\",children:[t&&A(\"div\",{className:\"test-case-path\",children:t.path.join(\" › \")}),t&&A(\"div\",{className:\"test-case-title\",children:t==null?void 0:t.title}),t&&L(\"div\",{className:\"hbox\",children:[L(\"div\",{className:\"test-case-location\",children:[t.location.file,\":\",t.location.line]}),A(\"div\",{style:{flex:\"auto\"}}),A(\"div\",{className:\"test-case-duration\",children:Zr(t.duration)})]}),t&&(!!t.projectName||i)&&L(\"div\",{className:\"test-case-project-labels-row\",children:[t&&!!t.projectName&&A(I0,{projectNames:e,projectName:t.projectName}),i&&A(a_,{labels:i})]}),t&&!!t.annotations.length&&A($e,{header:\"Annotations\",children:t==null?void 0:t.annotations.map(l=>A(l_,{annotation:l}))}),t&&A(O0,{tabs:t.results.map((l,c)=>({id:String(c),title:L(\"div\",{style:{display:\"flex\",alignItems:\"center\"},children:[Kr(l.status),\" \",c_(c)]}),render:()=>A(o_,{test:t,result:l,anchor:r})}))||[],selectedTab:String(o),setSelectedTab:l=>s(+l)})]})};function i_(e){try{if([\"http:\",\"https:\"].includes(new URL(e).protocol))return A(\"a\",{href:e,target:\"_blank\",rel:\"noopener noreferrer\",children:e})}catch{}return e}function l_({annotation:{type:e,description:t}}){return L(\"div\",{className:\"test-case-annotation\",children:[A(\"span\",{style:{fontWeight:\"bold\"},children:e}),t&&L(\"span\",{children:[\": \",i_(t)]})]})}function c_(e){return e?`Retry #${e}`:\"Run\"}const a_=({labels:e})=>e.length>0?A(yn,{children:e.map(t=>A(\"a\",{style:{textDecoration:\"none\",color:\"var(--color-fg-default)\"},href:`#?q=${t}`,children:A(\"span\",{style:{margin:\"6px 0 0 6px\",cursor:\"pointer\"},className:\"label label-color-\"+w0(t),children:t.startsWith(\"@\")?t.slice(1):t})},t))}):null;const u_=({file:e,report:t,isFileExpanded:n,setFileExpanded:r,filter:o})=>A(N0,{expanded:n(e.fileId),noInsets:!0,setExpanded:s=>r(e.fileId,s),header:A(\"span\",{children:e.fileName}),children:e.tests.filter(s=>o.matches(s)).map(s=>L(\"div\",{className:\"test-file-test test-file-test-outcome-\"+s.outcome,children:[L(\"div\",{className:\"hbox\",style:{alignItems:\"flex-start\"},children:[L(\"div\",{className:\"hbox\",children:[A(\"span\",{className:\"test-file-test-status-icon\",children:Kr(s.outcome)}),L(\"span\",{children:[A(tt,{href:`#?testId=${s.testId}`,title:[...s.path,s.title].join(\" › \"),children:A(\"span\",{className:\"test-file-title\",children:[...s.path,s.title].join(\" › \")})}),t.projectNames.length>1&&!!s.projectName&&A(I0,{projectNames:t.projectNames,projectName:s.projectName}),A(h_,{labels:v0(s)})]})]}),A(\"span\",{\"data-testid\":\"test-duration\",style:{minWidth:\"50px\",textAlign:\"right\"},children:Zr(s.duration)})]}),L(\"div\",{className:\"test-file-details-row\",children:[A(tt,{href:`#?testId=${s.testId}`,title:[...s.path,s.title].join(\" › \"),className:\"test-file-path-link\",children:L(\"span\",{className:\"test-file-path\",children:[s.location.file,\":\",s.location.line]})}),f_(s),d_(s),p_(s)]})]},`test-${s.testId}`))});function f_(e){const t=e.results.find(n=>n.attachments.some(r=>r.contentType.startsWith(\"image/\")&&!!r.name.match(/-(expected|actual|diff)/)));return t?A(tt,{href:`#?testId=${e.testId}&anchor=diff&run=${e.results.indexOf(t)}`,title:\"View images\",className:\"test-file-badge\",children:S0()}):void 0}function d_(e){const t=e.results.find(n=>n.attachments.some(r=>r.name===\"video\"));return t?A(tt,{href:`#?testId=${e.testId}&anchor=video&run=${e.results.indexOf(t)}`,title:\"View video\",className:\"test-file-badge\",children:k0()}):void 0}function p_(e){const t=e.results.map(n=>n.attachments.filter(r=>r.name===\"trace\")).filter(n=>n.length>0)[0];return t?A(tt,{href:b0(t),title:\"View trace\",className:\"test-file-badge\",children:C0()}):void 0}const h_=({labels:e})=>{const t=(n,r)=>{var i;n.preventDefault();let s=((i=new URLSearchParams(window.location.hash.slice(1)).get(\"q\"))==null?void 0:i.toString())||\"\";n.metaKey||n.ctrlKey||!r.startsWith(\"@\")?s.includes(r)?s=s.split(\" \").filter(l=>l!==r).join(\" \").trim():s=`${s} ${r}`.trim():s.includes(\"@\")?s=(s.split(\" \").filter(l=>!l.startsWith(\"@\")).join(\" \").trim()+` ${r}`).trim():s=`${s} ${r}`.trim(),T0(s?`#?q=${s}`:\"#\")};return e.length>0?A(yn,{children:e.map(n=>A(\"span\",{style:{margin:\"6px 0 0 6px\",cursor:\"pointer\"},className:\"label label-color-\"+w0(n),onClick:r=>t(r,n),children:n.startsWith(\"@\")?n.slice(1):n},n))}):null},g_=({report:e,filter:t,expandedFiles:n,setExpandedFiles:r,projectNames:o,filteredStats:s})=>{const i=j.useMemo(()=>{const l=[];let c=0;for(const a of(e==null?void 0:e.files)||[]){const p=a.tests.filter(m=>t.matches(m));c+=p.length,p.length&&l.push({file:a,defaultExpanded:c<200})}return l},[e,t]);return L(yn,{children:[L(\"div\",{className:\"mt-2 mx-1\",style:{display:\"flex\"},children:[o.length===1&&!!o[0]&&L(\"div\",{\"data-testid\":\"project-name\",style:{color:\"var(--color-fg-subtle)\"},children:[\"Project: \",o[0]]}),!t.empty()&&L(\"div\",{\"data-testid\":\"filtered-tests-count\",style:{color:\"var(--color-fg-subtle)\",padding:\"0 10px\"},children:[\"Filtered: \",s.total,\" \",!!s.total&&\"(\"+Zr(s.duration)+\")\"]}),A(\"div\",{style:{flex:\"auto\"}}),A(\"div\",{\"data-testid\":\"overall-time\",style:{color:\"var(--color-fg-subtle)\",marginRight:\"10px\"},children:e?new Date(e.startTime).toLocaleString():\"\"}),L(\"div\",{\"data-testid\":\"overall-duration\",style:{color:\"var(--color-fg-subtle)\"},children:[\"Total time: \",Zr((e==null?void 0:e.duration)??0)]})]}),e&&!!e.errors.length&&A($e,{header:\"Errors\",dataTestId:\"report-errors\",children:e.errors.map((l,c)=>A(qc,{error:l},\"test-report-error-message-\"+c))}),e&&i.map(({file:l,defaultExpanded:c})=>A(u_,{report:e,file:l,isFileExpanded:a=>{const p=n.get(a);return p===void 0?c:!!p},setFileExpanded:(a,p)=>{const m=new Map(n);m.set(a,p),r(m)},filter:t},`file-${l.fileId}`))]})},m_=e=>!e.has(\"testId\"),v_=e=>e.has(\"testId\"),w_=({report:e})=>{const t=new URLSearchParams(window.location.hash.slice(1)),[n,r]=j.useState(new Map),[o,s]=j.useState(t.get(\"q\")||\"\"),i=j.useMemo(()=>Qv.parse(o),[o]),l=j.useMemo(()=>A_((e==null?void 0:e.json().files)||[],i),[e,i]);return A(\"div\",{className:\"htmlreport vbox px-4 pb-4\",children:L(\"main\",{children:[(e==null?void 0:e.json())&&A(Jv,{stats:e.json().stats,filterText:o,setFilterText:s}),(e==null?void 0:e.json().metadata)&&A(ew,{...e==null?void 0:e.json().metadata}),A(Wu,{predicate:m_,children:A(g_,{report:e==null?void 0:e.json(),filter:i,expandedFiles:n,setExpandedFiles:r,projectNames:(e==null?void 0:e.json().projectNames)||[],filteredStats:l})}),A(Wu,{predicate:v_,children:!!e&&A(y_,{report:e})})]})})},y_=({report:e})=>{const t=new URLSearchParams(window.location.hash.slice(1)),[n,r]=j.useState(),o=t.get(\"testId\"),s=t.get(\"anchor\")||\"\",i=+(t.get(\"run\")||\"0\");return j.useEffect(()=>{(async()=>{if(!o||o===(n==null?void 0:n.testId))return;const l=o.split(\"-\")[0];if(!l)return;const c=await e.entry(`${l}.json`);for(const a of c.tests)if(a.testId===o){r(a);break}})()},[n,e,o]),A(s_,{projectNames:e.json().projectNames,test:n,anchor:s,run:i})};function A_(e,t){const n={total:0,duration:0};for(const r of e){const o=r.tests.filter(s=>t.matches(s));n.total+=o.length;for(const s of o)n.duration+=s.duration}return n}const Si=Mm,E_=()=>{const[e,t]=j.useState();return j.useEffect(()=>{if(e)return;const n=new x_;n.load().then(()=>t(n))},[e]),A(w_,{report:e})};window.onload=()=>{Fv.render(A(E_,{}),document.querySelector(\"#root\"))};class x_{constructor(){Rt(this,\"_entries\",new Map);Rt(this,\"_json\")}async load(){const t=new Si.ZipReader(new Si.Data64URIReader(window.playwrightReportBase64),{useWebWorkers:!1});for(const n of await t.getEntries())this._entries.set(n.filename,n);this._json=await this.entry(\"report.json\")}json(){return this._json}async entry(t){const n=this._entries.get(t),r=new Si.TextWriter;return await n.getData(r),JSON.parse(await r.getData())}}\n</script>\n    <style type='text/css'>:root{--color-canvas-default-transparent: rgba(255,255,255,0);--color-marketing-icon-primary: #218bff;--color-marketing-icon-secondary: #54aeff;--color-diff-blob-addition-num-text: #24292f;--color-diff-blob-addition-fg: #24292f;--color-diff-blob-addition-num-bg: #CCFFD8;--color-diff-blob-addition-line-bg: #E6FFEC;--color-diff-blob-addition-word-bg: #ABF2BC;--color-diff-blob-deletion-num-text: #24292f;--color-diff-blob-deletion-fg: #24292f;--color-diff-blob-deletion-num-bg: #FFD7D5;--color-diff-blob-deletion-line-bg: #FFEBE9;--color-diff-blob-deletion-word-bg: rgba(255,129,130,.4);--color-diff-blob-hunk-num-bg: rgba(84,174,255,.4);--color-diff-blob-expander-icon: #57606a;--color-diff-blob-selected-line-highlight-mix-blend-mode: multiply;--color-diffstat-deletion-border: rgba(27,31,36,.15);--color-diffstat-addition-border: rgba(27,31,36,.15);--color-diffstat-addition-bg: #2da44e;--color-search-keyword-hl: #fff8c5;--color-prettylights-syntax-comment: #6e7781;--color-prettylights-syntax-constant: #0550ae;--color-prettylights-syntax-entity: #8250df;--color-prettylights-syntax-storage-modifier-import: #24292f;--color-prettylights-syntax-entity-tag: #116329;--color-prettylights-syntax-keyword: #cf222e;--color-prettylights-syntax-string: #0a3069;--color-prettylights-syntax-variable: #953800;--color-prettylights-syntax-brackethighlighter-unmatched: #82071e;--color-prettylights-syntax-invalid-illegal-text: #f6f8fa;--color-prettylights-syntax-invalid-illegal-bg: #82071e;--color-prettylights-syntax-carriage-return-text: #f6f8fa;--color-prettylights-syntax-carriage-return-bg: #cf222e;--color-prettylights-syntax-string-regexp: #116329;--color-prettylights-syntax-markup-list: #3b2300;--color-prettylights-syntax-markup-heading: #0550ae;--color-prettylights-syntax-markup-italic: #24292f;--color-prettylights-syntax-markup-bold: #24292f;--color-prettylights-syntax-markup-deleted-text: #82071e;--color-prettylights-syntax-markup-deleted-bg: #FFEBE9;--color-prettylights-syntax-markup-inserted-text: #116329;--color-prettylights-syntax-markup-inserted-bg: #dafbe1;--color-prettylights-syntax-markup-changed-text: #953800;--color-prettylights-syntax-markup-changed-bg: #ffd8b5;--color-prettylights-syntax-markup-ignored-text: #eaeef2;--color-prettylights-syntax-markup-ignored-bg: #0550ae;--color-prettylights-syntax-meta-diff-range: #8250df;--color-prettylights-syntax-brackethighlighter-angle: #57606a;--color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;--color-prettylights-syntax-constant-other-reference-link: #0a3069;--color-codemirror-text: #24292f;--color-codemirror-bg: #ffffff;--color-codemirror-gutters-bg: #ffffff;--color-codemirror-guttermarker-text: #ffffff;--color-codemirror-guttermarker-subtle-text: #6e7781;--color-codemirror-linenumber-text: #57606a;--color-codemirror-cursor: #24292f;--color-codemirror-selection-bg: rgba(84,174,255,.4);--color-codemirror-activeline-bg: rgba(234,238,242,.5);--color-codemirror-matchingbracket-text: #24292f;--color-codemirror-lines-bg: #ffffff;--color-codemirror-syntax-comment: #24292f;--color-codemirror-syntax-constant: #0550ae;--color-codemirror-syntax-entity: #8250df;--color-codemirror-syntax-keyword: #cf222e;--color-codemirror-syntax-storage: #cf222e;--color-codemirror-syntax-string: #0a3069;--color-codemirror-syntax-support: #0550ae;--color-codemirror-syntax-variable: #953800;--color-checks-bg: #24292f;--color-checks-run-border-width: 0px;--color-checks-container-border-width: 0px;--color-checks-text-primary: #f6f8fa;--color-checks-text-secondary: #8c959f;--color-checks-text-link: #54aeff;--color-checks-btn-icon: #afb8c1;--color-checks-btn-hover-icon: #f6f8fa;--color-checks-btn-hover-bg: rgba(255,255,255,.125);--color-checks-input-text: #eaeef2;--color-checks-input-placeholder-text: #8c959f;--color-checks-input-focus-text: #8c959f;--color-checks-input-bg: #32383f;--color-checks-input-shadow: none;--color-checks-donut-error: #fa4549;--color-checks-donut-pending: #bf8700;--color-checks-donut-success: #2da44e;--color-checks-donut-neutral: #afb8c1;--color-checks-dropdown-text: #afb8c1;--color-checks-dropdown-bg: #32383f;--color-checks-dropdown-border: #424a53;--color-checks-dropdown-shadow: rgba(27,31,36,.3);--color-checks-dropdown-hover-text: #f6f8fa;--color-checks-dropdown-hover-bg: #424a53;--color-checks-dropdown-btn-hover-text: #f6f8fa;--color-checks-dropdown-btn-hover-bg: #32383f;--color-checks-scrollbar-thumb-bg: #57606a;--color-checks-header-label-text: #d0d7de;--color-checks-header-label-open-text: #f6f8fa;--color-checks-header-border: #32383f;--color-checks-header-icon: #8c959f;--color-checks-line-text: #d0d7de;--color-checks-line-num-text: rgba(140,149,159,.75);--color-checks-line-timestamp-text: #8c959f;--color-checks-line-hover-bg: #32383f;--color-checks-line-selected-bg: rgba(33,139,255,.15);--color-checks-line-selected-num-text: #54aeff;--color-checks-line-dt-fm-text: #24292f;--color-checks-line-dt-fm-bg: #9a6700;--color-checks-gate-bg: rgba(125,78,0,.15);--color-checks-gate-text: #d0d7de;--color-checks-gate-waiting-text: #afb8c1;--color-checks-step-header-open-bg: #32383f;--color-checks-step-error-text: #ff8182;--color-checks-step-warning-text: #d4a72c;--color-checks-logline-text: #8c959f;--color-checks-logline-num-text: rgba(140,149,159,.75);--color-checks-logline-debug-text: #c297ff;--color-checks-logline-error-text: #d0d7de;--color-checks-logline-error-num-text: #ff8182;--color-checks-logline-error-bg: rgba(164,14,38,.15);--color-checks-logline-warning-text: #d0d7de;--color-checks-logline-warning-num-text: #d4a72c;--color-checks-logline-warning-bg: rgba(125,78,0,.15);--color-checks-logline-command-text: #54aeff;--color-checks-logline-section-text: #4ac26b;--color-checks-ansi-black: #24292f;--color-checks-ansi-black-bright: #32383f;--color-checks-ansi-white: #d0d7de;--color-checks-ansi-white-bright: #d0d7de;--color-checks-ansi-gray: #8c959f;--color-checks-ansi-red: #ff8182;--color-checks-ansi-red-bright: #ffaba8;--color-checks-ansi-green: #4ac26b;--color-checks-ansi-green-bright: #6fdd8b;--color-checks-ansi-yellow: #d4a72c;--color-checks-ansi-yellow-bright: #eac54f;--color-checks-ansi-blue: #54aeff;--color-checks-ansi-blue-bright: #80ccff;--color-checks-ansi-magenta: #c297ff;--color-checks-ansi-magenta-bright: #d8b9ff;--color-checks-ansi-cyan: #76e3ea;--color-checks-ansi-cyan-bright: #b3f0ff;--color-project-header-bg: #24292f;--color-project-sidebar-bg: #ffffff;--color-project-gradient-in: #ffffff;--color-project-gradient-out: rgba(255,255,255,0);--color-mktg-success: rgba(36,146,67,1);--color-mktg-info: rgba(19,119,234,1);--color-mktg-bg-shade-gradient-top: rgba(27,31,36,.065);--color-mktg-bg-shade-gradient-bottom: rgba(27,31,36,0);--color-mktg-btn-bg-top: hsla(228,82%,66%,1);--color-mktg-btn-bg-bottom: #4969ed;--color-mktg-btn-bg-overlay-top: hsla(228,74%,59%,1);--color-mktg-btn-bg-overlay-bottom: #3355e0;--color-mktg-btn-text: #ffffff;--color-mktg-btn-primary-bg-top: hsla(137,56%,46%,1);--color-mktg-btn-primary-bg-bottom: #2ea44f;--color-mktg-btn-primary-bg-overlay-top: hsla(134,60%,38%,1);--color-mktg-btn-primary-bg-overlay-bottom: #22863a;--color-mktg-btn-primary-text: #ffffff;--color-mktg-btn-enterprise-bg-top: hsla(249,100%,72%,1);--color-mktg-btn-enterprise-bg-bottom: #6f57ff;--color-mktg-btn-enterprise-bg-overlay-top: hsla(248,65%,63%,1);--color-mktg-btn-enterprise-bg-overlay-bottom: #614eda;--color-mktg-btn-enterprise-text: #ffffff;--color-mktg-btn-outline-text: #4969ed;--color-mktg-btn-outline-border: rgba(73,105,237,.3);--color-mktg-btn-outline-hover-text: #3355e0;--color-mktg-btn-outline-hover-border: rgba(51,85,224,.5);--color-mktg-btn-outline-focus-border: #4969ed;--color-mktg-btn-outline-focus-border-inset: rgba(73,105,237,.5);--color-mktg-btn-dark-text: #ffffff;--color-mktg-btn-dark-border: rgba(255,255,255,.3);--color-mktg-btn-dark-hover-text: #ffffff;--color-mktg-btn-dark-hover-border: rgba(255,255,255,.5);--color-mktg-btn-dark-focus-border: #ffffff;--color-mktg-btn-dark-focus-border-inset: rgba(255,255,255,.5);--color-avatar-bg: #ffffff;--color-avatar-border: rgba(27,31,36,.15);--color-avatar-stack-fade: #afb8c1;--color-avatar-stack-fade-more: #d0d7de;--color-avatar-child-shadow: -2px -2px 0 rgba(255,255,255,.8);--color-topic-tag-border: rgba(0,0,0,0);--color-select-menu-backdrop-border: rgba(0,0,0,0);--color-select-menu-tap-highlight: rgba(175,184,193,.5);--color-select-menu-tap-focus-bg: #b6e3ff;--color-overlay-shadow: 0 1px 3px rgba(27,31,36,.12), 0 8px 24px rgba(66,74,83,.12);--color-header-text: rgba(255,255,255,.7);--color-header-bg: #24292f;--color-header-logo: #ffffff;--color-header-search-bg: #24292f;--color-header-search-border: #57606a;--color-sidenav-selected-bg: #ffffff;--color-menu-bg-active: rgba(0,0,0,0);--color-input-disabled-bg: rgba(175,184,193,.2);--color-timeline-badge-bg: #eaeef2;--color-ansi-black: #24292f;--color-ansi-black-bright: #57606a;--color-ansi-white: #6e7781;--color-ansi-white-bright: #8c959f;--color-ansi-gray: #6e7781;--color-ansi-red: #cf222e;--color-ansi-red-bright: #a40e26;--color-ansi-green: #116329;--color-ansi-green-bright: #1a7f37;--color-ansi-yellow: #4d2d00;--color-ansi-yellow-bright: #633c01;--color-ansi-blue: #0969da;--color-ansi-blue-bright: #218bff;--color-ansi-magenta: #8250df;--color-ansi-magenta-bright: #a475f9;--color-ansi-cyan: #1b7c83;--color-ansi-cyan-bright: #3192aa;--color-btn-text: #24292f;--color-btn-bg: #f6f8fa;--color-btn-border: rgba(27,31,36,.15);--color-btn-shadow: 0 1px 0 rgba(27,31,36,.04);--color-btn-inset-shadow: inset 0 1px 0 rgba(255,255,255,.25);--color-btn-hover-bg: #f3f4f6;--color-btn-hover-border: rgba(27,31,36,.15);--color-btn-active-bg: hsla(220,14%,93%,1);--color-btn-active-border: rgba(27,31,36,.15);--color-btn-selected-bg: hsla(220,14%,94%,1);--color-btn-focus-bg: #f6f8fa;--color-btn-focus-border: rgba(27,31,36,.15);--color-btn-focus-shadow: 0 0 0 3px rgba(9,105,218,.3);--color-btn-shadow-active: inset 0 .15em .3em rgba(27,31,36,.15);--color-btn-shadow-input-focus: 0 0 0 .2em rgba(9,105,218,.3);--color-btn-counter-bg: rgba(27,31,36,.08);--color-btn-primary-text: #ffffff;--color-btn-primary-bg: #2da44e;--color-btn-primary-border: rgba(27,31,36,.15);--color-btn-primary-shadow: 0 1px 0 rgba(27,31,36,.1);--color-btn-primary-inset-shadow: inset 0 1px 0 rgba(255,255,255,.03);--color-btn-primary-hover-bg: #2c974b;--color-btn-primary-hover-border: rgba(27,31,36,.15);--color-btn-primary-selected-bg: hsla(137,55%,36%,1);--color-btn-primary-selected-shadow: inset 0 1px 0 rgba(0,45,17,.2);--color-btn-primary-disabled-text: rgba(255,255,255,.8);--color-btn-primary-disabled-bg: #94d3a2;--color-btn-primary-disabled-border: rgba(27,31,36,.15);--color-btn-primary-focus-bg: #2da44e;--color-btn-primary-focus-border: rgba(27,31,36,.15);--color-btn-primary-focus-shadow: 0 0 0 3px rgba(45,164,78,.4);--color-btn-primary-icon: rgba(255,255,255,.8);--color-btn-primary-counter-bg: rgba(255,255,255,.2);--color-btn-outline-text: #0969da;--color-btn-outline-hover-text: #ffffff;--color-btn-outline-hover-bg: #0969da;--color-btn-outline-hover-border: rgba(27,31,36,.15);--color-btn-outline-hover-shadow: 0 1px 0 rgba(27,31,36,.1);--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,.03);--color-btn-outline-hover-counter-bg: rgba(255,255,255,.2);--color-btn-outline-selected-text: #ffffff;--color-btn-outline-selected-bg: hsla(212,92%,42%,1);--color-btn-outline-selected-border: rgba(27,31,36,.15);--color-btn-outline-selected-shadow: inset 0 1px 0 rgba(0,33,85,.2);--color-btn-outline-disabled-text: rgba(9,105,218,.5);--color-btn-outline-disabled-bg: #f6f8fa;--color-btn-outline-disabled-counter-bg: rgba(9,105,218,.05);--color-btn-outline-focus-border: rgba(27,31,36,.15);--color-btn-outline-focus-shadow: 0 0 0 3px rgba(5,80,174,.4);--color-btn-outline-counter-bg: rgba(9,105,218,.1);--color-btn-danger-text: #cf222e;--color-btn-danger-hover-text: #ffffff;--color-btn-danger-hover-bg: #a40e26;--color-btn-danger-hover-border: rgba(27,31,36,.15);--color-btn-danger-hover-shadow: 0 1px 0 rgba(27,31,36,.1);--color-btn-danger-hover-inset-shadow: inset 0 1px 0 rgba(255,255,255,.03);--color-btn-danger-hover-counter-bg: rgba(255,255,255,.2);--color-btn-danger-selected-text: #ffffff;--color-btn-danger-selected-bg: hsla(356,72%,44%,1);--color-btn-danger-selected-border: rgba(27,31,36,.15);--color-btn-danger-selected-shadow: inset 0 1px 0 rgba(76,0,20,.2);--color-btn-danger-disabled-text: rgba(207,34,46,.5);--color-btn-danger-disabled-bg: #f6f8fa;--color-btn-danger-disabled-counter-bg: rgba(207,34,46,.05);--color-btn-danger-focus-border: rgba(27,31,36,.15);--color-btn-danger-focus-shadow: 0 0 0 3px rgba(164,14,38,.4);--color-btn-danger-counter-bg: rgba(207,34,46,.1);--color-btn-danger-icon: #cf222e;--color-btn-danger-hover-icon: #ffffff;--color-underlinenav-icon: #6e7781;--color-underlinenav-border-hover: rgba(175,184,193,.2);--color-fg-default: #24292f;--color-fg-muted: #57606a;--color-fg-subtle: #6e7781;--color-fg-on-emphasis: #ffffff;--color-canvas-default: #ffffff;--color-canvas-overlay: #ffffff;--color-canvas-inset: #f6f8fa;--color-canvas-subtle: #f6f8fa;--color-border-default: #d0d7de;--color-border-muted: hsla(210,18%,87%,1);--color-border-subtle: rgba(27,31,36,.15);--color-shadow-small: 0 1px 0 rgba(27,31,36,.04);--color-shadow-medium: 0 3px 6px rgba(140,149,159,.15);--color-shadow-large: 0 8px 24px rgba(140,149,159,.2);--color-shadow-extra-large: 0 12px 28px rgba(140,149,159,.3);--color-neutral-emphasis-plus: #24292f;--color-neutral-emphasis: #6e7781;--color-neutral-muted: rgba(175,184,193,.2);--color-neutral-subtle: rgba(234,238,242,.5);--color-accent-fg: #0969da;--color-accent-emphasis: #0969da;--color-accent-muted: rgba(84,174,255,.4);--color-accent-subtle: #ddf4ff;--color-success-fg: #1a7f37;--color-success-emphasis: #2da44e;--color-success-muted: rgba(74,194,107,.4);--color-success-subtle: #dafbe1;--color-attention-fg: #9a6700;--color-attention-emphasis: #bf8700;--color-attention-muted: rgba(212,167,44,.4);--color-attention-subtle: #fff8c5;--color-severe-fg: #bc4c00;--color-severe-emphasis: #bc4c00;--color-severe-muted: rgba(251,143,68,.4);--color-severe-subtle: #fff1e5;--color-danger-fg: #cf222e;--color-danger-emphasis: #cf222e;--color-danger-muted: rgba(255,129,130,.4);--color-danger-subtle: #FFEBE9;--color-done-fg: #8250df;--color-done-emphasis: #8250df;--color-done-muted: rgba(194,151,255,.4);--color-done-subtle: #fbefff;--color-sponsors-fg: #bf3989;--color-sponsors-emphasis: #bf3989;--color-sponsors-muted: rgba(255,128,200,.4);--color-sponsors-subtle: #ffeff7;--color-primer-canvas-backdrop: rgba(27,31,36,.5);--color-primer-canvas-sticky: rgba(255,255,255,.95);--color-primer-border-active: #FD8C73;--color-primer-border-contrast: rgba(27,31,36,.1);--color-primer-shadow-highlight: inset 0 1px 0 rgba(255,255,255,.25);--color-primer-shadow-inset: inset 0 1px 0 rgba(208,215,222,.2);--color-primer-shadow-focus: 0 0 0 3px rgba(9,105,218,.3);--color-scale-black: #1b1f24;--color-scale-white: #ffffff;--color-scale-gray-0: #f6f8fa;--color-scale-gray-1: #eaeef2;--color-scale-gray-2: #d0d7de;--color-scale-gray-3: #afb8c1;--color-scale-gray-4: #8c959f;--color-scale-gray-5: #6e7781;--color-scale-gray-6: #57606a;--color-scale-gray-7: #424a53;--color-scale-gray-8: #32383f;--color-scale-gray-9: #24292f;--color-scale-blue-0: #ddf4ff;--color-scale-blue-1: #b6e3ff;--color-scale-blue-2: #80ccff;--color-scale-blue-3: #54aeff;--color-scale-blue-4: #218bff;--color-scale-blue-5: #0969da;--color-scale-blue-6: #0550ae;--color-scale-blue-7: #033d8b;--color-scale-blue-8: #0a3069;--color-scale-blue-9: #002155;--color-scale-green-0: #dafbe1;--color-scale-green-1: #aceebb;--color-scale-green-2: #6fdd8b;--color-scale-green-3: #4ac26b;--color-scale-green-4: #2da44e;--color-scale-green-5: #1a7f37;--color-scale-green-6: #116329;--color-scale-green-7: #044f1e;--color-scale-green-8: #003d16;--color-scale-green-9: #002d11;--color-scale-yellow-0: #fff8c5;--color-scale-yellow-1: #fae17d;--color-scale-yellow-2: #eac54f;--color-scale-yellow-3: #d4a72c;--color-scale-yellow-4: #bf8700;--color-scale-yellow-5: #9a6700;--color-scale-yellow-6: #7d4e00;--color-scale-yellow-7: #633c01;--color-scale-yellow-8: #4d2d00;--color-scale-yellow-9: #3b2300;--color-scale-orange-0: #fff1e5;--color-scale-orange-1: #ffd8b5;--color-scale-orange-2: #ffb77c;--color-scale-orange-3: #fb8f44;--color-scale-orange-4: #e16f24;--color-scale-orange-5: #bc4c00;--color-scale-orange-6: #953800;--color-scale-orange-7: #762c00;--color-scale-orange-8: #5c2200;--color-scale-orange-9: #471700;--color-scale-red-0: #FFEBE9;--color-scale-red-1: #ffcecb;--color-scale-red-2: #ffaba8;--color-scale-red-3: #ff8182;--color-scale-red-4: #fa4549;--color-scale-red-5: #cf222e;--color-scale-red-6: #a40e26;--color-scale-red-7: #82071e;--color-scale-red-8: #660018;--color-scale-red-9: #4c0014;--color-scale-purple-0: #fbefff;--color-scale-purple-1: #ecd8ff;--color-scale-purple-2: #d8b9ff;--color-scale-purple-3: #c297ff;--color-scale-purple-4: #a475f9;--color-scale-purple-5: #8250df;--color-scale-purple-6: #6639ba;--color-scale-purple-7: #512a97;--color-scale-purple-8: #3e1f79;--color-scale-purple-9: #2e1461;--color-scale-pink-0: #ffeff7;--color-scale-pink-1: #ffd3eb;--color-scale-pink-2: #ffadda;--color-scale-pink-3: #ff80c8;--color-scale-pink-4: #e85aad;--color-scale-pink-5: #bf3989;--color-scale-pink-6: #99286e;--color-scale-pink-7: #772057;--color-scale-pink-8: #611347;--color-scale-pink-9: #4d0336;--color-scale-coral-0: #FFF0EB;--color-scale-coral-1: #FFD6CC;--color-scale-coral-2: #FFB4A1;--color-scale-coral-3: #FD8C73;--color-scale-coral-4: #EC6547;--color-scale-coral-5: #C4432B;--color-scale-coral-6: #9E2F1C;--color-scale-coral-7: #801F0F;--color-scale-coral-8: #691105;--color-scale-coral-9: #510901 }@media (prefers-color-scheme: dark){:root{--color-canvas-default-transparent: rgba(13,17,23,0);--color-marketing-icon-primary: #79c0ff;--color-marketing-icon-secondary: #1f6feb;--color-diff-blob-addition-num-text: #c9d1d9;--color-diff-blob-addition-fg: #c9d1d9;--color-diff-blob-addition-num-bg: rgba(63,185,80,.3);--color-diff-blob-addition-line-bg: rgba(46,160,67,.15);--color-diff-blob-addition-word-bg: rgba(46,160,67,.4);--color-diff-blob-deletion-num-text: #c9d1d9;--color-diff-blob-deletion-fg: #c9d1d9;--color-diff-blob-deletion-num-bg: rgba(248,81,73,.3);--color-diff-blob-deletion-line-bg: rgba(248,81,73,.15);--color-diff-blob-deletion-word-bg: rgba(248,81,73,.4);--color-diff-blob-hunk-num-bg: rgba(56,139,253,.4);--color-diff-blob-expander-icon: #8b949e;--color-diff-blob-selected-line-highlight-mix-blend-mode: screen;--color-diffstat-deletion-border: rgba(240,246,252,.1);--color-diffstat-addition-border: rgba(240,246,252,.1);--color-diffstat-addition-bg: #3fb950;--color-search-keyword-hl: rgba(210,153,34,.4);--color-prettylights-syntax-comment: #8b949e;--color-prettylights-syntax-constant: #79c0ff;--color-prettylights-syntax-entity: #d2a8ff;--color-prettylights-syntax-storage-modifier-import: #c9d1d9;--color-prettylights-syntax-entity-tag: #7ee787;--color-prettylights-syntax-keyword: #ff7b72;--color-prettylights-syntax-string: #a5d6ff;--color-prettylights-syntax-variable: #ffa657;--color-prettylights-syntax-brackethighlighter-unmatched: #f85149;--color-prettylights-syntax-invalid-illegal-text: #f0f6fc;--color-prettylights-syntax-invalid-illegal-bg: #8e1519;--color-prettylights-syntax-carriage-return-text: #f0f6fc;--color-prettylights-syntax-carriage-return-bg: #b62324;--color-prettylights-syntax-string-regexp: #7ee787;--color-prettylights-syntax-markup-list: #f2cc60;--color-prettylights-syntax-markup-heading: #1f6feb;--color-prettylights-syntax-markup-italic: #c9d1d9;--color-prettylights-syntax-markup-bold: #c9d1d9;--color-prettylights-syntax-markup-deleted-text: #ffdcd7;--color-prettylights-syntax-markup-deleted-bg: #67060c;--color-prettylights-syntax-markup-inserted-text: #aff5b4;--color-prettylights-syntax-markup-inserted-bg: #033a16;--color-prettylights-syntax-markup-changed-text: #ffdfb6;--color-prettylights-syntax-markup-changed-bg: #5a1e02;--color-prettylights-syntax-markup-ignored-text: #c9d1d9;--color-prettylights-syntax-markup-ignored-bg: #1158c7;--color-prettylights-syntax-meta-diff-range: #d2a8ff;--color-prettylights-syntax-brackethighlighter-angle: #8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;--color-prettylights-syntax-constant-other-reference-link: #a5d6ff;--color-codemirror-text: #c9d1d9;--color-codemirror-bg: #0d1117;--color-codemirror-gutters-bg: #0d1117;--color-codemirror-guttermarker-text: #0d1117;--color-codemirror-guttermarker-subtle-text: #484f58;--color-codemirror-linenumber-text: #8b949e;--color-codemirror-cursor: #c9d1d9;--color-codemirror-selection-bg: rgba(56,139,253,.4);--color-codemirror-activeline-bg: rgba(110,118,129,.1);--color-codemirror-matchingbracket-text: #c9d1d9;--color-codemirror-lines-bg: #0d1117;--color-codemirror-syntax-comment: #8b949e;--color-codemirror-syntax-constant: #79c0ff;--color-codemirror-syntax-entity: #d2a8ff;--color-codemirror-syntax-keyword: #ff7b72;--color-codemirror-syntax-storage: #ff7b72;--color-codemirror-syntax-string: #a5d6ff;--color-codemirror-syntax-support: #79c0ff;--color-codemirror-syntax-variable: #ffa657;--color-checks-bg: #010409;--color-checks-run-border-width: 1px;--color-checks-container-border-width: 1px;--color-checks-text-primary: #c9d1d9;--color-checks-text-secondary: #8b949e;--color-checks-text-link: #58a6ff;--color-checks-btn-icon: #8b949e;--color-checks-btn-hover-icon: #c9d1d9;--color-checks-btn-hover-bg: rgba(110,118,129,.1);--color-checks-input-text: #8b949e;--color-checks-input-placeholder-text: #484f58;--color-checks-input-focus-text: #c9d1d9;--color-checks-input-bg: #161b22;--color-checks-input-shadow: none;--color-checks-donut-error: #f85149;--color-checks-donut-pending: #d29922;--color-checks-donut-success: #2ea043;--color-checks-donut-neutral: #8b949e;--color-checks-dropdown-text: #c9d1d9;--color-checks-dropdown-bg: #161b22;--color-checks-dropdown-border: #30363d;--color-checks-dropdown-shadow: rgba(1,4,9,.3);--color-checks-dropdown-hover-text: #c9d1d9;--color-checks-dropdown-hover-bg: rgba(110,118,129,.1);--color-checks-dropdown-btn-hover-text: #c9d1d9;--color-checks-dropdown-btn-hover-bg: rgba(110,118,129,.1);--color-checks-scrollbar-thumb-bg: rgba(110,118,129,.4);--color-checks-header-label-text: #8b949e;--color-checks-header-label-open-text: #c9d1d9;--color-checks-header-border: #21262d;--color-checks-header-icon: #8b949e;--color-checks-line-text: #8b949e;--color-checks-line-num-text: #484f58;--color-checks-line-timestamp-text: #484f58;--color-checks-line-hover-bg: rgba(110,118,129,.1);--color-checks-line-selected-bg: rgba(56,139,253,.15);--color-checks-line-selected-num-text: #58a6ff;--color-checks-line-dt-fm-text: #f0f6fc;--color-checks-line-dt-fm-bg: #9e6a03;--color-checks-gate-bg: rgba(187,128,9,.15);--color-checks-gate-text: #8b949e;--color-checks-gate-waiting-text: #d29922;--color-checks-step-header-open-bg: #161b22;--color-checks-step-error-text: #f85149;--color-checks-step-warning-text: #d29922;--color-checks-logline-text: #8b949e;--color-checks-logline-num-text: #484f58;--color-checks-logline-debug-text: #a371f7;--color-checks-logline-error-text: #8b949e;--color-checks-logline-error-num-text: #484f58;--color-checks-logline-error-bg: rgba(248,81,73,.15);--color-checks-logline-warning-text: #8b949e;--color-checks-logline-warning-num-text: #d29922;--color-checks-logline-warning-bg: rgba(187,128,9,.15);--color-checks-logline-command-text: #58a6ff;--color-checks-logline-section-text: #3fb950;--color-checks-ansi-black: #0d1117;--color-checks-ansi-black-bright: #161b22;--color-checks-ansi-white: #b1bac4;--color-checks-ansi-white-bright: #b1bac4;--color-checks-ansi-gray: #6e7681;--color-checks-ansi-red: #ff7b72;--color-checks-ansi-red-bright: #ffa198;--color-checks-ansi-green: #3fb950;--color-checks-ansi-green-bright: #56d364;--color-checks-ansi-yellow: #d29922;--color-checks-ansi-yellow-bright: #e3b341;--color-checks-ansi-blue: #58a6ff;--color-checks-ansi-blue-bright: #79c0ff;--color-checks-ansi-magenta: #bc8cff;--color-checks-ansi-magenta-bright: #d2a8ff;--color-checks-ansi-cyan: #76e3ea;--color-checks-ansi-cyan-bright: #b3f0ff;--color-project-header-bg: #0d1117;--color-project-sidebar-bg: #161b22;--color-project-gradient-in: #161b22;--color-project-gradient-out: rgba(22,27,34,0);--color-mktg-success: rgba(41,147,61,1);--color-mktg-info: rgba(42,123,243,1);--color-mktg-bg-shade-gradient-top: rgba(1,4,9,.065);--color-mktg-bg-shade-gradient-bottom: rgba(1,4,9,0);--color-mktg-btn-bg-top: hsla(228,82%,66%,1);--color-mktg-btn-bg-bottom: #4969ed;--color-mktg-btn-bg-overlay-top: hsla(228,74%,59%,1);--color-mktg-btn-bg-overlay-bottom: #3355e0;--color-mktg-btn-text: #f0f6fc;--color-mktg-btn-primary-bg-top: hsla(137,56%,46%,1);--color-mktg-btn-primary-bg-bottom: #2ea44f;--color-mktg-btn-primary-bg-overlay-top: hsla(134,60%,38%,1);--color-mktg-btn-primary-bg-overlay-bottom: #22863a;--color-mktg-btn-primary-text: #f0f6fc;--color-mktg-btn-enterprise-bg-top: hsla(249,100%,72%,1);--color-mktg-btn-enterprise-bg-bottom: #6f57ff;--color-mktg-btn-enterprise-bg-overlay-top: hsla(248,65%,63%,1);--color-mktg-btn-enterprise-bg-overlay-bottom: #614eda;--color-mktg-btn-enterprise-text: #f0f6fc;--color-mktg-btn-outline-text: #f0f6fc;--color-mktg-btn-outline-border: rgba(240,246,252,.3);--color-mktg-btn-outline-hover-text: #f0f6fc;--color-mktg-btn-outline-hover-border: rgba(240,246,252,.5);--color-mktg-btn-outline-focus-border: #f0f6fc;--color-mktg-btn-outline-focus-border-inset: rgba(240,246,252,.5);--color-mktg-btn-dark-text: #f0f6fc;--color-mktg-btn-dark-border: rgba(240,246,252,.3);--color-mktg-btn-dark-hover-text: #f0f6fc;--color-mktg-btn-dark-hover-border: rgba(240,246,252,.5);--color-mktg-btn-dark-focus-border: #f0f6fc;--color-mktg-btn-dark-focus-border-inset: rgba(240,246,252,.5);--color-avatar-bg: rgba(240,246,252,.1);--color-avatar-border: rgba(240,246,252,.1);--color-avatar-stack-fade: #30363d;--color-avatar-stack-fade-more: #21262d;--color-avatar-child-shadow: -2px -2px 0 #0d1117;--color-topic-tag-border: rgba(0,0,0,0);--color-select-menu-backdrop-border: #484f58;--color-select-menu-tap-highlight: rgba(48,54,61,.5);--color-select-menu-tap-focus-bg: #0c2d6b;--color-overlay-shadow: 0 0 0 1px #30363d, 0 16px 32px rgba(1,4,9,.85);--color-header-text: rgba(240,246,252,.7);--color-header-bg: #161b22;--color-header-logo: #f0f6fc;--color-header-search-bg: #0d1117;--color-header-search-border: #30363d;--color-sidenav-selected-bg: #21262d;--color-menu-bg-active: #161b22;--color-input-disabled-bg: rgba(110,118,129,0);--color-timeline-badge-bg: #21262d;--color-ansi-black: #484f58;--color-ansi-black-bright: #6e7681;--color-ansi-white: #b1bac4;--color-ansi-white-bright: #f0f6fc;--color-ansi-gray: #6e7681;--color-ansi-red: #ff7b72;--color-ansi-red-bright: #ffa198;--color-ansi-green: #3fb950;--color-ansi-green-bright: #56d364;--color-ansi-yellow: #d29922;--color-ansi-yellow-bright: #e3b341;--color-ansi-blue: #58a6ff;--color-ansi-blue-bright: #79c0ff;--color-ansi-magenta: #bc8cff;--color-ansi-magenta-bright: #d2a8ff;--color-ansi-cyan: #39c5cf;--color-ansi-cyan-bright: #56d4dd;--color-btn-text: #c9d1d9;--color-btn-bg: #21262d;--color-btn-border: rgba(240,246,252,.1);--color-btn-shadow: 0 0 transparent;--color-btn-inset-shadow: 0 0 transparent;--color-btn-hover-bg: #30363d;--color-btn-hover-border: #8b949e;--color-btn-active-bg: hsla(212,12%,18%,1);--color-btn-active-border: #6e7681;--color-btn-selected-bg: #161b22;--color-btn-focus-bg: #21262d;--color-btn-focus-border: #8b949e;--color-btn-focus-shadow: 0 0 0 3px rgba(139,148,158,.3);--color-btn-shadow-active: inset 0 .15em .3em rgba(1,4,9,.15);--color-btn-shadow-input-focus: 0 0 0 .2em rgba(31,111,235,.3);--color-btn-counter-bg: #30363d;--color-btn-primary-text: #ffffff;--color-btn-primary-bg: #238636;--color-btn-primary-border: rgba(240,246,252,.1);--color-btn-primary-shadow: 0 0 transparent;--color-btn-primary-inset-shadow: 0 0 transparent;--color-btn-primary-hover-bg: #2ea043;--color-btn-primary-hover-border: rgba(240,246,252,.1);--color-btn-primary-selected-bg: #238636;--color-btn-primary-selected-shadow: 0 0 transparent;--color-btn-primary-disabled-text: rgba(240,246,252,.5);--color-btn-primary-disabled-bg: rgba(35,134,54,.6);--color-btn-primary-disabled-border: rgba(240,246,252,.1);--color-btn-primary-focus-bg: #238636;--color-btn-primary-focus-border: rgba(240,246,252,.1);--color-btn-primary-focus-shadow: 0 0 0 3px rgba(46,164,79,.4);--color-btn-primary-icon: #f0f6fc;--color-btn-primary-counter-bg: rgba(240,246,252,.2);--color-btn-outline-text: #58a6ff;--color-btn-outline-hover-text: #58a6ff;--color-btn-outline-hover-bg: #30363d;--color-btn-outline-hover-border: rgba(240,246,252,.1);--color-btn-outline-hover-shadow: 0 1px 0 rgba(1,4,9,.1);--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(240,246,252,.03);--color-btn-outline-hover-counter-bg: rgba(240,246,252,.2);--color-btn-outline-selected-text: #f0f6fc;--color-btn-outline-selected-bg: #0d419d;--color-btn-outline-selected-border: rgba(240,246,252,.1);--color-btn-outline-selected-shadow: 0 0 transparent;--color-btn-outline-disabled-text: rgba(88,166,255,.5);--color-btn-outline-disabled-bg: #0d1117;--color-btn-outline-disabled-counter-bg: rgba(31,111,235,.05);--color-btn-outline-focus-border: rgba(240,246,252,.1);--color-btn-outline-focus-shadow: 0 0 0 3px rgba(17,88,199,.4);--color-btn-outline-counter-bg: rgba(31,111,235,.1);--color-btn-danger-text: #f85149;--color-btn-danger-hover-text: #f0f6fc;--color-btn-danger-hover-bg: #da3633;--color-btn-danger-hover-border: #f85149;--color-btn-danger-hover-shadow: 0 0 transparent;--color-btn-danger-hover-inset-shadow: 0 0 transparent;--color-btn-danger-hover-icon: #f0f6fc;--color-btn-danger-hover-counter-bg: rgba(255,255,255,.2);--color-btn-danger-selected-text: #ffffff;--color-btn-danger-selected-bg: #b62324;--color-btn-danger-selected-border: #ff7b72;--color-btn-danger-selected-shadow: 0 0 transparent;--color-btn-danger-disabled-text: rgba(248,81,73,.5);--color-btn-danger-disabled-bg: #0d1117;--color-btn-danger-disabled-counter-bg: rgba(218,54,51,.05);--color-btn-danger-focus-border: #f85149;--color-btn-danger-focus-shadow: 0 0 0 3px rgba(248,81,73,.4);--color-btn-danger-counter-bg: rgba(218,54,51,.1);--color-btn-danger-icon: #f85149;--color-underlinenav-icon: #484f58;--color-underlinenav-border-hover: rgba(110,118,129,.4);--color-fg-default: #c9d1d9;--color-fg-muted: #8b949e;--color-fg-subtle: #484f58;--color-fg-on-emphasis: #f0f6fc;--color-canvas-default: #0d1117;--color-canvas-overlay: #161b22;--color-canvas-inset: #010409;--color-canvas-subtle: #161b22;--color-border-default: #30363d;--color-border-muted: #21262d;--color-border-subtle: rgba(240,246,252,.1);--color-shadow-small: 0 0 transparent;--color-shadow-medium: 0 3px 6px #010409;--color-shadow-large: 0 8px 24px #010409;--color-shadow-extra-large: 0 12px 48px #010409;--color-neutral-emphasis-plus: #6e7681;--color-neutral-emphasis: #6e7681;--color-neutral-muted: rgba(110,118,129,.4);--color-neutral-subtle: rgba(110,118,129,.1);--color-accent-fg: #58a6ff;--color-accent-emphasis: #1f6feb;--color-accent-muted: rgba(56,139,253,.4);--color-accent-subtle: rgba(56,139,253,.15);--color-success-fg: #3fb950;--color-success-emphasis: #238636;--color-success-muted: rgba(46,160,67,.4);--color-success-subtle: rgba(46,160,67,.15);--color-attention-fg: #d29922;--color-attention-emphasis: #9e6a03;--color-attention-muted: rgba(187,128,9,.4);--color-attention-subtle: rgba(187,128,9,.15);--color-severe-fg: #db6d28;--color-severe-emphasis: #bd561d;--color-severe-muted: rgba(219,109,40,.4);--color-severe-subtle: rgba(219,109,40,.15);--color-danger-fg: #f85149;--color-danger-emphasis: #da3633;--color-danger-muted: rgba(248,81,73,.4);--color-danger-subtle: rgba(248,81,73,.15);--color-done-fg: #a371f7;--color-done-emphasis: #8957e5;--color-done-muted: rgba(163,113,247,.4);--color-done-subtle: rgba(163,113,247,.15);--color-sponsors-fg: #db61a2;--color-sponsors-emphasis: #bf4b8a;--color-sponsors-muted: rgba(219,97,162,.4);--color-sponsors-subtle: rgba(219,97,162,.15);--color-primer-canvas-backdrop: rgba(1,4,9,.8);--color-primer-canvas-sticky: rgba(13,17,23,.95);--color-primer-border-active: #F78166;--color-primer-border-contrast: rgba(240,246,252,.2);--color-primer-shadow-highlight: 0 0 transparent;--color-primer-shadow-inset: 0 0 transparent;--color-primer-shadow-focus: 0 0 0 3px #0c2d6b;--color-scale-black: #010409;--color-scale-white: #f0f6fc;--color-scale-gray-0: #f0f6fc;--color-scale-gray-1: #c9d1d9;--color-scale-gray-2: #b1bac4;--color-scale-gray-3: #8b949e;--color-scale-gray-4: #6e7681;--color-scale-gray-5: #484f58;--color-scale-gray-6: #30363d;--color-scale-gray-7: #21262d;--color-scale-gray-8: #161b22;--color-scale-gray-9: #0d1117;--color-scale-blue-0: #cae8ff;--color-scale-blue-1: #a5d6ff;--color-scale-blue-2: #79c0ff;--color-scale-blue-3: #58a6ff;--color-scale-blue-4: #388bfd;--color-scale-blue-5: #1f6feb;--color-scale-blue-6: #1158c7;--color-scale-blue-7: #0d419d;--color-scale-blue-8: #0c2d6b;--color-scale-blue-9: #051d4d;--color-scale-green-0: #aff5b4;--color-scale-green-1: #7ee787;--color-scale-green-2: #56d364;--color-scale-green-3: #3fb950;--color-scale-green-4: #2ea043;--color-scale-green-5: #238636;--color-scale-green-6: #196c2e;--color-scale-green-7: #0f5323;--color-scale-green-8: #033a16;--color-scale-green-9: #04260f;--color-scale-yellow-0: #f8e3a1;--color-scale-yellow-1: #f2cc60;--color-scale-yellow-2: #e3b341;--color-scale-yellow-3: #d29922;--color-scale-yellow-4: #bb8009;--color-scale-yellow-5: #9e6a03;--color-scale-yellow-6: #845306;--color-scale-yellow-7: #693e00;--color-scale-yellow-8: #4b2900;--color-scale-yellow-9: #341a00;--color-scale-orange-0: #ffdfb6;--color-scale-orange-1: #ffc680;--color-scale-orange-2: #ffa657;--color-scale-orange-3: #f0883e;--color-scale-orange-4: #db6d28;--color-scale-orange-5: #bd561d;--color-scale-orange-6: #9b4215;--color-scale-orange-7: #762d0a;--color-scale-orange-8: #5a1e02;--color-scale-orange-9: #3d1300;--color-scale-red-0: #ffdcd7;--color-scale-red-1: #ffc1ba;--color-scale-red-2: #ffa198;--color-scale-red-3: #ff7b72;--color-scale-red-4: #f85149;--color-scale-red-5: #da3633;--color-scale-red-6: #b62324;--color-scale-red-7: #8e1519;--color-scale-red-8: #67060c;--color-scale-red-9: #490202;--color-scale-purple-0: #eddeff;--color-scale-purple-1: #e2c5ff;--color-scale-purple-2: #d2a8ff;--color-scale-purple-3: #bc8cff;--color-scale-purple-4: #a371f7;--color-scale-purple-5: #8957e5;--color-scale-purple-6: #6e40c9;--color-scale-purple-7: #553098;--color-scale-purple-8: #3c1e70;--color-scale-purple-9: #271052;--color-scale-pink-0: #ffdaec;--color-scale-pink-1: #ffbedd;--color-scale-pink-2: #ff9bce;--color-scale-pink-3: #f778ba;--color-scale-pink-4: #db61a2;--color-scale-pink-5: #bf4b8a;--color-scale-pink-6: #9e3670;--color-scale-pink-7: #7d2457;--color-scale-pink-8: #5e103e;--color-scale-pink-9: #42062a;--color-scale-coral-0: #FFDDD2;--color-scale-coral-1: #FFC2B2;--color-scale-coral-2: #FFA28B;--color-scale-coral-3: #F78166;--color-scale-coral-4: #EA6045;--color-scale-coral-5: #CF462D;--color-scale-coral-6: #AC3220;--color-scale-coral-7: #872012;--color-scale-coral-8: #640D04;--color-scale-coral-9: #460701 }}:root{--box-shadow: rgba(0, 0, 0, .133) 0px 1.6px 3.6px 0px, rgba(0, 0, 0, .11) 0px .3px .9px 0px;--box-shadow-thick: rgb(0 0 0 / 10%) 0px 1.8px 1.9px, rgb(0 0 0 / 15%) 0px 6.1px 6.3px, rgb(0 0 0 / 10%) 0px -2px 4px, rgb(0 0 0 / 15%) 0px -6.1px 12px, rgb(0 0 0 / 25%) 0px 6px 12px}*{box-sizing:border-box;min-width:0;min-height:0}svg{fill:currentColor}.vbox{display:flex;flex-direction:column;flex:auto;position:relative}.hbox{display:flex;flex:auto;position:relative}.d-flex{display:flex!important}.d-inline{display:inline!important}.m-1{margin:4px}.m-2{margin:8px}.m-3{margin:16px}.m-4{margin:24px}.m-5{margin:32px}.mx-1{margin:0 4px}.mx-2{margin:0 8px}.mx-3{margin:0 16px}.mx-4{margin:0 24px}.mx-5{margin:0 32px}.my-1{margin:4px 0}.my-2{margin:8px 0}.my-3{margin:16px 0}.my-4{margin:24px 0}.my-5{margin:32px 0}.mt-1{margin-top:4px}.mt-2{margin-top:8px}.mt-3{margin-top:16px}.mt-4{margin-top:24px}.mt-5{margin-top:32px}.mr-1{margin-right:4px}.mr-2{margin-right:8px}.mr-3{margin-right:16px}.mr-4{margin-right:24px}.mr-5{margin-right:32px}.mb-1{margin-bottom:4px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:16px}.mb-4{margin-bottom:24px}.mb-5{margin-bottom:32px}.ml-1{margin-left:4px}.ml-2{margin-left:8px}.ml-3{margin-left:16px}.ml-4{margin-left:24px}.ml-5{margin-left:32px}.p-1{padding:4px}.p-2{padding:8px}.p-3{padding:16px}.p-4{padding:24px}.p-5{padding:32px}.px-1{padding:0 4px}.px-2{padding:0 8px}.px-3{padding:0 16px}.px-4{padding:0 24px}.px-5{padding:0 32px}.py-1{padding:4px 0}.py-2{padding:8px 0}.py-3{padding:16px 0}.py-4{padding:24px 0}.py-5{padding:32px 0}.pt-1{padding-top:4px}.pt-2{padding-top:8px}.pt-3{padding-top:16px}.pt-4{padding-top:24px}.pt-5{padding-top:32px}.pr-1{padding-right:4px}.pr-2{padding-right:8px}.pr-3{padding-right:16px}.pr-4{padding-right:24px}.pr-5{padding-right:32px}.pb-1{padding-bottom:4px}.pb-2{padding-bottom:8px}.pb-3{padding-bottom:16px}.pb-4{padding-bottom:24px}.pb-5{padding-bottom:32px}.pl-1{padding-left:4px}.pl-2{padding-left:8px}.pl-3{padding-left:16px}.pl-4{padding-left:24px}.pl-5{padding-left:32px}.no-wrap{white-space:nowrap!important}.float-left{float:left!important}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}.form-control,.form-select{padding:5px 12px;font-size:14px;line-height:20px;color:var(--color-fg-default);vertical-align:middle;background-color:var(--color-canvas-default);background-repeat:no-repeat;background-position:right 8px center;border:1px solid var(--color-border-default);border-radius:6px;outline:none;box-shadow:var(--color-primer-shadow-inset)}.input-contrast{background-color:var(--color-canvas-inset)}.subnav-search{position:relative;flex:auto;display:flex}.subnav-search-input{flex:auto;padding-left:32px;color:var(--color-fg-muted)}.subnav-search-icon{position:absolute;top:9px;left:8px;display:block;color:var(--color-fg-muted);text-align:center;pointer-events:none}.subnav-search-context+.subnav-search{margin-left:-1px}.subnav-item{flex:none;position:relative;float:left;padding:5px 10px;font-weight:500;line-height:20px;color:var(--color-fg-default);border:1px solid var(--color-border-default)}.subnav-item:hover{background-color:var(--color-canvas-subtle)}.subnav-item:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.subnav-item:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.subnav-item+.subnav-item{margin-left:-1px}.counter{display:inline-block;min-width:20px;padding:0 6px;font-size:12px;font-weight:500;line-height:18px;color:var(--color-fg-default);text-align:center;background-color:var(--color-neutral-muted);border:1px solid transparent;border-radius:2em}.color-icon-success{color:var(--color-success-fg)!important}.color-text-danger{color:var(--color-danger-fg)!important}.color-text-warning{color:var(--color-checks-step-warning-text)!important}.color-fg-muted{color:var(--color-fg-muted)!important}.octicon{display:inline-block;overflow:visible!important;vertical-align:text-bottom;fill:currentColor;margin-right:7px;flex:none}@media only screen and (max-width: 600px){.subnav-item,.form-control{border-radius:0!important}.subnav-item{padding:5px 3px;border:none}.subnav-search-input{border-left:0;border-right:0}}.header-view-status-container{float:right}@media only screen and (max-width: 600px){.header-view-status-container{float:none;margin:0 0 10px!important;overflow:hidden}.header-view-status-container .subnav-search-input{border-left:none;border-right:none}}.tree-item{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;line-height:38px}.tree-item-title{cursor:pointer}.tree-item-body{min-height:18px}.copy-icon{flex:none;height:24px;width:24px;border:none;outline:none;color:var(--color-fg-default);background:transparent;padding:4px;cursor:pointer;display:inline-flex;align-items:center;border-radius:4px}.copy-icon:not(:disabled):hover{background-color:var(--color-border-default)}.label{display:inline-block;padding:0 8px;font-size:12px;font-weight:500;line-height:18px;border:1px solid transparent;border-radius:2em;background-color:var(--color-scale-gray-4);color:#fff;margin:0 10px;flex:none;font-weight:600}@media (prefers-color-scheme: light){.label-color-0{background-color:var(--color-scale-blue-0);color:var(--color-scale-blue-6);border:1px solid var(--color-scale-blue-4)}.label-color-1{background-color:var(--color-scale-yellow-0);color:var(--color-scale-yellow-6);border:1px solid var(--color-scale-yellow-4)}.label-color-2{background-color:var(--color-scale-purple-0);color:var(--color-scale-purple-6);border:1px solid var(--color-scale-purple-4)}.label-color-3{background-color:var(--color-scale-pink-0);color:var(--color-scale-pink-6);border:1px solid var(--color-scale-pink-4)}.label-color-4{background-color:var(--color-scale-coral-0);color:var(--color-scale-coral-6);border:1px solid var(--color-scale-coral-4)}.label-color-5{background-color:var(--color-scale-orange-0);color:var(--color-scale-orange-6);border:1px solid var(--color-scale-orange-4)}}@media (prefers-color-scheme: dark){.label-color-0{background-color:var(--color-scale-blue-9);color:var(--color-scale-blue-2);border:1px solid var(--color-scale-blue-4)}.label-color-1{background-color:var(--color-scale-yellow-9);color:var(--color-scale-yellow-2);border:1px solid var(--color-scale-yellow-4)}.label-color-2{background-color:var(--color-scale-purple-9);color:var(--color-scale-purple-2);border:1px solid var(--color-scale-purple-4)}.label-color-3{background-color:var(--color-scale-pink-9);color:var(--color-scale-pink-2);border:1px solid var(--color-scale-pink-4)}.label-color-4{background-color:var(--color-scale-coral-9);color:var(--color-scale-coral-2);border:1px solid var(--color-scale-coral-4)}.label-color-5{background-color:var(--color-scale-orange-9);color:var(--color-scale-orange-2);border:1px solid var(--color-scale-orange-4)}}.attachment-body{white-space:pre-wrap;background-color:var(--color-canvas-subtle);margin-left:24px;line-height:normal;padding:8px;font-family:monospace;position:relative}.attachment-body .copy-icon{position:absolute;right:5px;top:5px}html,body{width:100%;height:100%;padding:0;margin:0;overscroll-behavior-x:none}body{overflow:auto;max-width:1024px;margin:0 auto;width:100%}.test-file-test:not(:first-child){border-top:1px solid var(--color-border-default)}@media only screen and (max-width: 600px){.htmlreport{padding:0!important}}.chip-header{border:1px solid var(--color-border-default);border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--color-canvas-subtle);padding:0 8px;border-bottom:none;margin-top:12px;font-weight:600;line-height:38px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chip-header.expanded-false{border:1px solid var(--color-border-default);border-radius:6px}.chip-header.expanded-false,.chip-header.expanded-true{cursor:pointer}.chip-body{border:1px solid var(--color-border-default);border-bottom-left-radius:6px;border-bottom-right-radius:6px;padding:16px;margin-bottom:12px}.chip-body-no-insets{padding:0}@media only screen and (max-width: 600px){.chip-header{border-radius:0;border-right:none;border-left:none}.chip-body{border-radius:0;border-right:none;border-left:none;padding:8px}.chip-body-no-insets{padding:0}}#root{color:var(--color-fg-default);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\";-webkit-font-smoothing:antialiased}.tabbed-pane{display:flex;flex:auto;overflow:hidden}.tabbed-pane-tab-strip{display:flex;align-items:center;padding-right:10px;flex:none;width:100%;z-index:2;font-size:14px;line-height:32px;color:var(--color-fg-default);height:48px;min-width:70px;box-shadow:inset 0 -1px 0 var(--color-border-muted)!important}.tabbed-pane-tab-strip:focus{outline:none}.tabbed-pane-tab-element{padding:4px 8px 0;margin-right:4px;cursor:pointer;display:flex;flex:none;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-bottom:2px solid transparent;outline:none;height:100%}.tabbed-pane-tab-label{max-width:250px;white-space:pre;overflow:hidden;text-overflow:ellipsis;display:inline-block}.tabbed-pane-tab-element.selected{border-bottom-color:#666}.tabbed-pane-tab-element:hover{color:#333}.test-case-column{border-radius:6px;margin:24px 0}.test-case-column .tab-element.selected{font-weight:600;border-bottom-color:var(--color-primer-border-active)}.test-case-column .tab-element{border:none;color:var(--color-fg-default);border-bottom:2px solid transparent}.test-case-column .tab-element:hover{color:var(--color-fg-default)}.test-case-title{flex:none;padding:8px;font-weight:400;font-size:32px!important;line-height:1.25!important}.test-case-location,.test-case-duration{flex:none;align-items:center;padding:0 8px 8px}.test-case-path{flex:none;align-items:center;padding:0 8px}.test-case-annotation{flex:none;align-items:center;padding:0 8px;line-height:24px}@media only screen and (max-width: 600px){.test-case-column{border-radius:0!important;margin:0!important}}.test-case-project-labels-row{display:flex;flex-direction:row;flex-wrap:wrap}.image-diff-view .tabbed-pane .tab-content{display:flex;align-items:center;justify-content:center;position:relative}.image-diff-view .image-wrapper img{flex:auto;box-shadow:none;margin:24px auto;min-width:200px;max-width:80%}.image-diff-view .image-wrapper{flex:auto;display:flex;flex-direction:column;align-items:center}.image-diff-view .image-wrapper div{flex:none;align-self:stretch;height:2em;font-weight:500;padding-top:1em;display:flex;flex-direction:row}.test-error-message{white-space:pre;font-family:monospace;overflow:auto;flex:none;background-color:var(--color-canvas-subtle);border-radius:6px;padding:16px;line-height:initial;margin-bottom:6px}.test-result{flex:auto;display:flex;flex-direction:column;margin-bottom:24px}.test-result>div{flex:none}.test-result video,.test-result img{flex:none;box-shadow:var(--box-shadow-thick);margin:24px auto;min-width:200px;max-width:80%}.test-result-path{padding:0 0 0 5px;color:var(--color-fg-muted)}.test-result-counter{border-radius:12px;color:var(--color-canvas-default);padding:2px 8px}@media (prefers-color-scheme: light){.test-result-counter{background:var(--color-scale-gray-5)}}@media (prefers-color-scheme: dark){.test-result-counter{background:var(--color-scale-gray-3)}}@media only screen and (max-width: 600px){.test-result{padding:0!important}}.test-file-test{line-height:32px;align-items:center;padding:2px 10px;overflow:hidden;text-overflow:ellipsis}.test-file-test:hover{background-color:var(--color-canvas-subtle)}.test-file-title{font-weight:600;font-size:16px}.test-file-details-row{padding:0 0 6px 8px;margin:0 0 0 15px;line-height:16px;font-weight:400;color:var(--color-fg-subtle);display:flex;align-items:center}.test-file-path{text-overflow:ellipsis;overflow:hidden;color:var(--color-fg-subtle)}.test-file-path-link{margin-right:10px}.test-file-badge{flex:none}.test-file-badge svg{fill:var(--color-fg-subtle)}.test-file-badge:hover svg{fill:var(--color-fg-muted)}.test-file-test-outcome-skipped{color:var(--color-fg-muted)}.test-file-test-status-icon{flex:none}\n</style>\n  </head>\n  <body>\n    <div id='root'></div>\n    \n  </body>\n</html>\n<script>\nwindow.playwrightReportBase64 = \"data:application/zip;base64,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\";</script>"
  },
  {
    "path": "webui/playwright.config.ts",
    "content": "import type { PlaywrightTestConfig } from '@playwright/test'\nimport { devices } from '@playwright/test'\n\n/**\n * Read environment variables from file.\n * https://github.com/motdotla/dotenv\n */\n// require('dotenv').config();\n\n/**\n * See https://playwright.dev/docs/test-configuration.\n */\nconst config: PlaywrightTestConfig = {\n  testDir: './tests',\n  /* Maximum time one test can run for. */\n  timeout: 30 * 1000,\n  expect: {\n    /**\n     * Maximum time expect() should wait for the condition to be met.\n     * For example in `await expect(locator).toHaveText();`\n     */\n    timeout: 5000,\n  },\n  /* Run tests in files in parallel */\n  fullyParallel: true,\n  /* Fail the build on CI if you accidentally left test.only in the source code. */\n  forbidOnly: !!process.env.CI,\n  /* Retry on CI only */\n  retries: process.env.CI ? 2 : 0,\n  /* Opt out of parallel tests on CI. */\n  workers: process.env.CI ? 1 : undefined,\n  /* Reporter to use. See https://playwright.dev/docs/test-reporters */\n  reporter: 'html',\n  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */\n  use: {\n    /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */\n    actionTimeout: 0,\n    /* Base URL to use in actions like `await page.goto('/')`. */\n    baseURL: 'http://localhost:22301',\n\n    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */\n    trace: 'on-first-retry',\n  },\n\n  /* Configure projects for major browsers */\n  projects: [\n    {\n      name: 'chromium',\n      use: {\n        ...devices['Desktop Chrome'],\n      },\n    },\n\n    // {\n    //   name: 'firefox',\n    //   use: {\n    //     ...devices['Desktop Firefox'],\n    //   },\n    // },\n\n    // {\n    //   name: 'webkit',\n    //   use: {\n    //     ...devices['Desktop Safari'],\n    //   },\n    // },\n\n    /* Test against mobile viewports. */\n    // {\n    //   name: 'Mobile Chrome',\n    //   use: {\n    //     ...devices['Pixel 5'],\n    //   },\n    // },\n    // {\n    //   name: 'Mobile Safari',\n    //   use: {\n    //     ...devices['iPhone 12'],\n    //   },\n    // },\n\n    /* Test against branded browsers. */\n    // {\n    //   name: 'Microsoft Edge',\n    //   use: {\n    //     channel: 'msedge',\n    //   },\n    // },\n    // {\n    //   name: 'Google Chrome',\n    //   use: {\n    //     channel: 'chrome',\n    //   },\n    // },\n  ],\n\n  /* Folder for test artifacts such as screenshots, videos, traces, etc. */\n  // outputDir: 'test-results/',\n\n  /* Run your local dev server before starting the tests */\n  // webServer: {\n  //   command: 'npm run start',\n  //   port: 3000,\n  // },\n}\n\nexport default config\n"
  },
  {
    "path": "webui/postcss.config.cjs",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "webui/tailwind.config.cjs",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: ['./index.html', './app/**/*.{js,ts,jsx,tsx}'],\n  theme: {\n    extend: {\n      colors: {\n        '#e9e8e7': '#e9e8e7',\n        '#8b8685': '#8b8685',\n        '#656463': '#656463',\n        '#454443': '#454443',\n        '#353433': '#353433',\n        '#252423': '#252423',\n        '#090807': '#090807',\n        '#bbeeff': '#bbeeff',\n        '#d7fc70': '#d7fc70',\n        '#ffffbb': '#ffffbb',\n      },\n    },\n  },\n  plugins: [],\n}\n"
  },
  {
    "path": "webui/tests/automatron.spec.ts",
    "content": "import { test, expect, Page } from '@playwright/test'\n\ntest('shows current time', async ({ page }) => {\n  await page.goto('/')\n  await expect(page.locator('body')).toHaveText(/\\d\\d:\\d\\d/)\n})\n\ntest('can sign in', async ({ page }) => {\n  await page.goto('/?backend=fake')\n  await page.getByRole('button', { name: 'Sign In' }).click()\n  await expect(page.getByRole('button', { name: 'Automatron' })).toBeVisible()\n})\n\ntest('can send message with error', async ({ page }) => {\n  await page.goto('/?backend=fake')\n  await page.getByRole('button', { name: 'Sign In' }).click()\n  await page.getByRole('button', { name: 'Automatron' }).click()\n  await page.getByRole('textbox').fill('!error')\n  await page.getByRole('button', { name: 'Send' }).click()\n  await expect(page.locator('pre')).toHaveText(/SyntaxError/)\n})\n\ntest('can display result', async ({ page }) => {\n  await send(page, {\n    type: 'text',\n    text: 'Hello, world!',\n  })\n  await expect(page.locator('pre')).toHaveText(/Hello, world!/)\n})\n\nasync function send(page: Page, ...results: any[]) {\n  await page.goto('/?backend=fake')\n  await page.getByRole('button', { name: 'Sign In' }).click()\n  await page.getByRole('button', { name: 'Automatron' }).click()\n  await page.getByRole('textbox').fill(\n    JSON.stringify({\n      ok: true,\n      result: [...results],\n    })\n  )\n  await page.getByRole('button', { name: 'Send' }).click()\n}\n"
  },
  {
    "path": "webui/tsconfig.json",
    "content": "{\n  \"include\": [\"env.d.ts\", \"**/*.ts\", \"**/*.tsx\"],\n  \"compilerOptions\": {\n    \"lib\": [\"DOM\", \"DOM.Iterable\", \"ES2022\"],\n    \"isolatedModules\": true,\n    \"esModuleInterop\": true,\n    \"jsx\": \"react-jsx\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"resolveJsonModule\": true,\n    \"target\": \"ES2022\",\n    \"strict\": true,\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"~/*\": [\"./app/*\"]\n    },\n\n    // Vite takes care of building everything, not tsc.\n    \"noEmit\": true\n  }\n}\n"
  },
  {
    "path": "webui/vercel.json",
    "content": "{\n  \"routes\": [\n    { \"handle\": \"filesystem\" },\n    { \"src\": \"/(.*)\", \"dest\": \"/index.html\" }\n  ]\n}\n"
  },
  {
    "path": "webui/vite.config.ts",
    "content": "import { vitePlugin as remix } from '@remix-run/dev'\nimport { defineConfig } from 'vite'\nimport tsconfigPaths from 'vite-tsconfig-paths'\n\nexport default defineConfig({\n  plugins: [remix({ ssr: false, buildDirectory: 'dist' }), tsconfigPaths()],\n})\n"
  }
]