diff --git a/pyproject.toml b/pyproject.toml index 9ddde2c2..4c09a652 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -127,6 +127,7 @@ version = {attr = "iac_code.__version__"} "**/*.png", "**/*.svg", "**/*.LICENSE", + "**/*.NOTICE", "**/*.rego", "**/*.mo", "**/*.po", diff --git a/scripts/README.md b/scripts/README.md index 118ab052..04382bba 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -22,6 +22,7 @@ repository root with `uv run python ...` unless a script-specific README says ot | `rendering/test_diagram_render.py` | Manual diagram rendering check. | | `rendering/preview_template_architecture_llm.py` | Manual ROS template architecture preview with a real LLM semantic pass. | | `repl/e2e/` | Real PTY-driven REPL pipeline end-to-end scenario runner. POSIX-only because it uses `pexpect`. | +| `web/` | Web asset maintenance and visual evaluation tools. See `web/README.md`. | ## Common Commands diff --git a/scripts/README.zh-CN.md b/scripts/README.zh-CN.md index f74d1833..8959d8dd 100644 --- a/scripts/README.zh-CN.md +++ b/scripts/README.zh-CN.md @@ -22,6 +22,7 @@ | `provider-update-guide.zh-CN.md` | Provider 模型调研、代码更新、测试与提交的中文维护指南。 | | `rendering/test_diagram_render.py` | 手工图表渲染检查。 | | `repl/e2e/` | 基于真实 PTY 驱动的 REPL pipeline 端到端场景 runner。因为使用 `pexpect`,仅支持 POSIX 环境。 | +| `web/` | Web 静态资源维护和视觉评估工具,详见 `web/README.zh-CN.md`。 | ## 常用命令 diff --git a/scripts/web/README.md b/scripts/web/README.md new file mode 100644 index 00000000..2f3ef1f2 --- /dev/null +++ b/scripts/web/README.md @@ -0,0 +1,67 @@ +# Web Development Utilities + +The files in this directory support local Web development, asset maintenance, and manual visual evaluation. They are +repository tools: normal Python, Web, and Desktop builds do not execute or package them. + +Runtime artifacts generated or checked by these tools live under `src/iac_code/web/static/`. Setuptools includes the +committed JavaScript, license, and notice files in Python distributions, while the Desktop sidecar copies the same +static directory. A release therefore consumes the committed artifacts and does not require Node.js, pnpm, an Eraser +source checkout, or the ROS template corpus. + +## Eraser browser bundle + +`build_eraser_vendor.mjs` creates the browser-only Eraser bundle. `eraser/browser-entry.js` is its source entry point; +it registers local fonts and icons and exposes the resolver/render adapter used by the sandboxed Web frame. Neither +file is loaded by the product at runtime. + +The build is pinned to Eraser commit `6d377f296b94abf63481a07128884066e4930321`. The Eraser checkout requires Node +22.12 or newer and pnpm 10.33. From the two repository roots: + +```bash +cd /path/to/eraser-diagrams +corepack pnpm install --frozen-lockfile +corepack pnpm build + +cd /path/to/iac-code +node scripts/web/build_eraser_vendor.mjs /path/to/eraser-diagrams +``` + +The command updates these committed release inputs: + +- `src/iac_code/web/static/js/vendor/eraser-diagrams.min.js` +- `src/iac_code/web/static/js/vendor/eraser-diagrams.NOTICE` + +The Eraser MIT license is maintained separately at +`src/iac_code/web/static/js/vendor/eraser-diagrams.LICENSE`. Review all three files when changing the pinned Eraser +revision. The script rejects any source checkout whose HEAD differs from the pinned commit and fails when it cannot +collect a bundled dependency's license text. + +This command is intentionally outside the normal release build. Rebuilding during every package build would add an +external Git checkout and a Node toolchain to an otherwise self-contained release. Update and commit the vendor files +explicitly instead. + +## Fixed-corpus layout evaluation + +`evaluate_eraser_corpus.py` checks the fixed 30-template ROS corpus through the public preview API and the same layout +Worker used by the browser. It reports sibling overlap, failed containment, canvas overflow, edge/node intersections, +and extreme aspect ratios. It is a deterministic geometry check and does not call an LLM. + +Start the local Web service, then run: + +```bash +uv run iac-code web --host 127.0.0.1 --port 8766 + +uv run python scripts/web/evaluate_eraser_corpus.py \ + --templates-root /path/to/ros-templates \ + --base-url http://127.0.0.1:8766 \ + --output /tmp/iac-code-diagram-eval/run +``` + +The corpus manifest pins the expected `ros-templates` revision. Use `--allow-template-revision` only for an intentional +comparison with another revision. The evaluator reads templates and POSTs their contents to `--base-url`; keep the +default loopback URL unless sending those files to another service is intentional. The output path receives JSON and +Markdown reports and is not packaged. + +The evaluation script remains outside `make test` because it needs a separate template checkout, Node.js, and a +running Web service. Unit and integration coverage for the preview API, graph projection, layout Worker, static assets, +and packaging stays under `tests/`. diff --git a/scripts/web/README.zh-CN.md b/scripts/web/README.zh-CN.md new file mode 100644 index 00000000..d56396ef --- /dev/null +++ b/scripts/web/README.zh-CN.md @@ -0,0 +1,59 @@ +# Web 开发工具 + +本目录用于 Web 本地开发、静态资源维护和手工视觉评估。正常的 Python、Web 和 Desktop 构建既不会执行, +也不会打包这里的脚本。 + +这些工具生成或检查的运行时文件位于 `src/iac_code/web/static/`。Python 发布包通过 setuptools 收录已提交的 +JavaScript、许可证和 NOTICE,Desktop sidecar 则复制同一静态资源目录。因此正常发布只使用仓库里已经提交的 +产物,不需要安装 Node.js、pnpm,也不需要准备 Eraser 源码仓库或 ROS 模板语料库。 + +## Eraser 浏览器 Bundle + +`build_eraser_vendor.mjs` 生成仅供浏览器使用的 Eraser bundle。`eraser/browser-entry.js` 是构建入口,负责注册 +本地字体和图标,并暴露 sandbox Web frame 使用的解析、渲染适配器。这两个文件都不会被产品运行时直接加载。 + +构建固定使用 Eraser 提交 `6d377f296b94abf63481a07128884066e4930321`。Eraser 仓库要求 Node 22.12 或更高 +版本及 pnpm 10.33。在两个仓库根目录依次执行: + +```bash +cd /path/to/eraser-diagrams +corepack pnpm install --frozen-lockfile +corepack pnpm build + +cd /path/to/iac-code +node scripts/web/build_eraser_vendor.mjs /path/to/eraser-diagrams +``` + +该命令更新以下需要提交的发布输入: + +- `src/iac_code/web/static/js/vendor/eraser-diagrams.min.js` +- `src/iac_code/web/static/js/vendor/eraser-diagrams.NOTICE` + +Eraser 的 MIT 许可证单独维护在 `src/iac_code/web/static/js/vendor/eraser-diagrams.LICENSE`。升级固定版本时应同时 +检查这三个文件。源码仓库 HEAD 与固定提交不一致,或者无法收集某个打包依赖的许可证文本时,脚本会直接失败。 + +这个命令有意不接入正常发布构建。否则每次打包都会额外依赖外部 Git checkout 和 Node 工具链。升级 Eraser 时应 +显式重新生成并提交 vendor 文件。 + +## 固定语料布局评估 + +`evaluate_eraser_corpus.py` 通过公开预览 API 和浏览器使用的同一个布局 Worker 检查固定的 30 个 ROS 模板,输出 +同级节点重叠、容器包含失败、画布越界、连线穿过节点和极端长宽比等指标。它是确定性几何检查,不调用 LLM。 + +先启动本地 Web 服务,再运行: + +```bash +uv run iac-code web --host 127.0.0.1 --port 8766 + +uv run python scripts/web/evaluate_eraser_corpus.py \ + --templates-root /path/to/ros-templates \ + --base-url http://127.0.0.1:8766 \ + --output /tmp/iac-code-diagram-eval/run +``` + +语料清单固定了预期的 `ros-templates` 提交。只有明确需要比较其他版本时才使用 +`--allow-template-revision`。评估器会读取模板并把内容 POST 到 `--base-url`;除非明确需要发送给其他服务,否则应 +保留默认的本机回环地址。JSON 和 Markdown 报告写入指定输出目录,不进入发布包。 + +评估脚本没有接入 `make test`,因为它依赖单独的模板仓库、Node.js 和正在运行的 Web 服务。预览 API、图投影、 +布局 Worker、静态资源与打包规则的单元及集成测试仍位于 `tests/`。 diff --git a/scripts/web/build_eraser_vendor.mjs b/scripts/web/build_eraser_vendor.mjs new file mode 100644 index 00000000..977d94f1 --- /dev/null +++ b/scripts/web/build_eraser_vendor.mjs @@ -0,0 +1,146 @@ +import { execFileSync } from "node:child_process"; +import { existsSync, readFileSync, readdirSync, realpathSync, writeFileSync } from "node:fs"; +import { createRequire } from "node:module"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +const ERASER_COMMIT = "6d377f296b94abf63481a07128884066e4930321"; +const scriptDir = dirname(fileURLToPath(import.meta.url)); +const repositoryRoot = resolve(scriptDir, "../.."); +const sourceRoot = resolve(process.argv[2] || ""); +if (!process.argv[2]) { + throw new Error("Usage: node scripts/web/build_eraser_vendor.mjs /path/to/eraser-diagrams"); +} +const actualCommit = execFileSync("git", ["rev-parse", "HEAD"], { + cwd: sourceRoot, + encoding: "utf8", +}).trim(); +if (actualCommit !== ERASER_COMMIT) { + throw new Error(`Expected eraser-diagrams ${ERASER_COMMIT}, found ${actualCommit}`); +} +const require = createRequire(join(sourceRoot, "package.json")); +const { build } = require("esbuild"); +const eraserModules = new Map([ + ["@eraserlabs/diagrams/library", "packages/diagrams/dist/library/index.js"], + ["@eraserlabs/diagrams/normalizers", "packages/diagrams/dist/library/normalizers.js"], + ["@eraserlabs/layout", "packages/layout/dist/index.js"], + ["@eraserlabs/protocol", "packages/protocol/dist/index.js"], + ["@eraserlabs/protocol/schema", "packages/protocol/dist/schema.js"], + ["@eraserlabs/protocol/schemas/tag-schema", "packages/protocol/schemas/tag-schema.schema.json"], + ["@eraserlabs/render", "packages/render/dist/index.js"], + ["@eraserlabs/render/browser", "packages/render/dist/browser/index.js"], + ["@eraserlabs/resolve", "packages/resolve/dist/index.js"], + ["@eraserlabs/resolve/schema", "packages/resolve/dist/schema/index.js"], + ["@eraserlabs/utils", "packages/utils/dist/index.js"], +]); +const result = await build({ + absWorkingDir: "/", + entryPoints: [join(scriptDir, "eraser", "browser-entry.js")], + bundle: true, + platform: "browser", + format: "iife", + minify: true, + define: { "process.env": "{}" }, + nodePaths: [join(sourceRoot, "node_modules")], + plugins: [ + { + name: "eraser-workspace-modules", + setup(builder) { + builder.onResolve({ filter: /^@eraserlabs\// }, (args) => { + const relative = eraserModules.get(args.path); + return relative ? { path: join(sourceRoot, relative) } : null; + }); + }, + }, + ], + outfile: join(repositoryRoot, "src/iac_code/web/static/js/vendor/eraser-diagrams.min.js"), + legalComments: "none", + metafile: true, +}); +const mitFallback = (owner) => `MIT License + +Copyright (c) ${owner} + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.`; +const bundledPackages = [...new Set( + Object.keys(result.metafile.inputs) + .map((input) => input.match(/node_modules\/(?:\.pnpm\/[^/]+\/node_modules\/)?((?:@[^/]+\/)?[^/]+)/)?.[1]) + .filter(Boolean), +)].sort(); +const thirdPartyLicenses = new Map(); +function addPackageLicense(directory) { + const packageMetadata = JSON.parse(readFileSync(join(directory, "package.json"), "utf8")); + const name = String(packageMetadata.name || ""); + if (!name || name.startsWith("@eraserlabs/")) return; + const key = `${name}@${packageMetadata.version || "unknown"}`; + if (thirdPartyLicenses.has(key)) return; + const licenseName = readdirSync(directory) + .filter((entry) => /^(licen[cs]e|copying)(\.|$)/i.test(entry)) + .sort()[0]; + if (licenseName) { + thirdPartyLicenses.set(key, readFileSync(join(directory, licenseName), "utf8").trim()); + } else if (packageMetadata.license === "MIT") { + const author = typeof packageMetadata.author === "string" + ? packageMetadata.author + : packageMetadata.author?.name || name; + thirdPartyLicenses.set(key, mitFallback(author)); + } else { + throw new Error(`Missing license file for bundled dependency ${key}`); + } +} +for (const input of Object.keys(result.metafile.inputs)) { + if (input.startsWith("<") || input.startsWith("(")) continue; + let directory = dirname(realpathSync(resolve("/", input))); + while (directory.startsWith(sourceRoot)) { + const packagePath = join(directory, "package.json"); + if (existsSync(packagePath)) { + addPackageLicense(directory); + break; + } + const parent = dirname(directory); + if (parent === directory) break; + directory = parent; + } +} +const pnpmStore = join(sourceRoot, "node_modules", ".pnpm"); +for (const packageName of bundledPackages) { + const hasLicense = [...thirdPartyLicenses.keys()].some((key) => key.startsWith(`${packageName}@`)); + if (hasLicense) continue; + const packageDirectory = readdirSync(pnpmStore) + .map((entry) => join(pnpmStore, entry, "node_modules", packageName)) + .find((candidate) => existsSync(join(candidate, "package.json"))); + if (!packageDirectory) throw new Error(`Cannot locate bundled dependency ${packageName}`); + addPackageLicense(packageDirectory); +} +const notice = [ + "Eraser diagrams browser bundle third-party notices", + "===================================================", + "", + `Generated from eraserlabs/eraser-diagrams commit ${ERASER_COMMIT}.`, + "The Eraser Diagrams license is in eraser-diagrams.LICENSE.", + "", + ...[...thirdPartyLicenses.entries()].sort(([left], [right]) => left.localeCompare(right)).flatMap(([name, license]) => [ + name, + "-".repeat(name.length), + license, + "", + ]), +].join("\n"); +writeFileSync(join(repositoryRoot, "src/iac_code/web/static/js/vendor/eraser-diagrams.NOTICE"), notice, "utf8"); +console.log(`Built Eraser browser bundle from ${ERASER_COMMIT}: ${bundledPackages.join(", ")}`); diff --git a/scripts/web/eraser/browser-entry.js b/scripts/web/eraser/browser-entry.js new file mode 100644 index 00000000..e410c43f --- /dev/null +++ b/scripts/web/eraser/browser-entry.js @@ -0,0 +1,31 @@ +import { stockLibrary, buildRenderPageSetup } from "@eraserlabs/diagrams/library"; +import { stockNormalizers } from "@eraserlabs/diagrams/normalizers"; +import "@eraserlabs/render/browser"; +import { createResolver, prepareLibrary } from "@eraserlabs/resolve"; + +window.createIacEraserRenderer = async function createIacEraserRenderer(iconMap) { + const resolver = await createResolver({ + library: stockLibrary, + normalizers: stockNormalizers, + iconLoader: async (name) => { + const icon = iconMap[name]; + if (!icon) throw new Error(`Unknown local icon: ${name}`); + return icon; + }, + }); + window.__eraser.setup(buildRenderPageSetup(prepareLibrary(stockLibrary))); + await window.__eraser.registerFonts({ + css: + ':root{--font-clean:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB",sans-serif;--font-rough:var(--font-clean);--font-mono:ui-monospace,SFMono-Regular,Consolas,monospace}', + faces: [], + }); + return async (input) => { + const resolved = await resolver.resolve(input); + if (!resolved.ok) { + const reason = resolved.errors?.map((item) => item.message || String(item)).join("; ") || "resolve failed"; + throw new Error(reason); + } + const layout = await window.__eraser.run(resolved); + return { layout, warnings: resolved.warnings || [] }; + }; +}; diff --git a/scripts/web/evaluate_eraser_corpus.py b/scripts/web/evaluate_eraser_corpus.py new file mode 100644 index 00000000..3d479877 --- /dev/null +++ b/scripts/web/evaluate_eraser_corpus.py @@ -0,0 +1,286 @@ +#!/usr/bin/env python3 +"""Evaluate the fixed ROS visual corpus through the public preview API and layout worker.""" + +from __future__ import annotations + +import argparse +import json +import shutil +import subprocess +import tempfile +import urllib.error +import urllib.request +from datetime import datetime, timezone +from pathlib import Path +from typing import Any + +REPOSITORY_ROOT = Path(__file__).resolve().parents[2] +DEFAULT_MANIFEST = REPOSITORY_ROOT / "src/iac_code/web/static/diagram-preview-corpus.json" +DEFAULT_WORKER = REPOSITORY_ROOT / "src/iac_code/web/static/js/eraser_layout_worker.js" + + +def _arguments() -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--templates-root", type=Path, required=True) + parser.add_argument("--base-url", default="http://127.0.0.1:8766") + parser.add_argument("--manifest", type=Path, default=DEFAULT_MANIFEST) + parser.add_argument("--worker", type=Path, default=DEFAULT_WORKER) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument( + "--allow-template-revision", + action="store_true", + help="run against a template repository revision other than the pinned corpus revision", + ) + return parser.parse_args() + + +def _git_revision(root: Path) -> str: + completed = subprocess.run( + ["git", "rev-parse", "HEAD"], + cwd=root, + capture_output=True, + check=True, + encoding="utf-8", + text=True, + timeout=10, + ) + return completed.stdout.strip() + + +def _request_json(url: str, *, payload: dict[str, Any] | None = None) -> dict[str, Any]: + body = None if payload is None else json.dumps(payload).encode("utf-8") + request = urllib.request.Request( + url, + data=body, + method="GET" if body is None else "POST", + headers={"Accept": "application/json", "Content-Type": "application/json"}, + ) + try: + with urllib.request.urlopen(request, timeout=30) as response: + return json.load(response) + except urllib.error.HTTPError as error: + detail = error.read().decode("utf-8", errors="replace") + raise RuntimeError("{} returned {}: {}".format(url, error.code, detail)) from error + + +def _assert_preview_page(base_url: str) -> None: + with urllib.request.urlopen(base_url.rstrip("/") + "/diagram-preview", timeout=15) as response: + html = response.read().decode("utf-8") + if 'data-diagram-preview="dropzone"' not in html: + raise RuntimeError("/diagram-preview did not return the template preview page") + + +def _run_worker(worker: Path, graphs: list[dict[str, Any]]) -> list[dict[str, Any]]: + node = shutil.which("node") + if node is None: + raise RuntimeError("node is required to execute the Eraser layout worker") + harness_source = """ +const fs = require("node:fs"); +const vm = require("node:vm"); +const outputs = []; +const context = { self: { postMessage: (value) => outputs.push(value) } }; +vm.runInNewContext(fs.readFileSync(process.argv[2], "utf8"), context); +for (const [index, graph] of JSON.parse(fs.readFileSync(process.argv[3], "utf8")).entries()) { + context.self.onmessage({ data: { requestId: String(index), graph } }); +} +process.stdout.write(JSON.stringify(outputs)); +""".strip() + with tempfile.TemporaryDirectory() as temporary: + directory = Path(temporary) + harness = directory / "worker-harness.cjs" + graph_file = directory / "graphs.json" + harness.write_text(harness_source, encoding="utf-8") + graph_file.write_text(json.dumps(graphs, ensure_ascii=False), encoding="utf-8") + completed = subprocess.run( + [node, str(harness), str(worker), str(graph_file)], + capture_output=True, + check=False, + encoding="utf-8", + text=True, + timeout=60, + ) + if completed.returncode != 0: + raise RuntimeError("layout worker failed: {}".format(completed.stderr.strip())) + outputs = json.loads(completed.stdout) + failures = [item.get("error", "unknown worker error") for item in outputs if not item.get("ok")] + if failures: + raise RuntimeError("layout worker rejected corpus: {}".format("; ".join(failures))) + return [item["layout"] for item in outputs] + + +def _overlaps(left: dict[str, Any], right: dict[str, Any], padding: float = 0) -> bool: + return ( + left["x"] + padding < right["x"] + right["width"] - padding + and right["x"] + padding < left["x"] + left["width"] - padding + and left["y"] + padding < right["y"] + right["height"] - padding + and right["y"] + padding < left["y"] + left["height"] - padding + ) + + +def _segment_crosses_rect(start: list[float], end: list[float], rectangle: dict[str, Any], margin: float = 3) -> bool: + left = rectangle["x"] + margin + right = rectangle["x"] + rectangle["width"] - margin + top = rectangle["y"] + margin + bottom = rectangle["y"] + rectangle["height"] - margin + if start[0] == end[0]: + return left < start[0] < right and max(start[1], end[1]) > top and min(start[1], end[1]) < bottom + if start[1] == end[1]: + return top < start[1] < bottom and max(start[0], end[0]) > left and min(start[0], end[0]) < right + return False + + +def _layout_metrics(graph: dict[str, Any], layout: dict[str, Any]) -> dict[str, Any]: + items = {item["id"]: item for item in layout["items"]} + values = list(items.values()) + sibling_overlaps: list[list[str]] = [] + for index, left in enumerate(values): + for right in values[index + 1 :]: + if left.get("parentId") == right.get("parentId") and _overlaps(left, right): + sibling_overlaps.append([left["id"], right["id"]]) + containment_failures = [] + for item in values: + parent = items.get(item.get("parentId")) + if parent and not ( + item["x"] >= parent["x"] + and item["y"] >= parent["y"] + and item["x"] + item["width"] <= parent["x"] + parent["width"] + and item["y"] + item["height"] <= parent["y"] + parent["height"] + ): + containment_failures.append(item["id"]) + outside = [ + item["id"] + for item in values + if item["x"] < 0 + or item["y"] < 0 + or item["x"] + item["width"] > layout["width"] + or item["y"] + item["height"] > layout["height"] + ] + edge_node_intersections = [] + for edge in layout["edges"]: + for item in values: + if item["kind"] != "node" or item["id"] in {edge["from"], edge["to"]}: + continue + if any(_segment_crosses_rect(start, end, item) for start, end in zip(edge["points"], edge["points"][1:])): + edge_node_intersections.append([edge["id"], item["id"]]) + return { + "layoutVersion": layout["layoutVersion"], + "width": layout["width"], + "height": layout["height"], + "aspectRatio": round(layout["width"] / layout["height"], 3), + "nodeCount": len(graph["nodes"]), + "containerCount": len(graph["containers"]), + "edgeCount": len(graph["edges"]), + "siblingOverlaps": sibling_overlaps, + "containmentFailures": containment_failures, + "outsideCanvas": outside, + "edgeNodeIntersections": edge_node_intersections, + } + + +def _markdown(report: dict[str, Any]) -> str: + summary = report["summary"] + lines = [ + "# Eraser visual corpus evaluation", + "", + "- Template revision: `{}`".format(report["templateRepositoryCommit"]), + "- Layout version: `{}`".format(summary["layoutVersion"]), + "- Templates: {}/{} passed".format(summary["passedTemplates"], summary["templateCount"]), + "- Views: {}/{} passed".format(summary["passedViews"], summary["viewCount"]), + "- Sibling overlaps: {}".format(summary["siblingOverlaps"]), + "- Containment failures: {}".format(summary["containmentFailures"]), + "- Outside canvas: {}".format(summary["outsideCanvas"]), + "- Edge/node intersections: {}".format(summary["edgeNodeIntersections"]), + "- Extreme aspect ratios: {}".format(summary["extremeAspectRatios"]), + "", + "| # | Template | Views | Layout size(s) | Result |", + "| ---: | --- | ---: | --- | --- |", + ] + for index, item in enumerate(report["templates"], 1): + sizes = ", ".join("{}×{}".format(view["width"], view["height"]) for view in item["views"]) + lines.append( + "| {} | `{}` | {} | {} | {} |".format(index, item["path"], len(item["views"]), sizes, item["result"]) + ) + return "\n".join(lines) + "\n" + + +def main() -> int: + arguments = _arguments() + manifest = json.loads(arguments.manifest.read_text(encoding="utf-8")) + expected_revision = manifest["templateRepositoryCommit"] + actual_revision = _git_revision(arguments.templates_root) + if actual_revision != expected_revision and not arguments.allow_template_revision: + raise RuntimeError( + "template repository is at {}; expected {} (use --allow-template-revision to override)".format( + actual_revision, expected_revision + ) + ) + _assert_preview_page(arguments.base_url) + templates = [] + graphs = [] + graph_owners = [] + endpoint = arguments.base_url.rstrip("/") + "/api/diagram-preview" + for relative_path in manifest["templates"]: + path = arguments.templates_root / relative_path + payload = _request_json(endpoint, payload={"filename": path.name, "content": path.read_text(encoding="utf-8")}) + views = payload.get("views") or [] + if not views: + raise RuntimeError("{} returned no architecture views".format(relative_path)) + template = {"path": relative_path, "filename": payload.get("filename"), "views": [], "result": "pending"} + template_index = len(templates) + templates.append(template) + for view_index, view in enumerate(views): + graph = view.get("graph") + if not isinstance(graph, dict): + raise RuntimeError("{} view {} returned no graph".format(relative_path, view_index)) + graphs.append(graph) + graph_owners.append((template_index, view_index, graph)) + layouts = _run_worker(arguments.worker, graphs) + for layout, (template_index, _view_index, graph) in zip(layouts, graph_owners): + templates[template_index]["views"].append(_layout_metrics(graph, layout)) + for template in templates: + failed = any( + view[metric] + for view in template["views"] + for metric in ("siblingOverlaps", "containmentFailures", "outsideCanvas", "edgeNodeIntersections") + ) + template["result"] = "fail" if failed else "pass" + all_views = [view for template in templates for view in template["views"]] + summary = { + "templateCount": len(templates), + "passedTemplates": sum(template["result"] == "pass" for template in templates), + "viewCount": len(all_views), + "passedViews": sum( + not any( + view[metric] + for metric in ("siblingOverlaps", "containmentFailures", "outsideCanvas", "edgeNodeIntersections") + ) + for view in all_views + ), + "layoutVersion": all_views[0]["layoutVersion"] if all_views else "", + "siblingOverlaps": sum(len(view["siblingOverlaps"]) for view in all_views), + "containmentFailures": sum(len(view["containmentFailures"]) for view in all_views), + "outsideCanvas": sum(len(view["outsideCanvas"]) for view in all_views), + "edgeNodeIntersections": sum(len(view["edgeNodeIntersections"]) for view in all_views), + "extremeAspectRatios": sum(view["aspectRatio"] < 0.55 or view["aspectRatio"] > 3.8 for view in all_views), + } + report = { + "generatedAt": datetime.now(timezone.utc).isoformat(), + "baseUrl": arguments.base_url, + "templateRepository": str(arguments.templates_root.resolve()), + "templateRepositoryCommit": actual_revision, + "manifest": str(arguments.manifest.resolve()), + "worker": str(arguments.worker.resolve()), + "summary": summary, + "templates": templates, + } + arguments.output.mkdir(parents=True, exist_ok=True) + (arguments.output / "evaluation.json").write_text( + json.dumps(report, ensure_ascii=False, indent=2), encoding="utf-8" + ) + (arguments.output / "evaluation.md").write_text(_markdown(report), encoding="utf-8") + print(json.dumps(summary, ensure_ascii=False, indent=2)) + return 0 if summary["passedTemplates"] == summary["templateCount"] else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/setup.py b/setup.py index fd0435bb..bbe80473 100644 --- a/setup.py +++ b/setup.py @@ -88,6 +88,7 @@ "**/*.js", "**/*.svg", "**/*.LICENSE", + "**/*.NOTICE", "**/*.mo", "**/*.po", ], diff --git a/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po b/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po index 5f1745cc..4fb366c1 100644 --- a/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po +++ b/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po @@ -148,7 +148,7 @@ msgstr "" "Pipeline-Handoff." #: src/iac_code/a2a/executor.py src/iac_code/a2a/pipeline_executor.py -#: src/iac_code/a2a/transports/dispatcher.py +#: src/iac_code/a2a/task_store.py src/iac_code/a2a/transports/dispatcher.py msgid "Task canceled." msgstr "Aufgabe abgebrochen." @@ -158,6 +158,10 @@ msgstr "" "Die Berechtigungsentscheidung des normalen Chats ist vor der Sicherung " "nicht verfügbar." +#: src/iac_code/a2a/executor.py src/iac_code/a2a/transports/dispatcher.py +msgid "Task canceled while waiting for input." +msgstr "Aufgabe beim Warten auf Eingabe abgebrochen." + #: src/iac_code/a2a/executor.py src/iac_code/agui/errors.py msgid "Session backup is still synchronizing. Retry after 3 seconds." msgstr "" @@ -522,10 +526,6 @@ msgstr "" msgid "Task {task_id} is already completed." msgstr "Aufgabe {task_id} ist bereits abgeschlossen." -#: src/iac_code/a2a/transports/dispatcher.py -msgid "Task canceled while waiting for input." -msgstr "Aufgabe beim Warten auf Eingabe abgebrochen." - #: src/iac_code/a2a/transports/dispatcher.py msgid "Task completed." msgstr "Aufgabe abgeschlossen." @@ -13567,6 +13567,42 @@ msgstr "Es läuft bereits ein Update." msgid "The update command exited with code {}." msgstr "Der Update-Befehl wurde mit Code {} beendet." +#: src/iac_code/web/app.py +msgid "The template must be 2 MB or smaller." +msgstr "Die Vorlage darf höchstens 2 MB groß sein." + +#: src/iac_code/web/app.py +msgid "Choose a ROS template in YAML, YML, or JSON format." +msgstr "Wählen Sie eine ROS-Vorlage im YAML-, YML- oder JSON-Format aus." + +#: src/iac_code/web/app.py +msgid "The file does not look like a ROS template." +msgstr "Die Datei scheint keine ROS-Vorlage zu sein." + +#: src/iac_code/web/app.py +msgid "The ROS template could not be parsed." +msgstr "Die ROS-Vorlage konnte nicht analysiert werden." + +#: src/iac_code/web/app.py +msgid "The ROS template must contain a mapping at its root." +msgstr "Die ROS-Vorlage muss auf der obersten Ebene eine Zuordnung enthalten." + +#: src/iac_code/web/app.py +msgid "The ROS template does not contain any resources." +msgstr "Die ROS-Vorlage enthält keine Ressourcen." + +#: src/iac_code/web/app.py +msgid "" +"The ROS template does not contain resources supported by the architecture" +" renderer." +msgstr "" +"Die ROS-Vorlage enthält keine vom Architektur-Renderer unterstützten " +"Ressourcen." + +#: src/iac_code/web/app.py +msgid "The ROS template could not be rendered." +msgstr "Die ROS-Vorlage konnte nicht gerendert werden." + #: src/iac_code/web/app.py msgid "A project directory is required." msgstr "Ein Projektverzeichnis ist erforderlich." @@ -13999,6 +14035,10 @@ msgstr "Sitzung · {}" msgid "unknown theme" msgstr "unbekanntes Design" +#: src/iac_code/web/settings.py +msgid "unknown architecture diagram renderer" +msgstr "Unbekannter Renderer für Architekturdiagramme" + #: src/iac_code/web/settings.py msgid "unknown language" msgstr "unbekannte Sprache" diff --git a/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.po b/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.po index 99648cf7..0d1bbc4a 100644 --- a/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.po +++ b/src/iac_code/i18n/locales/de/LC_MESSAGES/webui.po @@ -18,6 +18,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.18.0\n" +#: src/iac_code/web/static/diagram-preview.html +msgid "Architecture diagram preview" +msgstr "Vorschau des Architekturdiagramms" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template to render its architecture diagram locally." +msgstr "" +"Wählen Sie eine ROS-Vorlage aus oder legen Sie sie ab, um das " +"Architekturdiagramm lokal zu rendern." + +#: src/iac_code/web/static/diagram-preview.html +msgid "Back to conversations" +msgstr "Zurück zu den Unterhaltungen" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Template library" +msgstr "Vorlagenbibliothek" + +#: src/iac_code/web/static/diagram-preview.html +msgid "" +"Select the local ros-templates folder once, then switch between the fixed" +" corpus or random templates." +msgstr "" +"Wählen Sie den lokalen Ordner ros-templates einmal aus und wechseln Sie " +"dann zwischen dem festen Korpus und zufälligen Vorlagen." + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select ros-templates folder" +msgstr "Ordner ros-templates auswählen" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Fixed 30-template corpus" +msgstr "Fester Korpus mit 30 Vorlagen" + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select a template" +msgstr "Vorlage auswählen" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Random other template" +msgstr "Andere Vorlage zufällig wählen" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Single template" +msgstr "Einzelne Vorlage" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Supports ROS YAML, YML, and JSON templates up to 2 MB." +msgstr "Unterstützt ROS-Vorlagen in YAML, YML und JSON bis 2 MB." + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template" +msgstr "ROS-Vorlage auswählen oder ablegen" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Drop a template here, or click to choose" +msgstr "Vorlage hier ablegen oder zum Auswählen klicken" + +#: src/iac_code/web/static/diagram-preview.html +msgid "The file is read for this preview and is not saved." +msgstr "Die Datei wird nur für diese Vorschau gelesen und nicht gespeichert." + #: src/iac_code/web/static/index.html #: src/iac_code/web/static/js/components/workspace.js msgid "Session" @@ -977,6 +1041,81 @@ msgstr "" msgid "Failed to start update: {error}" msgstr "Update konnte nicht gestartet werden: {error}" +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/components/output_panel.js +#: src/iac_code/web/static/js/components/pipeline.js +msgid "Architecture diagram" +msgstr "Architekturdiagramm" + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This historical diagram is shown with Mermaid." +msgstr "Dieses historische Diagramm wird mit Mermaid angezeigt." + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This diagram is temporarily shown with Mermaid." +msgstr "Dieses Diagramm wird vorübergehend mit Mermaid angezeigt." + +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/mermaid_render.js +#, python-brace-format +msgid "View {n}" +msgstr "Ansicht {n}" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Renderer: {renderer}" +msgstr "Renderer: {renderer}" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The fixed template corpus could not be loaded." +msgstr "Der feste Vorlagenkorpus konnte nicht geladen werden." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No supported ROS templates were found in that folder." +msgstr "In diesem Ordner wurden keine unterstützten ROS-Vorlagen gefunden." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} template loaded; {available} of 30 corpus templates available." +msgstr "Geladene Vorlagen: {count}; im Korpus verfügbar: {available}/30." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} templates loaded; {available} of 30 corpus templates available." +msgstr "Geladene Vorlagen: {count}; im Korpus verfügbar: {available}/30." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template could not be rendered." +msgstr "Die Vorlage konnte nicht gerendert werden." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template must be 2 MB or smaller." +msgstr "Die Vorlage darf höchstens 2 MB groß sein." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendering {filename}…" +msgstr "{filename} wird gerendert…" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture view" +msgstr "{count} Architekturansicht" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture views" +msgstr "{count} Architekturansichten" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendered {filename}" +msgstr "{filename} gerendert" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No templates remain outside the fixed corpus." +msgstr "Außerhalb des festen Korpus sind keine Vorlagen verfügbar." + #: src/iac_code/web/static/js/events.js msgid "Local shell" msgstr "Lokale Shell" @@ -986,11 +1125,6 @@ msgstr "Lokale Shell" msgid "Unknown error" msgstr "Unbekannter Fehler" -#: src/iac_code/web/static/js/mermaid_render.js -#, python-brace-format -msgid "View {n}" -msgstr "Ansicht {n}" - #: src/iac_code/web/static/js/mermaid_render.js msgid "No pricing information" msgstr "Keine Preisinformationen" @@ -1386,11 +1520,6 @@ msgstr "Erfolg" msgid "In progress / failed" msgstr "In Bearbeitung / fehlgeschlagen" -#: src/iac_code/web/static/js/components/output_panel.js -#: src/iac_code/web/static/js/components/pipeline.js -msgid "Architecture diagram" -msgstr "Architekturdiagramm" - #: src/iac_code/web/static/js/components/output_panel.js msgid "File no longer exists" msgstr "Datei existiert nicht mehr" @@ -3981,6 +4110,22 @@ msgstr "" "Wählen Sie die Oberflächensprache; die Seite wird nach dem Speichern neu " "geladen." +#: src/iac_code/web/static/js/components/workspace.js +msgid "Architecture diagram renderer" +msgstr "Renderer für Architekturdiagramme" + +#: src/iac_code/web/static/js/components/workspace.js +msgid "" +"Choose how architecture diagrams are displayed; the change takes effect " +"after saving." +msgstr "" +"Wählen Sie, wie Architekturdiagramme angezeigt werden; die Änderung wird " +"nach dem Speichern wirksam." + +#: src/iac_code/web/static/js/components/workspace.js +msgid "Open template preview" +msgstr "Vorlagenvorschau öffnen" + #: src/iac_code/web/static/js/components/workspace.js msgid "Downloading…" msgstr "Wird heruntergeladen…" diff --git a/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po b/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po index 571e4f2b..b81fff7b 100644 --- a/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po +++ b/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po @@ -149,7 +149,7 @@ msgstr "" "completada." #: src/iac_code/a2a/executor.py src/iac_code/a2a/pipeline_executor.py -#: src/iac_code/a2a/transports/dispatcher.py +#: src/iac_code/a2a/task_store.py src/iac_code/a2a/transports/dispatcher.py msgid "Task canceled." msgstr "Tarea cancelada." @@ -159,6 +159,10 @@ msgstr "" "La decisión de permiso del chat normal no está disponible antes de la " "copia de seguridad." +#: src/iac_code/a2a/executor.py src/iac_code/a2a/transports/dispatcher.py +msgid "Task canceled while waiting for input." +msgstr "Tarea cancelada mientras esperaba entrada." + #: src/iac_code/a2a/executor.py src/iac_code/agui/errors.py msgid "Session backup is still synchronizing. Retry after 3 seconds." msgstr "" @@ -515,10 +519,6 @@ msgstr "" msgid "Task {task_id} is already completed." msgstr "La tarea {task_id} ya está completada." -#: src/iac_code/a2a/transports/dispatcher.py -msgid "Task canceled while waiting for input." -msgstr "Tarea cancelada mientras esperaba entrada." - #: src/iac_code/a2a/transports/dispatcher.py msgid "Task completed." msgstr "Tarea completada." @@ -13472,6 +13472,42 @@ msgstr "Ya hay una actualización en curso." msgid "The update command exited with code {}." msgstr "El comando de actualización finalizó con el código {}." +#: src/iac_code/web/app.py +msgid "The template must be 2 MB or smaller." +msgstr "La plantilla debe tener un tamaño máximo de 2 MB." + +#: src/iac_code/web/app.py +msgid "Choose a ROS template in YAML, YML, or JSON format." +msgstr "Selecciona una plantilla ROS en formato YAML, YML o JSON." + +#: src/iac_code/web/app.py +msgid "The file does not look like a ROS template." +msgstr "El archivo no parece ser una plantilla ROS." + +#: src/iac_code/web/app.py +msgid "The ROS template could not be parsed." +msgstr "No se pudo analizar la plantilla ROS." + +#: src/iac_code/web/app.py +msgid "The ROS template must contain a mapping at its root." +msgstr "La raíz de la plantilla ROS debe ser un mapa." + +#: src/iac_code/web/app.py +msgid "The ROS template does not contain any resources." +msgstr "La plantilla ROS no contiene recursos." + +#: src/iac_code/web/app.py +msgid "" +"The ROS template does not contain resources supported by the architecture" +" renderer." +msgstr "" +"La plantilla ROS no contiene recursos compatibles con el renderizador de " +"arquitectura." + +#: src/iac_code/web/app.py +msgid "The ROS template could not be rendered." +msgstr "No se pudo renderizar la plantilla ROS." + #: src/iac_code/web/app.py msgid "A project directory is required." msgstr "Se requiere un directorio de proyecto." @@ -13906,6 +13942,10 @@ msgstr "Sesión · {}" msgid "unknown theme" msgstr "tema desconocido" +#: src/iac_code/web/settings.py +msgid "unknown architecture diagram renderer" +msgstr "Renderizador de diagramas de arquitectura desconocido" + #: src/iac_code/web/settings.py msgid "unknown language" msgstr "idioma desconocido" diff --git a/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.po b/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.po index 71c34ea9..ec0d04f2 100644 --- a/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.po +++ b/src/iac_code/i18n/locales/es/LC_MESSAGES/webui.po @@ -18,6 +18,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.18.0\n" +#: src/iac_code/web/static/diagram-preview.html +msgid "Architecture diagram preview" +msgstr "Vista previa del diagrama de arquitectura" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template to render its architecture diagram locally." +msgstr "" +"Selecciona o arrastra una plantilla ROS para renderizar localmente su " +"diagrama de arquitectura." + +#: src/iac_code/web/static/diagram-preview.html +msgid "Back to conversations" +msgstr "Volver a las conversaciones" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Template library" +msgstr "Biblioteca de plantillas" + +#: src/iac_code/web/static/diagram-preview.html +msgid "" +"Select the local ros-templates folder once, then switch between the fixed" +" corpus or random templates." +msgstr "" +"Selecciona una vez la carpeta local ros-templates y alterna entre el " +"corpus fijo y plantillas aleatorias." + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select ros-templates folder" +msgstr "Seleccionar carpeta ros-templates" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Fixed 30-template corpus" +msgstr "Corpus fijo de 30 plantillas" + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select a template" +msgstr "Seleccionar una plantilla" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Random other template" +msgstr "Otra plantilla al azar" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Single template" +msgstr "Plantilla individual" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Supports ROS YAML, YML, and JSON templates up to 2 MB." +msgstr "Admite plantillas ROS YAML, YML y JSON de hasta 2 MB." + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template" +msgstr "Seleccionar o arrastrar una plantilla ROS" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Drop a template here, or click to choose" +msgstr "Arrastra una plantilla aquí o haz clic para seleccionarla" + +#: src/iac_code/web/static/diagram-preview.html +msgid "The file is read for this preview and is not saved." +msgstr "El archivo solo se lee para esta vista previa y no se guarda." + #: src/iac_code/web/static/index.html #: src/iac_code/web/static/js/components/workspace.js msgid "Session" @@ -976,6 +1040,81 @@ msgstr "" msgid "Failed to start update: {error}" msgstr "No se pudo iniciar la actualización: {error}" +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/components/output_panel.js +#: src/iac_code/web/static/js/components/pipeline.js +msgid "Architecture diagram" +msgstr "Diagrama de arquitectura" + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This historical diagram is shown with Mermaid." +msgstr "Este diagrama histórico se muestra con Mermaid." + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This diagram is temporarily shown with Mermaid." +msgstr "Este diagrama se muestra temporalmente con Mermaid." + +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/mermaid_render.js +#, python-brace-format +msgid "View {n}" +msgstr "Vista {n}" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Renderer: {renderer}" +msgstr "Renderizador: {renderer}" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The fixed template corpus could not be loaded." +msgstr "No se pudo cargar el corpus fijo de plantillas." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No supported ROS templates were found in that folder." +msgstr "No se encontraron plantillas ROS compatibles en esa carpeta." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} template loaded; {available} of 30 corpus templates available." +msgstr "Plantillas cargadas: {count}; disponibles en el corpus: {available}/30." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} templates loaded; {available} of 30 corpus templates available." +msgstr "Plantillas cargadas: {count}; disponibles en el corpus: {available}/30." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template could not be rendered." +msgstr "No se pudo renderizar la plantilla." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template must be 2 MB or smaller." +msgstr "La plantilla debe tener un tamaño máximo de 2 MB." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendering {filename}…" +msgstr "Renderizando {filename}…" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture view" +msgstr "{count} vista de arquitectura" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture views" +msgstr "{count} vistas de arquitectura" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendered {filename}" +msgstr "Se renderizó {filename}" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No templates remain outside the fixed corpus." +msgstr "No hay plantillas fuera del corpus fijo." + #: src/iac_code/web/static/js/events.js msgid "Local shell" msgstr "Shell local" @@ -985,11 +1124,6 @@ msgstr "Shell local" msgid "Unknown error" msgstr "Error desconocido" -#: src/iac_code/web/static/js/mermaid_render.js -#, python-brace-format -msgid "View {n}" -msgstr "Vista {n}" - #: src/iac_code/web/static/js/mermaid_render.js msgid "No pricing information" msgstr "Sin información de precios" @@ -1379,11 +1513,6 @@ msgstr "Correcto" msgid "In progress / failed" msgstr "En curso / fallido" -#: src/iac_code/web/static/js/components/output_panel.js -#: src/iac_code/web/static/js/components/pipeline.js -msgid "Architecture diagram" -msgstr "Diagrama de arquitectura" - #: src/iac_code/web/static/js/components/output_panel.js msgid "File no longer exists" msgstr "El archivo ya no existe" @@ -3968,6 +4097,22 @@ msgstr "Idioma" msgid "Choose the interface language; the page reloads after saving." msgstr "Elige el idioma de la interfaz; la página se recarga al guardar." +#: src/iac_code/web/static/js/components/workspace.js +msgid "Architecture diagram renderer" +msgstr "Renderizador de diagramas de arquitectura" + +#: src/iac_code/web/static/js/components/workspace.js +msgid "" +"Choose how architecture diagrams are displayed; the change takes effect " +"after saving." +msgstr "" +"Elige cómo se muestran los diagramas de arquitectura; el cambio se aplica" +" al guardar." + +#: src/iac_code/web/static/js/components/workspace.js +msgid "Open template preview" +msgstr "Abrir vista previa de plantilla" + #: src/iac_code/web/static/js/components/workspace.js msgid "Downloading…" msgstr "Descargando…" diff --git a/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po b/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po index 52a8c730..16bb8fd8 100644 --- a/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po +++ b/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po @@ -149,7 +149,7 @@ msgstr "" "terminée." #: src/iac_code/a2a/executor.py src/iac_code/a2a/pipeline_executor.py -#: src/iac_code/a2a/transports/dispatcher.py +#: src/iac_code/a2a/task_store.py src/iac_code/a2a/transports/dispatcher.py msgid "Task canceled." msgstr "Tâche annulée." @@ -159,6 +159,10 @@ msgstr "" "La décision d’autorisation du chat normal est indisponible avant la " "sauvegarde." +#: src/iac_code/a2a/executor.py src/iac_code/a2a/transports/dispatcher.py +msgid "Task canceled while waiting for input." +msgstr "Tâche annulée pendant l’attente d’une saisie." + #: src/iac_code/a2a/executor.py src/iac_code/agui/errors.py msgid "Session backup is still synchronizing. Retry after 3 seconds." msgstr "" @@ -509,10 +513,6 @@ msgstr "" msgid "Task {task_id} is already completed." msgstr "La tâche {task_id} est déjà terminée." -#: src/iac_code/a2a/transports/dispatcher.py -msgid "Task canceled while waiting for input." -msgstr "Tâche annulée pendant l’attente d’une saisie." - #: src/iac_code/a2a/transports/dispatcher.py msgid "Task completed." msgstr "Tâche terminée." @@ -13528,6 +13528,42 @@ msgstr "Une mise à jour est déjà en cours." msgid "The update command exited with code {}." msgstr "La commande de mise à jour s’est terminée avec le code {}." +#: src/iac_code/web/app.py +msgid "The template must be 2 MB or smaller." +msgstr "Le modèle ne doit pas dépasser 2 Mo." + +#: src/iac_code/web/app.py +msgid "Choose a ROS template in YAML, YML, or JSON format." +msgstr "Sélectionnez un modèle ROS au format YAML, YML ou JSON." + +#: src/iac_code/web/app.py +msgid "The file does not look like a ROS template." +msgstr "Ce fichier ne semble pas être un modèle ROS." + +#: src/iac_code/web/app.py +msgid "The ROS template could not be parsed." +msgstr "Le modèle ROS n’a pas pu être analysé." + +#: src/iac_code/web/app.py +msgid "The ROS template must contain a mapping at its root." +msgstr "La racine du modèle ROS doit être un objet associatif." + +#: src/iac_code/web/app.py +msgid "The ROS template does not contain any resources." +msgstr "Le modèle ROS ne contient aucune ressource." + +#: src/iac_code/web/app.py +msgid "" +"The ROS template does not contain resources supported by the architecture" +" renderer." +msgstr "" +"Le modèle ROS ne contient aucune ressource prise en charge par le moteur " +"de rendu d’architecture." + +#: src/iac_code/web/app.py +msgid "The ROS template could not be rendered." +msgstr "Le modèle ROS n’a pas pu être rendu." + #: src/iac_code/web/app.py msgid "A project directory is required." msgstr "Un répertoire de projet est requis." @@ -13964,6 +14000,10 @@ msgstr "Session · {}" msgid "unknown theme" msgstr "thème inconnu" +#: src/iac_code/web/settings.py +msgid "unknown architecture diagram renderer" +msgstr "Moteur de rendu de schéma d’architecture inconnu" + #: src/iac_code/web/settings.py msgid "unknown language" msgstr "langue inconnue" diff --git a/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.po b/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.po index 54b1ec93..7aa26f85 100644 --- a/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.po +++ b/src/iac_code/i18n/locales/fr/LC_MESSAGES/webui.po @@ -18,6 +18,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.18.0\n" +#: src/iac_code/web/static/diagram-preview.html +msgid "Architecture diagram preview" +msgstr "Aperçu du schéma d’architecture" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template to render its architecture diagram locally." +msgstr "" +"Sélectionnez ou déposez un modèle ROS pour générer localement son schéma " +"d’architecture." + +#: src/iac_code/web/static/diagram-preview.html +msgid "Back to conversations" +msgstr "Retour aux conversations" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Template library" +msgstr "Bibliothèque de modèles" + +#: src/iac_code/web/static/diagram-preview.html +msgid "" +"Select the local ros-templates folder once, then switch between the fixed" +" corpus or random templates." +msgstr "" +"Sélectionnez une fois le dossier local ros-templates, puis alternez entre" +" le corpus fixe et des modèles aléatoires." + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select ros-templates folder" +msgstr "Sélectionner le dossier ros-templates" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Fixed 30-template corpus" +msgstr "Corpus fixe de 30 modèles" + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select a template" +msgstr "Sélectionner un modèle" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Random other template" +msgstr "Autre modèle aléatoire" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Single template" +msgstr "Modèle individuel" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Supports ROS YAML, YML, and JSON templates up to 2 MB." +msgstr "Prend en charge les modèles ROS YAML, YML et JSON jusqu’à 2 Mo." + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template" +msgstr "Sélectionner ou déposer un modèle ROS" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Drop a template here, or click to choose" +msgstr "Déposez un modèle ici ou cliquez pour le sélectionner" + +#: src/iac_code/web/static/diagram-preview.html +msgid "The file is read for this preview and is not saved." +msgstr "Le fichier est lu pour cet aperçu et n’est pas enregistré." + #: src/iac_code/web/static/index.html #: src/iac_code/web/static/js/components/workspace.js msgid "Session" @@ -978,6 +1042,81 @@ msgstr "" msgid "Failed to start update: {error}" msgstr "Échec du démarrage de la mise à jour : {error}" +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/components/output_panel.js +#: src/iac_code/web/static/js/components/pipeline.js +msgid "Architecture diagram" +msgstr "Schéma d’architecture" + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This historical diagram is shown with Mermaid." +msgstr "Ce schéma historique est affiché avec Mermaid." + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This diagram is temporarily shown with Mermaid." +msgstr "Ce schéma est temporairement affiché avec Mermaid." + +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/mermaid_render.js +#, python-brace-format +msgid "View {n}" +msgstr "Vue {n}" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Renderer: {renderer}" +msgstr "Moteur de rendu : {renderer}" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The fixed template corpus could not be loaded." +msgstr "Impossible de charger le corpus fixe de modèles." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No supported ROS templates were found in that folder." +msgstr "Aucun modèle ROS compatible n’a été trouvé dans ce dossier." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} template loaded; {available} of 30 corpus templates available." +msgstr "Modèles chargés : {count} ; disponibles dans le corpus : {available}/30." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} templates loaded; {available} of 30 corpus templates available." +msgstr "Modèles chargés : {count} ; disponibles dans le corpus : {available}/30." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template could not be rendered." +msgstr "Le modèle n’a pas pu être rendu." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template must be 2 MB or smaller." +msgstr "Le modèle ne doit pas dépasser 2 Mo." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendering {filename}…" +msgstr "Rendu de {filename}…" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture view" +msgstr "{count} vue d’architecture" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture views" +msgstr "{count} vues d’architecture" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendered {filename}" +msgstr "{filename} rendu" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No templates remain outside the fixed corpus." +msgstr "Aucun modèle n’est disponible en dehors du corpus fixe." + #: src/iac_code/web/static/js/events.js msgid "Local shell" msgstr "Shell local" @@ -987,11 +1126,6 @@ msgstr "Shell local" msgid "Unknown error" msgstr "Erreur inconnue" -#: src/iac_code/web/static/js/mermaid_render.js -#, python-brace-format -msgid "View {n}" -msgstr "Vue {n}" - #: src/iac_code/web/static/js/mermaid_render.js msgid "No pricing information" msgstr "Aucune information tarifaire" @@ -1387,11 +1521,6 @@ msgstr "Succès" msgid "In progress / failed" msgstr "En cours / échec" -#: src/iac_code/web/static/js/components/output_panel.js -#: src/iac_code/web/static/js/components/pipeline.js -msgid "Architecture diagram" -msgstr "Schéma d’architecture" - #: src/iac_code/web/static/js/components/output_panel.js msgid "File no longer exists" msgstr "Le fichier n'existe plus" @@ -3979,6 +4108,22 @@ msgstr "" "Choisissez la langue de l’interface ; la page se recharge après " "l’enregistrement." +#: src/iac_code/web/static/js/components/workspace.js +msgid "Architecture diagram renderer" +msgstr "Moteur de rendu des schémas d’architecture" + +#: src/iac_code/web/static/js/components/workspace.js +msgid "" +"Choose how architecture diagrams are displayed; the change takes effect " +"after saving." +msgstr "" +"Choisissez comment afficher les schémas d’architecture ; la modification " +"s’applique après l’enregistrement." + +#: src/iac_code/web/static/js/components/workspace.js +msgid "Open template preview" +msgstr "Ouvrir l’aperçu du modèle" + #: src/iac_code/web/static/js/components/workspace.js msgid "Downloading…" msgstr "Téléchargement…" diff --git a/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po b/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po index 340a7dbb..2af24ca5 100644 --- a/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po +++ b/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po @@ -122,7 +122,7 @@ msgid "Cleanup-only continuation requires a completed Pipeline handoff." msgstr "クリーンアップ専用の継続には、完了した Pipeline 引き継ぎが必要です。" #: src/iac_code/a2a/executor.py src/iac_code/a2a/pipeline_executor.py -#: src/iac_code/a2a/transports/dispatcher.py +#: src/iac_code/a2a/task_store.py src/iac_code/a2a/transports/dispatcher.py msgid "Task canceled." msgstr "タスクがキャンセルされました。" @@ -130,6 +130,10 @@ msgstr "タスクがキャンセルされました。" msgid "Normal permission decision is unavailable before backup." msgstr "バックアップ前に通常チャットの権限判断を取得できません。" +#: src/iac_code/a2a/executor.py src/iac_code/a2a/transports/dispatcher.py +msgid "Task canceled while waiting for input." +msgstr "入力待ち中にタスクがキャンセルされました。" + #: src/iac_code/a2a/executor.py src/iac_code/agui/errors.py msgid "Session backup is still synchronizing. Retry after 3 seconds." msgstr "セッションのバックアップはまだ同期中です。3秒後に再試行してください。" @@ -464,10 +468,6 @@ msgstr "" msgid "Task {task_id} is already completed." msgstr "タスク {task_id} はすでに完了しています。" -#: src/iac_code/a2a/transports/dispatcher.py -msgid "Task canceled while waiting for input." -msgstr "入力待ち中にタスクがキャンセルされました。" - #: src/iac_code/a2a/transports/dispatcher.py msgid "Task completed." msgstr "タスクが完了しました。" @@ -12522,6 +12522,40 @@ msgstr "更新はすでに進行中です。" msgid "The update command exited with code {}." msgstr "更新コマンドは終了コード {} で終了しました。" +#: src/iac_code/web/app.py +msgid "The template must be 2 MB or smaller." +msgstr "テンプレートは 2 MB 以下にしてください。" + +#: src/iac_code/web/app.py +msgid "Choose a ROS template in YAML, YML, or JSON format." +msgstr "YAML、YML、または JSON 形式の ROS テンプレートを選択してください。" + +#: src/iac_code/web/app.py +msgid "The file does not look like a ROS template." +msgstr "このファイルは ROS テンプレートではないようです。" + +#: src/iac_code/web/app.py +msgid "The ROS template could not be parsed." +msgstr "ROS テンプレートを解析できませんでした。" + +#: src/iac_code/web/app.py +msgid "The ROS template must contain a mapping at its root." +msgstr "ROS テンプレートのルートはマッピングである必要があります。" + +#: src/iac_code/web/app.py +msgid "The ROS template does not contain any resources." +msgstr "ROS テンプレートにリソースが含まれていません。" + +#: src/iac_code/web/app.py +msgid "" +"The ROS template does not contain resources supported by the architecture" +" renderer." +msgstr "ROS テンプレートにアーキテクチャレンダラーが対応するリソースが含まれていません。" + +#: src/iac_code/web/app.py +msgid "The ROS template could not be rendered." +msgstr "ROS テンプレートを描画できませんでした。" + #: src/iac_code/web/app.py msgid "A project directory is required." msgstr "プロジェクトディレクトリが必要です。" @@ -12952,6 +12986,10 @@ msgstr "セッション · {}" msgid "unknown theme" msgstr "不明なテーマ" +#: src/iac_code/web/settings.py +msgid "unknown architecture diagram renderer" +msgstr "不明なアーキテクチャ図レンダラー" + #: src/iac_code/web/settings.py msgid "unknown language" msgstr "不明な言語" diff --git a/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.po b/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.po index f85ba8b0..02414c18 100644 --- a/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.po +++ b/src/iac_code/i18n/locales/ja/LC_MESSAGES/webui.po @@ -18,6 +18,66 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.18.0\n" +#: src/iac_code/web/static/diagram-preview.html +msgid "Architecture diagram preview" +msgstr "アーキテクチャ図のプレビュー" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template to render its architecture diagram locally." +msgstr "ROS テンプレートを選択またはドロップして、アーキテクチャ図をローカルで描画します。" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Back to conversations" +msgstr "会話に戻る" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Template library" +msgstr "テンプレートライブラリ" + +#: src/iac_code/web/static/diagram-preview.html +msgid "" +"Select the local ros-templates folder once, then switch between the fixed" +" corpus or random templates." +msgstr "ローカルの ros-templates フォルダーを一度選択すると、固定コーパスまたはランダムなテンプレートを切り替えて表示できます。" + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select ros-templates folder" +msgstr "ros-templates フォルダーを選択" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Fixed 30-template corpus" +msgstr "固定 30 テンプレート" + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select a template" +msgstr "テンプレートを選択" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Random other template" +msgstr "他のテンプレートをランダム表示" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Single template" +msgstr "単一テンプレート" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Supports ROS YAML, YML, and JSON templates up to 2 MB." +msgstr "最大 2 MB の ROS YAML、YML、JSON テンプレートに対応しています。" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template" +msgstr "ROS テンプレートを選択またはドロップ" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Drop a template here, or click to choose" +msgstr "ここにテンプレートをドロップするか、クリックして選択" + +#: src/iac_code/web/static/diagram-preview.html +msgid "The file is read for this preview and is not saved." +msgstr "ファイルはこのプレビュー用に読み取られ、保存されません。" + #: src/iac_code/web/static/index.html #: src/iac_code/web/static/js/components/workspace.js msgid "Session" @@ -960,6 +1020,81 @@ msgstr "更新を開始できませんでした。詳細は診断を開いて確 msgid "Failed to start update: {error}" msgstr "更新の開始に失敗しました: {error}" +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/components/output_panel.js +#: src/iac_code/web/static/js/components/pipeline.js +msgid "Architecture diagram" +msgstr "アーキテクチャ図" + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This historical diagram is shown with Mermaid." +msgstr "この過去の図は Mermaid で表示されています。" + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This diagram is temporarily shown with Mermaid." +msgstr "この図は一時的に Mermaid で表示されています。" + +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/mermaid_render.js +#, python-brace-format +msgid "View {n}" +msgstr "ビュー {n}" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Renderer: {renderer}" +msgstr "レンダラー: {renderer}" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The fixed template corpus could not be loaded." +msgstr "固定テンプレートコーパスを読み込めませんでした。" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No supported ROS templates were found in that folder." +msgstr "選択したフォルダーに対応する ROS テンプレートがありません。" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} template loaded; {available} of 30 corpus templates available." +msgstr "{count} 件のテンプレートを読み込みました。固定 30 件のうち {available} 件を利用できます。" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} templates loaded; {available} of 30 corpus templates available." +msgstr "{count} 件のテンプレートを読み込みました。固定 30 件のうち {available} 件を利用できます。" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template could not be rendered." +msgstr "テンプレートを描画できませんでした。" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template must be 2 MB or smaller." +msgstr "テンプレートは 2 MB 以下にしてください。" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendering {filename}…" +msgstr "{filename} を描画しています…" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture view" +msgstr "アーキテクチャビュー {count} 件" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture views" +msgstr "アーキテクチャビュー {count} 件" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendered {filename}" +msgstr "{filename} を描画しました" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No templates remain outside the fixed corpus." +msgstr "固定コーパス以外のテンプレートはありません。" + #: src/iac_code/web/static/js/events.js msgid "Local shell" msgstr "ローカルシェル" @@ -969,11 +1104,6 @@ msgstr "ローカルシェル" msgid "Unknown error" msgstr "不明なエラー" -#: src/iac_code/web/static/js/mermaid_render.js -#, python-brace-format -msgid "View {n}" -msgstr "ビュー {n}" - #: src/iac_code/web/static/js/mermaid_render.js msgid "No pricing information" msgstr "価格情報はありません" @@ -1353,11 +1483,6 @@ msgstr "成功" msgid "In progress / failed" msgstr "進行中/失敗" -#: src/iac_code/web/static/js/components/output_panel.js -#: src/iac_code/web/static/js/components/pipeline.js -msgid "Architecture diagram" -msgstr "アーキテクチャ図" - #: src/iac_code/web/static/js/components/output_panel.js msgid "File no longer exists" msgstr "ファイルは存在しません" @@ -3857,6 +3982,20 @@ msgstr "言語" msgid "Choose the interface language; the page reloads after saving." msgstr "インターフェース言語を選択します。保存後にページが再読み込みされます。" +#: src/iac_code/web/static/js/components/workspace.js +msgid "Architecture diagram renderer" +msgstr "アーキテクチャ図レンダラー" + +#: src/iac_code/web/static/js/components/workspace.js +msgid "" +"Choose how architecture diagrams are displayed; the change takes effect " +"after saving." +msgstr "アーキテクチャ図の表示方法を選択します。保存後すぐに反映されます。" + +#: src/iac_code/web/static/js/components/workspace.js +msgid "Open template preview" +msgstr "テンプレートプレビューを開く" + #: src/iac_code/web/static/js/components/workspace.js msgid "Downloading…" msgstr "ダウンロードしています…" diff --git a/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po b/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po index b074addd..a7bb116c 100644 --- a/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po +++ b/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po @@ -146,7 +146,7 @@ msgstr "" "concluída." #: src/iac_code/a2a/executor.py src/iac_code/a2a/pipeline_executor.py -#: src/iac_code/a2a/transports/dispatcher.py +#: src/iac_code/a2a/task_store.py src/iac_code/a2a/transports/dispatcher.py msgid "Task canceled." msgstr "Tarefa cancelada." @@ -154,6 +154,10 @@ msgstr "Tarefa cancelada." msgid "Normal permission decision is unavailable before backup." msgstr "A decisão de permissão do chat normal não está disponível antes do backup." +#: src/iac_code/a2a/executor.py src/iac_code/a2a/transports/dispatcher.py +msgid "Task canceled while waiting for input." +msgstr "Tarefa cancelada enquanto aguardava entrada." + #: src/iac_code/a2a/executor.py src/iac_code/agui/errors.py msgid "Session backup is still synchronizing. Retry after 3 seconds." msgstr "" @@ -508,10 +512,6 @@ msgstr "" msgid "Task {task_id} is already completed." msgstr "A tarefa {task_id} já foi concluída." -#: src/iac_code/a2a/transports/dispatcher.py -msgid "Task canceled while waiting for input." -msgstr "Tarefa cancelada enquanto aguardava entrada." - #: src/iac_code/a2a/transports/dispatcher.py msgid "Task completed." msgstr "Tarefa concluída." @@ -13360,6 +13360,42 @@ msgstr "Já há uma atualização em andamento." msgid "The update command exited with code {}." msgstr "O comando de atualização foi encerrado com o código {}." +#: src/iac_code/web/app.py +msgid "The template must be 2 MB or smaller." +msgstr "O modelo deve ter no máximo 2 MB." + +#: src/iac_code/web/app.py +msgid "Choose a ROS template in YAML, YML, or JSON format." +msgstr "Selecione um modelo ROS no formato YAML, YML ou JSON." + +#: src/iac_code/web/app.py +msgid "The file does not look like a ROS template." +msgstr "O arquivo não parece ser um modelo ROS." + +#: src/iac_code/web/app.py +msgid "The ROS template could not be parsed." +msgstr "Não foi possível analisar o modelo ROS." + +#: src/iac_code/web/app.py +msgid "The ROS template must contain a mapping at its root." +msgstr "A raiz do modelo ROS deve conter um mapeamento." + +#: src/iac_code/web/app.py +msgid "The ROS template does not contain any resources." +msgstr "O modelo ROS não contém recursos." + +#: src/iac_code/web/app.py +msgid "" +"The ROS template does not contain resources supported by the architecture" +" renderer." +msgstr "" +"O modelo ROS não contém recursos compatíveis com o renderizador de " +"arquitetura." + +#: src/iac_code/web/app.py +msgid "The ROS template could not be rendered." +msgstr "Não foi possível renderizar o modelo ROS." + #: src/iac_code/web/app.py msgid "A project directory is required." msgstr "É necessário um diretório de projeto." @@ -13792,6 +13828,10 @@ msgstr "Sessão · {}" msgid "unknown theme" msgstr "tema desconhecido" +#: src/iac_code/web/settings.py +msgid "unknown architecture diagram renderer" +msgstr "Renderizador de diagramas de arquitetura desconhecido" + #: src/iac_code/web/settings.py msgid "unknown language" msgstr "idioma desconhecido" diff --git a/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.po b/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.po index 60c3da5f..4d886759 100644 --- a/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.po +++ b/src/iac_code/i18n/locales/pt/LC_MESSAGES/webui.po @@ -18,6 +18,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.18.0\n" +#: src/iac_code/web/static/diagram-preview.html +msgid "Architecture diagram preview" +msgstr "Pré-visualização do diagrama de arquitetura" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template to render its architecture diagram locally." +msgstr "" +"Selecione ou solte um modelo ROS para renderizar localmente o diagrama de" +" arquitetura." + +#: src/iac_code/web/static/diagram-preview.html +msgid "Back to conversations" +msgstr "Voltar às conversas" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Template library" +msgstr "Biblioteca de modelos" + +#: src/iac_code/web/static/diagram-preview.html +msgid "" +"Select the local ros-templates folder once, then switch between the fixed" +" corpus or random templates." +msgstr "" +"Selecione uma vez a pasta local ros-templates e alterne entre o conjunto " +"fixo e modelos aleatórios." + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select ros-templates folder" +msgstr "Selecionar pasta ros-templates" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Fixed 30-template corpus" +msgstr "Conjunto fixo de 30 modelos" + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select a template" +msgstr "Selecionar um modelo" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Random other template" +msgstr "Outro modelo aleatório" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Single template" +msgstr "Modelo individual" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Supports ROS YAML, YML, and JSON templates up to 2 MB." +msgstr "Compatível com modelos ROS YAML, YML e JSON de até 2 MB." + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template" +msgstr "Selecionar ou soltar um modelo ROS" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Drop a template here, or click to choose" +msgstr "Solte um modelo aqui ou clique para selecionar" + +#: src/iac_code/web/static/diagram-preview.html +msgid "The file is read for this preview and is not saved." +msgstr "O arquivo é lido para esta pré-visualização e não é salvo." + #: src/iac_code/web/static/index.html #: src/iac_code/web/static/js/components/workspace.js msgid "Session" @@ -972,6 +1036,81 @@ msgstr "" msgid "Failed to start update: {error}" msgstr "Falha ao iniciar a atualização: {error}" +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/components/output_panel.js +#: src/iac_code/web/static/js/components/pipeline.js +msgid "Architecture diagram" +msgstr "Diagrama de arquitetura" + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This historical diagram is shown with Mermaid." +msgstr "Este diagrama histórico é exibido com Mermaid." + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This diagram is temporarily shown with Mermaid." +msgstr "Este diagrama é exibido temporariamente com Mermaid." + +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/mermaid_render.js +#, python-brace-format +msgid "View {n}" +msgstr "Visualização {n}" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Renderer: {renderer}" +msgstr "Renderizador: {renderer}" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The fixed template corpus could not be loaded." +msgstr "Não foi possível carregar o conjunto fixo de modelos." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No supported ROS templates were found in that folder." +msgstr "Nenhum modelo ROS compatível foi encontrado nessa pasta." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} template loaded; {available} of 30 corpus templates available." +msgstr "Modelos carregados: {count}; disponíveis no conjunto: {available}/30." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} templates loaded; {available} of 30 corpus templates available." +msgstr "Modelos carregados: {count}; disponíveis no conjunto: {available}/30." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template could not be rendered." +msgstr "Não foi possível renderizar o modelo." + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template must be 2 MB or smaller." +msgstr "O modelo deve ter no máximo 2 MB." + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendering {filename}…" +msgstr "Renderizando {filename}…" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture view" +msgstr "{count} visualização de arquitetura" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture views" +msgstr "{count} visualizações de arquitetura" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendered {filename}" +msgstr "{filename} renderizado" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No templates remain outside the fixed corpus." +msgstr "Não há modelos fora do conjunto fixo." + #: src/iac_code/web/static/js/events.js msgid "Local shell" msgstr "Shell local" @@ -981,11 +1120,6 @@ msgstr "Shell local" msgid "Unknown error" msgstr "Erro desconhecido" -#: src/iac_code/web/static/js/mermaid_render.js -#, python-brace-format -msgid "View {n}" -msgstr "Visualização {n}" - #: src/iac_code/web/static/js/mermaid_render.js msgid "No pricing information" msgstr "Sem informações de preço" @@ -1377,11 +1511,6 @@ msgstr "Sucesso" msgid "In progress / failed" msgstr "Em andamento / falhou" -#: src/iac_code/web/static/js/components/output_panel.js -#: src/iac_code/web/static/js/components/pipeline.js -msgid "Architecture diagram" -msgstr "Diagrama de arquitetura" - #: src/iac_code/web/static/js/components/output_panel.js msgid "File no longer exists" msgstr "O arquivo não existe mais" @@ -3957,6 +4086,22 @@ msgstr "Idioma" msgid "Choose the interface language; the page reloads after saving." msgstr "Escolha o idioma da interface; a página é recarregada após salvar." +#: src/iac_code/web/static/js/components/workspace.js +msgid "Architecture diagram renderer" +msgstr "Renderizador de diagramas de arquitetura" + +#: src/iac_code/web/static/js/components/workspace.js +msgid "" +"Choose how architecture diagrams are displayed; the change takes effect " +"after saving." +msgstr "" +"Escolha como os diagramas de arquitetura são exibidos; a alteração entra " +"em vigor após salvar." + +#: src/iac_code/web/static/js/components/workspace.js +msgid "Open template preview" +msgstr "Abrir pré-visualização do modelo" + #: src/iac_code/web/static/js/components/workspace.js msgid "Downloading…" msgstr "Baixando…" diff --git a/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po b/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po index 8cb9e8d4..540c0e5f 100644 --- a/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po +++ b/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po @@ -122,7 +122,7 @@ msgid "Cleanup-only continuation requires a completed Pipeline handoff." msgstr "仅清理模式的继续操作需要先完成 Pipeline 交接。" #: src/iac_code/a2a/executor.py src/iac_code/a2a/pipeline_executor.py -#: src/iac_code/a2a/transports/dispatcher.py +#: src/iac_code/a2a/task_store.py src/iac_code/a2a/transports/dispatcher.py msgid "Task canceled." msgstr "任务已取消。" @@ -130,6 +130,10 @@ msgstr "任务已取消。" msgid "Normal permission decision is unavailable before backup." msgstr "备份前无法获取普通对话权限决定。" +#: src/iac_code/a2a/executor.py src/iac_code/a2a/transports/dispatcher.py +msgid "Task canceled while waiting for input." +msgstr "等待输入时任务已取消。" + #: src/iac_code/a2a/executor.py src/iac_code/agui/errors.py msgid "Session backup is still synchronizing. Retry after 3 seconds." msgstr "会话备份仍在同步中,请在 3 秒后重试。" @@ -462,10 +466,6 @@ msgstr "Windows 不支持 Unix 域套接字传输。请使用 --transport http msgid "Task {task_id} is already completed." msgstr "任务 {task_id} 已完成。" -#: src/iac_code/a2a/transports/dispatcher.py -msgid "Task canceled while waiting for input." -msgstr "等待输入时任务已取消。" - #: src/iac_code/a2a/transports/dispatcher.py msgid "Task completed." msgstr "任务已完成。" @@ -12306,6 +12306,40 @@ msgstr "更新已在进行中。" msgid "The update command exited with code {}." msgstr "更新命令以退出码 {} 结束。" +#: src/iac_code/web/app.py +msgid "The template must be 2 MB or smaller." +msgstr "模板大小不能超过 2 MB。" + +#: src/iac_code/web/app.py +msgid "Choose a ROS template in YAML, YML, or JSON format." +msgstr "请选择 YAML、YML 或 JSON 格式的 ROS 模板。" + +#: src/iac_code/web/app.py +msgid "The file does not look like a ROS template." +msgstr "该文件看起来不是 ROS 模板。" + +#: src/iac_code/web/app.py +msgid "The ROS template could not be parsed." +msgstr "ROS 模板无法解析。" + +#: src/iac_code/web/app.py +msgid "The ROS template must contain a mapping at its root." +msgstr "ROS 模板的根节点必须是映射。" + +#: src/iac_code/web/app.py +msgid "The ROS template does not contain any resources." +msgstr "ROS 模板中不包含任何资源。" + +#: src/iac_code/web/app.py +msgid "" +"The ROS template does not contain resources supported by the architecture" +" renderer." +msgstr "ROS 模板中没有架构图渲染器支持的资源。" + +#: src/iac_code/web/app.py +msgid "The ROS template could not be rendered." +msgstr "无法渲染 ROS 模板。" + #: src/iac_code/web/app.py msgid "A project directory is required." msgstr "需要项目目录。" @@ -12736,6 +12770,10 @@ msgstr "会话 · {}" msgid "unknown theme" msgstr "未知的主题" +#: src/iac_code/web/settings.py +msgid "unknown architecture diagram renderer" +msgstr "未知的架构图渲染器" + #: src/iac_code/web/settings.py msgid "unknown language" msgstr "未知的语言" diff --git a/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.po b/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.po index cfd1e966..7abf7e04 100644 --- a/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.po +++ b/src/iac_code/i18n/locales/zh/LC_MESSAGES/webui.po @@ -18,6 +18,66 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.18.0\n" +#: src/iac_code/web/static/diagram-preview.html +msgid "Architecture diagram preview" +msgstr "架构图预览" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template to render its architecture diagram locally." +msgstr "选择或拖入 ROS 模板,在本地渲染架构图。" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Back to conversations" +msgstr "返回会话" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Template library" +msgstr "模板库" + +#: src/iac_code/web/static/diagram-preview.html +msgid "" +"Select the local ros-templates folder once, then switch between the fixed" +" corpus or random templates." +msgstr "选择一次本地 ros-templates 目录,即可在固定样本和随机模板之间切换。" + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select ros-templates folder" +msgstr "选择 ros-templates 目录" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Fixed 30-template corpus" +msgstr "固定 30 个模板样本" + +#: src/iac_code/web/static/diagram-preview.html +#: src/iac_code/web/static/js/diagram_preview.js +msgid "Select a template" +msgstr "选择模板" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Random other template" +msgstr "随机其他模板" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Single template" +msgstr "单个模板" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Supports ROS YAML, YML, and JSON templates up to 2 MB." +msgstr "支持最大 2 MB 的 ROS YAML、YML 和 JSON 模板。" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Choose or drop a ROS template" +msgstr "选择或拖入 ROS 模板" + +#: src/iac_code/web/static/diagram-preview.html +msgid "Drop a template here, or click to choose" +msgstr "将模板拖到这里,或点击选择" + +#: src/iac_code/web/static/diagram-preview.html +msgid "The file is read for this preview and is not saved." +msgstr "文件仅用于本次预览,不会保存。" + #: src/iac_code/web/static/index.html #: src/iac_code/web/static/js/components/workspace.js msgid "Session" @@ -958,6 +1018,81 @@ msgstr "无法开始更新。请打开诊断目录查看详情。" msgid "Failed to start update: {error}" msgstr "更新启动失败:{error}" +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/components/output_panel.js +#: src/iac_code/web/static/js/components/pipeline.js +msgid "Architecture diagram" +msgstr "架构图" + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This historical diagram is shown with Mermaid." +msgstr "这张历史架构图已用 Mermaid 显示。" + +#: src/iac_code/web/static/js/architecture_diagram.js +msgid "This diagram is temporarily shown with Mermaid." +msgstr "这张架构图暂时使用 Mermaid 显示。" + +#: src/iac_code/web/static/js/architecture_diagram.js +#: src/iac_code/web/static/js/mermaid_render.js +#, python-brace-format +msgid "View {n}" +msgstr "视图 {n}" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Renderer: {renderer}" +msgstr "渲染器:{renderer}" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The fixed template corpus could not be loaded." +msgstr "无法载入固定模板样本。" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No supported ROS templates were found in that folder." +msgstr "所选目录中没有受支持的 ROS 模板。" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} template loaded; {available} of 30 corpus templates available." +msgstr "已载入 {count} 个模板;固定 30 个样本中有 {available} 个可用。" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} templates loaded; {available} of 30 corpus templates available." +msgstr "已载入 {count} 个模板;固定 30 个样本中有 {available} 个可用。" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template could not be rendered." +msgstr "无法渲染该模板。" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "The template must be 2 MB or smaller." +msgstr "模板大小不能超过 2 MB。" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendering {filename}…" +msgstr "正在渲染 {filename}…" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture view" +msgstr "{count} 个架构视图" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "{count} architecture views" +msgstr "{count} 个架构视图" + +#: src/iac_code/web/static/js/diagram_preview.js +#, python-brace-format +msgid "Rendered {filename}" +msgstr "已渲染 {filename}" + +#: src/iac_code/web/static/js/diagram_preview.js +msgid "No templates remain outside the fixed corpus." +msgstr "固定样本以外没有可用模板。" + #: src/iac_code/web/static/js/events.js msgid "Local shell" msgstr "本地 Shell" @@ -967,11 +1102,6 @@ msgstr "本地 Shell" msgid "Unknown error" msgstr "未知错误" -#: src/iac_code/web/static/js/mermaid_render.js -#, python-brace-format -msgid "View {n}" -msgstr "视图 {n}" - #: src/iac_code/web/static/js/mermaid_render.js msgid "No pricing information" msgstr "暂无询价信息" @@ -1351,11 +1481,6 @@ msgstr "成功" msgid "In progress / failed" msgstr "进行中/失败" -#: src/iac_code/web/static/js/components/output_panel.js -#: src/iac_code/web/static/js/components/pipeline.js -msgid "Architecture diagram" -msgstr "架构图" - #: src/iac_code/web/static/js/components/output_panel.js msgid "File no longer exists" msgstr "文件已不存在" @@ -3849,6 +3974,20 @@ msgstr "界面语言" msgid "Choose the interface language; the page reloads after saving." msgstr "选择界面语言,保存后页面自动刷新。" +#: src/iac_code/web/static/js/components/workspace.js +msgid "Architecture diagram renderer" +msgstr "架构图渲染器" + +#: src/iac_code/web/static/js/components/workspace.js +msgid "" +"Choose how architecture diagrams are displayed; the change takes effect " +"after saving." +msgstr "选择架构图的显示方式;保存后立即生效。" + +#: src/iac_code/web/static/js/components/workspace.js +msgid "Open template preview" +msgstr "打开模板预览" + #: src/iac_code/web/static/js/components/workspace.js msgid "Downloading…" msgstr "正在下载…" diff --git a/src/iac_code/pipeline/engine/architecture_graph.py b/src/iac_code/pipeline/engine/architecture_graph.py index 1464c633..a135508e 100644 --- a/src/iac_code/pipeline/engine/architecture_graph.py +++ b/src/iac_code/pipeline/engine/architecture_graph.py @@ -20,6 +20,7 @@ ConceptEdgeRule, RuleLabel, ) +from iac_code.pipeline.engine.diagram_graph import build_diagram_graph COMPACT_MIN_VISIBLE_NODES = 25 COMPACT_MIN_VISIBLE_ELEMENTS = 25 @@ -194,6 +195,7 @@ class ArchitectureViewResult: purpose: str mermaid_source: str architecture_context: dict[str, Any] + graph: dict[str, Any] @dataclass(frozen=True) @@ -1205,6 +1207,7 @@ def _render_views_from_context( ) -> tuple[ArchitectureViewResult, ...]: raw_views = semantic_plan.get("views") if isinstance(semantic_plan, dict) else None if not isinstance(raw_views, list) or not raw_views: + graph = _diagram_graph_from_context(architecture_context) return ( ArchitectureViewResult( id="overview", @@ -1217,6 +1220,7 @@ def _render_views_from_context( "purpose": _("Show the complete architecture diagram."), "rendered_as": "full_architecture", }, + graph=graph, ), ) @@ -1371,7 +1375,7 @@ def _render_single_view_from_context( view_node_parent, rules, ) - view_context = { + view_context: dict[str, Any] = { "id": view_id, "title": title, "purpose": purpose, @@ -1384,12 +1388,89 @@ def _render_single_view_from_context( "layout": layout, "rendered_as": "filtered_architecture_view", } + graph = _diagram_graph( + nodes=view_nodes, + containers=view_containers, + edges=view_edges, + layer_parent=view_layer_parent, + node_parent=view_node_parent, + ) return ArchitectureViewResult( id=view_id, title=title, purpose=purpose, mermaid_source=mermaid_source, architecture_context=view_context, + graph=graph, + ) + + +def _diagram_graph_from_context(architecture_context: dict[str, Any]) -> dict[str, Any]: + """Build the renderer-neutral graph from the exact full-view projection.""" + nodes = _context_nodes_by_id(architecture_context) + containers = _context_containers_by_id(architecture_context) + edges = [ + GraphEdge( + from_id=str(item.get("from") or ""), + to_id=str(item.get("to") or ""), + style=str(item.get("style") or "solid_arrow"), + label=str(item["label"]) if item.get("label") is not None else None, + ) + for item in architecture_context.get("visible_edges", []) + if isinstance(item, dict) and item.get("from") and item.get("to") + ] + return _diagram_graph( + nodes=nodes, + containers=containers, + edges=edges, + layer_parent=_context_layer_parent(containers), + node_parent=_context_node_parent(architecture_context), + ) + + +def _diagram_graph( + *, + nodes: dict[str, dict[str, Any]], + containers: dict[str, dict[str, Any]], + edges: list[GraphEdge], + layer_parent: dict[str, str], + node_parent: dict[str, str], +) -> dict[str, Any]: + """Return DiagramGraph v1 from the same projection used to emit Mermaid.""" + visible_ids = set(nodes) | set(containers) + graph_edges: list[dict[str, Any]] = [] + for index, edge in enumerate(_dedupe_edges(edges), start=1): + if edge.from_id not in visible_ids or edge.to_id not in visible_ids: + continue + graph_edges.append( + { + "id": f"edge_{index}_{edge.from_id}_{edge.to_id}", + "from": edge.from_id, + "to": edge.to_id, + "label": edge.label or "", + "style": edge.style, + } + ) + return build_diagram_graph( + nodes=[ + { + "id": node_id, + "label": str(node.get("label") or node_id).replace("\\n", "\n"), + "resourceType": str(node.get("type") or ""), + "parentId": node_parent.get(node_id), + } + for node_id, node in nodes.items() + ], + containers=[ + { + "id": container_id, + "label": str(container.get("label") or container_id).replace("\\n", "\n"), + "resourceType": str(container.get("type") or ""), + "parentId": layer_parent.get(container_id), + } + for container_id, container in containers.items() + ], + edges=graph_edges, ) diff --git a/src/iac_code/pipeline/engine/diagram_graph.py b/src/iac_code/pipeline/engine/diagram_graph.py new file mode 100644 index 00000000..c1513039 --- /dev/null +++ b/src/iac_code/pipeline/engine/diagram_graph.py @@ -0,0 +1,145 @@ +"""Renderer-neutral DiagramGraph construction helpers.""" + +from __future__ import annotations + +from collections.abc import Mapping, Sequence +from typing import Any + + +def build_diagram_graph( + *, + nodes: Sequence[Mapping[str, Any]], + containers: Sequence[Mapping[str, Any]], + edges: Sequence[Mapping[str, Any]], + direction: str = "LR", +) -> dict[str, Any]: + """Build the shared, versioned graph payload used by Web diagram views.""" + return { + "version": 1, + "nodes": [dict(node) for node in nodes], + "containers": [dict(container) for container in containers], + "edges": [dict(edge) for edge in edges], + "layout": {"direction": direction}, + } + + +def project_plan_diagram_graph( + *, + nodes: Sequence[Mapping[str, Any]], + groups: Sequence[Mapping[str, Any]], + edges: Sequence[Mapping[str, Any]], + node_labels: Mapping[str, str], + group_anchor_labels: Mapping[str, str], +) -> dict[str, Any]: + """Project sanitized planning topology into DiagramGraph v1. + + Planning models often emit a resource node whose raw id is also used as a group name. + DiagramGraph can represent that node as the group container, including nested groups, so the + graph does not repeat the same resource as a box, a container, and a containment edge. + """ + nodes_by_raw_id = {str(node["raw_id"]).casefold(): node for node in nodes} + group_anchors: dict[str, Mapping[str, Any]] = {} + for group in groups: + group_id = str(group["id"]) + anchor = nodes_by_raw_id.get(str(group["raw_id"]).casefold()) + if anchor is not None and anchor.get("group") != group_id: + group_anchors[group_id] = anchor + + # Reject malformed mutual containment instead of emitting a cyclic parentId chain. + def has_anchor_cycle(group_id: str) -> bool: + seen: set[str] = set() + current: str | None = group_id + while current is not None and current in group_anchors: + if current in seen: + return True + seen.add(current) + parent = group_anchors[current].get("group") + current = str(parent) if parent is not None else None + return False + + group_anchors = {group_id: anchor for group_id, anchor in group_anchors.items() if not has_anchor_cycle(group_id)} + folded_groups = {str(anchor["id"]): group_id for group_id, anchor in group_anchors.items()} + + graph_nodes: list[dict[str, Any]] = [] + for node in nodes: + node_id = str(node["id"]) + if node_id in folded_groups: + continue + item: dict[str, Any] = { + "id": node_id, + "label": node_labels.get(node_id, str(node.get("label") or node_id)), + "resourceType": "", + "parentId": node.get("group"), + } + if node.get("product"): + item["product"] = node["product"] + if node.get("role"): + item["role"] = node["role"] + graph_nodes.append(item) + + container_parents = { + str(group["id"]): group_anchors[str(group["id"])].get("group") if str(group["id"]) in group_anchors else None + for group in groups + } + + def is_descendant(item_parent: object, container_id: str) -> bool: + current = str(item_parent) if item_parent is not None else None + seen: set[str] = set() + while current is not None and current not in seen: + if current == container_id: + return True + seen.add(current) + current = container_parents.get(current) + return False + + graph_edges: list[tuple[str, str, str]] = [] + seen_edges: set[tuple[str, str, str]] = set() + node_groups = {str(node["id"]): node.get("group") for node in nodes} + for edge in edges: + raw_source = str(edge["source"]) + raw_target = str(edge["target"]) + label = str(edge.get("label") or "") + source = folded_groups.get(raw_source, raw_source) + target = folded_groups.get(raw_target, raw_target) + if source == target: + continue + if raw_source in folded_groups and is_descendant(node_groups.get(raw_target), source): + continue + if raw_target in folded_groups and is_descendant(node_groups.get(raw_source), target): + continue + key = (source, target, label) + if key in seen_edges: + continue + seen_edges.add(key) + graph_edges.append(key) + + graph_containers: list[dict[str, Any]] = [] + for group in groups: + group_id = str(group["id"]) + if not any(node.get("group") == group_id for node in nodes): + continue + anchor = group_anchors.get(group_id) + anchor_id = str(anchor["id"]) if anchor is not None else "" + graph_containers.append( + { + "id": group_id, + "label": group_anchor_labels.get(anchor_id, str(group.get("label") or group_id)), + "resourceType": "", + "parentId": container_parents[group_id], + } + ) + + return build_diagram_graph( + nodes=graph_nodes, + containers=graph_containers, + edges=[ + { + "id": f"edge_{index}_{source}_{target}", + "from": source, + "to": target, + "label": label, + "style": "solid_arrow", + } + for index, (source, target, label) in enumerate(graph_edges, start=1) + ], + ) diff --git a/src/iac_code/pipeline/engine/display_replay.py b/src/iac_code/pipeline/engine/display_replay.py index 53446361..792f43b0 100644 --- a/src/iac_code/pipeline/engine/display_replay.py +++ b/src/iac_code/pipeline/engine/display_replay.py @@ -46,7 +46,7 @@ class DisplayCandidate: candidate_index: int | None = None mermaid_source: str = "" diagram_stage: str = "optimized" - diagram_views: list[dict[str, str]] = field(default_factory=list) + diagram_views: list[dict[str, Any]] = field(default_factory=list) summary: str = "" cost_items: list[dict[str, Any]] = field(default_factory=list) total_monthly_cost: str = "" @@ -603,8 +603,8 @@ def _diagram_stage(value: Any) -> str: return "draft" if value == "draft" else "optimized" @staticmethod - def _diagram_views(value: Any, fallback_mermaid_source: str) -> list[dict[str, str]]: - views: list[dict[str, str]] = [] + def _diagram_views(value: Any, fallback_mermaid_source: str) -> list[dict[str, Any]]: + views: list[dict[str, Any]] = [] if isinstance(value, list): for index, raw in enumerate(value, start=1): if not isinstance(raw, dict): @@ -616,14 +616,16 @@ def _diagram_views(value: Any, fallback_mermaid_source: str) -> list[dict[str, s view_id = raw_view.get("id") title = raw_view.get("title") purpose = raw_view.get("purpose") - views.append( - { - "id": str(view_id or f"view_{index}"), - "title": str(title or view_id or f"Diagram {index}"), - "purpose": str(purpose or ""), - "mermaid_source": mermaid_source, - } - ) + view: dict[str, Any] = { + "id": str(view_id or f"view_{index}"), + "title": str(title or view_id or f"Diagram {index}"), + "purpose": str(purpose or ""), + "mermaid_source": mermaid_source, + } + graph = raw_view.get("graph") + if isinstance(graph, dict) and graph.get("version") == 1: + view["graph"] = graph + views.append(view) if not views and fallback_mermaid_source: views.append( { diff --git a/src/iac_code/pipeline/engine/show_diagram_tool.py b/src/iac_code/pipeline/engine/show_diagram_tool.py index a00dba29..8ae3ef5c 100644 --- a/src/iac_code/pipeline/engine/show_diagram_tool.py +++ b/src/iac_code/pipeline/engine/show_diagram_tool.py @@ -277,16 +277,17 @@ def _diagram_event_from_render_result( render_result: ArchitectureMultiViewRenderResult, diagram_stage: str, ) -> DiagramEvent: - views = [ + views: list[dict[str, Any]] = [ { "id": view.id, "title": view.title, "purpose": view.purpose, "mermaid_source": view.mermaid_source, + "graph": view.graph, } for view in render_result.views ] - mermaid_source = views[0]["mermaid_source"] if views else "graph TD" + mermaid_source = str(views[0]["mermaid_source"]) if views else "graph TD" return DiagramEvent( candidate_name=candidate_name, template_content=template_content, diff --git a/src/iac_code/pipeline/selling_solution_first/tools/show_architecture_plan_tool.py b/src/iac_code/pipeline/selling_solution_first/tools/show_architecture_plan_tool.py index 2325ac6c..e4468d60 100644 --- a/src/iac_code/pipeline/selling_solution_first/tools/show_architecture_plan_tool.py +++ b/src/iac_code/pipeline/selling_solution_first/tools/show_architecture_plan_tool.py @@ -1,8 +1,8 @@ """Step 1 candidate outline tool and the local planned-architecture renderer. ``show_architecture_plan`` now submits one complete, lightweight candidate outline batch. Rich -topology rendering remains in this module so the pipeline-local ``show_candidate_detail`` tool can -reuse the existing sanitizing and Mermaid behavior without moving or duplicating it. +topology validation and Mermaid rendering remain here for the pipeline-local +``show_candidate_detail`` tool; renderer-neutral graph projection lives in the engine adapter. """ from __future__ import annotations @@ -14,6 +14,7 @@ from loguru import logger from iac_code.i18n import _ +from iac_code.pipeline.engine.diagram_graph import project_plan_diagram_graph from iac_code.pipeline.selling_solution_first.tools.candidate_planning_records import ( latest_candidate_outline_batch, normalize_outline_candidates, @@ -152,9 +153,7 @@ async def execute(self, *, tool_input: dict[str, Any], context: ToolContext) -> "Displayed {count} candidate outlines; candidateSetId={candidate_set_id}. " "Do not repeat show_architecture_plan unless the user changes the candidate set; " "continue with show_candidate_detail." - ).format( - count=len(candidates), candidate_set_id=candidate_set_id - ), + ).format(count=len(candidates), candidate_set_id=candidate_set_id), metadata={"candidate_set_id": candidate_set_id}, ) @@ -169,13 +168,21 @@ def __init__(self) -> None: self.warnings: list[str] = [] -def render_architecture_graph(topology_graph: Any) -> tuple[str, dict[str, Any], list[str]]: - """Validate one rich detail graph and return its Mermaid source and UI context.""" +def render_architecture_graph(topology_graph: Any) -> tuple[str, dict[str, Any], dict[str, Any], list[str]]: + """Validate a rich detail graph and return Mermaid, context, DiagramGraph, and warnings.""" if not isinstance(topology_graph, dict): raise ValueError(_("topology_graph must be an object with nodes and edges")) plan = _build_architecture_plan(topology_graph.get("nodes"), topology_graph.get("edges")) - return _render_plan_mermaid(plan), _plan_architecture_context(plan), list(plan.warnings) + context = _plan_architecture_context(plan) + graph = project_plan_diagram_graph( + nodes=plan.nodes, + groups=plan.groups, + edges=plan.edges, + node_labels={node["id"]: _node_mermaid_label(node).replace("\\n", "\n") for node in plan.nodes}, + group_anchor_labels={node["id"]: _group_mermaid_title(node) for node in plan.nodes}, + ) + return _render_plan_mermaid(plan), context, graph, list(plan.warnings) def _normalized_candidate_index(value: Any) -> int | None: diff --git a/src/iac_code/pipeline/selling_solution_first/tools/show_candidate_detail_tool.py b/src/iac_code/pipeline/selling_solution_first/tools/show_candidate_detail_tool.py index 469f436f..84ff8e10 100644 --- a/src/iac_code/pipeline/selling_solution_first/tools/show_candidate_detail_tool.py +++ b/src/iac_code/pipeline/selling_solution_first/tools/show_candidate_detail_tool.py @@ -177,9 +177,7 @@ async def execute(self, *, tool_input: dict[str, Any], context: ToolContext) -> batch = latest_candidate_outline_batch(records) if batch is None: return ToolResult.error( - _( - "show_candidate_detail is not allowed before a successful show_architecture_plan outline batch." - ) + _("show_candidate_detail is not allowed before a successful show_architecture_plan outline batch.") ) expected_index = first_missing_candidate_detail_index(records, batch) @@ -211,7 +209,7 @@ async def execute(self, *, tool_input: dict[str, Any], context: ToolContext) -> ) try: - mermaid_source, architecture_context, warnings = render_architecture_graph( + mermaid_source, architecture_context, graph, warnings = render_architecture_graph( tool_input.get("topology_graph") ) except ValueError as exc: @@ -250,6 +248,7 @@ async def execute(self, *, tool_input: dict[str, Any], context: ToolContext) -> "title": _("Architecture plan"), "purpose": "", "mermaid_source": mermaid_source, + "graph": graph, } ], candidate_set_id=batch.candidate_set_id, diff --git a/src/iac_code/types/stream_events.py b/src/iac_code/types/stream_events.py index 7a0b320d..9660a2d4 100644 --- a/src/iac_code/types/stream_events.py +++ b/src/iac_code/types/stream_events.py @@ -427,7 +427,7 @@ class DiagramEvent(ToolEmittedEvent): candidate_index: int | None = None architecture_context: dict[str, Any] | None = None diagram_stage: Literal["draft", "optimized"] = "optimized" - views: list[dict[str, str]] = field(default_factory=list) + views: list[dict[str, Any]] = field(default_factory=list) candidate_set_id: str | None = None detail_stage: Literal["outline", "detail"] | None = None type: Literal["diagram"] = "diagram" diff --git a/src/iac_code/web/app.py b/src/iac_code/web/app.py index a1cfa754..682924bf 100644 --- a/src/iac_code/web/app.py +++ b/src/iac_code/web/app.py @@ -79,6 +79,7 @@ def _pipeline_pending_input_coordinates(snapshot: dict[str, Any] | None) -> tupl MAX_PROJECT_LIST_LIMIT = 1000 MAX_PROJECT_SESSION_LIMIT = 200 WEB_SHUTDOWN_TASK_TIMEOUT_SECONDS = 5.0 +MAX_DIAGRAM_PREVIEW_BYTES = 2 * 1024 * 1024 class _SuppressAllRedactionMiddleware: @@ -182,6 +183,7 @@ def create_app( from iac_code.web import mcp_settings from iac_code.web.cleanup import cleanup_blocks_normal_chat, session_cleanup_summary from iac_code.web.commands import WebCommandDispatcher, command_metadata + from iac_code.web.diagrams import TemplateDiagramPreviewError, render_template_diagram_views from iac_code.web.events import encode_sse, make_resync_event, normalize_event_payload, observe_published_events from iac_code.web.mcp_settings import MCPWebError from iac_code.web.memory import ( @@ -243,6 +245,7 @@ def create_app( clear_provider_config, developer_settings, get_appearance_theme, + get_architecture_diagram_renderer, get_session_defaults, get_ui_language, is_foreign_normal_visible, @@ -252,6 +255,7 @@ def create_app( save_active_provider, save_aliyun_cloud, save_appearance_theme, + save_architecture_diagram_renderer, save_developer_settings, save_foreign_sessions_visibility, save_provider_config, @@ -1997,18 +2001,87 @@ async def index(_request): # 把新会话默认(权限/模式)注入 ,让首屏创建的草稿即刻采用,避免异步拉取的闪烁。 # 放在 而非 ,以免破坏对主题标签精确形态的既有断言。 defaults = get_session_defaults() + architecture_renderer = get_architecture_diagram_renderer() html = html.replace( "", - ''.format( + ''.format( escape(defaults["permissionMode"], quote=True), escape(defaults["mode"], quote=True), escape(defaults["pipelineName"], quote=True), + escape(architecture_renderer, quote=True), ' data-token-mode="true"' if token_mode else "", ), 1, ) return HTMLResponse(html, headers={"Cache-Control": "no-store"}) + async def diagram_preview(_request): + html = (STATIC_DIR / "diagram-preview.html").read_text(encoding="utf-8") + theme = get_appearance_theme() + lang = resolve_ui_language(get_ui_language()) + catalog = load_webui_catalog(lang) + html = html.replace( + '', + ''.format(lang, theme), + 1, + ) + i18n_script = "".format( + json.dumps({"lang": lang, "messages": catalog}, ensure_ascii=False).replace("<", "\\u003c") + ) + html = html.replace("", i18n_script + "\n ", 1) + html = html.replace( + "", + ''.format( + escape(get_architecture_diagram_renderer(), quote=True), + ' data-token-mode="true"' if token_mode else "", + ), + 1, + ) + return HTMLResponse(html, headers={"Cache-Control": "no-store"}) + + async def post_diagram_preview(request): + try: + data = await json_object_body(request) + filename = required_string(data, "filename") + content = required_string(data, "content") + except ValueError as exc: + return json_error(str(exc), 400) + if len(content.encode("utf-8")) > MAX_DIAGRAM_PREVIEW_BYTES: + return JSONResponse( + {"error": {"code": "template_too_large", "message": _("The template must be 2 MB or smaller.")}}, + status_code=413, + ) + suffix = Path(filename).suffix.lower() + try: + views = await run_in_threadpool(render_template_diagram_views, content, suffix) + except TemplateDiagramPreviewError as exc: + error_code = str(exc) + messages = { + "unsupported_template_format": _("Choose a ROS template in YAML, YML, or JSON format."), + "not_ros_template": _("The file does not look like a ROS template."), + "template_parse_failed": _("The ROS template could not be parsed."), + "template_is_not_mapping": _("The ROS template must contain a mapping at its root."), + "template_has_no_resources": _("The ROS template does not contain any resources."), + "template_has_no_supported_resources": _( + "The ROS template does not contain resources supported by the architecture renderer." + ), + "template_render_failed": _("The ROS template could not be rendered."), + } + error_message = messages.get(error_code, messages["template_render_failed"]) + return JSONResponse( + {"error": {"code": error_code, "message": error_message}}, + status_code=400, + ) + return JSONResponse( + { + "filename": Path(filename).name, + "format": "ros", + "mermaidSource": views[0]["mermaidSource"], + "views": views, + } + ) + async def create_session(request): try: data = await json_object_body(request) @@ -3815,6 +3888,17 @@ async def put_appearance_settings(request): except ValueError as exc: return json_error(str(exc), 400) + async def get_architecture_diagram_settings(request): + return JSONResponse({"renderer": get_architecture_diagram_renderer()}) + + async def put_architecture_diagram_settings(request): + try: + data = await json_object_body(request) + renderer = required_string(data, "renderer") + return JSONResponse(await state_transaction(save_architecture_diagram_renderer, renderer)) + except ValueError as exc: + return json_error(str(exc), 400) + async def get_ui_language_settings(request): return JSONResponse(ui_language_payload()) @@ -5294,6 +5378,8 @@ async def event_stream(): ] ), Route("/", index, methods=["GET"]), + Route("/diagram-preview", diagram_preview, methods=["GET"]), + Route("/api/diagram-preview", post_diagram_preview, methods=["POST"]), Route("/api/sessions", create_session, methods=["POST"]), ] if desktop_config is not None: @@ -5352,6 +5438,8 @@ async def event_stream(): ), Route("/api/settings/appearance", get_appearance_settings, methods=["GET"]), Route("/api/settings/appearance", put_appearance_settings, methods=["PUT"]), + Route("/api/settings/architecture-diagram", get_architecture_diagram_settings, methods=["GET"]), + Route("/api/settings/architecture-diagram", put_architecture_diagram_settings, methods=["PUT"]), Route("/api/settings/ui-language", get_ui_language_settings, methods=["GET"]), Route("/api/settings/ui-language", put_ui_language_settings, methods=["PUT"]), Route("/api/settings/session-defaults", get_session_defaults_settings, methods=["GET"]), diff --git a/src/iac_code/web/diagram_cache.py b/src/iac_code/web/diagram_cache.py index 3b0765ed..3cc20ae6 100644 --- a/src/iac_code/web/diagram_cache.py +++ b/src/iac_code/web/diagram_cache.py @@ -15,6 +15,7 @@ from iac_code.utils.file_security import atomic_write_text, ensure_private_dir DIAGRAM_CACHE_DIR_NAME = "diagram-cache" +DIAGRAM_CACHE_VERSION = 2 logger = logging.getLogger(__name__) @@ -49,15 +50,21 @@ def read_cached(context_id: str | None, candidate_index: int | str, template_con return None raw_views = data.get("views") if isinstance(raw_views, list): - views = [ - { + views = [] + for v in raw_views: + if not isinstance(v, dict) or not isinstance(v.get("mermaidSource"), str) or not v.get("mermaidSource"): + continue + view = { "id": str(v.get("id") or ""), "title": str(v.get("title") or ""), "mermaidSource": v["mermaidSource"], } - for v in raw_views - if isinstance(v, dict) and isinstance(v.get("mermaidSource"), str) and v.get("mermaidSource") - ] + if "purpose" in v: + view["purpose"] = str(v.get("purpose") or "") + graph = v.get("graph") + if isinstance(graph, dict) and graph.get("version") == 1: + view["graph"] = graph + views.append(view) return views or None legacy = data.get("mermaidSource") if isinstance(legacy, str) and legacy: @@ -78,6 +85,7 @@ def write_cached( thash = template_hash(template_content) path = cache_path(safe, candidate_index, thash) payload = { + "version": DIAGRAM_CACHE_VERSION, "candidateIndex": candidate_index, "templateHash": thash, "views": views, diff --git a/src/iac_code/web/diagram_optimizer.py b/src/iac_code/web/diagram_optimizer.py index 0314cee2..dd130231 100644 --- a/src/iac_code/web/diagram_optimizer.py +++ b/src/iac_code/web/diagram_optimizer.py @@ -189,12 +189,23 @@ async def _optimize_one( multi = await asyncio.to_thread( render_ros_template_architecture_views, target.template_content, semantic_plan=plan ) - views: list[dict] = [] + views: list[dict[str, Any]] = [] for v in multi.views: raw = v.mermaid_source if not raw or raw.startswith(_ERROR_MERMAID_PREFIX) or raw.strip() == "graph TD": continue - views.append({"id": v.id, "title": v.title, "mermaidSource": browser_mermaid_source(raw)}) + view: dict[str, Any] = { + "id": v.id, + "title": v.title, + "mermaidSource": browser_mermaid_source(raw), + } + purpose = getattr(v, "purpose", "") + if purpose: + view["purpose"] = purpose + graph = getattr(v, "graph", None) + if isinstance(graph, dict) and graph.get("version") == 1: + view["graph"] = graph + views.append(view) if not views: raise RuntimeError("optimized render did not produce a usable diagram") await asyncio.to_thread( diff --git a/src/iac_code/web/diagrams.py b/src/iac_code/web/diagrams.py index 505d5417..a2d2da03 100644 --- a/src/iac_code/web/diagrams.py +++ b/src/iac_code/web/diagrams.py @@ -6,38 +6,71 @@ from pathlib import Path from typing import Any +from iac_code.pipeline.engine.architecture_graph import render_ros_template_architecture_views from iac_code.pipeline.engine.architecture_semantic_planning import browser_mermaid_source -from iac_code.pipeline.engine.show_diagram_tool import ros_template_to_mermaid from iac_code.web.diagram_cache import read_cached from iac_code.web.outputs import TEMPLATE_SUFFIXES, is_template_content, pipeline_candidate_costs _MATERIALIZED_STEP_ID = "materialize_selected_candidate" _MATERIALIZED_OPTIMIZATION_KEY = "materialized" _ARCHITECTURE_PLAN_SOURCE = "architecture_plan" +PREVIEW_TEMPLATE_SUFFIXES = {".json", ".yaml", ".yml"} -def _mermaid_or_none(content: str, suffix: str) -> str | None: - """仅对 ROS YAML 模板产出 mermaid;非 YAML/非模板/解析失败一律 None。""" +class TemplateDiagramPreviewError(ValueError): + """Raised when an uploaded template cannot produce an architecture preview.""" + + +def render_template_diagram_views(content: str, suffix: str) -> list[dict[str, Any]]: + """Render a standalone preview from an in-memory ROS template. + + JSON is accepted because ROS JSON is also valid input for ``ros_yaml_load``. Terraform + is intentionally excluded until there is a deterministic Terraform graph parser. + """ + normalized_suffix = suffix.lower() + if normalized_suffix not in PREVIEW_TEMPLATE_SUFFIXES: + raise TemplateDiagramPreviewError("unsupported_template_format") + if not content.strip() or not is_template_content(content, normalized_suffix): + raise TemplateDiagramPreviewError("not_ros_template") + try: + result = render_ros_template_architecture_views(content) + except Exception as exc: + raise TemplateDiagramPreviewError("template_render_failed") from exc + error_reason = result.architecture_context.get("error") + if error_reason == "yaml_parse_error": + raise TemplateDiagramPreviewError("template_parse_failed") + if error_reason: + raise TemplateDiagramPreviewError(str(error_reason)) + views: list[dict[str, Any]] = [ + { + "id": view.id, + "title": view.title, + "purpose": view.purpose, + "mermaidSource": browser_mermaid_source(view.mermaid_source), + "graph": view.graph, + } + for view in result.views + if view.mermaid_source + ] + if not views or not str(views[0]["mermaidSource"]).strip(): + raise TemplateDiagramPreviewError("template_has_no_supported_resources") + return views + + +def _rendered_views_or_none(content: str, suffix: str) -> list[dict[str, Any]] | None: + """Derive Mermaid and DiagramGraph views from one exact template projection.""" if suffix not in {".yaml", ".yml"}: return None - if not is_template_content(content, suffix): - return None try: - source = ros_template_to_mermaid(content) - except Exception: - return None - if not source: - return None - # ros_template_to_mermaid 不抛异常:YAML 解析失败时返回哨兵图(节点 id 恒为 Error, - # 仅括号内文案随 i18n 变化),据此判定为不可解析并跳过。 - if source.startswith("graph TD\n Error["): + return render_template_diagram_views(content, suffix) + except TemplateDiagramPreviewError: return None - # 非 dict / 无 Resources 时 ros_template_to_mermaid 只返回裸表头(无节点),视为空图跳过。 - if source.strip() == "graph TD": - return None - # ros_template_to_mermaid 产出的 subgraph 标题未加引号且可能含括号(如 "VPC (10.0.0.0/16)"), - # 浏览器端 mermaid.js 会解析失败(炸弹图)。复用与 HTML 预览(write_html)同一转换,给标题加引号。 - return browser_mermaid_source(source) + + +def _mermaid_or_none(content: str, suffix: str) -> str | None: + """Compatibility helper returning the first renderer-neutral view's Mermaid source.""" + views = _rendered_views_or_none(content, suffix) + return views[0]["mermaidSource"] if views else None def _read_content(cwd: Path, raw_path: Any, captured: str | None) -> tuple[str, str] | None: @@ -187,14 +220,20 @@ def diagram_items( view_source = raw_view.get("mermaidSource") or raw_view.get("mermaid_source") if not isinstance(view_source, str) or not view_source.strip(): continue - views.append( - { - "id": str(raw_view.get("id") or "overview"), - "title": str(raw_view.get("title") or ""), - "purpose": str(raw_view.get("purpose") or ""), - "mermaidSource": view_source, - } - ) + view: dict[str, Any] = { + "id": str(raw_view.get("id") or "overview"), + "title": str(raw_view.get("title") or ""), + "purpose": str(raw_view.get("purpose") or ""), + "mermaidSource": view_source, + } + graph = raw_view.get("graph") + if isinstance(graph, dict) and graph.get("version") == 1: + view["graph"] = graph + views.append(view) + if views and "graph" not in views[0]: + graph = architecture_context.get("graph") + if isinstance(graph, dict) and graph.get("version") == 1: + views[0]["graph"] = graph stage = str(data.get("diagramStage") or "optimized") entry: dict[str, Any] = { "diagramId": str(data.get("diagramId") or envelope.get("eventId") or f"plan:{index}"), @@ -225,9 +264,10 @@ def diagram_items( if read is None: continue content, suffix = read - source = _mermaid_or_none(content, suffix) - if source is None: + draft_views = _rendered_views_or_none(content, suffix) + if not draft_views: continue + source = draft_views[0]["mermaidSource"] candidate = envelope.get("candidate") candidate = candidate if isinstance(candidate, dict) else {} index = candidate.get("index") @@ -267,6 +307,8 @@ def diagram_items( } if cached: entry["views"] = cached + else: + entry["views"] = draft_views exact_cost = materialized_costs.get(canonical_key) if exact_cost is not None: entry.update(exact_cost) @@ -290,6 +332,8 @@ def diagram_items( } if cached: entry["views"] = cached + else: + entry["views"] = draft_views cost = costs.get(index) if cost is not None: entry["costItems"] = cost["costItems"] diff --git a/src/iac_code/web/events.py b/src/iac_code/web/events.py index a51f4e13..f2f21223 100644 --- a/src/iac_code/web/events.py +++ b/src/iac_code/web/events.py @@ -561,12 +561,16 @@ def translate_stream_event(self, event: StreamEvent, *, turn_id: str) -> dict[st }, ) if isinstance(event, DiagramEvent): - data = { + data: dict[str, Any] = { "candidateName": event.candidate_name, "templateContent": event.template_content, "mermaidSource": event.mermaid_source, "candidateIndex": event.candidate_index, + "diagramStage": event.diagram_stage, + "views": event.views, } + if event.architecture_context is not None: + data["architectureContext"] = event.architecture_context if event.candidate_set_id: data["candidateSetId"] = event.candidate_set_id if event.detail_stage: diff --git a/src/iac_code/web/settings.py b/src/iac_code/web/settings.py index 13c26420..a699b2a2 100644 --- a/src/iac_code/web/settings.py +++ b/src/iac_code/web/settings.py @@ -163,6 +163,8 @@ def save_telemetry_settings(share_content: bool) -> dict[str, bool]: _APPEARANCE_SETTINGS_KEY = "appearance" VALID_THEMES = ("graphite", "midnight", "evergreen", "sepia", "ivory") DEFAULT_THEME = "graphite" +VALID_ARCHITECTURE_DIAGRAM_RENDERERS = ("eraser", "mermaid") +DEFAULT_ARCHITECTURE_DIAGRAM_RENDERER = "eraser" def get_appearance_theme() -> str: @@ -190,6 +192,33 @@ def save_appearance_theme(theme: str) -> dict[str, str]: return {"theme": theme} +def get_architecture_diagram_renderer() -> str: + """Return the persisted Web architecture renderer, defaulting to Eraser.""" + settings = _load_yaml(get_settings_path()) + section = settings.get(_APPEARANCE_SETTINGS_KEY) + if not isinstance(section, dict): + return DEFAULT_ARCHITECTURE_DIAGRAM_RENDERER + renderer = section.get("architectureDiagramRenderer") + if not isinstance(renderer, str) or renderer not in VALID_ARCHITECTURE_DIAGRAM_RENDERERS: + return DEFAULT_ARCHITECTURE_DIAGRAM_RENDERER + return renderer + + +def save_architecture_diagram_renderer(renderer: str) -> dict[str, str]: + """Persist the Web architecture renderer while preserving appearance keys.""" + if renderer not in VALID_ARCHITECTURE_DIAGRAM_RENDERERS: + raise ValueError(_("unknown architecture diagram renderer")) + settings_path = get_settings_path() + settings = _load_yaml(settings_path) + section = settings.get(_APPEARANCE_SETTINGS_KEY) + if not isinstance(section, dict): + section = {} + section["architectureDiagramRenderer"] = renderer + settings[_APPEARANCE_SETTINGS_KEY] = section + _save_yaml(settings_path, settings) + return {"renderer": renderer} + + _UI_SETTINGS_KEY = "ui" diff --git a/src/iac_code/web/static/diagram-preview-corpus.json b/src/iac_code/web/static/diagram-preview-corpus.json new file mode 100644 index 00000000..e447f04d --- /dev/null +++ b/src/iac_code/web/static/diagram-preview-corpus.json @@ -0,0 +1,35 @@ +{ + "templateRepositoryCommit": "b2d8085990d471094a2de7f90b131992f6ba0795", + "templates": [ + "examples/storage/simple-oss-bucket.yml", + "examples/free/multi-zone-network.yml", + "resources/ecs/ecs-instance-case2.yml", + "resources/ecs/nat-gateway.yml", + "resources/vpc/router-interface-update.yml", + "resources/slb/listener.yml", + "resources/alb/load-balancer-case2.yml", + "documents/solution/network/ga-nlb-global-accelerate.yml", + "resources/cen/cen.yml", + "examples/network/cen-open-isolated-networks.yml", + "examples/network/security-vpc.yml", + "documents/solution/network/enterprise-cloud-network-architecture-planning.yml", + "examples/elastic/ess-1-slb-2-rds-2-ecs.yml", + "documents/solution/high-availability-architecture/basic-highly-available-architecture-new.yml", + "documents/solution/high-availability-architecture/build-high-performance-flash-sale-system.yaml", + "documents/solution/micro/build-microservices-on-ack.yml", + "documents/solution/micro/elastic-scaling-container-through-hpa.yml", + "resources/eci/container-group.yml", + "documents/solution/internet-application-development/Run-Dify-on-Serverless.yml", + "documents/solution/internet-application-development/serverless-rabbitmq.yml", + "documents/solution/high-availability-architecture/serverless-high-availability-architecture.yml", + "documents/solution/database/migrate-rds-mysql-to-polardb-mysql.yml", + "documents/solution/database/Redis-for-High-Concurrency.yml", + "documents/solution/data-analysis/flink-kafka-streaming-lakehouse.yaml", + "documents/solution/database/through-RocketMQ-transaction-messages.yml", + "documents/solution/account/enterprise-multi-account-identity-authority-centralized-management.yml", + "documents/solution/security-and-compliance/protect-web-applications-with-WAF.yml", + "documents/solution/cdn-and-video-cloud/cdn-speeds-up-distribution-of-file-on-oss.yml", + "documents/solution/ai/pai-ai-painting-solution.yml", + "documents/solution/iot/iot-platform-device-data-on-the-cloud.yml" + ] +} diff --git a/src/iac_code/web/static/diagram-preview.css b/src/iac_code/web/static/diagram-preview.css new file mode 100644 index 00000000..a129829b --- /dev/null +++ b/src/iac_code/web/static/diagram-preview.css @@ -0,0 +1,332 @@ +.diagram-preview-page { + width: min(100%, 1600px); + min-height: 100vh; + margin: 0 auto; + padding: clamp(1rem, 3vw, 2.5rem); +} + +.diagram-preview-header, +.diagram-preview-result-header, +.diagram-preview-picker-copy, +.diagram-preview-library-copy { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 1rem; +} + +.diagram-preview-header { + margin-bottom: 1.25rem; +} + +.diagram-preview-header h1 { + margin-top: 0.15rem; + font-size: clamp(1.45rem, 2.6vw, 2.25rem); + line-height: 1.2; +} + +.diagram-preview-eyebrow { + color: var(--codex-unread); + font-size: 0.72rem; + font-weight: 760; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +.diagram-preview-intro, +.diagram-preview-library-copy p, +.diagram-preview-picker-copy p, +.diagram-preview-result-header p, +.diagram-preview-dropzone > span:last-child { + color: var(--codex-muted); +} + +.diagram-preview-intro { + max-width: 42rem; + margin-top: 0.55rem; + line-height: 1.55; +} + +.diagram-preview-back { + flex: 0 0 auto; + padding: 0.52rem 0.75rem; + border: 1px solid var(--codex-border); + border-radius: 0.55rem; + color: var(--codex-text); + text-decoration: none; +} + +.diagram-preview-back:hover, +.diagram-preview-back:focus-visible { + border-color: var(--codex-border-strong); + background: var(--codex-hover); +} + +.diagram-preview-picker, +.diagram-preview-library, +.diagram-preview-result { + border: 1px solid var(--codex-border); + border-radius: 0.85rem; + background: var(--codex-panel-raised); + box-shadow: 0 16px 46px color-mix(in srgb, var(--codex-bg) 44%, transparent); +} + +.diagram-preview-library { + position: sticky; + z-index: 5; + top: 0.75rem; + display: grid; + grid-template-columns: minmax(14rem, 0.8fr) minmax(32rem, 1.8fr); + gap: 0.7rem 1rem; + align-items: end; + padding: clamp(0.85rem, 1.6vw, 1.1rem); + background: color-mix(in srgb, var(--codex-panel-raised) 96%, transparent); + backdrop-filter: blur(18px); +} + +.diagram-preview-library-copy { + display: block; +} + +.diagram-preview-library-copy p { + max-width: 32rem; + margin-top: 0.35rem; + font-size: 0.78rem; + line-height: 1.45; +} + +.diagram-preview-library-actions { + display: grid; + grid-template-columns: max-content minmax(14rem, 1fr) max-content; + gap: 0.65rem; + align-items: end; +} + +.diagram-preview-button, +.diagram-preview-field select { + min-height: 2.55rem; + border: 1px solid var(--codex-border); + border-radius: 0.6rem; + color: var(--codex-text); + background: var(--codex-panel); + font: inherit; +} + +.diagram-preview-button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.42rem; + padding: 0.55rem 0.8rem; + font-size: 0.8rem; + font-weight: 680; + cursor: pointer; +} + +.diagram-preview-button:hover, +.diagram-preview-button:focus-visible, +.diagram-preview-field select:hover, +.diagram-preview-field select:focus-visible { + border-color: var(--codex-unread); + outline: none; +} + +.diagram-preview-button:disabled, +.diagram-preview-field select:disabled { + cursor: not-allowed; + opacity: 0.48; +} + +.diagram-preview-field { + display: grid; + gap: 0.28rem; + min-width: 0; + color: var(--codex-muted); + font-size: 0.7rem; + font-weight: 650; +} + +.diagram-preview-field select { + width: 100%; + min-width: 0; + padding: 0.45rem 2rem 0.45rem 0.65rem; + font-size: 0.78rem; +} + +.diagram-preview-library-status { + grid-column: 1 / -1; + min-height: 1rem; + color: var(--codex-muted); + font-size: 0.74rem; +} + +.diagram-preview-library-status.is-error { + color: var(--danger, #db6d65); +} + +.diagram-preview-picker { + margin-top: 1rem; + padding: clamp(0.9rem, 2vw, 1.3rem); +} + +.diagram-preview-picker-copy { + align-items: baseline; + margin-bottom: 0.85rem; +} + +.diagram-preview-picker-copy p, +.diagram-preview-result-header p { + font-size: 0.82rem; +} + +.diagram-preview-dropzone { + display: grid; + justify-items: center; + gap: 0.48rem; + min-height: 8rem; + padding: 1.5rem; + border: 1px dashed var(--codex-border-strong); + border-radius: 0.7rem; + background: color-mix(in srgb, var(--codex-panel-raised) 78%, var(--codex-bg)); + text-align: center; + cursor: pointer; + transition: border-color 150ms ease, background 150ms ease, transform 150ms ease; +} + +.diagram-preview-dropzone:hover, +.diagram-preview-dropzone:focus-visible, +.diagram-preview-dropzone.is-dragging { + border-color: var(--codex-unread); + background: color-mix(in srgb, var(--codex-unread) 8%, var(--codex-panel-raised)); + outline: none; +} + +.diagram-preview-dropzone.is-dragging { + transform: scale(1.003); +} + +.diagram-preview-drop-icon { + display: grid; + width: 2.35rem; + height: 2.35rem; + place-items: center; + border-radius: 50%; + color: var(--codex-text); + background: var(--codex-hover); +} + +.diagram-preview-drop-icon svg { + width: 1.25rem; + fill: none; + stroke: currentColor; + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 1.6; +} + +.diagram-preview-dropzone strong { + font-size: 0.95rem; +} + +.diagram-preview-dropzone > span:last-child { + font-size: 0.78rem; +} + +.diagram-preview-status { + display: block; + min-height: 1.2rem; + margin-top: 0.65rem; + color: var(--codex-muted); + font-size: 0.82rem; +} + +.diagram-preview-status.is-error { + color: var(--danger, #db6d65); +} + +.diagram-preview-result { + margin-top: 1rem; + overflow: hidden; +} + +.diagram-preview-result-header { + align-items: center; + padding: 0.9rem 1rem; + border-bottom: 1px solid var(--codex-border); +} + +.diagram-preview-result-header h2 { + overflow-wrap: anywhere; +} + +.diagram-preview-result-header p { + margin-top: 0.25rem; +} + +.diagram-preview-renderer { + flex: 0 0 auto; + padding: 0.25rem 0.55rem; + border: 1px solid var(--codex-border); + border-radius: 999px; + color: var(--codex-muted); + font-size: 0.74rem; +} + +.diagram-preview-canvas { + min-height: 32rem; + padding: clamp(0.75rem, 2vw, 1.4rem); + overflow: auto; + background: color-mix(in srgb, var(--codex-bg) 88%, #000000); +} + +:root[data-theme="ivory"] .diagram-preview-canvas { + background: color-mix(in srgb, var(--codex-bg) 92%, #d7d7d0); +} + +.diagram-preview-render { + min-width: 100%; +} + +.diagram-preview-render .architecture-eraser-frame { + min-height: 30rem; +} + +.diagram-preview-render .mermaid-diagram { + min-height: 28rem; + align-items: center; +} + +@media (max-width: 680px) { + .diagram-preview-header, + .diagram-preview-library-copy, + .diagram-preview-picker-copy, + .diagram-preview-result-header { + align-items: stretch; + flex-direction: column; + } + + .diagram-preview-back, + .diagram-preview-renderer { + align-self: flex-start; + } + + .diagram-preview-canvas { + min-height: 25rem; + } +} + +@media (max-width: 980px) { + .diagram-preview-library { + position: static; + grid-template-columns: 1fr; + } + + .diagram-preview-library-actions { + grid-template-columns: 1fr; + align-items: stretch; + } + + .diagram-preview-button { + width: 100%; + } +} diff --git a/src/iac_code/web/static/diagram-preview.html b/src/iac_code/web/static/diagram-preview.html new file mode 100644 index 00000000..a4680ff4 --- /dev/null +++ b/src/iac_code/web/static/diagram-preview.html @@ -0,0 +1,111 @@ + + + + + + Architecture diagram preview + + + + +
+
+
+

iac-code

+

Architecture diagram preview

+

+ Choose or drop a ROS template to render its architecture diagram locally. +

+
+ Back to conversations +
+ +
+
+

Template library

+

+ Select the local ros-templates folder once, then switch between the fixed corpus or random templates. +

+
+
+ + + +
+ +
+ +
+
+

Single template

+

+ Supports ROS YAML, YML, and JSON templates up to 2 MB. +

+
+ + +
+ + +
+ + + diff --git a/src/iac_code/web/static/eraser-frame.html b/src/iac_code/web/static/eraser-frame.html new file mode 100644 index 00000000..9b7dd2a6 --- /dev/null +++ b/src/iac_code/web/static/eraser-frame.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + diff --git a/src/iac_code/web/static/index.html b/src/iac_code/web/static/index.html index 46abd495..d908abe3 100644 --- a/src/iac_code/web/static/index.html +++ b/src/iac_code/web/static/index.html @@ -6,7 +6,7 @@ IaC Code - +
@@ -479,6 +479,6 @@

- + diff --git a/src/iac_code/web/static/js/api.js b/src/iac_code/web/static/js/api.js index 17d43e88..b33d29e7 100644 --- a/src/iac_code/web/static/js/api.js +++ b/src/iac_code/web/static/js/api.js @@ -538,6 +538,17 @@ export function saveAppearance(theme) { }); } +export function getArchitectureDiagramRenderer() { + return jsonFetch("/api/settings/architecture-diagram"); +} + +export function saveArchitectureDiagramRenderer(renderer) { + return jsonFetch("/api/settings/architecture-diagram", { + method: "PUT", + body: JSON.stringify({ renderer }), + }); +} + export function getUiLanguage() { return jsonFetch("/api/settings/ui-language"); } diff --git a/src/iac_code/web/static/js/app.js b/src/iac_code/web/static/js/app.js index 94d5bff0..a9b925ec 100644 --- a/src/iac_code/web/static/js/app.js +++ b/src/iac_code/web/static/js/app.js @@ -1,14 +1,14 @@ -import * as api from "./api.js?v=web-repl-ui-312"; +import * as api from "./api.js?v=web-repl-ui-313"; import { createComposerController } from "./components/composer.js?v=session-model-v20"; import { renderBlockingPanels } from "./components/blocking.js?v=blocking-keys-v5"; import { deploymentConfirmationKey, renderDeploymentConfirmationPanel, renderPipelineWorkspace, -} from "./components/pipeline.js?v=pipeline-solution-confirm-v3"; +} from "./components/pipeline.js?v=pipeline-solution-confirm-v16"; import { renderToolCards, applyShimmerPhase, applySpinPhase } from "./components/tool_cards.js?v=live-inline-tools-v26"; -import { createWorkspaceController } from "./components/workspace.js?v=cloud-creds-v58"; -import { createOutputController } from "./components/output_panel.js?v=output-panel-v24"; +import { createWorkspaceController } from "./components/workspace.js?v=cloud-creds-v60"; +import { createOutputController } from "./components/output_panel.js?v=output-panel-v38"; import { openImageLightbox } from "./components/image_lightbox.js?v=image-lightbox-v1"; import { reduceEvent } from "./events.js?v=web-repl-ui-323"; import { applyDomI18n, t } from "./i18n.js?v=web-repl-ui-277"; diff --git a/src/iac_code/web/static/js/architecture_diagram.js b/src/iac_code/web/static/js/architecture_diagram.js new file mode 100644 index 00000000..3e2ace9d --- /dev/null +++ b/src/iac_code/web/static/js/architecture_diagram.js @@ -0,0 +1,377 @@ +import { t } from "./i18n.js?v=web-repl-ui-277"; +import { renderMermaid } from "./mermaid_render.js?v=arch-diagram-v5"; +import { getArchitectureDiagramRenderer } from "./api.js?v=web-repl-ui-313"; + +const RENDERER_EVENT = "iac-code:architecture-renderer-changed"; +const THEME_EVENT = "iac-code:theme-changed"; +const FRAME_TIMEOUT_MS = 7000; +const LAYOUT_TIMEOUT_MS = 2500; +const MERMAID_TIMEOUT_MS = 7000; +const MAX_LAYOUT_CACHE = 24; +let requestSequence = 0; +let workerSourcePromise = null; +let frameSourcesPromise = null; +const activeRecords = new Set(); +const recordsByContainer = new WeakMap(); +const layoutCache = new Map(); +let disconnectObserver = null; + +function nextRequestId() { + requestSequence += 1; + const random = new Uint32Array(4); + crypto.getRandomValues(random); + return `architecture-${requestSequence}-${[...random].map((value) => value.toString(16).padStart(8, "0")).join("")}`; +} + +function preferredRenderer() { + if (!document.body) return "mermaid"; + return document.body?.dataset.architectureDiagramRenderer === "mermaid" ? "mermaid" : "eraser"; +} + +function currentTheme() { + return document.documentElement.getAttribute("data-theme") || "graphite"; +} + +function usableGraph(value) { + return Boolean( + value && + typeof value === "object" && + !Array.isArray(value) && + value.version === 1 && + Array.isArray(value.nodes) && + Array.isArray(value.containers) && + Array.isArray(value.edges), + ); +} + +function workerSource() { + if (!workerSourcePromise) { + workerSourcePromise = fetch("/static/js/eraser_layout_worker.js?v=iac-layered-v7", { + cache: "force-cache", + credentials: "same-origin", + }) + .then((response) => { + if (!response.ok) throw new Error("Eraser layout worker failed to load"); + return response.text(); + }) + .catch((error) => { + workerSourcePromise = null; + throw error; + }); + } + return workerSourcePromise; +} + +function frameSources() { + if (!frameSourcesPromise) { + frameSourcesPromise = Promise.all([ + fetch("/static/js/vendor/eraser-diagrams.min.js?v=0.1.0-iac1", { + cache: "force-cache", + credentials: "same-origin", + }), + fetch("/static/js/eraser_frame.js?v=eraser-browser-v7", { + cache: "force-cache", + credentials: "same-origin", + }), + ]) + .then(async ([rendererResponse, frameResponse]) => { + if (!rendererResponse.ok || !frameResponse.ok) throw new Error("Eraser frame scripts failed to load"); + return { rendererSource: await rendererResponse.text(), frameSource: await frameResponse.text() }; + }) + .catch((error) => { + frameSourcesPromise = null; + throw error; + }); + } + return frameSourcesPromise; +} + +function layoutKey(graph, theme) { + const geometryTheme = theme === "ivory" ? "light" : "dark"; + return `eraser@0.1.0|iac-layered-v7|font-v3|icons-v1|${geometryTheme}|${JSON.stringify(graph)}`; +} + +function rememberLayout(key, layout) { + if (!layout || typeof layout !== "object") return; + layoutCache.delete(key); + layoutCache.set(key, layout); + while (layoutCache.size > MAX_LAYOUT_CACHE) layoutCache.delete(layoutCache.keys().next().value); +} + +function disposeFrame(record) { + const cancelFrame = record.cancelFrame; + record.cancelFrame = null; + cancelFrame?.(); + record.port?.postMessage({ type: "cancel" }); + record.port?.close(); + record.port = null; + record.frame?.remove(); + record.frame = null; +} + +function unregister(record) { + record.generation += 1; + disposeFrame(record); + activeRecords.delete(record); + if (recordsByContainer.get(record.container) === record) recordsByContainer.delete(record.container); +} + +export function disposeArchitectureDiagram(container) { + const record = recordsByContainer.get(container); + if (record) unregister(record); +} + +function fallbackNotice(message) { + const notice = document.createElement("p"); + notice.className = "architecture-diagram-fallback"; + notice.setAttribute("role", "status"); + notice.textContent = message; + return notice; +} + +function notifyIntrinsicSize(record, width, height = 0) { + const normalizedWidth = Number(width); + const normalizedHeight = Number(height); + if (!Number.isFinite(normalizedWidth) || normalizedWidth <= 0) return; + record.onSize?.({ + width: Math.ceil(normalizedWidth), + height: Number.isFinite(normalizedHeight) && normalizedHeight > 0 ? Math.ceil(normalizedHeight) : 0, + }); +} + +function mermaidIntrinsicWidth(body) { + const svg = body.querySelector?.(".mermaid-diagram svg"); + if (!svg) return body.scrollWidth || 0; + const viewBoxWidth = Number(svg.viewBox?.baseVal?.width) || 0; + const viewBox = String(svg.getAttribute?.("viewBox") || "").trim().split(/[ ,]+/).map(Number); + const attributeWidth = Number.parseFloat(svg.getAttribute?.("width") || "") || 0; + return Math.max(viewBoxWidth, viewBox.length === 4 && Number.isFinite(viewBox[2]) ? viewBox[2] : 0, attributeWidth); +} + +async function showMermaid(record, view, generation, warning = "") { + disposeFrame(record); + const body = document.createElement("div"); + const source = view?.mermaidSource || record.fallbackSource || ""; + let timer = null; + try { + await Promise.race([ + renderMermaid(body, source), + new Promise((_resolve, reject) => { + timer = setTimeout(() => reject(new Error("Mermaid renderer timed out")), MERMAID_TIMEOUT_MS); + }), + ]); + } catch (_error) { + body.className = "mermaid-fallback"; + body.textContent = source; + } finally { + clearTimeout(timer); + } + if (generation !== record.generation || record.container.isConnected === false) return; + if (warning) record.target.replaceChildren(fallbackNotice(warning), body); + else record.target.replaceChildren(body); + notifyIntrinsicSize(record, mermaidIntrinsicWidth(body)); +} + +async function renderEraserFrame(record, view, generation) { + const graph = view.graph; + const theme = currentTheme(); + const key = layoutKey(graph, theme); + const [source, runtimeSources] = await Promise.all([workerSource(), frameSources()]); + if (generation !== record.generation || record.container.isConnected === false) { + throw new Error("Architecture render was cancelled"); + } + const frame = document.createElement("iframe"); + const requestId = nextRequestId(); + frame.className = "architecture-eraser-frame"; + frame.title = view.title || t("Architecture diagram"); + frame.setAttribute("sandbox", "allow-scripts"); + frame.setAttribute("referrerpolicy", "no-referrer"); + + return new Promise((resolve, reject) => { + let settled = false; + const finish = (error) => { + if (settled) return; + settled = true; + clearTimeout(timer); + window.removeEventListener("message", onReady); + if (record.cancelFrame === cancel) record.cancelFrame = null; + if (error) reject(error); + else resolve(); + }; + const cancel = () => finish(new Error("Architecture render was cancelled")); + record.cancelFrame = cancel; + const timer = setTimeout(() => { + frame.remove(); + if (record.frame === frame) record.frame = null; + finish(new Error("Eraser renderer timed out")); + }, FRAME_TIMEOUT_MS); + const onReady = (event) => { + if (event.data?.type !== "iac-eraser-ready" || event.data.requestId !== requestId) return; + if (generation !== record.generation || !event.source || typeof event.source.postMessage !== "function") return; + const channel = new MessageChannel(); + record.port = channel.port1; + channel.port1.onmessage = (portEvent) => { + if (portEvent.data?.requestId !== requestId || generation !== record.generation) return; + if (portEvent.data.type === "rendered") { + const height = Math.max(240, Math.min(record.maxHeight, Number(portEvent.data.height) || 360)); + frame.style.height = `${height}px`; + notifyIntrinsicSize(record, portEvent.data.width, height); + rememberLayout(key, portEvent.data.layout); + finish(); + } else if (portEvent.data.type === "failed") { + disposeFrame(record); + finish(new Error(portEvent.data.error || "Eraser renderer failed")); + } + }; + event.source.postMessage( + { + type: "iac-eraser-init", + requestId, + graph, + theme, + workerSource: source, + ...runtimeSources, + cachedLayout: layoutCache.get(key) || null, + timeoutMs: LAYOUT_TIMEOUT_MS, + }, + "*", + [channel.port2], + ); + }; + window.addEventListener("message", onReady); + record.frame = frame; + frame.src = `/static/eraser-frame.html?v=eraser-browser-v4#${encodeURIComponent(requestId)}`; + record.target.replaceChildren(frame); + }); +} + +async function renderActiveView(record) { + record.generation += 1; + const generation = record.generation; + disposeFrame(record); + const view = record.views[record.activeIndex] || record.views[0]; + if (!view) { + record.target.replaceChildren(); + return; + } + if (preferredRenderer() === "mermaid") { + await showMermaid(record, view, generation); + return; + } + if (!usableGraph(view.graph)) { + await showMermaid(record, view, generation, t("This historical diagram is shown with Mermaid.")); + return; + } + try { + await renderEraserFrame(record, view, generation); + } catch (error) { + if (generation !== record.generation) return; + console.warn("Eraser architecture render failed", error); + await showMermaid(record, view, generation, t("This diagram is temporarily shown with Mermaid.")); + } +} + +function makeTabs(record) { + if (record.views.length < 2) return null; + const tabs = document.createElement("div"); + tabs.className = "diagram-view-tabs"; + record.views.forEach((view, index) => { + const tab = document.createElement("button"); + tab.type = "button"; + tab.className = "diagram-view-tab" + (index === record.activeIndex ? " is-active" : ""); + tab.textContent = view.title || view.id || t("View {n}", { n: index + 1 }); + tab.addEventListener("click", () => { + record.activeIndex = index; + for (const [position, item] of [...tabs.children].entries()) { + item.className = "diagram-view-tab" + (position === index ? " is-active" : ""); + } + renderActiveView(record); + }); + tabs.append(tab); + }); + return tabs; +} + +export async function renderArchitectureDiagram(container, diagram, options = {}) { + disposeArchitectureDiagram(container); + const rawViews = Array.isArray(diagram?.views) && diagram.views.length + ? diagram.views + : [{ id: "overview", title: "", mermaidSource: diagram?.mermaidSource || diagram?.mermaid_source || "", graph: diagram?.graph }]; + const normalizedViews = rawViews.map((view) => ({ + ...view, + mermaidSource: view?.mermaidSource || view?.mermaid_source || "", + })); + const views = normalizedViews.filter((view) => view && (view.mermaidSource || usableGraph(view.graph))); + const shell = document.createElement("div"); + shell.className = "architecture-diagram-shell"; + const target = document.createElement("div"); + target.className = "architecture-diagram-view"; + const record = { + container, + shell, + target, + views, + fallbackSource: diagram?.mermaidSource || diagram?.mermaid_source || "", + activeIndex: 0, + generation: 0, + frame: null, + port: null, + cancelFrame: null, + onSize: typeof options.onSize === "function" ? options.onSize : null, + maxHeight: + Number.isFinite(options.maxHeight) && options.maxHeight >= 240 ? Math.min(2400, options.maxHeight) : 720, + }; + const tabs = makeTabs(record); + shell.append(...(tabs ? [tabs] : []), target); + container.replaceChildren(shell); + recordsByContainer.set(container, record); + activeRecords.add(record); + observeDisconnects(); + await renderActiveView(record); +} + +function observeDisconnects() { + if (disconnectObserver || typeof MutationObserver === "undefined" || !document.documentElement) return; + disconnectObserver = new MutationObserver(() => { + for (const record of [...activeRecords]) { + if (record.container.isConnected === false) unregister(record); + } + }); + disconnectObserver.observe(document.documentElement, { childList: true, subtree: true }); +} + +function rerenderConnected() { + for (const record of [...activeRecords]) { + if (record.container.isConnected === false) { + unregister(record); + continue; + } + renderActiveView(record); + } +} + +async function refreshPreferredRenderer() { + try { + const payload = await getArchitectureDiagramRenderer(); + const renderer = payload?.renderer === "mermaid" ? "mermaid" : "eraser"; + if (preferredRenderer() === renderer) return; + document.body.dataset.architectureDiagramRenderer = renderer; + window.dispatchEvent(new CustomEvent(RENDERER_EVENT)); + } catch (_error) { + /* Keep the server-injected preference when a background refresh is unavailable. */ + } +} + +if (typeof window !== "undefined" && window.addEventListener) { + window.addEventListener(RENDERER_EVENT, rerenderConnected); + window.addEventListener(THEME_EVENT, rerenderConnected); + window.addEventListener("focus", refreshPreferredRenderer); +} + +export function notifyArchitectureRendererChanged() { + window.dispatchEvent(new CustomEvent(RENDERER_EVENT)); +} + +export function notifyArchitectureThemeChanged() { + window.dispatchEvent(new CustomEvent(THEME_EVENT)); +} diff --git a/src/iac_code/web/static/js/components/output_panel.js b/src/iac_code/web/static/js/components/output_panel.js index b234a450..66eccf05 100644 --- a/src/iac_code/web/static/js/components/output_panel.js +++ b/src/iac_code/web/static/js/components/output_panel.js @@ -1,8 +1,20 @@ import { t } from "../i18n.js?v=web-repl-ui-277"; // 输出面板:悬浮抽屉汇总资源栈与模板文件;自持 DOM,不进 render 扇出。 -import { renderMermaid, renderMermaidViews, renderDiagramPrice } from "../mermaid_render.js?v=arch-diagram-v5"; +import { + disposeArchitectureDiagram, + renderArchitectureDiagram, +} from "../architecture_diagram.js?v=eraser-browser-v14"; +import { renderDiagramPrice } from "../mermaid_render.js?v=arch-diagram-v5"; const STATUS_LABELS = { true: t("Success"), false: t("In progress / failed") }; +const DIAGRAM_PREVIEW_MIN_WIDTH = 560; +const DIAGRAM_PREVIEW_CHROME_WIDTH = 34; + +export function diagramPreviewWidth(diagramWidth) { + const width = Number(diagramWidth); + if (!Number.isFinite(width) || width <= 0) return DIAGRAM_PREVIEW_MIN_WIDTH; + return Math.max(DIAGRAM_PREVIEW_MIN_WIDTH, Math.ceil(width) + DIAGRAM_PREVIEW_CHROME_WIDTH); +} // 行首类型图标(静态 SVG 常量,随 currentColor 着色):资源栈=堆叠层、模板=文档、架构图=流程节点。 const ROW_ICONS = { @@ -48,6 +60,10 @@ function diagramDisplayName(item) { return item.candidateName || outputLeafName(item.sourceRelPath) || t("Architecture diagram"); } +function architectureRendererLabel() { + return document.body?.dataset.architectureDiagramRenderer === "mermaid" ? "MERMAID" : "ERASER"; +} + // 轻量正则高亮(无第三方依赖):先整体转义,再按 token 包裹。 export function highlightTemplate(text, format) { const escaped = escapeHtml(text); @@ -198,8 +214,21 @@ export function createOutputController({ let isOpen = false; let autoOpenedOnce = false; let activePreviewPath = null; + let activeDiagramCanvas = null; + + function clearDiagramPreview() { + if (activeDiagramCanvas) disposeArchitectureDiagram(activeDiagramCanvas); + activeDiagramCanvas = null; + } + + function resetPreviewLayout() { + preview?.classList?.remove?.("is-architecture"); + preview?.style?.removeProperty?.("--architecture-preview-width"); + } function closePreview() { + clearDiagramPreview(); + resetPreviewLayout(); activePreviewPath = null; if (preview) preview.hidden = true; } @@ -207,6 +236,8 @@ export function createOutputController({ async function openPreview(path) { const id = getSessionId?.(); if (!id || !preview) return; + clearDiagramPreview(); + resetPreviewLayout(); activePreviewPath = path; preview.hidden = false; preview.replaceChildren(previewHead(path), loadingBody()); @@ -237,20 +268,28 @@ export function createOutputController({ // 用唯一 diagramId 做陈旧性键(重名候选的 title 可能相同,无法区分)。 const key = item.diagramId || title; activePreviewPath = key; + resetPreviewLayout(); + preview.classList.add("is-architecture"); preview.hidden = false; preview.replaceChildren(previewHead(title, st), loadingBody()); - // 先在游离容器里渲染(renderMermaid 会往其中注入 .mermaid-diagram), - // 渲染完成后再校验会话/选中态未被切走,才写入面板 —— 与 openPreview 同款防护。 const container = document.createElement("div"); container.className = "output-preview-body"; - if (Array.isArray(item.views) && item.views.length > 1) { - await renderMermaidViews(container, item.views); - } else { - await renderMermaid(container, item.mermaidSource); - } - container.append(renderDiagramPrice(item)); - if (activePreviewPath !== key || getSessionId?.() !== id) return; // 期间被切走 + const canvas = document.createElement("div"); + canvas.className = "architecture-diagram-canvas"; + container.append(canvas, renderDiagramPrice(item)); + clearDiagramPreview(); + activeDiagramCanvas = canvas; preview.replaceChildren(previewHead(title, st), container); + await renderArchitectureDiagram(canvas, item, { + onSize: ({ width }) => { + if (activePreviewPath !== key || activeDiagramCanvas !== canvas) return; + preview.style.setProperty("--architecture-preview-width", `${diagramPreviewWidth(width)}px`); + }, + }); + if (activePreviewPath !== key || getSessionId?.() !== id) { + disposeArchitectureDiagram(canvas); + if (activeDiagramCanvas === canvas) activeDiagramCanvas = null; + } } // 切换架构图预览:同一图已在预览中(面板可见且键相同)则关闭,否则打开/切换到该图。 @@ -317,6 +356,7 @@ export function createOutputController({ function setOpen(open) { isOpen = open; if (panel) panel.hidden = !open; + if (!open) closePreview(); } function updateToggle() { @@ -410,8 +450,8 @@ export function createOutputController({ name.className = "output-row-name"; name.textContent = diagramDisplayName(item); const badge = document.createElement("span"); - badge.className = "output-badge output-format-" + item.format; - badge.textContent = String(item.format).toUpperCase(); + badge.className = "output-badge output-format-diagram"; + badge.textContent = architectureRendererLabel(); row.append(rowIcon("diagram"), name, badge); // 候选方案架构图的优化三态徽标(待优化/优化中/无);非候选图或已优化则无徽标。 const stateBadge = diagramStateBadge(getDiagramState(item)); @@ -461,7 +501,15 @@ export function createOutputController({ if (toggle) toggle.addEventListener("click", () => setOpen(!isOpen)); if (closeBtn) closeBtn.addEventListener("click", () => setOpen(false)); + const onArchitectureRendererChanged = () => renderPanel(); + const eventTarget = typeof window === "undefined" ? null : window; + eventTarget?.addEventListener("iac-code:architecture-renderer-changed", onArchitectureRendererChanged); + + function destroy() { + eventTarget?.removeEventListener("iac-code:architecture-renderer-changed", onArchitectureRendererChanged); + closePreview(); + } updateToggle(); - return { refresh, reset, openDiagramPreview, toggleDiagramPreview, destroy() {} }; + return { refresh, reset, openDiagramPreview, toggleDiagramPreview, destroy }; } diff --git a/src/iac_code/web/static/js/components/pipeline.js b/src/iac_code/web/static/js/components/pipeline.js index d8e95890..6f6c2100 100644 --- a/src/iac_code/web/static/js/components/pipeline.js +++ b/src/iac_code/web/static/js/components/pipeline.js @@ -1,5 +1,9 @@ import { t } from "../i18n.js?v=web-repl-ui-277"; -import { renderMermaid, renderMermaidViews, renderDiagramPrice } from "../mermaid_render.js?v=arch-diagram-v5"; +import { + disposeArchitectureDiagram, + renderArchitectureDiagram, +} from "../architecture_diagram.js?v=eraser-browser-v14"; +import { renderDiagramPrice } from "../mermaid_render.js?v=arch-diagram-v5"; function text(value) { return value === undefined || value === null ? "" : String(value); @@ -786,15 +790,20 @@ function appendCandidateDiagram(card, candidate, diagrams) { details.append(body); // 折叠默认收起;展开时才懒加载 + 渲染(避免一次渲染 N 张) details.addEventListener("toggle", async () => { - if (!details.open || body.dataset.rendered) return; + if (!details.open) { + const canvas = body.querySelector(".architecture-diagram-canvas"); + if (canvas) disposeArchitectureDiagram(canvas); + body.replaceChildren(); + delete body.dataset.rendered; + return; + } + if (body.dataset.rendered) return; body.dataset.rendered = "1"; - if (match?.mermaidSource) { - // 必须先 await:renderMermaid 以 replaceChildren 收尾,不等它会抹掉后面 append 的询价块。 - if (Array.isArray(match.views) && match.views.length > 1) { - await renderMermaidViews(body, match.views); - } else { - await renderMermaid(body, match.mermaidSource); - } + if (match && (match.mermaidSource || match.mermaid_source || match.graph || match.views?.length)) { + const canvas = document.createElement("div"); + canvas.className = "architecture-diagram-canvas"; + body.append(canvas); + await renderArchitectureDiagram(canvas, match); body.append(renderDiagramPrice(match)); } else { body.textContent = t("No architecture diagram"); diff --git a/src/iac_code/web/static/js/components/workspace.js b/src/iac_code/web/static/js/components/workspace.js index 22c2f11a..d6565701 100644 --- a/src/iac_code/web/static/js/components/workspace.js +++ b/src/iac_code/web/static/js/components/workspace.js @@ -4250,10 +4250,12 @@ function createOtherPanel(api, context) { const themeGrid = makeElement("div", { className: "workspace-theme-grid" }); const themeSwatches = new Map(); const setActiveTheme = (slug) => { + const changed = document.documentElement.dataset.theme !== slug; document.documentElement.dataset.theme = slug; for (const [key, el] of themeSwatches) { el.classList.toggle("is-active", key === slug); } + if (changed) window.dispatchEvent(new CustomEvent("iac-code:theme-changed")); }; for (const option of THEME_OPTIONS) { const swatch = makeElement("button", { @@ -4285,6 +4287,55 @@ function createOtherPanel(api, context) { location.reload(); }); + const architectureRendererSelect = makeSelect("workspace-architecture-renderer-select"); + for (const [value, label] of [["eraser", "Eraser"], ["mermaid", "Mermaid"]]) { + const option = makeElement("option"); + option.value = value; + option.textContent = label; + architectureRendererSelect.append(option); + } + const architectureRendererField = makeField( + t("Architecture diagram renderer"), + architectureRendererSelect, + t("Choose how architecture diagrams are displayed; the change takes effect after saving."), + ); + const architecturePreviewButton = makeButton(t("Open template preview"), "workspace-open-diagram-preview"); + const architecturePreviewRow = makeElement("div", { className: "workspace-action-row" }); + architecturePreviewRow.append(architecturePreviewButton); + architecturePreviewButton.addEventListener("click", () => { + window.open("/diagram-preview", "_blank", "noopener,noreferrer"); + }); + const effectiveArchitectureRenderer = () => + document.body?.dataset.architectureDiagramRenderer === "mermaid" ? "mermaid" : "eraser"; + const applyArchitectureRenderer = (renderer) => { + const normalized = renderer === "mermaid" ? "mermaid" : "eraser"; + const changed = effectiveArchitectureRenderer() !== normalized; + document.body.dataset.architectureDiagramRenderer = normalized; + architectureRendererSelect.value = normalized; + if (changed) window.dispatchEvent(new CustomEvent("iac-code:architecture-renderer-changed")); + }; + + architectureRendererSelect.value = effectiveArchitectureRenderer(); + architectureRendererSelect.addEventListener("change", async () => { + const previous = effectiveArchitectureRenderer(); + const requested = architectureRendererSelect.value; + const token = ++requestToken; + architectureRendererSelect.disabled = true; + stamp(t("Saving…")); + try { + const saved = await api.saveArchitectureDiagramRenderer(requested); + applyArchitectureRenderer(saved?.renderer); + if (token === requestToken) stampSaved(token); + } catch (error) { + architectureRendererSelect.value = previous; + if (token === requestToken) { + stamp(t("Save failed: {error}", { error: error instanceof Error ? error.message : String(error) }), true); + } + } finally { + architectureRendererSelect.disabled = false; + } + }); + let requestToken = 0; async function persist() { @@ -4521,8 +4572,8 @@ function createOtherPanel(api, context) { } devModeToggle.input.addEventListener("change", persistDeveloperMode); - // 章节顺序:新会话默认 → 配色方案(含界面语言)→ 售卖流水线 → 外来会话可见性 → 帮助改进 iac-code → 开发者模式。 - // 界面语言(languageField)紧随配色方案,既保持外观类设置成组,也让所有分区标题的相邻关系 + // 章节顺序:新会话默认 → 配色方案(含界面语言与架构图方案)→ 售卖流水线 → 外来会话可见性 → 帮助改进 iac-code → 开发者模式。 + // 界面语言与架构图方案紧随配色方案,既保持外观类设置成组,也让所有分区标题的相邻关系 // (h3→head、settings-group→head、field→head)仍被现有章节间距选择器覆盖,无需改 CSS。 panel.append( heading, @@ -4531,6 +4582,8 @@ function createOtherPanel(api, context) { themeGroupHead, themeGrid, languageField, + architectureRendererField, + architecturePreviewRow, reviewStepGroupHead, reviewStepCard, groupHead, @@ -4585,6 +4638,12 @@ function createOtherPanel(api, context) { } catch (error) { /* 主题加载失败保持首屏注入值,不覆盖 */ } + try { + const architectureRenderer = await api.getArchitectureDiagramRenderer(); + if (token === requestToken) applyArchitectureRenderer(architectureRenderer?.renderer); + } catch (error) { + /* 架构图显示方案加载失败时保留首屏服务端注入值。 */ + } try { const uiLang = await api.getUiLanguage(); if (token === requestToken) { @@ -4641,6 +4700,8 @@ function createOtherPanel(api, context) { prereqRepairRequired = false; setPrereqInstalling(false); permissionSelect.value = "default"; + architectureRendererSelect.disabled = false; + architectureRendererSelect.value = effectiveArchitectureRenderer(); modeSelection = { mode: "normal", pipelineName: fallbackPipelineName }; modeMenuOpen = false; pipelineSubmenuOpen = false; diff --git a/src/iac_code/web/static/js/diagram_preview.js b/src/iac_code/web/static/js/diagram_preview.js new file mode 100644 index 00000000..208d06cb --- /dev/null +++ b/src/iac_code/web/static/js/diagram_preview.js @@ -0,0 +1,213 @@ +import { renderArchitectureDiagram } from "./architecture_diagram.js?v=eraser-browser-v14"; +import { + indexTemplateFiles, + shuffledOtherTemplatePaths, +} from "./diagram_preview_library.js?v=template-library-v1"; +import { applyDomI18n, t } from "./i18n.js?v=web-repl-ui-277"; +import { tokenFetch } from "./token_transport.js?v=token-transport-v4"; + +const MAX_TEMPLATE_BYTES = 2 * 1024 * 1024; +const CORPUS_URL = "/static/diagram-preview-corpus.json?v=visual-corpus-v1"; +const input = document.querySelector('[data-diagram-preview="input"]'); +const repositoryInput = document.querySelector('[data-diagram-preview="repository-input"]'); +const repositoryStatus = document.querySelector('[data-diagram-preview="repository-status"]'); +const corpusSelect = document.querySelector('[data-diagram-preview="corpus-select"]'); +const randomButton = document.querySelector('[data-diagram-preview="random"]'); +const dropzone = document.querySelector('[data-diagram-preview="dropzone"]'); +const status = document.querySelector('[data-diagram-preview="status"]'); +const result = document.querySelector('[data-diagram-preview="result"]'); +const filename = document.querySelector('[data-diagram-preview="filename"]'); +const summary = document.querySelector('[data-diagram-preview="summary"]'); +const renderer = document.querySelector('[data-diagram-preview="renderer"]'); +const canvas = document.querySelector('[data-diagram-preview="canvas"]'); +const renderTarget = document.querySelector('[data-diagram-preview="render"]'); +let intrinsicWidth = 0; +let corpusPaths = []; +let templateIndex = new Map(); +let randomQueue = []; +let pendingCorpusPath = ""; + +applyDomI18n(document); + +function rendererLabel() { + const value = document.body.dataset.architectureDiagramRenderer === "mermaid" ? "Mermaid" : "Eraser"; + return t("Renderer: {renderer}", { renderer: value }); +} + +function syncRendererLabel() { + renderer.textContent = rendererLabel(); +} + +function syncRenderWidth() { + if (!intrinsicWidth || result.hidden) return; + const available = Math.max(0, canvas.clientWidth - 2); + renderTarget.style.width = `${Math.max(available, intrinsicWidth + 48)}px`; +} + +function setStatus(message, { error = false } = {}) { + status.textContent = message; + status.classList.toggle("is-error", error); +} + +function setRepositoryStatus(message, { error = false } = {}) { + repositoryStatus.textContent = message; + repositoryStatus.classList.toggle("is-error", error); +} + +function populateCorpusSelect() { + const placeholder = document.createElement("option"); + placeholder.value = ""; + placeholder.textContent = t("Select a template"); + placeholder.selected = true; + corpusSelect.replaceChildren(placeholder); + const hasRepository = templateIndex.size > 0; + let available = 0; + corpusPaths.forEach((path, index) => { + const option = document.createElement("option"); + option.value = path; + option.textContent = `${String(index + 1).padStart(2, "0")} · ${path}`; + option.disabled = hasRepository && !templateIndex.has(path); + if (hasRepository && !option.disabled) available += 1; + corpusSelect.append(option); + }); + corpusSelect.disabled = !corpusPaths.length; + randomButton.disabled = !shuffledOtherTemplatePaths(templateIndex, corpusPaths, () => 0).length; + return available; +} + +async function loadCorpus() { + try { + const response = await fetch(CORPUS_URL, { cache: "no-store", headers: { Accept: "application/json" } }); + if (!response.ok) throw new Error("corpus request failed"); + const payload = await response.json(); + corpusPaths = Array.isArray(payload?.templates) ? payload.templates.filter((path) => typeof path === "string") : []; + if (!corpusPaths.length) throw new Error("corpus is empty"); + populateCorpusSelect(); + } catch { + corpusPaths = []; + corpusSelect.disabled = true; + setRepositoryStatus(t("The fixed template corpus could not be loaded."), { error: true }); + } +} + +async function loadRepository(files) { + templateIndex = indexTemplateFiles(files); + randomQueue = []; + if (!templateIndex.size) { + populateCorpusSelect(); + setRepositoryStatus(t("No supported ROS templates were found in that folder."), { error: true }); + return; + } + await corpusPromise; + const available = populateCorpusSelect(); + const templateCount = templateIndex.size; + const summaryParams = { count: templateCount, available }; + setRepositoryStatus( + templateCount === 1 + ? t("{count} template loaded; {available} of 30 corpus templates available.", summaryParams) + : t("{count} templates loaded; {available} of 30 corpus templates available.", summaryParams), + ); + if (pendingCorpusPath && templateIndex.has(pendingCorpusPath)) { + const path = pendingCorpusPath; + pendingCorpusPath = ""; + corpusSelect.value = path; + previewFile(templateIndex.get(path), path); + } else { + pendingCorpusPath = ""; + } +} + +async function responsePayload(response) { + const contentType = response.headers.get("content-type") || ""; + if (contentType.includes("application/json")) return response.json(); + return { error: { message: t("The template could not be rendered.") } }; +} + +async function previewFile(file, displayName = file?.name) { + if (!file) return; + if (file.size > MAX_TEMPLATE_BYTES) { + setStatus(t("The template must be 2 MB or smaller."), { error: true }); + return; + } + setStatus(t("Rendering {filename}…", { filename: displayName })); + try { + const content = await file.text(); + const response = await tokenFetch("/api/diagram-preview", { + method: "POST", + cache: "no-store", + headers: { Accept: "application/json", "Content-Type": "application/json" }, + body: JSON.stringify({ filename: file.name, content }), + }); + const payload = await responsePayload(response); + if (!response.ok) throw new Error(payload?.error?.message || t("The template could not be rendered.")); + filename.textContent = displayName || payload.filename || file.name; + const viewCount = payload.views?.length || 1; + summary.textContent = viewCount === 1 + ? t("{count} architecture view", { count: viewCount }) + : t("{count} architecture views", { count: viewCount }); + syncRendererLabel(); + result.hidden = false; + intrinsicWidth = 0; + renderTarget.style.width = ""; + await renderArchitectureDiagram(renderTarget, payload, { + maxHeight: 2400, + onSize(size) { + intrinsicWidth = Math.max(0, Number(size?.width) || 0); + syncRenderWidth(); + }, + }); + setStatus(t("Rendered {filename}", { filename: displayName || payload.filename || file.name })); + result.scrollIntoView({ behavior: "smooth", block: "start" }); + } catch (error) { + setStatus(error instanceof Error ? error.message : t("The template could not be rendered."), { error: true }); + } finally { + input.value = ""; + } +} + +const corpusPromise = loadCorpus(); +input.addEventListener("change", () => previewFile(input.files?.[0])); +repositoryInput.addEventListener("change", () => loadRepository(repositoryInput.files)); +corpusSelect.addEventListener("change", () => { + const path = corpusSelect.value; + if (!path) return; + const file = templateIndex.get(path); + if (file) { + previewFile(file, path); + return; + } + pendingCorpusPath = path; + setRepositoryStatus(t("Select ros-templates folder")); + repositoryInput.click(); +}); +randomButton.addEventListener("click", () => { + if (!randomQueue.length) randomQueue = shuffledOtherTemplatePaths(templateIndex, corpusPaths); + const path = randomQueue.shift(); + if (!path) { + setRepositoryStatus(t("No templates remain outside the fixed corpus."), { error: true }); + return; + } + corpusSelect.value = ""; + previewFile(templateIndex.get(path), path); +}); +dropzone.addEventListener("keydown", (event) => { + if (event.key !== "Enter" && event.key !== " ") return; + event.preventDefault(); + input.click(); +}); +dropzone.addEventListener("dragover", (event) => { + event.preventDefault(); + event.dataTransfer.dropEffect = "copy"; + dropzone.classList.add("is-dragging"); +}); +dropzone.addEventListener("dragleave", () => dropzone.classList.remove("is-dragging")); +dropzone.addEventListener("drop", (event) => { + event.preventDefault(); + dropzone.classList.remove("is-dragging"); + previewFile(event.dataTransfer.files?.[0]); +}); +window.addEventListener("dragover", (event) => event.preventDefault()); +window.addEventListener("drop", (event) => event.preventDefault()); +window.addEventListener("focus", syncRendererLabel); +new ResizeObserver(syncRenderWidth).observe(canvas); +syncRendererLabel(); diff --git a/src/iac_code/web/static/js/diagram_preview_library.js b/src/iac_code/web/static/js/diagram_preview_library.js new file mode 100644 index 00000000..de43f8fd --- /dev/null +++ b/src/iac_code/web/static/js/diagram_preview_library.js @@ -0,0 +1,33 @@ +const TEMPLATE_EXTENSION = /\.(?:ya?ml|json)$/i; + +export function repositoryRelativePath(file) { + const rawPath = String(file?.webkitRelativePath || file?.name || "").replaceAll("\\", "/"); + const parts = rawPath.split("/").filter((part) => part && part !== "."); + if (!parts.length || parts.includes("..")) return ""; + return parts.length > 1 ? parts.slice(1).join("/") : parts[0]; +} + +export function indexTemplateFiles(files) { + const templates = new Map(); + for (const file of Array.from(files || [])) { + const path = repositoryRelativePath(file); + if (!path || !TEMPLATE_EXTENSION.test(path) || path.split("/").some((part) => part.startsWith("."))) { + continue; + } + templates.set(path, file); + } + return templates; +} + +export function shuffledOtherTemplatePaths(templateIndex, corpusPaths, random = Math.random) { + const corpus = new Set(corpusPaths || []); + const paths = Array.from(templateIndex?.keys?.() || []) + .filter((path) => !corpus.has(path)) + .sort((left, right) => left.localeCompare(right)); + for (let index = paths.length - 1; index > 0; index -= 1) { + const sample = Number(random()); + const swapIndex = Math.min(index, Math.max(0, Math.floor((Number.isFinite(sample) ? sample : 0) * (index + 1)))); + [paths[index], paths[swapIndex]] = [paths[swapIndex], paths[index]]; + } + return paths; +} diff --git a/src/iac_code/web/static/js/eraser_frame.js b/src/iac_code/web/static/js/eraser_frame.js new file mode 100644 index 00000000..a31f68d0 --- /dev/null +++ b/src/iac_code/web/static/js/eraser_frame.js @@ -0,0 +1,195 @@ +(function () { + "use strict"; + let requestId = ""; + let activeWorker = null; + let rendererPromise = null; + let port = null; + + const glyph = (body) => + `${body}`; + const icons = Object.freeze({ + network: glyph(''), + compute: glyph(''), + database: glyph(''), + storage: glyph(''), + governance: glyph(''), + generic: glyph(''), + }); + + function loadRenderer() { + if (rendererPromise) return rendererPromise; + if (!window.createIacEraserRenderer) return Promise.reject(new Error("Eraser renderer failed to load")); + rendererPromise = window.createIacEraserRenderer(icons); + return rendererPromise; + } + + function category(item) { + const value = `${item.resourceType} ${item.product} ${item.role}`.toLowerCase(); + if (/vpc|vswitch|network|cen|loadbalancer|alb|slb|eip|gateway|dns/.test(value)) return ["network", "blue"]; + if (/ecs|compute|server|function|ack|container|kubernetes/.test(value)) return ["compute", "orange"]; + if (/rds|database|polardb|redis|cache|mongodb|kafka/.test(value)) return ["database", "purple"]; + if (/oss|storage|nas|disk|bucket/.test(value)) return ["storage", "green"]; + if (/ram|log|sls|monitor|audit|governance|security/.test(value)) return ["governance", "gray"]; + return ["generic", "gray"]; + } + + function eraserInput(layout, theme) { + const dark = theme !== "ivory"; + const containerById = new Map( + layout.items.filter((item) => item.kind === "container").map((item) => [item.id, item]), + ); + const containerDepth = (item) => { + let depth = 0; + let current = item; + while (current.parentId && containerById.has(current.parentId)) { + depth += 1; + current = containerById.get(current.parentId); + } + return depth; + }; + const containers = layout.items + .filter((item) => item.kind === "container") + .sort((a, b) => containerDepth(a) - containerDepth(b) || a.id.localeCompare(b.id)) + .map((item) => ({ + tag: "Group", + id: item.id, + x: item.x, + y: item.y, + width: item.width, + height: item.height, + ...(item.parentId ? { containerId: item.parentId } : {}), + title: { text: item.label, width: "full" }, + color: dark ? "gray" : "blue", + styleMode: "plain", + borderStyle: item.parentId ? "dashed" : "solid", + })); + const nodes = layout.items + .filter((item) => item.kind === "node") + .map((item) => { + const [icon, color] = category(item); + return { + tag: "Shape", + id: item.id, + x: item.x, + y: item.y, + width: item.width, + height: item.height, + ...(item.parentId ? { containerId: item.parentId } : {}), + icon, + color, + texts: [{ text: item.label }], + styleMode: "shadow", + cornerRadius: "round", + }; + }); + const connections = layout.edges.map((edge) => { + const [originX, originY] = edge.points[0]; + return { + id: edge.id, + from: edge.from, + to: edge.to, + label: edge.label, + x: originX, + y: originY, + points: edge.points.map(([x, y]) => ({ x: x - originX, y: y - originY })), + fromPort: edge.fromPort, + toPort: edge.toPort, + ...(edge.labelPlacement + ? { + labelPlacement: { + x: edge.labelPlacement.x - originX, + y: edge.labelPlacement.y - originY, + width: edge.labelPlacement.width, + height: edge.labelPlacement.height, + }, + } + : {}), + connectorStyle: "straight", + cornerStyle: "elbow", + lineStyle: edge.style === "solid_arrow" ? "solid" : "dashed", + endArrowhead: edge.style === "dotted_open" ? "arrow" : "triangle", + color: dark ? "#aab6c8" : "#536a88", + }; + }); + return { entities: [...containers, ...nodes], connections }; + } + + function runWorker(workerSource, graph, timeoutMs) { + activeWorker?.terminate(); + const url = URL.createObjectURL(new Blob([workerSource], { type: "text/javascript" })); + const worker = new Worker(url); + URL.revokeObjectURL(url); + activeWorker = worker; + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + worker.terminate(); + if (activeWorker === worker) activeWorker = null; + reject(new Error("Eraser layout timed out")); + }, timeoutMs); + worker.onmessage = (event) => { + if (event.data?.requestId !== requestId) return; + clearTimeout(timer); + worker.terminate(); + if (activeWorker === worker) activeWorker = null; + if (event.data.ok) resolve(event.data.layout); + else reject(new Error(event.data.error || "Eraser layout failed")); + }; + worker.onerror = () => { + clearTimeout(timer); + worker.terminate(); + if (activeWorker === worker) activeWorker = null; + reject(new Error("Eraser layout worker failed")); + }; + worker.postMessage({ requestId, graph }); + }); + } + + function applyThemeStyles(theme) { + let style = document.getElementById("iac-eraser-theme"); + if (!style) { + style = document.createElement("style"); + style.id = "iac-eraser-theme"; + document.head.append(style); + } + const dark = theme !== "ivory"; + style.textContent = ` + #eraser-scene .er-rel__label { + color: ${dark ? "#e4eaf2" : "#34445b"} !important; + background: ${dark ? "#242424" : "#ffffff"} !important; + border-radius: 3px; + } + `; + } + + async function render(payload) { + document.documentElement.dataset.colorScheme = payload.theme === "ivory" ? "light" : "dark"; + const layout = payload.cachedLayout || await runWorker(payload.workerSource, payload.graph, payload.timeoutMs || 2500); + const renderer = await loadRenderer(); + await renderer(eraserInput(layout, payload.theme)); + applyThemeStyles(payload.theme); + const scene = document.getElementById("eraser-scene"); + if (!scene) throw new Error("Eraser scene was not created"); + const bounds = scene.getBoundingClientRect(); + const width = Math.max( + 360, + Math.ceil(Math.max(Number(layout.width) || 0, scene.scrollWidth || 0, bounds.width) + 20), + ); + const height = Math.max(240, Math.min(720, Math.ceil(bounds.height + 20))); + port.postMessage({ type: "rendered", requestId, width, height, layoutVersion: layout.layoutVersion, layout }); + } + + window.startIacEraserFrame = (payload, nextPort, nextRequestId) => { + if (!nextPort || port) return; + requestId = nextRequestId; + port = nextPort; + port.onmessage = (portEvent) => { + if (portEvent.data?.type === "cancel") { + activeWorker?.terminate(); + activeWorker = null; + } + }; + render(payload).catch((error) => { + port.postMessage({ type: "failed", requestId, error: error instanceof Error ? error.message : String(error) }); + }); + }; +})(); diff --git a/src/iac_code/web/static/js/eraser_layout_worker.js b/src/iac_code/web/static/js/eraser_layout_worker.js new file mode 100644 index 00000000..b42c14ee --- /dev/null +++ b/src/iac_code/web/static/js/eraser_layout_worker.js @@ -0,0 +1,711 @@ +/* Deterministic, terminating DiagramGraph v1 layout. This file stays import-free so the + * sandboxed frame can start it from a Blob and terminate it on timeout or cancellation. */ +const LIMITS = Object.freeze({ nodes: 80, containers: 24, edges: 160, labelChars: 120 }); +const GEOMETRY = Object.freeze({ + nodeWidth: 190, + nodeMaxWidth: 340, + nodeHeight: 88, + columnGap: 48, + rowGap: 32, + paddingX: 20, + paddingBottom: 24, + titleHeight: 54, + rootPadding: 16, +}); + +function assertGraph(value) { + if (!value || typeof value !== "object" || Array.isArray(value) || value.version !== 1) { + throw new Error("Unsupported architecture graph"); + } + const nodes = Array.isArray(value.nodes) ? value.nodes : []; + const containers = Array.isArray(value.containers) ? value.containers : []; + const edges = Array.isArray(value.edges) ? value.edges : []; + if (nodes.length > LIMITS.nodes || containers.length > LIMITS.containers || edges.length > LIMITS.edges) { + throw new Error("Architecture graph is too large"); + } + const items = []; + const ids = new Set(); + for (const [kind, list] of [["node", nodes], ["container", containers]]) { + for (const raw of list) { + if (!raw || typeof raw !== "object" || Array.isArray(raw)) throw new Error("Invalid architecture item"); + const id = String(raw.id || "").trim(); + const label = String(raw.label || id).trim().slice(0, LIMITS.labelChars); + const parentId = raw.parentId == null ? null : String(raw.parentId).trim(); + if (!id || ids.has(id) || !label) throw new Error("Invalid or duplicate architecture id"); + ids.add(id); + items.push({ + id, + label, + parentId: parentId || null, + kind, + resourceType: String(raw.resourceType || "").slice(0, LIMITS.labelChars), + product: String(raw.product || "").slice(0, LIMITS.labelChars), + role: String(raw.role || "").slice(0, LIMITS.labelChars), + }); + } + } + + // Planning graphs emitted before nested containers were supported kept a VSwitch as both a + // node inside the VPC and a root-level `group_vswitch` container. Repair that precise legacy + // shape at render time so saved sessions gain the corrected hierarchy without regeneration. + const legacyAnchors = new Map(); + const initialContainers = new Map( + items.filter((item) => item.kind === "container").map((item) => [item.id, item]), + ); + for (const item of items) { + if (item.kind !== "node" || !item.parentId) continue; + const container = initialContainers.get(`group_${item.id}`); + if (!container || container.parentId || container.id === item.parentId) continue; + container.parentId = item.parentId; + container.label = item.label; + legacyAnchors.set(item.id, container.id); + } + if (legacyAnchors.size) { + for (let index = items.length - 1; index >= 0; index -= 1) { + if (legacyAnchors.has(items[index].id)) items.splice(index, 1); + } + } + + ids.clear(); + for (const item of items) ids.add(item.id); + const containersById = new Map(items.filter((item) => item.kind === "container").map((item) => [item.id, item])); + for (const item of items) { + if (item.parentId && !containersById.has(item.parentId)) throw new Error("Unknown architecture parent"); + } + for (const container of containersById.values()) { + const seen = new Set([container.id]); + let current = container; + while (current.parentId) { + if (seen.has(current.parentId)) throw new Error("Cyclic architecture containment"); + seen.add(current.parentId); + current = containersById.get(current.parentId); + } + } + const itemsById = new Map(items.map((item) => [item.id, item])); + function isDescendant(itemId, containerId) { + let current = itemsById.get(itemId); + const seen = new Set(); + while (current?.parentId && !seen.has(current.parentId)) { + if (current.parentId === containerId) return true; + seen.add(current.parentId); + current = containersById.get(current.parentId); + } + return false; + } + const normalizedEdges = []; + const seenEdges = new Set(); + for (let index = 0; index < edges.length; index += 1) { + const raw = edges[index]; + if (!raw || typeof raw !== "object" || Array.isArray(raw)) throw new Error("Invalid architecture edge"); + const rawFrom = String(raw.from || "").trim(); + const rawTo = String(raw.to || "").trim(); + const from = legacyAnchors.get(rawFrom) || rawFrom; + const to = legacyAnchors.get(rawTo) || rawTo; + if (!ids.has(from) || !ids.has(to)) throw new Error("Invalid architecture edge endpoint"); + const rewritten = from !== rawFrom || to !== rawTo; + if (from === to) { + if (rewritten) continue; + throw new Error("Invalid architecture edge endpoint"); + } + if (rewritten && (isDescendant(to, from) || isDescendant(from, to))) continue; + const label = String(raw.label || "").trim().slice(0, LIMITS.labelChars); + const style = ["solid_arrow", "dotted_arrow", "dotted_open"].includes(raw.style) + ? raw.style + : "solid_arrow"; + const key = `${from}\u0000${to}\u0000${label}\u0000${style}`; + if (seenEdges.has(key)) continue; + seenEdges.add(key); + normalizedEdges.push({ id: String(raw.id || `edge_${index + 1}`), from, to, label, style }); + } + if (!items.length) throw new Error("Architecture graph is empty"); + items.sort((left, right) => left.id.localeCompare(right.id)); + normalizedEdges.sort( + (left, right) => + left.from.localeCompare(right.from) || + left.to.localeCompare(right.to) || + left.label.localeCompare(right.label) || + left.style.localeCompare(right.style) || + left.id.localeCompare(right.id), + ); + return { items, edges: normalizedEdges }; +} + +function stronglyConnected(ids, adjacency) { + let cursor = 0; + const indices = new Map(); + const lows = new Map(); + const stack = []; + const active = new Set(); + const components = []; + function visit(id) { + indices.set(id, cursor); + lows.set(id, cursor); + cursor += 1; + stack.push(id); + active.add(id); + for (const target of [...(adjacency.get(id) || [])].sort()) { + if (!indices.has(target)) { + visit(target); + lows.set(id, Math.min(lows.get(id), lows.get(target))); + } else if (active.has(target)) { + lows.set(id, Math.min(lows.get(id), indices.get(target))); + } + } + if (lows.get(id) !== indices.get(id)) return; + const component = []; + while (stack.length) { + const member = stack.pop(); + active.delete(member); + component.push(member); + if (member === id) break; + } + components.push(component.sort()); + } + for (const id of [...ids].sort()) if (!indices.has(id)) visit(id); + return components; +} + +function rankedChildren(childIds, projectedEdges) { + const adjacency = new Map(childIds.map((id) => [id, new Set()])); + for (const edge of projectedEdges) adjacency.get(edge.from)?.add(edge.to); + const components = stronglyConnected(childIds, adjacency); + const componentById = new Map(); + components.forEach((component, index) => component.forEach((id) => componentById.set(id, index))); + const dag = new Map(components.map((_component, index) => [index, new Set()])); + const indegree = new Map(components.map((_component, index) => [index, 0])); + for (const edge of projectedEdges) { + const from = componentById.get(edge.from); + const to = componentById.get(edge.to); + if (from === to || dag.get(from).has(to)) continue; + dag.get(from).add(to); + indegree.set(to, indegree.get(to) + 1); + } + const rank = new Map(components.map((_component, index) => [index, 0])); + const queue = [...indegree.entries()].filter(([, value]) => value === 0).map(([id]) => id).sort((a, b) => a - b); + while (queue.length) { + const current = queue.shift(); + for (const target of [...dag.get(current)].sort((a, b) => a - b)) { + rank.set(target, Math.max(rank.get(target), rank.get(current) + 1)); + indegree.set(target, indegree.get(target) - 1); + if (indegree.get(target) === 0) queue.push(target); + } + queue.sort((a, b) => a - b); + } + return new Map(childIds.map((id) => [id, rank.get(componentById.get(id)) || 0])); +} + +function estimatedTextWidth(value) { + return [...String(value || "")].reduce((total, character) => { + if (/\s/.test(character)) return total + 4; + return total + (character.charCodeAt(0) > 127 ? 14 : 8); + }, 0); +} + +function nodeDimensions(label) { + const sourceLines = String(label || "").split("\n"); + const widestLine = Math.max(...sourceLines.map(estimatedTextWidth), 0); + const width = Math.max(GEOMETRY.nodeWidth, Math.min(GEOMETRY.nodeMaxWidth, Math.ceil(widestLine + 58))); + const contentWidth = Math.max(80, width - 58); + const wrappedLines = sourceLines.reduce( + (total, line) => total + Math.max(1, Math.ceil(estimatedTextWidth(line) / contentWidth)), + 0, + ); + const listLines = sourceLines.filter((line) => /^\s*[+*-]\s+/.test(line)).length; + const markdownClearance = listLines * 8 + (sourceLines.length > 1 ? 12 : 0); + return { + width, + height: Math.max(GEOMETRY.nodeHeight, Math.min(240, 52 + wrappedLines * 18 + markdownClearance)), + }; +} + +function packedGrid(rawBoxes, gap, targetAspect) { + const boxes = [...rawBoxes].sort((left, right) => left.item.id.localeCompare(right.item.id)); + if (!boxes.length) return { placements: [], width: 0, height: 0 }; + let best = null; + for (let columnCount = 1; columnCount <= boxes.length; columnCount += 1) { + const rowCount = Math.ceil(boxes.length / columnCount); + const columnWidths = Array(columnCount).fill(0); + const rowHeights = Array(rowCount).fill(0); + boxes.forEach((box, index) => { + const column = index % columnCount; + const row = Math.floor(index / columnCount); + columnWidths[column] = Math.max(columnWidths[column], box.width); + rowHeights[row] = Math.max(rowHeights[row], box.height); + }); + const width = columnWidths.reduce((total, value) => total + value, 0) + gap * (columnCount - 1); + const height = rowHeights.reduce((total, value) => total + value, 0) + gap * (rowCount - 1); + const unusedSlots = columnCount * rowCount - boxes.length; + const score = Math.abs(Math.log(Math.max(0.01, width / Math.max(1, height)) / targetAspect)) + + unusedSlots * 0.035; + if ( + best && + (score > best.score + 1e-9 || + (Math.abs(score - best.score) <= 1e-9 && width * height >= best.width * best.height)) + ) continue; + const columnX = []; + const rowY = []; + let cursor = 0; + for (const value of columnWidths) { + columnX.push(cursor); + cursor += value + gap; + } + cursor = 0; + for (const value of rowHeights) { + rowY.push(cursor); + cursor += value + gap; + } + const placements = boxes.map((box, index) => { + const column = index % columnCount; + const row = Math.floor(index / columnCount); + return { + ...box, + x: columnX[column] + Math.round((columnWidths[column] - box.width) / 2), + y: rowY[row] + Math.round((rowHeights[row] - box.height) / 2), + }; + }); + best = { score, placements, width, height }; + } + return best; +} + +function compactRoute(points) { + const compact = []; + for (const point of points) { + const previous = compact[compact.length - 1]; + if (previous && point[0] === previous[0] && point[1] === previous[1]) continue; + compact.push(point); + } + for (let index = compact.length - 2; index > 0; index -= 1) { + const before = compact[index - 1]; + const current = compact[index]; + const after = compact[index + 1]; + if ((before[0] === current[0] && current[0] === after[0]) || (before[1] === current[1] && current[1] === after[1])) { + compact.splice(index, 1); + } + } + return compact; +} + +function rectPort(rect, side) { + if (side === "left") return [rect.x, rect.y + rect.height / 2]; + if (side === "right") return [rect.x + rect.width, rect.y + rect.height / 2]; + if (side === "top") return [rect.x + rect.width / 2, rect.y]; + return [rect.x + rect.width / 2, rect.y + rect.height]; +} + +function portExit(point, side, clearance = 10) { + if (side === "left") return [point[0] - clearance, point[1]]; + if (side === "right") return [point[0] + clearance, point[1]]; + if (side === "top") return [point[0], point[1] - clearance]; + return [point[0], point[1] + clearance]; +} + +function segmentIntersectsRect(start, end, rect, margin = 4) { + const left = rect.x + margin; + const right = rect.x + rect.width - margin; + const top = rect.y + margin; + const bottom = rect.y + rect.height - margin; + if (start[0] === end[0]) { + return left < start[0] && start[0] < right && Math.max(start[1], end[1]) > top && Math.min(start[1], end[1]) < bottom; + } + if (start[1] === end[1]) { + return top < start[1] && start[1] < bottom && Math.max(start[0], end[0]) > left && Math.min(start[0], end[0]) < right; + } + return true; +} + +function routeObstacleCount(points, obstacles) { + let count = 0; + for (const obstacle of obstacles) { + if (points.slice(1).some((point, index) => segmentIntersectsRect(points[index], point, obstacle))) count += 1; + } + return count; +} + +function routeLength(points) { + return points.slice(1).reduce( + (total, point, index) => total + Math.abs(point[0] - points[index][0]) + Math.abs(point[1] - points[index][1]), + 0, + ); +} + +function obstacleAvoidingRoute(from, to, obstacles, root, preferred) { + const candidates = [{ ...preferred, points: compactRoute(preferred.points), preference: 0 }]; + const add = (fromPort, toPort, points, preference) => { + candidates.push({ fromPort, toPort, points: compactRoute(points), preference }); + }; + const fromCenter = [from.x + from.width / 2, from.y + from.height / 2]; + const toCenter = [to.x + to.width / 2, to.y + to.height / 2]; + const horizontalForward = toCenter[0] >= fromCenter[0]; + const horizontalFrom = horizontalForward ? "right" : "left"; + const horizontalTo = horizontalForward ? "left" : "right"; + const horizontalStart = rectPort(from, horizontalFrom); + const horizontalEnd = rectPort(to, horizontalTo); + const horizontalExit = portExit(horizontalStart, horizontalFrom); + const horizontalEntry = portExit(horizontalEnd, horizontalTo); + const horizontalMiddle = Math.round((horizontalExit[0] + horizontalEntry[0]) / 2); + add( + horizontalFrom, + horizontalTo, + [horizontalStart, horizontalExit, [horizontalMiddle, horizontalExit[1]], [horizontalMiddle, horizontalEntry[1]], horizontalEntry, horizontalEnd], + 4, + ); + + const verticalLanes = new Set([8, root.height - 8]); + for (const obstacle of obstacles) { + verticalLanes.add(Math.max(8, obstacle.y - 10)); + verticalLanes.add(Math.min(root.height - 8, obstacle.y + obstacle.height + 10)); + } + for (const lane of [...verticalLanes].sort((left, right) => left - right)) { + add( + horizontalFrom, + horizontalTo, + [horizontalStart, horizontalExit, [horizontalExit[0], lane], [horizontalEntry[0], lane], horizontalEntry, horizontalEnd], + 12, + ); + } + + const verticalForward = toCenter[1] >= fromCenter[1]; + const verticalFrom = verticalForward ? "bottom" : "top"; + const verticalTo = verticalForward ? "top" : "bottom"; + const verticalStart = rectPort(from, verticalFrom); + const verticalEnd = rectPort(to, verticalTo); + const verticalExit = portExit(verticalStart, verticalFrom); + const verticalEntry = portExit(verticalEnd, verticalTo); + const verticalMiddle = Math.round((verticalExit[1] + verticalEntry[1]) / 2); + add( + verticalFrom, + verticalTo, + [verticalStart, verticalExit, [verticalExit[0], verticalMiddle], [verticalEntry[0], verticalMiddle], verticalEntry, verticalEnd], + 5, + ); + + const horizontalLanes = new Set([8, root.width - 8]); + for (const obstacle of obstacles) { + horizontalLanes.add(Math.max(8, obstacle.x - 10)); + horizontalLanes.add(Math.min(root.width - 8, obstacle.x + obstacle.width + 10)); + } + for (const lane of [...horizontalLanes].sort((left, right) => left - right)) { + add( + verticalFrom, + verticalTo, + [verticalStart, verticalExit, [lane, verticalExit[1]], [lane, verticalEntry[1]], verticalEntry, verticalEnd], + 13, + ); + } + + for (const side of ["left", "right"]) { + const start = rectPort(from, side); + const end = rectPort(to, side); + const lane = side === "left" + ? Math.max(6, Math.min(from.x, to.x, ...obstacles.map((item) => item.x)) - 10) + : Math.min( + root.width - 6, + Math.max(from.x + from.width, to.x + to.width, ...obstacles.map((item) => item.x + item.width)) + 10, + ); + add(side, side, [start, [lane, start[1]], [lane, end[1]], end], 18); + } + for (const side of ["top", "bottom"]) { + const start = rectPort(from, side); + const end = rectPort(to, side); + const lane = side === "top" + ? Math.max(6, Math.min(from.y, to.y, ...obstacles.map((item) => item.y)) - 10) + : Math.min( + root.height - 6, + Math.max(from.y + from.height, to.y + to.height, ...obstacles.map((item) => item.y + item.height)) + 10, + ); + add(side, side, [start, [start[0], lane], [end[0], lane], end], 19); + } + + candidates.sort((left, right) => { + const leftHits = routeObstacleCount(left.points, obstacles); + const rightHits = routeObstacleCount(right.points, obstacles); + if (leftHits !== rightHits) return leftHits - rightHits; + const leftCost = routeLength(left.points) + Math.max(0, left.points.length - 2) * 18 + left.preference; + const rightCost = routeLength(right.points) + Math.max(0, right.points.length - 2) * 18 + right.preference; + if (leftCost !== rightCost) return leftCost - rightCost; + return JSON.stringify(left.points).localeCompare(JSON.stringify(right.points)); + }); + return candidates[0]; +} + +function labelPlacementForPath(label, points, obstacles, root) { + if (!label) return null; + const width = Math.min(160, Math.max(40, estimatedTextWidth(label) + 12)); + const height = 22; + const segments = points.slice(1).map((point, index) => { + const start = points[index]; + return { + start, + end: point, + horizontal: start[1] === point[1], + length: Math.abs(point[0] - start[0]) + Math.abs(point[1] - start[1]), + }; + }); + segments.sort((left, right) => Number(right.horizontal) - Number(left.horizontal) || right.length - left.length); + for (const segment of segments) { + if (segment.length < width + 12) continue; + const x = segment.horizontal + ? Math.round((segment.start[0] + segment.end[0] - width) / 2) + : Math.round(segment.start[0] - width / 2); + const y = segment.horizontal + ? Math.round(segment.start[1] - height / 2) + : Math.round((segment.start[1] + segment.end[1] - height) / 2); + const placement = { x, y, width, height }; + if (x < 4 || y < 4 || x + width > root.width - 4 || y + height > root.height - 4) continue; + if (obstacles.some((obstacle) => + placement.x < obstacle.x + obstacle.width && + obstacle.x < placement.x + placement.width && + placement.y < obstacle.y + obstacle.height && + obstacle.y < placement.y + placement.height + )) continue; + return placement; + } + return null; +} + +function buildLayout(graph) { + const { items, edges } = assertGraph(graph); + const byId = new Map(items.map((item) => [item.id, item])); + const children = new Map([[null, []]]); + for (const item of items) { + if (!children.has(item.parentId)) children.set(item.parentId, []); + children.get(item.parentId).push(item); + } + for (const list of children.values()) list.sort((a, b) => a.id.localeCompare(b.id)); + + function branchAt(endpoint, parentId) { + let current = byId.get(endpoint); + if (!current || current.id === parentId) return null; + while (current.parentId !== parentId) { + if (!current.parentId) return parentId === null ? current.id : null; + current = byId.get(current.parentId); + if (!current) return null; + } + return current.id; + } + + function layoutScope(parentId) { + const direct = children.get(parentId) || []; + const boxes = new Map(); + for (const item of direct) { + if (item.kind === "container") { + const subtree = layoutScope(item.id); + boxes.set(item.id, { item, subtree, width: subtree.width, height: subtree.height }); + } else { + const dimensions = nodeDimensions(item.label); + boxes.set(item.id, { + item, + subtree: null, + ...dimensions, + }); + } + } + const primaryProjected = []; + const fallbackProjected = []; + for (const edge of edges) { + const from = branchAt(edge.from, parentId); + const to = branchAt(edge.to, parentId); + if (!from || !to || from === to || !boxes.has(from) || !boxes.has(to)) continue; + const projection = { from, to }; + fallbackProjected.push(projection); + if (edge.style === "solid_arrow") primaryProjected.push(projection); + } + // Traffic and explicit dependency edges remain the primary ordering signal. When a scope + // contains only inferred or management relationships, those edges still provide a better + // reading order than an arbitrary vertical stack. + const projected = primaryProjected.length ? primaryProjected : fallbackProjected; + const ranks = rankedChildren([...boxes.keys()], projected); + const rankGroups = new Map(); + for (const id of [...boxes.keys()].sort()) { + const rank = ranks.get(id) || 0; + if (!rankGroups.has(rank)) rankGroups.set(rank, []); + rankGroups.get(rank).push(boxes.get(id)); + } + const startX = parentId === null ? GEOMETRY.rootPadding : GEOMETRY.paddingX; + const startY = parentId === null ? GEOMETRY.rootPadding : GEOMETRY.titleHeight; + const placements = []; + const orderedRanks = [...rankGroups.keys()].sort((a, b) => a - b); + + if (parentId === null) { + const bands = orderedRanks.map((rank) => + packedGrid(rankGroups.get(rank), GEOMETRY.rowGap, orderedRanks.length > 1 ? 0.75 : 1.6), + ); + const contentHeight = Math.max(...bands.map((band) => band.height), 0); + let x = startX; + for (const band of bands) { + const y = startY + Math.round((contentHeight - band.height) / 2); + for (const placement of band.placements) { + placements.push({ ...placement, x: x + placement.x, y: y + placement.y }); + } + x += band.width + GEOMETRY.columnGap; + } + const usedWidth = placements.length ? x - GEOMETRY.columnGap : startX + GEOMETRY.nodeWidth; + return { + placements, + width: Math.max(360, usedWidth + GEOMETRY.rootPadding), + height: Math.max(180, startY + contentHeight + GEOMETRY.rootPadding), + }; + } + + // Inside a network boundary, advance dependency ranks from top to bottom. This keeps nested + // VPC/VSwitch structures compact while peers in the same rank still share a horizontal row. + const bands = orderedRanks.map((rank) => packedGrid(rankGroups.get(rank), GEOMETRY.rowGap, 1.6)); + const contentWidth = Math.max(...bands.map((band) => band.width), 0); + let y = startY; + for (const band of bands) { + const x = startX + Math.round((contentWidth - band.width) / 2); + for (const placement of band.placements) { + placements.push({ ...placement, x: x + placement.x, y: y + placement.y }); + } + y += band.height + GEOMETRY.rowGap; + } + const usedHeight = placements.length ? y - GEOMETRY.rowGap : startY + GEOMETRY.nodeHeight; + return { + placements, + width: Math.max(240, startX + contentWidth + GEOMETRY.paddingX), + height: Math.max(160, usedHeight + GEOMETRY.paddingBottom), + }; + } + + const rects = new Map(); + function flatten(scope, offsetX, offsetY) { + for (const placement of scope.placements) { + const x = offsetX + placement.x; + const y = offsetY + placement.y; + rects.set(placement.item.id, { x, y, width: placement.width, height: placement.height }); + if (placement.subtree) flatten(placement.subtree, x, y); + } + } + const root = layoutScope(null); + flatten(root, 0, 0); + + function scopes(itemId) { + const result = []; + let current = byId.get(itemId); + while (current) { + result.push(current.parentId); + current = current.parentId ? byId.get(current.parentId) : null; + } + return result; + } + + function route(edge) { + const from = rects.get(edge.from); + const to = rects.get(edge.to); + if (!from || !to) throw new Error("Missing routed endpoint"); + const fromCenter = [from.x + from.width / 2, from.y + from.height / 2]; + const toCenter = [to.x + to.width / 2, to.y + to.height / 2]; + let points; + let fromPort; + let toPort; + let labelCorridor = null; + + const targetScopes = new Set(scopes(edge.to)); + const commonScope = scopes(edge.from).find((scope) => targetScopes.has(scope)); + const fromBranch = commonScope === undefined ? null : branchAt(edge.from, commonScope); + const toBranch = commonScope === undefined ? null : branchAt(edge.to, commonScope); + const fromBranchRect = rects.get(fromBranch); + const toBranchRect = rects.get(toBranch); + const fromAbove = Boolean( + fromBranchRect && toBranchRect && fromBranchRect.y + fromBranchRect.height <= toBranchRect.y, + ); + const toAbove = Boolean( + fromBranchRect && toBranchRect && toBranchRect.y + toBranchRect.height <= fromBranchRect.y, + ); + + if (fromAbove && toBranch !== edge.to) { + const gapStart = fromBranchRect.y + fromBranchRect.height; + const gapEnd = toBranchRect.y; + const clearanceY = Math.round((gapStart + gapEnd) / 2); + const sideX = toBranchRect.x + toBranchRect.width + 10; + points = [ + [fromCenter[0], from.y + from.height], + [fromCenter[0], clearanceY], + [sideX, clearanceY], + [sideX, toCenter[1]], + [to.x + to.width, toCenter[1]], + ]; + fromPort = "bottom"; + toPort = "right"; + labelCorridor = { start: fromCenter[0], end: sideX, y: clearanceY, gapStart, gapEnd }; + } else if (toAbove && fromBranch !== edge.from) { + const gapStart = toBranchRect.y + toBranchRect.height; + const gapEnd = fromBranchRect.y; + const clearanceY = Math.round((gapStart + gapEnd) / 2); + const sideX = fromBranchRect.x + fromBranchRect.width + 10; + points = [ + [from.x + from.width, fromCenter[1]], + [sideX, fromCenter[1]], + [sideX, clearanceY], + [toCenter[0], clearanceY], + [toCenter[0], to.y + to.height], + ]; + fromPort = "right"; + toPort = "bottom"; + labelCorridor = { start: sideX, end: toCenter[0], y: clearanceY, gapStart, gapEnd }; + } else { + const horizontal = Math.abs(toCenter[0] - fromCenter[0]) >= Math.abs(toCenter[1] - fromCenter[1]); + if (horizontal) { + const forward = toCenter[0] >= fromCenter[0]; + const start = [forward ? from.x + from.width : from.x, fromCenter[1]]; + const end = [forward ? to.x : to.x + to.width, toCenter[1]]; + const middle = Math.round((start[0] + end[0]) / 2); + points = [start, [middle, start[1]], [middle, end[1]], end]; + fromPort = forward ? "right" : "left"; + toPort = forward ? "left" : "right"; + } else { + const forward = toCenter[1] >= fromCenter[1]; + const start = [fromCenter[0], forward ? from.y + from.height : from.y]; + const end = [toCenter[0], forward ? to.y : to.y + to.height]; + const middle = Math.round((start[1] + end[1]) / 2); + points = [start, [start[0], middle], [end[0], middle], end]; + fromPort = forward ? "bottom" : "top"; + toPort = forward ? "top" : "bottom"; + } + } + const obstacleRects = items + .filter((item) => item.kind === "node" && item.id !== edge.from && item.id !== edge.to) + .map((item) => rects.get(item.id)); + const routed = obstacleAvoidingRoute(from, to, obstacleRects, root, { points, fromPort, toPort }); + const allNodeRects = items.filter((item) => item.kind === "node").map((item) => rects.get(item.id)); + let labelPlacement = labelPlacementForPath(edge.label, routed.points, allNodeRects, root); + if (!labelPlacement && edge.label && labelCorridor && labelCorridor.gapEnd - labelCorridor.gapStart >= 24) { + const width = Math.min(160, Math.max(40, estimatedTextWidth(edge.label) + 12)); + labelPlacement = { + x: Math.round((labelCorridor.start + labelCorridor.end - width) / 2), + y: Math.round(labelCorridor.y - 11), + width, + height: 22, + }; + } + return { + ...edge, + points: routed.points, + fromPort: routed.fromPort, + toPort: routed.toPort, + ...(labelPlacement ? { labelPlacement } : {}), + }; + } + return { + version: 1, + layoutVersion: "iac-layered-v7", + width: root.width, + height: root.height, + items: items.map((item) => ({ ...item, ...rects.get(item.id) })), + edges: edges.map(route), + }; +} + +self.onmessage = (event) => { + const requestId = event.data?.requestId; + try { + self.postMessage({ requestId, ok: true, layout: buildLayout(event.data?.graph) }); + } catch (error) { + self.postMessage({ + requestId, + ok: false, + error: error instanceof Error ? error.message : String(error), + }); + } +}; diff --git a/src/iac_code/web/static/js/vendor/eraser-diagrams.LICENSE b/src/iac_code/web/static/js/vendor/eraser-diagrams.LICENSE new file mode 100644 index 00000000..5d7c7a3b --- /dev/null +++ b/src/iac_code/web/static/js/vendor/eraser-diagrams.LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Eraser Labs, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/iac_code/web/static/js/vendor/eraser-diagrams.NOTICE b/src/iac_code/web/static/js/vendor/eraser-diagrams.NOTICE new file mode 100644 index 00000000..c3bf0271 --- /dev/null +++ b/src/iac_code/web/static/js/vendor/eraser-diagrams.NOTICE @@ -0,0 +1,544 @@ +Eraser diagrams browser bundle third-party notices +=================================================== + +Generated from eraserlabs/eraser-diagrams commit 6d377f296b94abf63481a07128884066e4930321. +The Eraser Diagrams license is in eraser-diagrams.LICENSE. + +ajv@8.20.0 +---------- +The MIT License (MIT) + +Copyright (c) 2015-2021 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +dayjs@1.11.21 +------------- +MIT License + +Copyright (c) 2018-present, iamkun + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +deepmerge@4.3.1 +--------------- +The MIT License (MIT) + +Copyright (c) 2012 James Halliday, Josh Duff, and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +dom-serializer@2.0.0 +-------------------- +License + +(The MIT License) + +Copyright (c) 2014 The cheeriojs contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +domelementtype@2.3.0 +-------------------- +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +domhandler@5.0.3 +---------------- +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +domutils@3.2.2 +-------------- +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +entities@4.5.0 +-------------- +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +entities@8.0.0 +-------------- +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +escape-string-regexp@4.0.0 +-------------------------- +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +fast-deep-equal@3.1.3 +--------------------- +MIT License + +Copyright (c) 2017 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +fast-uri@3.1.3 +-------------- +Copyright (c) 2011-2021, Gary Court until https://github.com/garycourt/uri-js/commit/a1acf730b4bba3f1097c9f52e7d9d3aba8cdcaae +Copyright (c) 2021-present The Fastify team +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * The names of any contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * * * + +The complete list of contributors can be found at: +- https://github.com/garycourt/uri-js/graphs/contributors + +fastest-levenshtein@1.0.16 +-------------------------- +MIT License + +Copyright (c) 2020 Kasper Unn Weihe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +htmlparser2@10.1.0 +------------------ +Copyright 2010, 2011, Chris Winberry . All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +is-plain-object@5.0.0 +--------------------- +The MIT License (MIT) + +Copyright (c) 2014-2017, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +json-schema-traverse@1.0.0 +-------------------------- +MIT License + +Copyright (c) 2017 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +launder@1.7.1 +------------- +MIT License + +Copyright (c) Apostrophe Technologies, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +marked@18.0.6 +------------- +# License information + +## Contribution License Agreement + +If you contribute code to this project, you are implicitly allowing your code +to be distributed under the MIT license. You are also implicitly verifying that +all code is your original work. `` + +## Marked + +Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/) +Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +## Markdown + +Copyright © 2004, John Gruber +http://daringfireball.net/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. + +nanoid@3.3.16 +------------- +The MIT License (MIT) + +Copyright 2017 Andrey Sitnik + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +parse-srcset@1.0.2 +------------------ +The MIT License (MIT) + +Copyright (c) 2014 Alex Bell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +parse5@8.0.1 +------------ +Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +picocolors@1.1.1 +---------------- +ISC License + +Copyright (c) 2021-2024 Oleksii Raspopov, Kostiantyn Denysov, Anton Verinov + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +postcss@8.5.19 +-------------- +The MIT License (MIT) + +Copyright 2013 Andrey Sitnik + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +sanitize-html@2.17.5 +-------------------- +Copyright (c) 2013, 2014, 2015 P'unk Avenue LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +source-map-js@1.2.1 +------------------- +Copyright (c) 2009-2011, Mozilla Foundation and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the names of the Mozilla Foundation nor the names of project + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/iac_code/web/static/js/vendor/eraser-diagrams.min.js b/src/iac_code/web/static/js/vendor/eraser-diagrams.min.js new file mode 100644 index 00000000..f229e94e --- /dev/null +++ b/src/iac_code/web/static/js/vendor/eraser-diagrams.min.js @@ -0,0 +1,826 @@ +(()=>{var Qk=Object.create;var um=Object.defineProperty;var Wk=Object.getOwnPropertyDescriptor;var jk=Object.getOwnPropertyNames;var qk=Object.getPrototypeOf,Vk=Object.prototype.hasOwnProperty;var $k=(t,e)=>()=>(t&&(e=t(t=0)),e);var F=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Jk=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of jk(e))!Vk.call(t,i)&&i!==n&&um(t,i,{get:()=>e[i],enumerable:!(r=Wk(e,i))||r.enumerable});return t};var Sc=(t,e,n)=>(n=t!=null?Qk(qk(t)):{},Jk(e||!t||!t.__esModule?um(n,"default",{value:t,enumerable:!0}):n,t));var I,m=$k(()=>{I={}});var Ns=F(_e=>{"use strict";m();Object.defineProperty(_e,"__esModule",{value:!0});_e.regexpCode=_e.getEsmExportName=_e.getProperty=_e.safeStringify=_e.stringify=_e.strConcat=_e.addCodeArg=_e.str=_e._=_e.nil=_e._Code=_e.Name=_e.IDENTIFIER=_e._CodeOrName=void 0;var vs=class{};_e._CodeOrName=vs;_e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var yi=class extends vs{constructor(e){if(super(),!_e.IDENTIFIER.test(e))throw new Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}};_e.Name=yi;var dn=class extends vs{constructor(e){super(),this._items=typeof e=="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((n,r)=>`${n}${r}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((n,r)=>(r instanceof yi&&(n[r.str]=(n[r.str]||0)+1),n),{})}};_e._Code=dn;_e.nil=new dn("");function Tg(t,...e){let n=[t[0]],r=0;for(;r{"use strict";m();Object.defineProperty(Qt,"__esModule",{value:!0});Qt.ValueScope=Qt.ValueScopeName=Qt.Scope=Qt.varKinds=Qt.UsedValueState=void 0;var Kt=Ns(),Zd=class extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`),this.value=e.value}},Fc;(function(t){t[t.Started=0]="Started",t[t.Completed=1]="Completed"})(Fc||(Qt.UsedValueState=Fc={}));Qt.varKinds={const:new Kt.Name("const"),let:new Kt.Name("let"),var:new Kt.Name("var")};var Uc=class{constructor({prefixes:e,parent:n}={}){this._names={},this._prefixes=e,this._parent=n}toName(e){return e instanceof Kt.Name?e:this.name(e)}name(e){return new Kt.Name(this._newName(e))}_newName(e){let n=this._names[e]||this._nameGroup(e);return`${e}${n.index++}`}_nameGroup(e){var n,r;if(!((r=(n=this._parent)===null||n===void 0?void 0:n._prefixes)===null||r===void 0)&&r.has(e)||this._prefixes&&!this._prefixes.has(e))throw new Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}};Qt.Scope=Uc;var Hc=class extends Kt.Name{constructor(e,n){super(n),this.prefix=e}setValue(e,{property:n,itemIndex:r}){this.value=e,this.scopePath=(0,Kt._)`.${new Kt.Name(n)}[${r}]`}};Qt.ValueScopeName=Hc;var m2=(0,Kt._)`\n`,ef=class extends Uc{constructor(e){super(e),this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?m2:Kt.nil}}get(){return this._scope}name(e){return new Hc(e,this._newName(e))}value(e,n){var r;if(n.ref===void 0)throw new Error("CodeGen: ref must be passed in value");let i=this.toName(e),{prefix:o}=i,s=(r=n.key)!==null&&r!==void 0?r:n.ref,a=this._values[o];if(a){let l=a.get(s);if(l)return l}else a=this._values[o]=new Map;a.set(s,i);let c=this._scope[o]||(this._scope[o]=[]),u=c.length;return c[u]=n.ref,i.setValue(n,{property:o,itemIndex:u}),i}getValue(e,n){let r=this._values[e];if(r)return r.get(n)}scopeRefs(e,n=this._values){return this._reduceValues(n,r=>{if(r.scopePath===void 0)throw new Error(`CodeGen: name "${r}" has no value`);return(0,Kt._)`${e}${r.scopePath}`})}scopeCode(e=this._values,n,r){return this._reduceValues(e,i=>{if(i.value===void 0)throw new Error(`CodeGen: name "${i}" has no value`);return i.value.code},n,r)}_reduceValues(e,n,r={},i){let o=Kt.nil;for(let s in e){let a=e[s];if(!a)continue;let c=r[s]=r[s]||new Map;a.forEach(u=>{if(c.has(u))return;c.set(u,Fc.Started);let l=n(u);if(l){let d=this.opts.es5?Qt.varKinds.var:Qt.varKinds.const;o=(0,Kt._)`${o}${d} ${u} = ${l};${this.opts._n}`}else if(l=i?.(u))o=(0,Kt._)`${o}${l}${this.opts._n}`;else throw new Zd(u);c.set(u,Fc.Completed)})}return o}};Qt.ValueScope=ef});var he=F(fe=>{"use strict";m();Object.defineProperty(fe,"__esModule",{value:!0});fe.or=fe.and=fe.not=fe.CodeGen=fe.operators=fe.varKinds=fe.ValueScopeName=fe.ValueScope=fe.Scope=fe.Name=fe.regexpCode=fe.stringify=fe.getProperty=fe.nil=fe.strConcat=fe.str=fe._=void 0;var xe=Ns(),yn=tf(),Rr=Ns();Object.defineProperty(fe,"_",{enumerable:!0,get:function(){return Rr._}});Object.defineProperty(fe,"str",{enumerable:!0,get:function(){return Rr.str}});Object.defineProperty(fe,"strConcat",{enumerable:!0,get:function(){return Rr.strConcat}});Object.defineProperty(fe,"nil",{enumerable:!0,get:function(){return Rr.nil}});Object.defineProperty(fe,"getProperty",{enumerable:!0,get:function(){return Rr.getProperty}});Object.defineProperty(fe,"stringify",{enumerable:!0,get:function(){return Rr.stringify}});Object.defineProperty(fe,"regexpCode",{enumerable:!0,get:function(){return Rr.regexpCode}});Object.defineProperty(fe,"Name",{enumerable:!0,get:function(){return Rr.Name}});var Qc=tf();Object.defineProperty(fe,"Scope",{enumerable:!0,get:function(){return Qc.Scope}});Object.defineProperty(fe,"ValueScope",{enumerable:!0,get:function(){return Qc.ValueScope}});Object.defineProperty(fe,"ValueScopeName",{enumerable:!0,get:function(){return Qc.ValueScopeName}});Object.defineProperty(fe,"varKinds",{enumerable:!0,get:function(){return Qc.varKinds}});fe.operators={GT:new xe._Code(">"),GTE:new xe._Code(">="),LT:new xe._Code("<"),LTE:new xe._Code("<="),EQ:new xe._Code("==="),NEQ:new xe._Code("!=="),NOT:new xe._Code("!"),OR:new xe._Code("||"),AND:new xe._Code("&&"),ADD:new xe._Code("+")};var ar=class{optimizeNodes(){return this}optimizeNames(e,n){return this}},nf=class extends ar{constructor(e,n,r){super(),this.varKind=e,this.name=n,this.rhs=r}render({es5:e,_n:n}){let r=e?yn.varKinds.var:this.varKind,i=this.rhs===void 0?"":` = ${this.rhs}`;return`${r} ${this.name}${i};`+n}optimizeNames(e,n){if(e[this.name.str])return this.rhs&&(this.rhs=yo(this.rhs,e,n)),this}get names(){return this.rhs instanceof xe._CodeOrName?this.rhs.names:{}}},Yc=class extends ar{constructor(e,n,r){super(),this.lhs=e,this.rhs=n,this.sideEffects=r}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,n){if(!(this.lhs instanceof xe.Name&&!e[this.lhs.str]&&!this.sideEffects))return this.rhs=yo(this.rhs,e,n),this}get names(){let e=this.lhs instanceof xe.Name?{}:{...this.lhs.names};return Kc(e,this.rhs)}},rf=class extends Yc{constructor(e,n,r,i){super(e,r,i),this.op=n}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}},of=class extends ar{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}},sf=class extends ar{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}},af=class extends ar{constructor(e){super(),this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}},cf=class extends ar{constructor(e){super(),this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,n){return this.code=yo(this.code,e,n),this}get names(){return this.code instanceof xe._CodeOrName?this.code.names:{}}},Rs=class extends ar{constructor(e=[]){super(),this.nodes=e}render(e){return this.nodes.reduce((n,r)=>n+r.render(e),"")}optimizeNodes(){let{nodes:e}=this,n=e.length;for(;n--;){let r=e[n].optimizeNodes();Array.isArray(r)?e.splice(n,1,...r):r?e[n]=r:e.splice(n,1)}return e.length>0?this:void 0}optimizeNames(e,n){let{nodes:r}=this,i=r.length;for(;i--;){let o=r[i];o.optimizeNames(e,n)||(g2(e,o.names),r.splice(i,1))}return r.length>0?this:void 0}get names(){return this.nodes.reduce((e,n)=>wi(e,n.names),{})}},cr=class extends Rs{render(e){return"{"+e._n+super.render(e)+"}"+e._n}},uf=class extends Rs{},Io=class extends cr{};Io.kind="else";var Ci=class t extends cr{constructor(e,n){super(n),this.condition=e}render(e){let n=`if(${this.condition})`+super.render(e);return this.else&&(n+="else "+this.else.render(e)),n}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let n=this.else;if(n){let r=n.optimizeNodes();n=this.else=Array.isArray(r)?new Io(r):r}if(n)return e===!1?n instanceof t?n:n.nodes:this.nodes.length?this:new t(_g(e),n instanceof t?[n]:n.nodes);if(!(e===!1||!this.nodes.length))return this}optimizeNames(e,n){var r;if(this.else=(r=this.else)===null||r===void 0?void 0:r.optimizeNames(e,n),!!(super.optimizeNames(e,n)||this.else))return this.condition=yo(this.condition,e,n),this}get names(){let e=super.names;return Kc(e,this.condition),this.else&&wi(e,this.else.names),e}};Ci.kind="if";var Ti=class extends cr{};Ti.kind="for";var lf=class extends Ti{constructor(e){super(),this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,n){if(super.optimizeNames(e,n))return this.iteration=yo(this.iteration,e,n),this}get names(){return wi(super.names,this.iteration.names)}},df=class extends Ti{constructor(e,n,r,i){super(),this.varKind=e,this.name=n,this.from=r,this.to=i}render(e){let n=e.es5?yn.varKinds.var:this.varKind,{name:r,from:i,to:o}=this;return`for(${n} ${r}=${i}; ${r}<${o}; ${r}++)`+super.render(e)}get names(){let e=Kc(super.names,this.from);return Kc(e,this.to)}},Gc=class extends Ti{constructor(e,n,r,i){super(),this.loop=e,this.varKind=n,this.name=r,this.iterable=i}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,n){if(super.optimizeNames(e,n))return this.iterable=yo(this.iterable,e,n),this}get names(){return wi(super.names,this.iterable.names)}},Os=class extends cr{constructor(e,n,r){super(),this.name=e,this.args=n,this.async=r}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}};Os.kind="func";var Ds=class extends Rs{render(e){return"return "+super.render(e)}};Ds.kind="return";var ff=class extends cr{render(e){let n="try"+super.render(e);return this.catch&&(n+=this.catch.render(e)),this.finally&&(n+=this.finally.render(e)),n}optimizeNodes(){var e,n;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(n=this.finally)===null||n===void 0||n.optimizeNodes(),this}optimizeNames(e,n){var r,i;return super.optimizeNames(e,n),(r=this.catch)===null||r===void 0||r.optimizeNames(e,n),(i=this.finally)===null||i===void 0||i.optimizeNames(e,n),this}get names(){let e=super.names;return this.catch&&wi(e,this.catch.names),this.finally&&wi(e,this.finally.names),e}},Bs=class extends cr{constructor(e){super(),this.error=e}render(e){return`catch(${this.error})`+super.render(e)}};Bs.kind="catch";var Ms=class extends cr{render(e){return"finally"+super.render(e)}};Ms.kind="finally";var hf=class{constructor(e,n={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...n,_n:n.lines?` +`:""},this._extScope=e,this._scope=new yn.Scope({parent:e}),this._nodes=[new uf]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,n){let r=this._extScope.value(e,n);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(e,n){return this._extScope.getValue(e,n)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,n,r,i){let o=this._scope.toName(n);return r!==void 0&&i&&(this._constants[o.str]=r),this._leafNode(new nf(e,o,r)),o}const(e,n,r){return this._def(yn.varKinds.const,e,n,r)}let(e,n,r){return this._def(yn.varKinds.let,e,n,r)}var(e,n,r){return this._def(yn.varKinds.var,e,n,r)}assign(e,n,r){return this._leafNode(new Yc(e,n,r))}add(e,n){return this._leafNode(new rf(e,fe.operators.ADD,n))}code(e){return typeof e=="function"?e():e!==xe.nil&&this._leafNode(new cf(e)),this}object(...e){let n=["{"];for(let[r,i]of e)n.length>1&&n.push(","),n.push(r),(r!==i||this.opts.es5)&&(n.push(":"),(0,xe.addCodeArg)(n,i));return n.push("}"),new xe._Code(n)}if(e,n,r){if(this._blockNode(new Ci(e)),n&&r)this.code(n).else().code(r).endIf();else if(n)this.code(n).endIf();else if(r)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new Ci(e))}else(){return this._elseNode(new Io)}endIf(){return this._endBlockNode(Ci,Io)}_for(e,n){return this._blockNode(e),n&&this.code(n).endFor(),this}for(e,n){return this._for(new lf(e),n)}forRange(e,n,r,i,o=this.opts.es5?yn.varKinds.var:yn.varKinds.let){let s=this._scope.toName(e);return this._for(new df(o,s,n,r),()=>i(s))}forOf(e,n,r,i=yn.varKinds.const){let o=this._scope.toName(e);if(this.opts.es5){let s=n instanceof xe.Name?n:this.var("_arr",n);return this.forRange("_i",0,(0,xe._)`${s}.length`,a=>{this.var(o,(0,xe._)`${s}[${a}]`),r(o)})}return this._for(new Gc("of",i,o,n),()=>r(o))}forIn(e,n,r,i=this.opts.es5?yn.varKinds.var:yn.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,(0,xe._)`Object.keys(${n})`,r);let o=this._scope.toName(e);return this._for(new Gc("in",i,o,n),()=>r(o))}endFor(){return this._endBlockNode(Ti)}label(e){return this._leafNode(new of(e))}break(e){return this._leafNode(new sf(e))}return(e){let n=new Ds;if(this._blockNode(n),this.code(e),n.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(Ds)}try(e,n,r){if(!n&&!r)throw new Error('CodeGen: "try" without "catch" and "finally"');let i=new ff;if(this._blockNode(i),this.code(e),n){let o=this.name("e");this._currNode=i.catch=new Bs(o),n(o)}return r&&(this._currNode=i.finally=new Ms,this.code(r)),this._endBlockNode(Bs,Ms)}throw(e){return this._leafNode(new af(e))}block(e,n){return this._blockStarts.push(this._nodes.length),e&&this.code(e).endBlock(n),this}endBlock(e){let n=this._blockStarts.pop();if(n===void 0)throw new Error("CodeGen: not in self-balancing block");let r=this._nodes.length-n;if(r<0||e!==void 0&&r!==e)throw new Error(`CodeGen: wrong number of nodes: ${r} vs ${e} expected`);return this._nodes.length=n,this}func(e,n=xe.nil,r,i){return this._blockNode(new Os(e,n,r)),i&&this.code(i).endFunc(),this}endFunc(){return this._endBlockNode(Os)}optimize(e=1){for(;e-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,n){let r=this._currNode;if(r instanceof e||n&&r instanceof n)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${n?`${e.kind}/${n.kind}`:e.kind}"`)}_elseNode(e){let n=this._currNode;if(!(n instanceof Ci))throw new Error('CodeGen: "else" without "if"');return this._currNode=n.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let n=this._nodes;n[n.length-1]=e}};fe.CodeGen=hf;function wi(t,e){for(let n in e)t[n]=(t[n]||0)+(e[n]||0);return t}function Kc(t,e){return e instanceof xe._CodeOrName?wi(t,e.names):t}function yo(t,e,n){if(t instanceof xe.Name)return r(t);if(!i(t))return t;return new xe._Code(t._items.reduce((o,s)=>(s instanceof xe.Name&&(s=r(s)),s instanceof xe._Code?o.push(...s._items):o.push(s),o),[]));function r(o){let s=n[o.str];return s===void 0||e[o.str]!==1?o:(delete e[o.str],s)}function i(o){return o instanceof xe._Code&&o._items.some(s=>s instanceof xe.Name&&e[s.str]===1&&n[s.str]!==void 0)}}function g2(t,e){for(let n in e)t[n]=(t[n]||0)-(e[n]||0)}function _g(t){return typeof t=="boolean"||typeof t=="number"||t===null?!t:(0,xe._)`!${Af(t)}`}fe.not=_g;var b2=Sg(fe.operators.AND);function x2(...t){return t.reduce(b2)}fe.and=x2;var E2=Sg(fe.operators.OR);function I2(...t){return t.reduce(E2)}fe.or=I2;function Sg(t){return(e,n)=>e===xe.nil?n:n===xe.nil?e:(0,xe._)`${Af(e)} ${t} ${Af(n)}`}function Af(t){return t instanceof xe.Name?t:(0,xe._)`(${t})`}});var ye=F(Ae=>{"use strict";m();Object.defineProperty(Ae,"__esModule",{value:!0});Ae.checkStrictMode=Ae.getErrorPath=Ae.Type=Ae.useFunc=Ae.setEvaluated=Ae.evaluatedPropsToName=Ae.mergeEvaluated=Ae.eachItem=Ae.unescapeJsonPointer=Ae.escapeJsonPointer=Ae.escapeFragment=Ae.unescapeFragment=Ae.schemaRefOrVal=Ae.schemaHasRulesButRef=Ae.schemaHasRules=Ae.checkUnknownRules=Ae.alwaysValidSchema=Ae.toHash=void 0;var Fe=he(),y2=Ns();function C2(t){let e={};for(let n of t)e[n]=!0;return e}Ae.toHash=C2;function T2(t,e){return typeof e=="boolean"?e:Object.keys(e).length===0?!0:(Ng(t,e),!Rg(e,t.self.RULES.all))}Ae.alwaysValidSchema=T2;function Ng(t,e=t.schema){let{opts:n,self:r}=t;if(!n.strictSchema||typeof e=="boolean")return;let i=r.RULES.keywords;for(let o in e)i[o]||Bg(t,`unknown keyword: "${o}"`)}Ae.checkUnknownRules=Ng;function Rg(t,e){if(typeof t=="boolean")return!t;for(let n in t)if(e[n])return!0;return!1}Ae.schemaHasRules=Rg;function w2(t,e){if(typeof t=="boolean")return!t;for(let n in t)if(n!=="$ref"&&e.all[n])return!0;return!1}Ae.schemaHasRulesButRef=w2;function _2({topSchemaRef:t,schemaPath:e},n,r,i){if(!i){if(typeof n=="number"||typeof n=="boolean")return n;if(typeof n=="string")return(0,Fe._)`${n}`}return(0,Fe._)`${t}${e}${(0,Fe.getProperty)(r)}`}Ae.schemaRefOrVal=_2;function S2(t){return Og(decodeURIComponent(t))}Ae.unescapeFragment=S2;function v2(t){return encodeURIComponent(mf(t))}Ae.escapeFragment=v2;function mf(t){return typeof t=="number"?`${t}`:t.replace(/~/g,"~0").replace(/\//g,"~1")}Ae.escapeJsonPointer=mf;function Og(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}Ae.unescapeJsonPointer=Og;function k2(t,e){if(Array.isArray(t))for(let n of t)e(n);else e(t)}Ae.eachItem=k2;function vg({mergeNames:t,mergeToName:e,mergeValues:n,resultToName:r}){return(i,o,s,a)=>{let c=s===void 0?o:s instanceof Fe.Name?(o instanceof Fe.Name?t(i,o,s):e(i,o,s),s):o instanceof Fe.Name?(e(i,s,o),o):n(o,s);return a===Fe.Name&&!(c instanceof Fe.Name)?r(i,c):c}}Ae.mergeEvaluated={props:vg({mergeNames:(t,e,n)=>t.if((0,Fe._)`${n} !== true && ${e} !== undefined`,()=>{t.if((0,Fe._)`${e} === true`,()=>t.assign(n,!0),()=>t.assign(n,(0,Fe._)`${n} || {}`).code((0,Fe._)`Object.assign(${n}, ${e})`))}),mergeToName:(t,e,n)=>t.if((0,Fe._)`${n} !== true`,()=>{e===!0?t.assign(n,!0):(t.assign(n,(0,Fe._)`${n} || {}`),gf(t,n,e))}),mergeValues:(t,e)=>t===!0?!0:{...t,...e},resultToName:Dg}),items:vg({mergeNames:(t,e,n)=>t.if((0,Fe._)`${n} !== true && ${e} !== undefined`,()=>t.assign(n,(0,Fe._)`${e} === true ? true : ${n} > ${e} ? ${n} : ${e}`)),mergeToName:(t,e,n)=>t.if((0,Fe._)`${n} !== true`,()=>t.assign(n,e===!0?!0:(0,Fe._)`${n} > ${e} ? ${n} : ${e}`)),mergeValues:(t,e)=>t===!0?!0:Math.max(t,e),resultToName:(t,e)=>t.var("items",e)})};function Dg(t,e){if(e===!0)return t.var("props",!0);let n=t.var("props",(0,Fe._)`{}`);return e!==void 0&&gf(t,n,e),n}Ae.evaluatedPropsToName=Dg;function gf(t,e,n){Object.keys(n).forEach(r=>t.assign((0,Fe._)`${e}${(0,Fe.getProperty)(r)}`,!0))}Ae.setEvaluated=gf;var kg={};function N2(t,e){return t.scopeValue("func",{ref:e,code:kg[e.code]||(kg[e.code]=new y2._Code(e.code))})}Ae.useFunc=N2;var pf;(function(t){t[t.Num=0]="Num",t[t.Str=1]="Str"})(pf||(Ae.Type=pf={}));function R2(t,e,n){if(t instanceof Fe.Name){let r=e===pf.Num;return n?r?(0,Fe._)`"[" + ${t} + "]"`:(0,Fe._)`"['" + ${t} + "']"`:r?(0,Fe._)`"/" + ${t}`:(0,Fe._)`"/" + ${t}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return n?(0,Fe.getProperty)(t).toString():"/"+mf(t)}Ae.getErrorPath=R2;function Bg(t,e,n=t.opts.strictSchema){if(n){if(e=`strict mode: ${e}`,n===!0)throw new Error(e);t.self.logger.warn(e)}}Ae.checkStrictMode=Bg});var ur=F(bf=>{"use strict";m();Object.defineProperty(bf,"__esModule",{value:!0});var _t=he(),O2={data:new _t.Name("data"),valCxt:new _t.Name("valCxt"),instancePath:new _t.Name("instancePath"),parentData:new _t.Name("parentData"),parentDataProperty:new _t.Name("parentDataProperty"),rootData:new _t.Name("rootData"),dynamicAnchors:new _t.Name("dynamicAnchors"),vErrors:new _t.Name("vErrors"),errors:new _t.Name("errors"),this:new _t.Name("this"),self:new _t.Name("self"),scope:new _t.Name("scope"),json:new _t.Name("json"),jsonPos:new _t.Name("jsonPos"),jsonLen:new _t.Name("jsonLen"),jsonPart:new _t.Name("jsonPart")};bf.default=O2});var Ps=F(St=>{"use strict";m();Object.defineProperty(St,"__esModule",{value:!0});St.extendErrors=St.resetErrorsCount=St.reportExtraError=St.reportError=St.keyword$DataError=St.keywordError=void 0;var Ce=he(),Wc=ye(),Pt=ur();St.keywordError={message:({keyword:t})=>(0,Ce.str)`must pass "${t}" keyword validation`};St.keyword$DataError={message:({keyword:t,schemaType:e})=>e?(0,Ce.str)`"${t}" keyword must be ${e} ($data)`:(0,Ce.str)`"${t}" keyword is invalid ($data)`};function D2(t,e=St.keywordError,n,r){let{it:i}=t,{gen:o,compositeRule:s,allErrors:a}=i,c=Lg(t,e,n);r??(s||a)?Mg(o,c):Pg(i,(0,Ce._)`[${c}]`)}St.reportError=D2;function B2(t,e=St.keywordError,n){let{it:r}=t,{gen:i,compositeRule:o,allErrors:s}=r,a=Lg(t,e,n);Mg(i,a),o||s||Pg(r,Pt.default.vErrors)}St.reportExtraError=B2;function M2(t,e){t.assign(Pt.default.errors,e),t.if((0,Ce._)`${Pt.default.vErrors} !== null`,()=>t.if(e,()=>t.assign((0,Ce._)`${Pt.default.vErrors}.length`,e),()=>t.assign(Pt.default.vErrors,null)))}St.resetErrorsCount=M2;function P2({gen:t,keyword:e,schemaValue:n,data:r,errsCount:i,it:o}){if(i===void 0)throw new Error("ajv implementation error");let s=t.name("err");t.forRange("i",i,Pt.default.errors,a=>{t.const(s,(0,Ce._)`${Pt.default.vErrors}[${a}]`),t.if((0,Ce._)`${s}.instancePath === undefined`,()=>t.assign((0,Ce._)`${s}.instancePath`,(0,Ce.strConcat)(Pt.default.instancePath,o.errorPath))),t.assign((0,Ce._)`${s}.schemaPath`,(0,Ce.str)`${o.errSchemaPath}/${e}`),o.opts.verbose&&(t.assign((0,Ce._)`${s}.schema`,n),t.assign((0,Ce._)`${s}.data`,r))})}St.extendErrors=P2;function Mg(t,e){let n=t.const("err",e);t.if((0,Ce._)`${Pt.default.vErrors} === null`,()=>t.assign(Pt.default.vErrors,(0,Ce._)`[${n}]`),(0,Ce._)`${Pt.default.vErrors}.push(${n})`),t.code((0,Ce._)`${Pt.default.errors}++`)}function Pg(t,e){let{gen:n,validateName:r,schemaEnv:i}=t;i.$async?n.throw((0,Ce._)`new ${t.ValidationError}(${e})`):(n.assign((0,Ce._)`${r}.errors`,e),n.return(!1))}var _i={keyword:new Ce.Name("keyword"),schemaPath:new Ce.Name("schemaPath"),params:new Ce.Name("params"),propertyName:new Ce.Name("propertyName"),message:new Ce.Name("message"),schema:new Ce.Name("schema"),parentSchema:new Ce.Name("parentSchema")};function Lg(t,e,n){let{createErrors:r}=t.it;return r===!1?(0,Ce._)`{}`:L2(t,e,n)}function L2(t,e,n={}){let{gen:r,it:i}=t,o=[F2(i,n),U2(t,n)];return H2(t,e,o),r.object(...o)}function F2({errorPath:t},{instancePath:e}){let n=e?(0,Ce.str)`${t}${(0,Wc.getErrorPath)(e,Wc.Type.Str)}`:t;return[Pt.default.instancePath,(0,Ce.strConcat)(Pt.default.instancePath,n)]}function U2({keyword:t,it:{errSchemaPath:e}},{schemaPath:n,parentSchema:r}){let i=r?e:(0,Ce.str)`${e}/${t}`;return n&&(i=(0,Ce.str)`${i}${(0,Wc.getErrorPath)(n,Wc.Type.Str)}`),[_i.schemaPath,i]}function H2(t,{params:e,message:n},r){let{keyword:i,data:o,schemaValue:s,it:a}=t,{opts:c,propertyName:u,topSchemaRef:l,schemaPath:d}=a;r.push([_i.keyword,i],[_i.params,typeof e=="function"?e(t):e||(0,Ce._)`{}`]),c.messages&&r.push([_i.message,typeof n=="function"?n(t):n]),c.verbose&&r.push([_i.schema,s],[_i.parentSchema,(0,Ce._)`${l}${d}`],[Pt.default.data,o]),u&&r.push([_i.propertyName,u])}});var Ug=F(Co=>{"use strict";m();Object.defineProperty(Co,"__esModule",{value:!0});Co.boolOrEmptySchema=Co.topBoolOrEmptySchema=void 0;var Y2=Ps(),G2=he(),K2=ur(),Q2={message:"boolean schema is false"};function W2(t){let{gen:e,schema:n,validateName:r}=t;n===!1?Fg(t,!1):typeof n=="object"&&n.$async===!0?e.return(K2.default.data):(e.assign((0,G2._)`${r}.errors`,null),e.return(!0))}Co.topBoolOrEmptySchema=W2;function j2(t,e){let{gen:n,schema:r}=t;r===!1?(n.var(e,!1),Fg(t)):n.var(e,!0)}Co.boolOrEmptySchema=j2;function Fg(t,e){let{gen:n,data:r}=t,i={gen:n,keyword:"false schema",data:r,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:t};(0,Y2.reportError)(i,Q2,void 0,e)}});var xf=F(To=>{"use strict";m();Object.defineProperty(To,"__esModule",{value:!0});To.getRules=To.isJSONType=void 0;var q2=["string","number","integer","boolean","null","object","array"],V2=new Set(q2);function $2(t){return typeof t=="string"&&V2.has(t)}To.isJSONType=$2;function J2(){let t={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...t,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},t.number,t.string,t.array,t.object],post:{rules:[]},all:{},keywords:{}}}To.getRules=J2});var Ef=F(Or=>{"use strict";m();Object.defineProperty(Or,"__esModule",{value:!0});Or.shouldUseRule=Or.shouldUseGroup=Or.schemaHasRulesForType=void 0;function X2({schema:t,self:e},n){let r=e.RULES.types[n];return r&&r!==!0&&Hg(t,r)}Or.schemaHasRulesForType=X2;function Hg(t,e){return e.rules.some(n=>Yg(t,n))}Or.shouldUseGroup=Hg;function Yg(t,e){var n;return t[e.keyword]!==void 0||((n=e.definition.implements)===null||n===void 0?void 0:n.some(r=>t[r]!==void 0))}Or.shouldUseRule=Yg});var Ls=F(vt=>{"use strict";m();Object.defineProperty(vt,"__esModule",{value:!0});vt.reportTypeError=vt.checkDataTypes=vt.checkDataType=vt.coerceAndCheckDataType=vt.getJSONTypes=vt.getSchemaTypes=vt.DataType=void 0;var z2=xf(),Z2=Ef(),eN=Ps(),ue=he(),Gg=ye(),wo;(function(t){t[t.Correct=0]="Correct",t[t.Wrong=1]="Wrong"})(wo||(vt.DataType=wo={}));function tN(t){let e=Kg(t.type);if(e.includes("null")){if(t.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!e.length&&t.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');t.nullable===!0&&e.push("null")}return e}vt.getSchemaTypes=tN;function Kg(t){let e=Array.isArray(t)?t:t?[t]:[];if(e.every(z2.isJSONType))return e;throw new Error("type must be JSONType or JSONType[]: "+e.join(","))}vt.getJSONTypes=Kg;function nN(t,e){let{gen:n,data:r,opts:i}=t,o=rN(e,i.coerceTypes),s=e.length>0&&!(o.length===0&&e.length===1&&(0,Z2.schemaHasRulesForType)(t,e[0]));if(s){let a=yf(e,r,i.strictNumbers,wo.Wrong);n.if(a,()=>{o.length?iN(t,e,o):Cf(t)})}return s}vt.coerceAndCheckDataType=nN;var Qg=new Set(["string","number","integer","boolean","null"]);function rN(t,e){return e?t.filter(n=>Qg.has(n)||e==="array"&&n==="array"):[]}function iN(t,e,n){let{gen:r,data:i,opts:o}=t,s=r.let("dataType",(0,ue._)`typeof ${i}`),a=r.let("coerced",(0,ue._)`undefined`);o.coerceTypes==="array"&&r.if((0,ue._)`${s} == 'object' && Array.isArray(${i}) && ${i}.length == 1`,()=>r.assign(i,(0,ue._)`${i}[0]`).assign(s,(0,ue._)`typeof ${i}`).if(yf(e,i,o.strictNumbers),()=>r.assign(a,i))),r.if((0,ue._)`${a} !== undefined`);for(let u of n)(Qg.has(u)||u==="array"&&o.coerceTypes==="array")&&c(u);r.else(),Cf(t),r.endIf(),r.if((0,ue._)`${a} !== undefined`,()=>{r.assign(i,a),oN(t,a)});function c(u){switch(u){case"string":r.elseIf((0,ue._)`${s} == "number" || ${s} == "boolean"`).assign(a,(0,ue._)`"" + ${i}`).elseIf((0,ue._)`${i} === null`).assign(a,(0,ue._)`""`);return;case"number":r.elseIf((0,ue._)`${s} == "boolean" || ${i} === null + || (${s} == "string" && ${i} && ${i} == +${i})`).assign(a,(0,ue._)`+${i}`);return;case"integer":r.elseIf((0,ue._)`${s} === "boolean" || ${i} === null + || (${s} === "string" && ${i} && ${i} == +${i} && !(${i} % 1))`).assign(a,(0,ue._)`+${i}`);return;case"boolean":r.elseIf((0,ue._)`${i} === "false" || ${i} === 0 || ${i} === null`).assign(a,!1).elseIf((0,ue._)`${i} === "true" || ${i} === 1`).assign(a,!0);return;case"null":r.elseIf((0,ue._)`${i} === "" || ${i} === 0 || ${i} === false`),r.assign(a,null);return;case"array":r.elseIf((0,ue._)`${s} === "string" || ${s} === "number" + || ${s} === "boolean" || ${i} === null`).assign(a,(0,ue._)`[${i}]`)}}}function oN({gen:t,parentData:e,parentDataProperty:n},r){t.if((0,ue._)`${e} !== undefined`,()=>t.assign((0,ue._)`${e}[${n}]`,r))}function If(t,e,n,r=wo.Correct){let i=r===wo.Correct?ue.operators.EQ:ue.operators.NEQ,o;switch(t){case"null":return(0,ue._)`${e} ${i} null`;case"array":o=(0,ue._)`Array.isArray(${e})`;break;case"object":o=(0,ue._)`${e} && typeof ${e} == "object" && !Array.isArray(${e})`;break;case"integer":o=s((0,ue._)`!(${e} % 1) && !isNaN(${e})`);break;case"number":o=s();break;default:return(0,ue._)`typeof ${e} ${i} ${t}`}return r===wo.Correct?o:(0,ue.not)(o);function s(a=ue.nil){return(0,ue.and)((0,ue._)`typeof ${e} == "number"`,a,n?(0,ue._)`isFinite(${e})`:ue.nil)}}vt.checkDataType=If;function yf(t,e,n,r){if(t.length===1)return If(t[0],e,n,r);let i,o=(0,Gg.toHash)(t);if(o.array&&o.object){let s=(0,ue._)`typeof ${e} != "object"`;i=o.null?s:(0,ue._)`!${e} || ${s}`,delete o.null,delete o.array,delete o.object}else i=ue.nil;o.number&&delete o.integer;for(let s in o)i=(0,ue.and)(i,If(s,e,n,r));return i}vt.checkDataTypes=yf;var sN={message:({schema:t})=>`must be ${t}`,params:({schema:t,schemaValue:e})=>typeof t=="string"?(0,ue._)`{type: ${t}}`:(0,ue._)`{type: ${e}}`};function Cf(t){let e=aN(t);(0,eN.reportError)(e,sN)}vt.reportTypeError=Cf;function aN(t){let{gen:e,data:n,schema:r}=t,i=(0,Gg.schemaRefOrVal)(t,r,"type");return{gen:e,keyword:"type",data:n,schema:r.type,schemaCode:i,schemaValue:i,parentSchema:r,params:{},it:t}}});var jg=F(jc=>{"use strict";m();Object.defineProperty(jc,"__esModule",{value:!0});jc.assignDefaults=void 0;var _o=he(),cN=ye();function uN(t,e){let{properties:n,items:r}=t.schema;if(e==="object"&&n)for(let i in n)Wg(t,i,n[i].default);else e==="array"&&Array.isArray(r)&&r.forEach((i,o)=>Wg(t,o,i.default))}jc.assignDefaults=uN;function Wg(t,e,n){let{gen:r,compositeRule:i,data:o,opts:s}=t;if(n===void 0)return;let a=(0,_o._)`${o}${(0,_o.getProperty)(e)}`;if(i){(0,cN.checkStrictMode)(t,`default is ignored for: ${a}`);return}let c=(0,_o._)`${a} === undefined`;s.useDefaults==="empty"&&(c=(0,_o._)`${c} || ${a} === null || ${a} === ""`),r.if(c,(0,_o._)`${a} = ${(0,_o.stringify)(n)}`)}});var fn=F(Be=>{"use strict";m();Object.defineProperty(Be,"__esModule",{value:!0});Be.validateUnion=Be.validateArray=Be.usePattern=Be.callValidateCode=Be.schemaProperties=Be.allSchemaProperties=Be.noPropertyInData=Be.propertyInData=Be.isOwnProperty=Be.hasPropFunc=Be.reportMissingProp=Be.checkMissingProp=Be.checkReportMissingProp=void 0;var Ke=he(),Tf=ye(),Dr=ur(),lN=ye();function dN(t,e){let{gen:n,data:r,it:i}=t;n.if(_f(n,r,e,i.opts.ownProperties),()=>{t.setParams({missingProperty:(0,Ke._)`${e}`},!0),t.error()})}Be.checkReportMissingProp=dN;function fN({gen:t,data:e,it:{opts:n}},r,i){return(0,Ke.or)(...r.map(o=>(0,Ke.and)(_f(t,e,o,n.ownProperties),(0,Ke._)`${i} = ${o}`)))}Be.checkMissingProp=fN;function hN(t,e){t.setParams({missingProperty:e},!0),t.error()}Be.reportMissingProp=hN;function qg(t){return t.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,Ke._)`Object.prototype.hasOwnProperty`})}Be.hasPropFunc=qg;function wf(t,e,n){return(0,Ke._)`${qg(t)}.call(${e}, ${n})`}Be.isOwnProperty=wf;function AN(t,e,n,r){let i=(0,Ke._)`${e}${(0,Ke.getProperty)(n)} !== undefined`;return r?(0,Ke._)`${i} && ${wf(t,e,n)}`:i}Be.propertyInData=AN;function _f(t,e,n,r){let i=(0,Ke._)`${e}${(0,Ke.getProperty)(n)} === undefined`;return r?(0,Ke.or)(i,(0,Ke.not)(wf(t,e,n))):i}Be.noPropertyInData=_f;function Vg(t){return t?Object.keys(t).filter(e=>e!=="__proto__"):[]}Be.allSchemaProperties=Vg;function pN(t,e){return Vg(e).filter(n=>!(0,Tf.alwaysValidSchema)(t,e[n]))}Be.schemaProperties=pN;function mN({schemaCode:t,data:e,it:{gen:n,topSchemaRef:r,schemaPath:i,errorPath:o},it:s},a,c,u){let l=u?(0,Ke._)`${t}, ${e}, ${r}${i}`:e,d=[[Dr.default.instancePath,(0,Ke.strConcat)(Dr.default.instancePath,o)],[Dr.default.parentData,s.parentData],[Dr.default.parentDataProperty,s.parentDataProperty],[Dr.default.rootData,Dr.default.rootData]];s.opts.dynamicRef&&d.push([Dr.default.dynamicAnchors,Dr.default.dynamicAnchors]);let f=(0,Ke._)`${l}, ${n.object(...d)}`;return c!==Ke.nil?(0,Ke._)`${a}.call(${c}, ${f})`:(0,Ke._)`${a}(${f})`}Be.callValidateCode=mN;var gN=(0,Ke._)`new RegExp`;function bN({gen:t,it:{opts:e}},n){let r=e.unicodeRegExp?"u":"",{regExp:i}=e.code,o=i(n,r);return t.scopeValue("pattern",{key:o.toString(),ref:o,code:(0,Ke._)`${i.code==="new RegExp"?gN:(0,lN.useFunc)(t,i)}(${n}, ${r})`})}Be.usePattern=bN;function xN(t){let{gen:e,data:n,keyword:r,it:i}=t,o=e.name("valid");if(i.allErrors){let a=e.let("valid",!0);return s(()=>e.assign(a,!1)),a}return e.var(o,!0),s(()=>e.break()),o;function s(a){let c=e.const("len",(0,Ke._)`${n}.length`);e.forRange("i",0,c,u=>{t.subschema({keyword:r,dataProp:u,dataPropType:Tf.Type.Num},o),e.if((0,Ke.not)(o),a)})}}Be.validateArray=xN;function EN(t){let{gen:e,schema:n,keyword:r,it:i}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(n.some(c=>(0,Tf.alwaysValidSchema)(i,c))&&!i.opts.unevaluated)return;let s=e.let("valid",!1),a=e.name("_valid");e.block(()=>n.forEach((c,u)=>{let l=t.subschema({keyword:r,schemaProp:u,compositeRule:!0},a);e.assign(s,(0,Ke._)`${s} || ${a}`),t.mergeValidEvaluated(l,a)||e.if((0,Ke.not)(s))})),t.result(s,()=>t.reset(),()=>t.error(!0))}Be.validateUnion=EN});var Xg=F(Yn=>{"use strict";m();Object.defineProperty(Yn,"__esModule",{value:!0});Yn.validateKeywordUsage=Yn.validSchemaType=Yn.funcKeywordCode=Yn.macroKeywordCode=void 0;var Lt=he(),Si=ur(),IN=fn(),yN=Ps();function CN(t,e){let{gen:n,keyword:r,schema:i,parentSchema:o,it:s}=t,a=e.macro.call(s.self,i,o,s),c=Jg(n,r,a);s.opts.validateSchema!==!1&&s.self.validateSchema(a,!0);let u=n.name("valid");t.subschema({schema:a,schemaPath:Lt.nil,errSchemaPath:`${s.errSchemaPath}/${r}`,topSchemaRef:c,compositeRule:!0},u),t.pass(u,()=>t.error(!0))}Yn.macroKeywordCode=CN;function TN(t,e){var n;let{gen:r,keyword:i,schema:o,parentSchema:s,$data:a,it:c}=t;_N(c,e);let u=!a&&e.compile?e.compile.call(c.self,o,s,c):e.validate,l=Jg(r,i,u),d=r.let("valid");t.block$data(d,f),t.ok((n=e.valid)!==null&&n!==void 0?n:d);function f(){if(e.errors===!1)g(),e.modifying&&$g(t),b(()=>t.error());else{let x=e.async?h():A();e.modifying&&$g(t),b(()=>wN(t,x))}}function h(){let x=r.let("ruleErrs",null);return r.try(()=>g((0,Lt._)`await `),E=>r.assign(d,!1).if((0,Lt._)`${E} instanceof ${c.ValidationError}`,()=>r.assign(x,(0,Lt._)`${E}.errors`),()=>r.throw(E))),x}function A(){let x=(0,Lt._)`${l}.errors`;return r.assign(x,null),g(Lt.nil),x}function g(x=e.async?(0,Lt._)`await `:Lt.nil){let E=c.opts.passContext?Si.default.this:Si.default.self,T=!("compile"in e&&!a||e.schema===!1);r.assign(d,(0,Lt._)`${x}${(0,IN.callValidateCode)(t,l,E,T)}`,e.modifying)}function b(x){var E;r.if((0,Lt.not)((E=e.valid)!==null&&E!==void 0?E:d),x)}}Yn.funcKeywordCode=TN;function $g(t){let{gen:e,data:n,it:r}=t;e.if(r.parentData,()=>e.assign(n,(0,Lt._)`${r.parentData}[${r.parentDataProperty}]`))}function wN(t,e){let{gen:n}=t;n.if((0,Lt._)`Array.isArray(${e})`,()=>{n.assign(Si.default.vErrors,(0,Lt._)`${Si.default.vErrors} === null ? ${e} : ${Si.default.vErrors}.concat(${e})`).assign(Si.default.errors,(0,Lt._)`${Si.default.vErrors}.length`),(0,yN.extendErrors)(t)},()=>t.error())}function _N({schemaEnv:t},e){if(e.async&&!t.$async)throw new Error("async keyword in sync schema")}function Jg(t,e,n){if(n===void 0)throw new Error(`keyword "${e}" failed to compile`);return t.scopeValue("keyword",typeof n=="function"?{ref:n}:{ref:n,code:(0,Lt.stringify)(n)})}function SN(t,e,n=!1){return!e.length||e.some(r=>r==="array"?Array.isArray(t):r==="object"?t&&typeof t=="object"&&!Array.isArray(t):typeof t==r||n&&typeof t>"u")}Yn.validSchemaType=SN;function vN({schema:t,opts:e,self:n,errSchemaPath:r},i,o){if(Array.isArray(i.keyword)?!i.keyword.includes(o):i.keyword!==o)throw new Error("ajv implementation error");let s=i.dependencies;if(s?.some(a=>!Object.prototype.hasOwnProperty.call(t,a)))throw new Error(`parent schema must have dependencies of ${o}: ${s.join(",")}`);if(i.validateSchema&&!i.validateSchema(t[o])){let c=`keyword "${o}" value is invalid at path "${r}": `+n.errorsText(i.validateSchema.errors);if(e.validateSchema==="log")n.logger.error(c);else throw new Error(c)}}Yn.validateKeywordUsage=vN});var Zg=F(Br=>{"use strict";m();Object.defineProperty(Br,"__esModule",{value:!0});Br.extendSubschemaMode=Br.extendSubschemaData=Br.getSubschema=void 0;var Gn=he(),zg=ye();function kN(t,{keyword:e,schemaProp:n,schema:r,schemaPath:i,errSchemaPath:o,topSchemaRef:s}){if(e!==void 0&&r!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(e!==void 0){let a=t.schema[e];return n===void 0?{schema:a,schemaPath:(0,Gn._)`${t.schemaPath}${(0,Gn.getProperty)(e)}`,errSchemaPath:`${t.errSchemaPath}/${e}`}:{schema:a[n],schemaPath:(0,Gn._)`${t.schemaPath}${(0,Gn.getProperty)(e)}${(0,Gn.getProperty)(n)}`,errSchemaPath:`${t.errSchemaPath}/${e}/${(0,zg.escapeFragment)(n)}`}}if(r!==void 0){if(i===void 0||o===void 0||s===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:r,schemaPath:i,topSchemaRef:s,errSchemaPath:o}}throw new Error('either "keyword" or "schema" must be passed')}Br.getSubschema=kN;function NN(t,e,{dataProp:n,dataPropType:r,data:i,dataTypes:o,propertyName:s}){if(i!==void 0&&n!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');let{gen:a}=e;if(n!==void 0){let{errorPath:u,dataPathArr:l,opts:d}=e,f=a.let("data",(0,Gn._)`${e.data}${(0,Gn.getProperty)(n)}`,!0);c(f),t.errorPath=(0,Gn.str)`${u}${(0,zg.getErrorPath)(n,r,d.jsPropertySyntax)}`,t.parentDataProperty=(0,Gn._)`${n}`,t.dataPathArr=[...l,t.parentDataProperty]}if(i!==void 0){let u=i instanceof Gn.Name?i:a.let("data",i,!0);c(u),s!==void 0&&(t.propertyName=s)}o&&(t.dataTypes=o);function c(u){t.data=u,t.dataLevel=e.dataLevel+1,t.dataTypes=[],e.definedProperties=new Set,t.parentData=e.data,t.dataNames=[...e.dataNames,u]}}Br.extendSubschemaData=NN;function RN(t,{jtdDiscriminator:e,jtdMetadata:n,compositeRule:r,createErrors:i,allErrors:o}){r!==void 0&&(t.compositeRule=r),i!==void 0&&(t.createErrors=i),o!==void 0&&(t.allErrors=o),t.jtdDiscriminator=e,t.jtdMetadata=n}Br.extendSubschemaMode=RN});var Sf=F((KV,eb)=>{"use strict";m();eb.exports=function t(e,n){if(e===n)return!0;if(e&&n&&typeof e=="object"&&typeof n=="object"){if(e.constructor!==n.constructor)return!1;var r,i,o;if(Array.isArray(e)){if(r=e.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!t(e[i],n[i]))return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===n.toString();if(o=Object.keys(e),r=o.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,o[i]))return!1;for(i=r;i--!==0;){var s=o[i];if(!t(e[s],n[s]))return!1}return!0}return e!==e&&n!==n}});var nb=F((WV,tb)=>{"use strict";m();var Mr=tb.exports=function(t,e,n){typeof e=="function"&&(n=e,e={}),n=e.cb||n;var r=typeof n=="function"?n:n.pre||function(){},i=n.post||function(){};qc(e,r,i,t,"",t)};Mr.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};Mr.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};Mr.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};Mr.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function qc(t,e,n,r,i,o,s,a,c,u){if(r&&typeof r=="object"&&!Array.isArray(r)){e(r,i,o,s,a,c,u);for(var l in r){var d=r[l];if(Array.isArray(d)){if(l in Mr.arrayKeywords)for(var f=0;f{"use strict";m();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.getSchemaRefs=Wt.resolveUrl=Wt.normalizeId=Wt._getFullPath=Wt.getFullPath=Wt.inlineRef=void 0;var DN=ye(),BN=Sf(),MN=nb(),PN=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function LN(t,e=!0){return typeof t=="boolean"?!0:e===!0?!vf(t):e?rb(t)<=e:!1}Wt.inlineRef=LN;var FN=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function vf(t){for(let e in t){if(FN.has(e))return!0;let n=t[e];if(Array.isArray(n)&&n.some(vf)||typeof n=="object"&&vf(n))return!0}return!1}function rb(t){let e=0;for(let n in t){if(n==="$ref")return 1/0;if(e++,!PN.has(n)&&(typeof t[n]=="object"&&(0,DN.eachItem)(t[n],r=>e+=rb(r)),e===1/0))return 1/0}return e}function ib(t,e="",n){n!==!1&&(e=So(e));let r=t.parse(e);return ob(t,r)}Wt.getFullPath=ib;function ob(t,e){return t.serialize(e).split("#")[0]+"#"}Wt._getFullPath=ob;var UN=/#\/?$/;function So(t){return t?t.replace(UN,""):""}Wt.normalizeId=So;function HN(t,e,n){return n=So(n),t.resolve(e,n)}Wt.resolveUrl=HN;var YN=/^[a-z_][-a-z0-9._]*$/i;function GN(t,e){if(typeof t=="boolean")return{};let{schemaId:n,uriResolver:r}=this.opts,i=So(t[n]||e),o={"":i},s=ib(r,i,!1),a={},c=new Set;return MN(t,{allKeys:!0},(d,f,h,A)=>{if(A===void 0)return;let g=s+f,b=o[A];typeof d[n]=="string"&&(b=x.call(this,d[n])),E.call(this,d.$anchor),E.call(this,d.$dynamicAnchor),o[f]=b;function x(T){let _=this.opts.uriResolver.resolve;if(T=So(b?_(b,T):T),c.has(T))throw l(T);c.add(T);let R=this.refs[T];return typeof R=="string"&&(R=this.refs[R]),typeof R=="object"?u(d,R.schema,T):T!==So(g)&&(T[0]==="#"?(u(d,a[T],T),a[T]=d):this.refs[T]=g),T}function E(T){if(typeof T=="string"){if(!YN.test(T))throw new Error(`invalid anchor "${T}"`);x.call(this,`#${T}`)}}}),a;function u(d,f,h){if(f!==void 0&&!BN(d,f))throw l(h)}function l(d){return new Error(`reference "${d}" resolves to more than one schema`)}}Wt.getSchemaRefs=GN});var Ys=F(Pr=>{"use strict";m();Object.defineProperty(Pr,"__esModule",{value:!0});Pr.getData=Pr.KeywordCxt=Pr.validateFunctionCode=void 0;var lb=Ug(),sb=Ls(),Nf=Ef(),Vc=Ls(),KN=jg(),Hs=Xg(),kf=Zg(),te=he(),se=ur(),QN=Fs(),lr=ye(),Us=Ps();function WN(t){if(hb(t)&&(Ab(t),fb(t))){VN(t);return}db(t,()=>(0,lb.topBoolOrEmptySchema)(t))}Pr.validateFunctionCode=WN;function db({gen:t,validateName:e,schema:n,schemaEnv:r,opts:i},o){i.code.es5?t.func(e,(0,te._)`${se.default.data}, ${se.default.valCxt}`,r.$async,()=>{t.code((0,te._)`"use strict"; ${ab(n,i)}`),qN(t,i),t.code(o)}):t.func(e,(0,te._)`${se.default.data}, ${jN(i)}`,r.$async,()=>t.code(ab(n,i)).code(o))}function jN(t){return(0,te._)`{${se.default.instancePath}="", ${se.default.parentData}, ${se.default.parentDataProperty}, ${se.default.rootData}=${se.default.data}${t.dynamicRef?(0,te._)`, ${se.default.dynamicAnchors}={}`:te.nil}}={}`}function qN(t,e){t.if(se.default.valCxt,()=>{t.var(se.default.instancePath,(0,te._)`${se.default.valCxt}.${se.default.instancePath}`),t.var(se.default.parentData,(0,te._)`${se.default.valCxt}.${se.default.parentData}`),t.var(se.default.parentDataProperty,(0,te._)`${se.default.valCxt}.${se.default.parentDataProperty}`),t.var(se.default.rootData,(0,te._)`${se.default.valCxt}.${se.default.rootData}`),e.dynamicRef&&t.var(se.default.dynamicAnchors,(0,te._)`${se.default.valCxt}.${se.default.dynamicAnchors}`)},()=>{t.var(se.default.instancePath,(0,te._)`""`),t.var(se.default.parentData,(0,te._)`undefined`),t.var(se.default.parentDataProperty,(0,te._)`undefined`),t.var(se.default.rootData,se.default.data),e.dynamicRef&&t.var(se.default.dynamicAnchors,(0,te._)`{}`)})}function VN(t){let{schema:e,opts:n,gen:r}=t;db(t,()=>{n.$comment&&e.$comment&&mb(t),ZN(t),r.let(se.default.vErrors,null),r.let(se.default.errors,0),n.unevaluated&&$N(t),pb(t),nR(t)})}function $N(t){let{gen:e,validateName:n}=t;t.evaluated=e.const("evaluated",(0,te._)`${n}.evaluated`),e.if((0,te._)`${t.evaluated}.dynamicProps`,()=>e.assign((0,te._)`${t.evaluated}.props`,(0,te._)`undefined`)),e.if((0,te._)`${t.evaluated}.dynamicItems`,()=>e.assign((0,te._)`${t.evaluated}.items`,(0,te._)`undefined`))}function ab(t,e){let n=typeof t=="object"&&t[e.schemaId];return n&&(e.code.source||e.code.process)?(0,te._)`/*# sourceURL=${n} */`:te.nil}function JN(t,e){if(hb(t)&&(Ab(t),fb(t))){XN(t,e);return}(0,lb.boolOrEmptySchema)(t,e)}function fb({schema:t,self:e}){if(typeof t=="boolean")return!t;for(let n in t)if(e.RULES.all[n])return!0;return!1}function hb(t){return typeof t.schema!="boolean"}function XN(t,e){let{schema:n,gen:r,opts:i}=t;i.$comment&&n.$comment&&mb(t),eR(t),tR(t);let o=r.const("_errs",se.default.errors);pb(t,o),r.var(e,(0,te._)`${o} === ${se.default.errors}`)}function Ab(t){(0,lr.checkUnknownRules)(t),zN(t)}function pb(t,e){if(t.opts.jtd)return cb(t,[],!1,e);let n=(0,sb.getSchemaTypes)(t.schema),r=(0,sb.coerceAndCheckDataType)(t,n);cb(t,n,!r,e)}function zN(t){let{schema:e,errSchemaPath:n,opts:r,self:i}=t;e.$ref&&r.ignoreKeywordsWithRef&&(0,lr.schemaHasRulesButRef)(e,i.RULES)&&i.logger.warn(`$ref: keywords ignored in schema at path "${n}"`)}function ZN(t){let{schema:e,opts:n}=t;e.default!==void 0&&n.useDefaults&&n.strictSchema&&(0,lr.checkStrictMode)(t,"default is ignored in the schema root")}function eR(t){let e=t.schema[t.opts.schemaId];e&&(t.baseId=(0,QN.resolveUrl)(t.opts.uriResolver,t.baseId,e))}function tR(t){if(t.schema.$async&&!t.schemaEnv.$async)throw new Error("async schema in sync schema")}function mb({gen:t,schemaEnv:e,schema:n,errSchemaPath:r,opts:i}){let o=n.$comment;if(i.$comment===!0)t.code((0,te._)`${se.default.self}.logger.log(${o})`);else if(typeof i.$comment=="function"){let s=(0,te.str)`${r}/$comment`,a=t.scopeValue("root",{ref:e.root});t.code((0,te._)`${se.default.self}.opts.$comment(${o}, ${s}, ${a}.schema)`)}}function nR(t){let{gen:e,schemaEnv:n,validateName:r,ValidationError:i,opts:o}=t;n.$async?e.if((0,te._)`${se.default.errors} === 0`,()=>e.return(se.default.data),()=>e.throw((0,te._)`new ${i}(${se.default.vErrors})`)):(e.assign((0,te._)`${r}.errors`,se.default.vErrors),o.unevaluated&&rR(t),e.return((0,te._)`${se.default.errors} === 0`))}function rR({gen:t,evaluated:e,props:n,items:r}){n instanceof te.Name&&t.assign((0,te._)`${e}.props`,n),r instanceof te.Name&&t.assign((0,te._)`${e}.items`,r)}function cb(t,e,n,r){let{gen:i,schema:o,data:s,allErrors:a,opts:c,self:u}=t,{RULES:l}=u;if(o.$ref&&(c.ignoreKeywordsWithRef||!(0,lr.schemaHasRulesButRef)(o,l))){i.block(()=>bb(t,"$ref",l.all.$ref.definition));return}c.jtd||iR(t,e),i.block(()=>{for(let f of l.rules)d(f);d(l.post)});function d(f){(0,Nf.shouldUseGroup)(o,f)&&(f.type?(i.if((0,Vc.checkDataType)(f.type,s,c.strictNumbers)),ub(t,f),e.length===1&&e[0]===f.type&&n&&(i.else(),(0,Vc.reportTypeError)(t)),i.endIf()):ub(t,f),a||i.if((0,te._)`${se.default.errors} === ${r||0}`))}}function ub(t,e){let{gen:n,schema:r,opts:{useDefaults:i}}=t;i&&(0,KN.assignDefaults)(t,e.type),n.block(()=>{for(let o of e.rules)(0,Nf.shouldUseRule)(r,o)&&bb(t,o.keyword,o.definition,e.type)})}function iR(t,e){t.schemaEnv.meta||!t.opts.strictTypes||(oR(t,e),t.opts.allowUnionTypes||sR(t,e),aR(t,t.dataTypes))}function oR(t,e){if(e.length){if(!t.dataTypes.length){t.dataTypes=e;return}e.forEach(n=>{gb(t.dataTypes,n)||Rf(t,`type "${n}" not allowed by context "${t.dataTypes.join(",")}"`)}),uR(t,e)}}function sR(t,e){e.length>1&&!(e.length===2&&e.includes("null"))&&Rf(t,"use allowUnionTypes to allow union type keyword")}function aR(t,e){let n=t.self.RULES.all;for(let r in n){let i=n[r];if(typeof i=="object"&&(0,Nf.shouldUseRule)(t.schema,i)){let{type:o}=i.definition;o.length&&!o.some(s=>cR(e,s))&&Rf(t,`missing type "${o.join(",")}" for keyword "${r}"`)}}}function cR(t,e){return t.includes(e)||e==="number"&&t.includes("integer")}function gb(t,e){return t.includes(e)||e==="integer"&&t.includes("number")}function uR(t,e){let n=[];for(let r of t.dataTypes)gb(e,r)?n.push(r):e.includes("integer")&&r==="number"&&n.push("integer");t.dataTypes=n}function Rf(t,e){let n=t.schemaEnv.baseId+t.errSchemaPath;e+=` at "${n}" (strictTypes)`,(0,lr.checkStrictMode)(t,e,t.opts.strictTypes)}var $c=class{constructor(e,n,r){if((0,Hs.validateKeywordUsage)(e,n,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=n.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,lr.schemaRefOrVal)(e,this.schema,r,this.$data),this.schemaType=n.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=n,this.$data)this.schemaCode=e.gen.const("vSchema",xb(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,Hs.validSchemaType)(this.schema,n.schemaType,n.allowUndefined))throw new Error(`${r} value must be ${JSON.stringify(n.schemaType)}`);("code"in n?n.trackErrors:n.errors!==!1)&&(this.errsCount=e.gen.const("_errs",se.default.errors))}result(e,n,r){this.failResult((0,te.not)(e),n,r)}failResult(e,n,r){this.gen.if(e),r?r():this.error(),n?(this.gen.else(),n(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,n){this.failResult((0,te.not)(e),void 0,n)}fail(e){if(e===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:n}=this;this.fail((0,te._)`${n} !== undefined && (${(0,te.or)(this.invalid$data(),e)})`)}error(e,n,r){if(n){this.setParams(n),this._error(e,r),this.setParams({});return}this._error(e,r)}_error(e,n){(e?Us.reportExtraError:Us.reportError)(this,this.def.error,n)}$dataError(){(0,Us.reportError)(this,this.def.$dataError||Us.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,Us.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,n){n?Object.assign(this.params,e):this.params=e}block$data(e,n,r=te.nil){this.gen.block(()=>{this.check$data(e,r),n()})}check$data(e=te.nil,n=te.nil){if(!this.$data)return;let{gen:r,schemaCode:i,schemaType:o,def:s}=this;r.if((0,te.or)((0,te._)`${i} === undefined`,n)),e!==te.nil&&r.assign(e,!0),(o.length||s.validateSchema)&&(r.elseIf(this.invalid$data()),this.$dataError(),e!==te.nil&&r.assign(e,!1)),r.else()}invalid$data(){let{gen:e,schemaCode:n,schemaType:r,def:i,it:o}=this;return(0,te.or)(s(),a());function s(){if(r.length){if(!(n instanceof te.Name))throw new Error("ajv implementation error");let c=Array.isArray(r)?r:[r];return(0,te._)`${(0,Vc.checkDataTypes)(c,n,o.opts.strictNumbers,Vc.DataType.Wrong)}`}return te.nil}function a(){if(i.validateSchema){let c=e.scopeValue("validate$data",{ref:i.validateSchema});return(0,te._)`!${c}(${n})`}return te.nil}}subschema(e,n){let r=(0,kf.getSubschema)(this.it,e);(0,kf.extendSubschemaData)(r,this.it,e),(0,kf.extendSubschemaMode)(r,e);let i={...this.it,...r,items:void 0,props:void 0};return JN(i,n),i}mergeEvaluated(e,n){let{it:r,gen:i}=this;r.opts.unevaluated&&(r.props!==!0&&e.props!==void 0&&(r.props=lr.mergeEvaluated.props(i,e.props,r.props,n)),r.items!==!0&&e.items!==void 0&&(r.items=lr.mergeEvaluated.items(i,e.items,r.items,n)))}mergeValidEvaluated(e,n){let{it:r,gen:i}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return i.if(n,()=>this.mergeEvaluated(e,te.Name)),!0}};Pr.KeywordCxt=$c;function bb(t,e,n,r){let i=new $c(t,n,e);"code"in n?n.code(i,r):i.$data&&n.validate?(0,Hs.funcKeywordCode)(i,n):"macro"in n?(0,Hs.macroKeywordCode)(i,n):(n.compile||n.validate)&&(0,Hs.funcKeywordCode)(i,n)}var lR=/^\/(?:[^~]|~0|~1)*$/,dR=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function xb(t,{dataLevel:e,dataNames:n,dataPathArr:r}){let i,o;if(t==="")return se.default.rootData;if(t[0]==="/"){if(!lR.test(t))throw new Error(`Invalid JSON-pointer: ${t}`);i=t,o=se.default.rootData}else{let u=dR.exec(t);if(!u)throw new Error(`Invalid JSON-pointer: ${t}`);let l=+u[1];if(i=u[2],i==="#"){if(l>=e)throw new Error(c("property/index",l));return r[e-l]}if(l>e)throw new Error(c("data",l));if(o=n[e-l],!i)return o}let s=o,a=i.split("/");for(let u of a)u&&(o=(0,te._)`${o}${(0,te.getProperty)((0,lr.unescapeJsonPointer)(u))}`,s=(0,te._)`${s} && ${o}`);return s;function c(u,l){return`Cannot access ${u} ${l} levels up, current level is ${e}`}}Pr.getData=xb});var Jc=F(Df=>{"use strict";m();Object.defineProperty(Df,"__esModule",{value:!0});var Of=class extends Error{constructor(e){super("validation failed"),this.errors=e,this.ajv=this.validation=!0}};Df.default=Of});var Gs=F(Pf=>{"use strict";m();Object.defineProperty(Pf,"__esModule",{value:!0});var Bf=Fs(),Mf=class extends Error{constructor(e,n,r,i){super(i||`can't resolve reference ${r} from id ${n}`),this.missingRef=(0,Bf.resolveUrl)(e,n,r),this.missingSchema=(0,Bf.normalizeId)((0,Bf.getFullPath)(e,this.missingRef))}};Pf.default=Mf});var zc=F(hn=>{"use strict";m();Object.defineProperty(hn,"__esModule",{value:!0});hn.resolveSchema=hn.getCompilingSchema=hn.resolveRef=hn.compileSchema=hn.SchemaEnv=void 0;var Cn=he(),fR=Jc(),vi=ur(),Tn=Fs(),Eb=ye(),hR=Ys(),vo=class{constructor(e){var n;this.refs={},this.dynamicAnchors={};let r;typeof e.schema=="object"&&(r=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(n=e.baseId)!==null&&n!==void 0?n:(0,Tn.normalizeId)(r?.[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=r?.$async,this.refs={}}};hn.SchemaEnv=vo;function Ff(t){let e=Ib.call(this,t);if(e)return e;let n=(0,Tn.getFullPath)(this.opts.uriResolver,t.root.baseId),{es5:r,lines:i}=this.opts.code,{ownProperties:o}=this.opts,s=new Cn.CodeGen(this.scope,{es5:r,lines:i,ownProperties:o}),a;t.$async&&(a=s.scopeValue("Error",{ref:fR.default,code:(0,Cn._)`require("ajv/dist/runtime/validation_error").default`}));let c=s.scopeName("validate");t.validateName=c;let u={gen:s,allErrors:this.opts.allErrors,data:vi.default.data,parentData:vi.default.parentData,parentDataProperty:vi.default.parentDataProperty,dataNames:[vi.default.data],dataPathArr:[Cn.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:s.scopeValue("schema",this.opts.code.source===!0?{ref:t.schema,code:(0,Cn.stringify)(t.schema)}:{ref:t.schema}),validateName:c,ValidationError:a,schema:t.schema,schemaEnv:t,rootId:n,baseId:t.baseId||n,schemaPath:Cn.nil,errSchemaPath:t.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,Cn._)`""`,opts:this.opts,self:this},l;try{this._compilations.add(t),(0,hR.validateFunctionCode)(u),s.optimize(this.opts.code.optimize);let d=s.toString();l=`${s.scopeRefs(vi.default.scope)}return ${d}`,this.opts.code.process&&(l=this.opts.code.process(l,t));let h=new Function(`${vi.default.self}`,`${vi.default.scope}`,l)(this,this.scope.get());if(this.scope.value(c,{ref:h}),h.errors=null,h.schema=t.schema,h.schemaEnv=t,t.$async&&(h.$async=!0),this.opts.code.source===!0&&(h.source={validateName:c,validateCode:d,scopeValues:s._values}),this.opts.unevaluated){let{props:A,items:g}=u;h.evaluated={props:A instanceof Cn.Name?void 0:A,items:g instanceof Cn.Name?void 0:g,dynamicProps:A instanceof Cn.Name,dynamicItems:g instanceof Cn.Name},h.source&&(h.source.evaluated=(0,Cn.stringify)(h.evaluated))}return t.validate=h,t}catch(d){throw delete t.validate,delete t.validateName,l&&this.logger.error("Error compiling schema, function code:",l),d}finally{this._compilations.delete(t)}}hn.compileSchema=Ff;function AR(t,e,n){var r;n=(0,Tn.resolveUrl)(this.opts.uriResolver,e,n);let i=t.refs[n];if(i)return i;let o=gR.call(this,t,n);if(o===void 0){let s=(r=t.localRefs)===null||r===void 0?void 0:r[n],{schemaId:a}=this.opts;s&&(o=new vo({schema:s,schemaId:a,root:t,baseId:e}))}if(o!==void 0)return t.refs[n]=pR.call(this,o)}hn.resolveRef=AR;function pR(t){return(0,Tn.inlineRef)(t.schema,this.opts.inlineRefs)?t.schema:t.validate?t:Ff.call(this,t)}function Ib(t){for(let e of this._compilations)if(mR(e,t))return e}hn.getCompilingSchema=Ib;function mR(t,e){return t.schema===e.schema&&t.root===e.root&&t.baseId===e.baseId}function gR(t,e){let n;for(;typeof(n=this.refs[e])=="string";)e=n;return n||this.schemas[e]||Xc.call(this,t,e)}function Xc(t,e){let n=this.opts.uriResolver.parse(e),r=(0,Tn._getFullPath)(this.opts.uriResolver,n),i=(0,Tn.getFullPath)(this.opts.uriResolver,t.baseId,void 0);if(Object.keys(t.schema).length>0&&r===i)return Lf.call(this,n,t);let o=(0,Tn.normalizeId)(r),s=this.refs[o]||this.schemas[o];if(typeof s=="string"){let a=Xc.call(this,t,s);return typeof a?.schema!="object"?void 0:Lf.call(this,n,a)}if(typeof s?.schema=="object"){if(s.validate||Ff.call(this,s),o===(0,Tn.normalizeId)(e)){let{schema:a}=s,{schemaId:c}=this.opts,u=a[c];return u&&(i=(0,Tn.resolveUrl)(this.opts.uriResolver,i,u)),new vo({schema:a,schemaId:c,root:t,baseId:i})}return Lf.call(this,n,s)}}hn.resolveSchema=Xc;var bR=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function Lf(t,{baseId:e,schema:n,root:r}){var i;if(((i=t.fragment)===null||i===void 0?void 0:i[0])!=="/")return;for(let a of t.fragment.slice(1).split("/")){if(typeof n=="boolean")return;let c=n[(0,Eb.unescapeFragment)(a)];if(c===void 0)return;n=c;let u=typeof n=="object"&&n[this.opts.schemaId];!bR.has(a)&&u&&(e=(0,Tn.resolveUrl)(this.opts.uriResolver,e,u))}let o;if(typeof n!="boolean"&&n.$ref&&!(0,Eb.schemaHasRulesButRef)(n,this.RULES)){let a=(0,Tn.resolveUrl)(this.opts.uriResolver,e,n.$ref);o=Xc.call(this,r,a)}let{schemaId:s}=this.opts;if(o=o||new vo({schema:n,schemaId:s,root:r,baseId:e}),o.schema!==o.root.schema)return o}});var yb=F((r7,xR)=>{xR.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var Yf=F((i7,vb)=>{"use strict";m();var ER=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),Tb=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u),Uf=RegExp.prototype.test.bind(/^[\da-f]{2}$/iu),wb=RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu),IR=RegExp.prototype.test.bind(/^[\da-z\-._~!$&'()*+,;=:@/]$/iu);function Hf(t){let e="",n=0,r=0;for(r=0;r=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102))return"";e+=t[r];break}for(r+=1;r=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102))return"";e+=t[r]}return e}var yR=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function Cb(t){return t.length=0,!0}function CR(t,e,n){if(t.length){let r=Hf(t);if(r!=="")e.push(r);else return n.error=!0,!1;t.length=0}return!0}function TR(t){let e=0,n={error:!1,address:"",zone:""},r=[],i=[],o=!1,s=!1,a=CR;for(let c=0;c7){n.error=!0;break}c>0&&t[c-1]===":"&&(o=!0),r.push(":");continue}else if(u==="%"){if(!a(i,r,n))break;a=Cb}else{i.push(u);continue}}return i.length&&(a===Cb?n.zone=i.join(""):s?r.push(i.join("")):r.push(Hf(i))),n.address=r.join(""),n}function _b(t){if(wR(t,":")<2)return{host:t,isIPV6:!1};let e=TR(t);if(e.error)return{host:t,isIPV6:!1};{let n=e.address,r=e.address;return e.zone&&(n+="%"+e.zone,r+="%25"+e.zone),{host:n,isIPV6:!0,escapedHost:r}}}function wR(t,e){let n=0;for(let r=0;rSR[r])}function NR(t,e=!1){if(t.indexOf("%")===-1)return t;let n="";for(let r=0;r{"use strict";m();var{isUUID:BR}=Yf(),MR=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,PR=["http","https","ws","wss","urn","urn:uuid"];function LR(t){return PR.indexOf(t)!==-1}function Gf(t){return t.secure===!0?!0:t.secure===!1?!1:t.scheme?t.scheme.length===3&&(t.scheme[0]==="w"||t.scheme[0]==="W")&&(t.scheme[1]==="s"||t.scheme[1]==="S")&&(t.scheme[2]==="s"||t.scheme[2]==="S"):!1}function kb(t){return t.host||(t.error=t.error||"HTTP URIs must have a host."),t}function Nb(t){let e=String(t.scheme).toLowerCase()==="https";return(t.port===(e?443:80)||t.port==="")&&(t.port=void 0),t.path||(t.path="/"),t}function FR(t){return t.secure=Gf(t),t.resourceName=(t.path||"/")+(t.query?"?"+t.query:""),t.path=void 0,t.query=void 0,t}function UR(t){if((t.port===(Gf(t)?443:80)||t.port==="")&&(t.port=void 0),typeof t.secure=="boolean"&&(t.scheme=t.secure?"wss":"ws",t.secure=void 0),t.resourceName){let[e,n]=t.resourceName.split("?");t.path=e&&e!=="/"?e:void 0,t.query=n,t.resourceName=void 0}return t.fragment=void 0,t}function HR(t,e){if(!t.path)return t.error="URN can not be parsed",t;let n=t.path.match(MR);if(n){let r=e.scheme||t.scheme||"urn";t.nid=n[1].toLowerCase(),t.nss=n[2];let i=`${r}:${e.nid||t.nid}`,o=Kf(i);t.path=void 0,o&&(t=o.parse(t,e))}else t.error=t.error||"URN can not be parsed.";return t}function YR(t,e){if(t.nid===void 0)throw new Error("URN without nid cannot be serialized");let n=e.scheme||t.scheme||"urn",r=t.nid.toLowerCase(),i=`${n}:${e.nid||r}`,o=Kf(i);o&&(t=o.serialize(t,e));let s=t,a=t.nss;return s.path=`${r||e.nid}:${a}`,e.skipEscape=!0,s}function GR(t,e){let n=t;return n.uuid=n.nss,n.nss=void 0,!e.tolerant&&(!n.uuid||!BR(n.uuid))&&(n.error=n.error||"UUID is not valid."),n}function KR(t){let e=t;return e.nss=(t.uuid||"").toLowerCase(),e}var Rb={scheme:"http",domainHost:!0,parse:kb,serialize:Nb},QR={scheme:"https",domainHost:Rb.domainHost,parse:kb,serialize:Nb},Zc={scheme:"ws",domainHost:!0,parse:FR,serialize:UR},WR={scheme:"wss",domainHost:Zc.domainHost,parse:Zc.parse,serialize:Zc.serialize},jR={scheme:"urn",parse:HR,serialize:YR,skipNormalize:!0},qR={scheme:"urn:uuid",parse:GR,serialize:KR,skipNormalize:!0},eu={http:Rb,https:QR,ws:Zc,wss:WR,urn:jR,"urn:uuid":qR};Object.setPrototypeOf(eu,null);function Kf(t){return t&&(eu[t]||eu[t.toLowerCase()])||void 0}Ob.exports={wsIsSecure:Gf,SCHEMES:eu,isValidSchemeName:LR,getSchemeHandler:Kf}});var Ub=F((c7,tu)=>{"use strict";m();var{normalizeIPv6:VR,removeDotSegments:Ks,recomposeAuthority:$R,normalizePercentEncoding:JR,normalizePathEncoding:XR,escapePreservingEscapes:zR,reescapeHostDelimiters:ZR,isIPv4:eO,nonSimpleDomain:tO}=Yf(),{SCHEMES:nO,getSchemeHandler:Mb}=Db();function rO(t,e){return typeof t=="string"?t=cO(t,e):typeof t=="object"&&(t=ko(ki(t,e),e)),t}function iO(t,e,n){let r=n?Object.assign({scheme:"null"},n):{scheme:"null"},i=Pb(ko(t,r),ko(e,r),r,!0);return r.skipEscape=!0,ki(i,r)}function Pb(t,e,n,r){let i={};return r||(t=ko(ki(t,n),n),e=ko(ki(e,n),n)),n=n||{},!n.tolerant&&e.scheme?(i.scheme=e.scheme,i.userinfo=e.userinfo,i.host=e.host,i.port=e.port,i.path=Ks(e.path||""),i.query=e.query):(e.userinfo!==void 0||e.host!==void 0||e.port!==void 0?(i.userinfo=e.userinfo,i.host=e.host,i.port=e.port,i.path=Ks(e.path||""),i.query=e.query):(e.path?(e.path[0]==="/"?i.path=Ks(e.path):((t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)&&!t.path?i.path="/"+e.path:t.path?i.path=t.path.slice(0,t.path.lastIndexOf("/")+1)+e.path:i.path=e.path,i.path=Ks(i.path)),i.query=e.query):(i.path=t.path,e.query!==void 0?i.query=e.query:i.query=t.query),i.userinfo=t.userinfo,i.host=t.host,i.port=t.port),i.scheme=t.scheme),i.fragment=e.fragment,i}function oO(t,e,n){let r=Bb(t,n),i=Bb(e,n);return r!==void 0&&i!==void 0&&r.toLowerCase()===i.toLowerCase()}function ki(t,e){let n={host:t.host,scheme:t.scheme,userinfo:t.userinfo,port:t.port,path:t.path,query:t.query,nid:t.nid,nss:t.nss,uuid:t.uuid,fragment:t.fragment,reference:t.reference,resourceName:t.resourceName,secure:t.secure,error:""},r=Object.assign({},e),i=[],o=Mb(r.scheme||n.scheme);o&&o.serialize&&o.serialize(n,r),n.path!==void 0&&(r.skipEscape?n.path=JR(n.path):(n.path=zR(n.path),n.scheme!==void 0&&(n.path=n.path.split("%3A").join(":")))),r.reference!=="suffix"&&n.scheme&&i.push(n.scheme,":");let s=$R(n);if(s!==void 0&&(r.reference!=="suffix"&&i.push("//"),i.push(s),n.path&&n.path[0]!=="/"&&i.push("/")),n.path!==void 0){let a=n.path;!r.absolutePath&&(!o||!o.absolutePath)&&(a=Ks(a)),s===void 0&&a[0]==="/"&&a[1]==="/"&&(a="/%2F"+a.slice(2)),i.push(a)}return n.query!==void 0&&i.push("?",n.query),n.fragment!==void 0&&i.push("#",n.fragment),i.join("")}var sO=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function aO(t,e){if(e[2]!==void 0&&t.path&&t.path[0]!=="/")return'URI path must start with "/" when authority is present.';if(typeof t.port=="number"&&(t.port<0||t.port>65535))return"URI port is malformed."}function Lb(t,e){let n=Object.assign({},e),r={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},i=!1,o=!1;n.reference==="suffix"&&(n.scheme?t=n.scheme+":"+t:t="//"+t);let s=t.match(sO);if(s){r.scheme=s[1],r.userinfo=s[3],r.host=s[4],r.port=parseInt(s[5],10),r.path=s[6]||"",r.query=s[7],r.fragment=s[8],isNaN(r.port)&&(r.port=s[5]);let a=aO(r,s);if(a!==void 0&&(r.error=r.error||a,i=!0),r.host)if(eO(r.host)===!1){let l=VR(r.host);r.host=l.host.toLowerCase(),o=l.isIPV6}else o=!0;r.scheme===void 0&&r.userinfo===void 0&&r.host===void 0&&r.port===void 0&&r.query===void 0&&!r.path?r.reference="same-document":r.scheme===void 0?r.reference="relative":r.fragment===void 0?r.reference="absolute":r.reference="uri",n.reference&&n.reference!=="suffix"&&n.reference!==r.reference&&(r.error=r.error||"URI is not a "+n.reference+" reference.");let c=Mb(n.scheme||r.scheme);if(!n.unicodeSupport&&(!c||!c.unicodeSupport)&&r.host&&(n.domainHost||c&&c.domainHost)&&o===!1&&tO(r.host))try{r.host=new URL("http://"+r.host).hostname}catch(u){r.error=r.error||"Host's domain name can not be converted to ASCII: "+u}if((!c||c&&!c.skipNormalize)&&(t.indexOf("%")!==-1&&(r.scheme!==void 0&&(r.scheme=unescape(r.scheme)),r.host!==void 0&&(r.host=ZR(unescape(r.host),o))),r.path&&(r.path=XR(r.path)),r.fragment))try{r.fragment=encodeURI(decodeURIComponent(r.fragment))}catch{r.error=r.error||"URI malformed"}c&&c.parse&&c.parse(r,n)}else r.error=r.error||"URI can not be parsed.";return{parsed:r,malformedAuthorityOrPort:i}}function ko(t,e){return Lb(t,e).parsed}function cO(t,e){return Fb(t,e).normalized}function Fb(t,e){let{parsed:n,malformedAuthorityOrPort:r}=Lb(t,e);return{normalized:r?t:ki(n,e),malformedAuthorityOrPort:r}}function Bb(t,e){if(typeof t=="string"){let{normalized:n,malformedAuthorityOrPort:r}=Fb(t,e);return r?void 0:n}if(typeof t=="object")return ki(t,e)}var Qf={SCHEMES:nO,normalize:rO,resolve:iO,resolveComponent:Pb,equal:oO,serialize:ki,parse:ko};tu.exports=Qf;tu.exports.default=Qf;tu.exports.fastUri=Qf});var Yb=F(Wf=>{"use strict";m();Object.defineProperty(Wf,"__esModule",{value:!0});var Hb=Ub();Hb.code='require("ajv/dist/runtime/uri").default';Wf.default=Hb});var $b=F(It=>{"use strict";m();Object.defineProperty(It,"__esModule",{value:!0});It.CodeGen=It.Name=It.nil=It.stringify=It.str=It._=It.KeywordCxt=void 0;var uO=Ys();Object.defineProperty(It,"KeywordCxt",{enumerable:!0,get:function(){return uO.KeywordCxt}});var No=he();Object.defineProperty(It,"_",{enumerable:!0,get:function(){return No._}});Object.defineProperty(It,"str",{enumerable:!0,get:function(){return No.str}});Object.defineProperty(It,"stringify",{enumerable:!0,get:function(){return No.stringify}});Object.defineProperty(It,"nil",{enumerable:!0,get:function(){return No.nil}});Object.defineProperty(It,"Name",{enumerable:!0,get:function(){return No.Name}});Object.defineProperty(It,"CodeGen",{enumerable:!0,get:function(){return No.CodeGen}});var lO=Jc(),jb=Gs(),dO=xf(),Qs=zc(),fO=he(),Ws=Fs(),nu=Ls(),qf=ye(),Gb=yb(),hO=Yb(),qb=(t,e)=>new RegExp(t,e);qb.code="new RegExp";var AO=["removeAdditional","useDefaults","coerceTypes"],pO=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),mO={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},gO={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},Kb=200;function bO(t){var e,n,r,i,o,s,a,c,u,l,d,f,h,A,g,b,x,E,T,_,R,S,v,D,M;let G=t.strict,W=(e=t.code)===null||e===void 0?void 0:e.optimize,Y=W===!0||W===void 0?1:W||0,H=(r=(n=t.code)===null||n===void 0?void 0:n.regExp)!==null&&r!==void 0?r:qb,B=(i=t.uriResolver)!==null&&i!==void 0?i:hO.default;return{strictSchema:(s=(o=t.strictSchema)!==null&&o!==void 0?o:G)!==null&&s!==void 0?s:!0,strictNumbers:(c=(a=t.strictNumbers)!==null&&a!==void 0?a:G)!==null&&c!==void 0?c:!0,strictTypes:(l=(u=t.strictTypes)!==null&&u!==void 0?u:G)!==null&&l!==void 0?l:"log",strictTuples:(f=(d=t.strictTuples)!==null&&d!==void 0?d:G)!==null&&f!==void 0?f:"log",strictRequired:(A=(h=t.strictRequired)!==null&&h!==void 0?h:G)!==null&&A!==void 0?A:!1,code:t.code?{...t.code,optimize:Y,regExp:H}:{optimize:Y,regExp:H},loopRequired:(g=t.loopRequired)!==null&&g!==void 0?g:Kb,loopEnum:(b=t.loopEnum)!==null&&b!==void 0?b:Kb,meta:(x=t.meta)!==null&&x!==void 0?x:!0,messages:(E=t.messages)!==null&&E!==void 0?E:!0,inlineRefs:(T=t.inlineRefs)!==null&&T!==void 0?T:!0,schemaId:(_=t.schemaId)!==null&&_!==void 0?_:"$id",addUsedSchema:(R=t.addUsedSchema)!==null&&R!==void 0?R:!0,validateSchema:(S=t.validateSchema)!==null&&S!==void 0?S:!0,validateFormats:(v=t.validateFormats)!==null&&v!==void 0?v:!0,unicodeRegExp:(D=t.unicodeRegExp)!==null&&D!==void 0?D:!0,int32range:(M=t.int32range)!==null&&M!==void 0?M:!0,uriResolver:B}}var js=class{constructor(e={}){this.schemas={},this.refs={},this.formats=Object.create(null),this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...bO(e)};let{es5:n,lines:r}=this.opts.code;this.scope=new fO.ValueScope({scope:{},prefixes:pO,es5:n,lines:r}),this.logger=TO(e.logger);let i=e.validateFormats;e.validateFormats=!1,this.RULES=(0,dO.getRules)(),Qb.call(this,mO,e,"NOT SUPPORTED"),Qb.call(this,gO,e,"DEPRECATED","warn"),this._metaOpts=yO.call(this),e.formats&&EO.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&IO.call(this,e.keywords),typeof e.meta=="object"&&this.addMetaSchema(e.meta),xO.call(this),e.validateFormats=i}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:n,schemaId:r}=this.opts,i=Gb;r==="id"&&(i={...Gb},i.id=i.$id,delete i.$id),n&&e&&this.addMetaSchema(i,i[r],!1)}defaultMeta(){let{meta:e,schemaId:n}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[n]||e:void 0}validate(e,n){let r;if(typeof e=="string"){if(r=this.getSchema(e),!r)throw new Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);let i=r(n);return"$async"in r||(this.errors=r.errors),i}compile(e,n){let r=this._addSchema(e,n);return r.validate||this._compileSchemaEnv(r)}compileAsync(e,n){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");let{loadSchema:r}=this.opts;return i.call(this,e,n);async function i(l,d){await o.call(this,l.$schema);let f=this._addSchema(l,d);return f.validate||s.call(this,f)}async function o(l){l&&!this.getSchema(l)&&await i.call(this,{$ref:l},!0)}async function s(l){try{return this._compileSchemaEnv(l)}catch(d){if(!(d instanceof jb.default))throw d;return a.call(this,d),await c.call(this,d.missingSchema),s.call(this,l)}}function a({missingSchema:l,missingRef:d}){if(this.refs[l])throw new Error(`AnySchema ${l} is loaded but ${d} cannot be resolved`)}async function c(l){let d=await u.call(this,l);this.refs[l]||await o.call(this,d.$schema),this.refs[l]||this.addSchema(d,l,n)}async function u(l){let d=this._loading[l];if(d)return d;try{return await(this._loading[l]=r(l))}finally{delete this._loading[l]}}}addSchema(e,n,r,i=this.opts.validateSchema){if(Array.isArray(e)){for(let s of e)this.addSchema(s,void 0,r,i);return this}let o;if(typeof e=="object"){let{schemaId:s}=this.opts;if(o=e[s],o!==void 0&&typeof o!="string")throw new Error(`schema ${s} must be string`)}return n=(0,Ws.normalizeId)(n||o),this._checkUnique(n),this.schemas[n]=this._addSchema(e,r,n,i,!0),this}addMetaSchema(e,n,r=this.opts.validateSchema){return this.addSchema(e,n,!0,r),this}validateSchema(e,n){if(typeof e=="boolean")return!0;let r;if(r=e.$schema,r!==void 0&&typeof r!="string")throw new Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let i=this.validate(r,e);if(!i&&n){let o="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(o);else throw new Error(o)}return i}getSchema(e){let n;for(;typeof(n=Wb.call(this,e))=="string";)e=n;if(n===void 0){let{schemaId:r}=this.opts,i=new Qs.SchemaEnv({schema:{},schemaId:r});if(n=Qs.resolveSchema.call(this,i,e),!n)return;this.refs[e]=n}return n.validate||this._compileSchemaEnv(n)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let n=Wb.call(this,e);return typeof n=="object"&&this._cache.delete(n.schema),delete this.schemas[e],delete this.refs[e],this}case"object":{let n=e;this._cache.delete(n);let r=e[this.opts.schemaId];return r&&(r=(0,Ws.normalizeId)(r),delete this.schemas[r],delete this.refs[r]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let n of e)this.addKeyword(n);return this}addKeyword(e,n){let r;if(typeof e=="string")r=e,typeof n=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),n.keyword=r);else if(typeof e=="object"&&n===void 0){if(n=e,r=n.keyword,Array.isArray(r)&&!r.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(_O.call(this,r,n),!n)return(0,qf.eachItem)(r,o=>jf.call(this,o)),this;vO.call(this,n);let i={...n,type:(0,nu.getJSONTypes)(n.type),schemaType:(0,nu.getJSONTypes)(n.schemaType)};return(0,qf.eachItem)(r,i.type.length===0?o=>jf.call(this,o,i):o=>i.type.forEach(s=>jf.call(this,o,i,s))),this}getKeyword(e){let n=this.RULES.all[e];return typeof n=="object"?n.definition:!!n}removeKeyword(e){let{RULES:n}=this;delete n.keywords[e],delete n.all[e];for(let r of n.rules){let i=r.rules.findIndex(o=>o.keyword===e);i>=0&&r.rules.splice(i,1)}return this}addFormat(e,n){return typeof n=="string"&&(n=new RegExp(n)),this.formats[e]=n,this}errorsText(e=this.errors,{separator:n=", ",dataVar:r="data"}={}){return!e||e.length===0?"No errors":e.map(i=>`${r}${i.instancePath} ${i.message}`).reduce((i,o)=>i+n+o)}$dataMetaSchema(e,n){let r=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let i of n){let o=i.split("/").slice(1),s=e;for(let a of o)s=s[a];for(let a in r){let c=r[a];if(typeof c!="object")continue;let{$data:u}=c.definition,l=s[a];u&&l&&(s[a]=Vb(l))}}return e}_removeAllSchemas(e,n){for(let r in e){let i=e[r];(!n||n.test(r))&&(typeof i=="string"?delete e[r]:i&&!i.meta&&(this._cache.delete(i.schema),delete e[r]))}}_addSchema(e,n,r,i=this.opts.validateSchema,o=this.opts.addUsedSchema){let s,{schemaId:a}=this.opts;if(typeof e=="object")s=e[a];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof e!="boolean")throw new Error("schema must be object or boolean")}let c=this._cache.get(e);if(c!==void 0)return c;r=(0,Ws.normalizeId)(s||r);let u=Ws.getSchemaRefs.call(this,e,r);return c=new Qs.SchemaEnv({schema:e,schemaId:a,meta:n,baseId:r,localRefs:u}),this._cache.set(c.schema,c),o&&!r.startsWith("#")&&(r&&this._checkUnique(r),this.refs[r]=c),i&&this.validateSchema(e,!0),c}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw new Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):Qs.compileSchema.call(this,e),!e.validate)throw new Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let n=this.opts;this.opts=this._metaOpts;try{Qs.compileSchema.call(this,e)}finally{this.opts=n}}};js.ValidationError=lO.default;js.MissingRefError=jb.default;It.default=js;function Qb(t,e,n,r="error"){for(let i in t){let o=i;o in e&&this.logger[r](`${n}: option ${i}. ${t[o]}`)}}function Wb(t){return t=(0,Ws.normalizeId)(t),this.schemas[t]||this.refs[t]}function xO(){let t=this.opts.schemas;if(t)if(Array.isArray(t))this.addSchema(t);else for(let e in t)this.addSchema(t[e],e)}function EO(){for(let t in this.opts.formats){let e=this.opts.formats[t];e&&this.addFormat(t,e)}}function IO(t){if(Array.isArray(t)){this.addVocabulary(t);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let e in t){let n=t[e];n.keyword||(n.keyword=e),this.addKeyword(n)}}function yO(){let t={...this.opts};for(let e of AO)delete t[e];return t}var CO={log(){},warn(){},error(){}};function TO(t){if(t===!1)return CO;if(t===void 0)return console;if(t.log&&t.warn&&t.error)return t;throw new Error("logger must implement log, warn and error methods")}var wO=/^[a-z_$][a-z0-9_$:-]*$/i;function _O(t,e){let{RULES:n}=this;if((0,qf.eachItem)(t,r=>{if(n.keywords[r])throw new Error(`Keyword ${r} is already defined`);if(!wO.test(r))throw new Error(`Keyword ${r} has invalid name`)}),!!e&&e.$data&&!("code"in e||"validate"in e))throw new Error('$data keyword must have "code" or "validate" function')}function jf(t,e,n){var r;let i=e?.post;if(n&&i)throw new Error('keyword with "post" flag cannot have "type"');let{RULES:o}=this,s=i?o.post:o.rules.find(({type:c})=>c===n);if(s||(s={type:n,rules:[]},o.rules.push(s)),o.keywords[t]=!0,!e)return;let a={keyword:t,definition:{...e,type:(0,nu.getJSONTypes)(e.type),schemaType:(0,nu.getJSONTypes)(e.schemaType)}};e.before?SO.call(this,s,a,e.before):s.rules.push(a),o.all[t]=a,(r=e.implements)===null||r===void 0||r.forEach(c=>this.addKeyword(c))}function SO(t,e,n){let r=t.rules.findIndex(i=>i.keyword===n);r>=0?t.rules.splice(r,0,e):(t.rules.push(e),this.logger.warn(`rule ${n} is not defined`))}function vO(t){let{metaSchema:e}=t;e!==void 0&&(t.$data&&this.opts.$data&&(e=Vb(e)),t.validateSchema=this.compile(e,!0))}var kO={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function Vb(t){return{anyOf:[t,kO]}}});var Jb=F(Vf=>{"use strict";m();Object.defineProperty(Vf,"__esModule",{value:!0});var NO={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};Vf.default=NO});var ex=F(Ni=>{"use strict";m();Object.defineProperty(Ni,"__esModule",{value:!0});Ni.callRef=Ni.getValidate=void 0;var RO=Gs(),Xb=fn(),jt=he(),Ro=ur(),zb=zc(),ru=ye(),OO={keyword:"$ref",schemaType:"string",code(t){let{gen:e,schema:n,it:r}=t,{baseId:i,schemaEnv:o,validateName:s,opts:a,self:c}=r,{root:u}=o;if((n==="#"||n==="#/")&&i===u.baseId)return d();let l=zb.resolveRef.call(c,u,i,n);if(l===void 0)throw new RO.default(r.opts.uriResolver,i,n);if(l instanceof zb.SchemaEnv)return f(l);return h(l);function d(){if(o===u)return iu(t,s,o,o.$async);let A=e.scopeValue("root",{ref:u});return iu(t,(0,jt._)`${A}.validate`,u,u.$async)}function f(A){let g=Zb(t,A);iu(t,g,A,A.$async)}function h(A){let g=e.scopeValue("schema",a.code.source===!0?{ref:A,code:(0,jt.stringify)(A)}:{ref:A}),b=e.name("valid"),x=t.subschema({schema:A,dataTypes:[],schemaPath:jt.nil,topSchemaRef:g,errSchemaPath:n},b);t.mergeEvaluated(x),t.ok(b)}}};function Zb(t,e){let{gen:n}=t;return e.validate?n.scopeValue("validate",{ref:e.validate}):(0,jt._)`${n.scopeValue("wrapper",{ref:e})}.validate`}Ni.getValidate=Zb;function iu(t,e,n,r){let{gen:i,it:o}=t,{allErrors:s,schemaEnv:a,opts:c}=o,u=c.passContext?Ro.default.this:jt.nil;r?l():d();function l(){if(!a.$async)throw new Error("async schema referenced by sync schema");let A=i.let("valid");i.try(()=>{i.code((0,jt._)`await ${(0,Xb.callValidateCode)(t,e,u)}`),h(e),s||i.assign(A,!0)},g=>{i.if((0,jt._)`!(${g} instanceof ${o.ValidationError})`,()=>i.throw(g)),f(g),s||i.assign(A,!1)}),t.ok(A)}function d(){t.result((0,Xb.callValidateCode)(t,e,u),()=>h(e),()=>f(e))}function f(A){let g=(0,jt._)`${A}.errors`;i.assign(Ro.default.vErrors,(0,jt._)`${Ro.default.vErrors} === null ? ${g} : ${Ro.default.vErrors}.concat(${g})`),i.assign(Ro.default.errors,(0,jt._)`${Ro.default.vErrors}.length`)}function h(A){var g;if(!o.opts.unevaluated)return;let b=(g=n?.validate)===null||g===void 0?void 0:g.evaluated;if(o.props!==!0)if(b&&!b.dynamicProps)b.props!==void 0&&(o.props=ru.mergeEvaluated.props(i,b.props,o.props));else{let x=i.var("props",(0,jt._)`${A}.evaluated.props`);o.props=ru.mergeEvaluated.props(i,x,o.props,jt.Name)}if(o.items!==!0)if(b&&!b.dynamicItems)b.items!==void 0&&(o.items=ru.mergeEvaluated.items(i,b.items,o.items));else{let x=i.var("items",(0,jt._)`${A}.evaluated.items`);o.items=ru.mergeEvaluated.items(i,x,o.items,jt.Name)}}}Ni.callRef=iu;Ni.default=OO});var tx=F($f=>{"use strict";m();Object.defineProperty($f,"__esModule",{value:!0});var DO=Jb(),BO=ex(),MO=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",DO.default,BO.default];$f.default=MO});var nx=F(Jf=>{"use strict";m();Object.defineProperty(Jf,"__esModule",{value:!0});var ou=he(),Lr=ou.operators,su={maximum:{okStr:"<=",ok:Lr.LTE,fail:Lr.GT},minimum:{okStr:">=",ok:Lr.GTE,fail:Lr.LT},exclusiveMaximum:{okStr:"<",ok:Lr.LT,fail:Lr.GTE},exclusiveMinimum:{okStr:">",ok:Lr.GT,fail:Lr.LTE}},PO={message:({keyword:t,schemaCode:e})=>(0,ou.str)`must be ${su[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,ou._)`{comparison: ${su[t].okStr}, limit: ${e}}`},LO={keyword:Object.keys(su),type:"number",schemaType:"number",$data:!0,error:PO,code(t){let{keyword:e,data:n,schemaCode:r}=t;t.fail$data((0,ou._)`${n} ${su[e].fail} ${r} || isNaN(${n})`)}};Jf.default=LO});var rx=F(Xf=>{"use strict";m();Object.defineProperty(Xf,"__esModule",{value:!0});var qs=he(),FO={message:({schemaCode:t})=>(0,qs.str)`must be multiple of ${t}`,params:({schemaCode:t})=>(0,qs._)`{multipleOf: ${t}}`},UO={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:FO,code(t){let{gen:e,data:n,schemaCode:r,it:i}=t,o=i.opts.multipleOfPrecision,s=e.let("res"),a=o?(0,qs._)`Math.abs(Math.round(${s}) - ${s}) > 1e-${o}`:(0,qs._)`${s} !== parseInt(${s})`;t.fail$data((0,qs._)`(${r} === 0 || (${s} = ${n}/${r}, ${a}))`)}};Xf.default=UO});var ox=F(zf=>{"use strict";m();Object.defineProperty(zf,"__esModule",{value:!0});function ix(t){let e=t.length,n=0,r=0,i;for(;r=55296&&i<=56319&&r{"use strict";m();Object.defineProperty(Zf,"__esModule",{value:!0});var Ri=he(),HO=ye(),YO=ox(),GO={message({keyword:t,schemaCode:e}){let n=t==="maxLength"?"more":"fewer";return(0,Ri.str)`must NOT have ${n} than ${e} characters`},params:({schemaCode:t})=>(0,Ri._)`{limit: ${t}}`},KO={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:GO,code(t){let{keyword:e,data:n,schemaCode:r,it:i}=t,o=e==="maxLength"?Ri.operators.GT:Ri.operators.LT,s=i.opts.unicode===!1?(0,Ri._)`${n}.length`:(0,Ri._)`${(0,HO.useFunc)(t.gen,YO.default)}(${n})`;t.fail$data((0,Ri._)`${s} ${o} ${r}`)}};Zf.default=KO});var ax=F(eh=>{"use strict";m();Object.defineProperty(eh,"__esModule",{value:!0});var QO=fn(),WO=ye(),Oo=he(),jO={message:({schemaCode:t})=>(0,Oo.str)`must match pattern "${t}"`,params:({schemaCode:t})=>(0,Oo._)`{pattern: ${t}}`},qO={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:jO,code(t){let{gen:e,data:n,$data:r,schema:i,schemaCode:o,it:s}=t,a=s.opts.unicodeRegExp?"u":"";if(r){let{regExp:c}=s.opts.code,u=c.code==="new RegExp"?(0,Oo._)`new RegExp`:(0,WO.useFunc)(e,c),l=e.let("valid");e.try(()=>e.assign(l,(0,Oo._)`${u}(${o}, ${a}).test(${n})`),()=>e.assign(l,!1)),t.fail$data((0,Oo._)`!${l}`)}else{let c=(0,QO.usePattern)(t,i);t.fail$data((0,Oo._)`!${c}.test(${n})`)}}};eh.default=qO});var cx=F(th=>{"use strict";m();Object.defineProperty(th,"__esModule",{value:!0});var Vs=he(),VO={message({keyword:t,schemaCode:e}){let n=t==="maxProperties"?"more":"fewer";return(0,Vs.str)`must NOT have ${n} than ${e} properties`},params:({schemaCode:t})=>(0,Vs._)`{limit: ${t}}`},$O={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:VO,code(t){let{keyword:e,data:n,schemaCode:r}=t,i=e==="maxProperties"?Vs.operators.GT:Vs.operators.LT;t.fail$data((0,Vs._)`Object.keys(${n}).length ${i} ${r}`)}};th.default=$O});var ux=F(nh=>{"use strict";m();Object.defineProperty(nh,"__esModule",{value:!0});var $s=fn(),Js=he(),JO=ye(),XO={message:({params:{missingProperty:t}})=>(0,Js.str)`must have required property '${t}'`,params:({params:{missingProperty:t}})=>(0,Js._)`{missingProperty: ${t}}`},zO={keyword:"required",type:"object",schemaType:"array",$data:!0,error:XO,code(t){let{gen:e,schema:n,schemaCode:r,data:i,$data:o,it:s}=t,{opts:a}=s;if(!o&&n.length===0)return;let c=n.length>=a.loopRequired;if(s.allErrors?u():l(),a.strictRequired){let h=t.parentSchema.properties,{definedProperties:A}=t.it;for(let g of n)if(h?.[g]===void 0&&!A.has(g)){let b=s.schemaEnv.baseId+s.errSchemaPath,x=`required property "${g}" is not defined at "${b}" (strictRequired)`;(0,JO.checkStrictMode)(s,x,s.opts.strictRequired)}}function u(){if(c||o)t.block$data(Js.nil,d);else for(let h of n)(0,$s.checkReportMissingProp)(t,h)}function l(){let h=e.let("missing");if(c||o){let A=e.let("valid",!0);t.block$data(A,()=>f(h,A)),t.ok(A)}else e.if((0,$s.checkMissingProp)(t,n,h)),(0,$s.reportMissingProp)(t,h),e.else()}function d(){e.forOf("prop",r,h=>{t.setParams({missingProperty:h}),e.if((0,$s.noPropertyInData)(e,i,h,a.ownProperties),()=>t.error())})}function f(h,A){t.setParams({missingProperty:h}),e.forOf(h,r,()=>{e.assign(A,(0,$s.propertyInData)(e,i,h,a.ownProperties)),e.if((0,Js.not)(A),()=>{t.error(),e.break()})},Js.nil)}}};nh.default=zO});var lx=F(rh=>{"use strict";m();Object.defineProperty(rh,"__esModule",{value:!0});var Xs=he(),ZO={message({keyword:t,schemaCode:e}){let n=t==="maxItems"?"more":"fewer";return(0,Xs.str)`must NOT have ${n} than ${e} items`},params:({schemaCode:t})=>(0,Xs._)`{limit: ${t}}`},eD={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:ZO,code(t){let{keyword:e,data:n,schemaCode:r}=t,i=e==="maxItems"?Xs.operators.GT:Xs.operators.LT;t.fail$data((0,Xs._)`${n}.length ${i} ${r}`)}};rh.default=eD});var au=F(ih=>{"use strict";m();Object.defineProperty(ih,"__esModule",{value:!0});var dx=Sf();dx.code='require("ajv/dist/runtime/equal").default';ih.default=dx});var fx=F(sh=>{"use strict";m();Object.defineProperty(sh,"__esModule",{value:!0});var oh=Ls(),yt=he(),tD=ye(),nD=au(),rD={message:({params:{i:t,j:e}})=>(0,yt.str)`must NOT have duplicate items (items ## ${e} and ${t} are identical)`,params:({params:{i:t,j:e}})=>(0,yt._)`{i: ${t}, j: ${e}}`},iD={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:rD,code(t){let{gen:e,data:n,$data:r,schema:i,parentSchema:o,schemaCode:s,it:a}=t;if(!r&&!i)return;let c=e.let("valid"),u=o.items?(0,oh.getSchemaTypes)(o.items):[];t.block$data(c,l,(0,yt._)`${s} === false`),t.ok(c);function l(){let A=e.let("i",(0,yt._)`${n}.length`),g=e.let("j");t.setParams({i:A,j:g}),e.assign(c,!0),e.if((0,yt._)`${A} > 1`,()=>(d()?f:h)(A,g))}function d(){return u.length>0&&!u.some(A=>A==="object"||A==="array")}function f(A,g){let b=e.name("item"),x=(0,oh.checkDataTypes)(u,b,a.opts.strictNumbers,oh.DataType.Wrong),E=e.const("indices",(0,yt._)`{}`);e.for((0,yt._)`;${A}--;`,()=>{e.let(b,(0,yt._)`${n}[${A}]`),e.if(x,(0,yt._)`continue`),u.length>1&&e.if((0,yt._)`typeof ${b} == "string"`,(0,yt._)`${b} += "_"`),e.if((0,yt._)`typeof ${E}[${b}] == "number"`,()=>{e.assign(g,(0,yt._)`${E}[${b}]`),t.error(),e.assign(c,!1).break()}).code((0,yt._)`${E}[${b}] = ${A}`)})}function h(A,g){let b=(0,tD.useFunc)(e,nD.default),x=e.name("outer");e.label(x).for((0,yt._)`;${A}--;`,()=>e.for((0,yt._)`${g} = ${A}; ${g}--;`,()=>e.if((0,yt._)`${b}(${n}[${A}], ${n}[${g}])`,()=>{t.error(),e.assign(c,!1).break(x)})))}}};sh.default=iD});var hx=F(ch=>{"use strict";m();Object.defineProperty(ch,"__esModule",{value:!0});var ah=he(),oD=ye(),sD=au(),aD={message:"must be equal to constant",params:({schemaCode:t})=>(0,ah._)`{allowedValue: ${t}}`},cD={keyword:"const",$data:!0,error:aD,code(t){let{gen:e,data:n,$data:r,schemaCode:i,schema:o}=t;r||o&&typeof o=="object"?t.fail$data((0,ah._)`!${(0,oD.useFunc)(e,sD.default)}(${n}, ${i})`):t.fail((0,ah._)`${o} !== ${n}`)}};ch.default=cD});var Ax=F(uh=>{"use strict";m();Object.defineProperty(uh,"__esModule",{value:!0});var zs=he(),uD=ye(),lD=au(),dD={message:"must be equal to one of the allowed values",params:({schemaCode:t})=>(0,zs._)`{allowedValues: ${t}}`},fD={keyword:"enum",schemaType:"array",$data:!0,error:dD,code(t){let{gen:e,data:n,$data:r,schema:i,schemaCode:o,it:s}=t;if(!r&&i.length===0)throw new Error("enum must have non-empty array");let a=i.length>=s.opts.loopEnum,c,u=()=>c??(c=(0,uD.useFunc)(e,lD.default)),l;if(a||r)l=e.let("valid"),t.block$data(l,d);else{if(!Array.isArray(i))throw new Error("ajv implementation error");let h=e.const("vSchema",o);l=(0,zs.or)(...i.map((A,g)=>f(h,g)))}t.pass(l);function d(){e.assign(l,!1),e.forOf("v",o,h=>e.if((0,zs._)`${u()}(${n}, ${h})`,()=>e.assign(l,!0).break()))}function f(h,A){let g=i[A];return typeof g=="object"&&g!==null?(0,zs._)`${u()}(${n}, ${h}[${A}])`:(0,zs._)`${n} === ${g}`}}};uh.default=fD});var px=F(lh=>{"use strict";m();Object.defineProperty(lh,"__esModule",{value:!0});var hD=nx(),AD=rx(),pD=sx(),mD=ax(),gD=cx(),bD=ux(),xD=lx(),ED=fx(),ID=hx(),yD=Ax(),CD=[hD.default,AD.default,pD.default,mD.default,gD.default,bD.default,xD.default,ED.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},ID.default,yD.default];lh.default=CD});var fh=F(Zs=>{"use strict";m();Object.defineProperty(Zs,"__esModule",{value:!0});Zs.validateAdditionalItems=void 0;var Oi=he(),dh=ye(),TD={message:({params:{len:t}})=>(0,Oi.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,Oi._)`{limit: ${t}}`},wD={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:TD,code(t){let{parentSchema:e,it:n}=t,{items:r}=e;if(!Array.isArray(r)){(0,dh.checkStrictMode)(n,'"additionalItems" is ignored when "items" is not an array of schemas');return}mx(t,r)}};function mx(t,e){let{gen:n,schema:r,data:i,keyword:o,it:s}=t;s.items=!0;let a=n.const("len",(0,Oi._)`${i}.length`);if(r===!1)t.setParams({len:e.length}),t.pass((0,Oi._)`${a} <= ${e.length}`);else if(typeof r=="object"&&!(0,dh.alwaysValidSchema)(s,r)){let u=n.var("valid",(0,Oi._)`${a} <= ${e.length}`);n.if((0,Oi.not)(u),()=>c(u)),t.ok(u)}function c(u){n.forRange("i",e.length,a,l=>{t.subschema({keyword:o,dataProp:l,dataPropType:dh.Type.Num},u),s.allErrors||n.if((0,Oi.not)(u),()=>n.break())})}}Zs.validateAdditionalItems=mx;Zs.default=wD});var hh=F(ea=>{"use strict";m();Object.defineProperty(ea,"__esModule",{value:!0});ea.validateTuple=void 0;var gx=he(),cu=ye(),_D=fn(),SD={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(t){let{schema:e,it:n}=t;if(Array.isArray(e))return bx(t,"additionalItems",e);n.items=!0,!(0,cu.alwaysValidSchema)(n,e)&&t.ok((0,_D.validateArray)(t))}};function bx(t,e,n=t.schema){let{gen:r,parentSchema:i,data:o,keyword:s,it:a}=t;l(i),a.opts.unevaluated&&n.length&&a.items!==!0&&(a.items=cu.mergeEvaluated.items(r,n.length,a.items));let c=r.name("valid"),u=r.const("len",(0,gx._)`${o}.length`);n.forEach((d,f)=>{(0,cu.alwaysValidSchema)(a,d)||(r.if((0,gx._)`${u} > ${f}`,()=>t.subschema({keyword:s,schemaProp:f,dataProp:f},c)),t.ok(c))});function l(d){let{opts:f,errSchemaPath:h}=a,A=n.length,g=A===d.minItems&&(A===d.maxItems||d[e]===!1);if(f.strictTuples&&!g){let b=`"${s}" is ${A}-tuple, but minItems or maxItems/${e} are not specified or different at path "${h}"`;(0,cu.checkStrictMode)(a,b,f.strictTuples)}}}ea.validateTuple=bx;ea.default=SD});var xx=F(Ah=>{"use strict";m();Object.defineProperty(Ah,"__esModule",{value:!0});var vD=hh(),kD={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:t=>(0,vD.validateTuple)(t,"items")};Ah.default=kD});var Ix=F(ph=>{"use strict";m();Object.defineProperty(ph,"__esModule",{value:!0});var Ex=he(),ND=ye(),RD=fn(),OD=fh(),DD={message:({params:{len:t}})=>(0,Ex.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,Ex._)`{limit: ${t}}`},BD={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:DD,code(t){let{schema:e,parentSchema:n,it:r}=t,{prefixItems:i}=n;r.items=!0,!(0,ND.alwaysValidSchema)(r,e)&&(i?(0,OD.validateAdditionalItems)(t,i):t.ok((0,RD.validateArray)(t)))}};ph.default=BD});var yx=F(mh=>{"use strict";m();Object.defineProperty(mh,"__esModule",{value:!0});var An=he(),uu=ye(),MD={message:({params:{min:t,max:e}})=>e===void 0?(0,An.str)`must contain at least ${t} valid item(s)`:(0,An.str)`must contain at least ${t} and no more than ${e} valid item(s)`,params:({params:{min:t,max:e}})=>e===void 0?(0,An._)`{minContains: ${t}}`:(0,An._)`{minContains: ${t}, maxContains: ${e}}`},PD={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:MD,code(t){let{gen:e,schema:n,parentSchema:r,data:i,it:o}=t,s,a,{minContains:c,maxContains:u}=r;o.opts.next?(s=c===void 0?1:c,a=u):s=1;let l=e.const("len",(0,An._)`${i}.length`);if(t.setParams({min:s,max:a}),a===void 0&&s===0){(0,uu.checkStrictMode)(o,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(a!==void 0&&s>a){(0,uu.checkStrictMode)(o,'"minContains" > "maxContains" is always invalid'),t.fail();return}if((0,uu.alwaysValidSchema)(o,n)){let g=(0,An._)`${l} >= ${s}`;a!==void 0&&(g=(0,An._)`${g} && ${l} <= ${a}`),t.pass(g);return}o.items=!0;let d=e.name("valid");a===void 0&&s===1?h(d,()=>e.if(d,()=>e.break())):s===0?(e.let(d,!0),a!==void 0&&e.if((0,An._)`${i}.length > 0`,f)):(e.let(d,!1),f()),t.result(d,()=>t.reset());function f(){let g=e.name("_valid"),b=e.let("count",0);h(g,()=>e.if(g,()=>A(b)))}function h(g,b){e.forRange("i",0,l,x=>{t.subschema({keyword:"contains",dataProp:x,dataPropType:uu.Type.Num,compositeRule:!0},g),b()})}function A(g){e.code((0,An._)`${g}++`),a===void 0?e.if((0,An._)`${g} >= ${s}`,()=>e.assign(d,!0).break()):(e.if((0,An._)`${g} > ${a}`,()=>e.assign(d,!1).break()),s===1?e.assign(d,!0):e.if((0,An._)`${g} >= ${s}`,()=>e.assign(d,!0)))}}};mh.default=PD});var wx=F(Kn=>{"use strict";m();Object.defineProperty(Kn,"__esModule",{value:!0});Kn.validateSchemaDeps=Kn.validatePropertyDeps=Kn.error=void 0;var gh=he(),LD=ye(),ta=fn();Kn.error={message:({params:{property:t,depsCount:e,deps:n}})=>{let r=e===1?"property":"properties";return(0,gh.str)`must have ${r} ${n} when property ${t} is present`},params:({params:{property:t,depsCount:e,deps:n,missingProperty:r}})=>(0,gh._)`{property: ${t}, + missingProperty: ${r}, + depsCount: ${e}, + deps: ${n}}`};var FD={keyword:"dependencies",type:"object",schemaType:"object",error:Kn.error,code(t){let[e,n]=UD(t);Cx(t,e),Tx(t,n)}};function UD({schema:t}){let e={},n={};for(let r in t){if(r==="__proto__")continue;let i=Array.isArray(t[r])?e:n;i[r]=t[r]}return[e,n]}function Cx(t,e=t.schema){let{gen:n,data:r,it:i}=t;if(Object.keys(e).length===0)return;let o=n.let("missing");for(let s in e){let a=e[s];if(a.length===0)continue;let c=(0,ta.propertyInData)(n,r,s,i.opts.ownProperties);t.setParams({property:s,depsCount:a.length,deps:a.join(", ")}),i.allErrors?n.if(c,()=>{for(let u of a)(0,ta.checkReportMissingProp)(t,u)}):(n.if((0,gh._)`${c} && (${(0,ta.checkMissingProp)(t,a,o)})`),(0,ta.reportMissingProp)(t,o),n.else())}}Kn.validatePropertyDeps=Cx;function Tx(t,e=t.schema){let{gen:n,data:r,keyword:i,it:o}=t,s=n.name("valid");for(let a in e)(0,LD.alwaysValidSchema)(o,e[a])||(n.if((0,ta.propertyInData)(n,r,a,o.opts.ownProperties),()=>{let c=t.subschema({keyword:i,schemaProp:a},s);t.mergeValidEvaluated(c,s)},()=>n.var(s,!0)),t.ok(s))}Kn.validateSchemaDeps=Tx;Kn.default=FD});var Sx=F(bh=>{"use strict";m();Object.defineProperty(bh,"__esModule",{value:!0});var _x=he(),HD=ye(),YD={message:"property name must be valid",params:({params:t})=>(0,_x._)`{propertyName: ${t.propertyName}}`},GD={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:YD,code(t){let{gen:e,schema:n,data:r,it:i}=t;if((0,HD.alwaysValidSchema)(i,n))return;let o=e.name("valid");e.forIn("key",r,s=>{t.setParams({propertyName:s}),t.subschema({keyword:"propertyNames",data:s,dataTypes:["string"],propertyName:s,compositeRule:!0},o),e.if((0,_x.not)(o),()=>{t.error(!0),i.allErrors||e.break()})}),t.ok(o)}};bh.default=GD});var Eh=F(xh=>{"use strict";m();Object.defineProperty(xh,"__esModule",{value:!0});var lu=fn(),wn=he(),KD=ur(),du=ye(),QD={message:"must NOT have additional properties",params:({params:t})=>(0,wn._)`{additionalProperty: ${t.additionalProperty}}`},WD={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:QD,code(t){let{gen:e,schema:n,parentSchema:r,data:i,errsCount:o,it:s}=t;if(!o)throw new Error("ajv implementation error");let{allErrors:a,opts:c}=s;if(s.props=!0,c.removeAdditional!=="all"&&(0,du.alwaysValidSchema)(s,n))return;let u=(0,lu.allSchemaProperties)(r.properties),l=(0,lu.allSchemaProperties)(r.patternProperties);d(),t.ok((0,wn._)`${o} === ${KD.default.errors}`);function d(){e.forIn("key",i,b=>{!u.length&&!l.length?A(b):e.if(f(b),()=>A(b))})}function f(b){let x;if(u.length>8){let E=(0,du.schemaRefOrVal)(s,r.properties,"properties");x=(0,lu.isOwnProperty)(e,E,b)}else u.length?x=(0,wn.or)(...u.map(E=>(0,wn._)`${b} === ${E}`)):x=wn.nil;return l.length&&(x=(0,wn.or)(x,...l.map(E=>(0,wn._)`${(0,lu.usePattern)(t,E)}.test(${b})`))),(0,wn.not)(x)}function h(b){e.code((0,wn._)`delete ${i}[${b}]`)}function A(b){if(c.removeAdditional==="all"||c.removeAdditional&&n===!1){h(b);return}if(n===!1){t.setParams({additionalProperty:b}),t.error(),a||e.break();return}if(typeof n=="object"&&!(0,du.alwaysValidSchema)(s,n)){let x=e.name("valid");c.removeAdditional==="failing"?(g(b,x,!1),e.if((0,wn.not)(x),()=>{t.reset(),h(b)})):(g(b,x),a||e.if((0,wn.not)(x),()=>e.break()))}}function g(b,x,E){let T={keyword:"additionalProperties",dataProp:b,dataPropType:du.Type.Str};E===!1&&Object.assign(T,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(T,x)}}};xh.default=WD});var Nx=F(yh=>{"use strict";m();Object.defineProperty(yh,"__esModule",{value:!0});var jD=Ys(),vx=fn(),Ih=ye(),kx=Eh(),qD={keyword:"properties",type:"object",schemaType:"object",code(t){let{gen:e,schema:n,parentSchema:r,data:i,it:o}=t;o.opts.removeAdditional==="all"&&r.additionalProperties===void 0&&kx.default.code(new jD.KeywordCxt(o,kx.default,"additionalProperties"));let s=(0,vx.allSchemaProperties)(n);for(let d of s)o.definedProperties.add(d);o.opts.unevaluated&&s.length&&o.props!==!0&&(o.props=Ih.mergeEvaluated.props(e,(0,Ih.toHash)(s),o.props));let a=s.filter(d=>!(0,Ih.alwaysValidSchema)(o,n[d]));if(a.length===0)return;let c=e.name("valid");for(let d of a)u(d)?l(d):(e.if((0,vx.propertyInData)(e,i,d,o.opts.ownProperties)),l(d),o.allErrors||e.else().var(c,!0),e.endIf()),t.it.definedProperties.add(d),t.ok(c);function u(d){return o.opts.useDefaults&&!o.compositeRule&&n[d].default!==void 0}function l(d){t.subschema({keyword:"properties",schemaProp:d,dataProp:d},c)}}};yh.default=qD});var Bx=F(Ch=>{"use strict";m();Object.defineProperty(Ch,"__esModule",{value:!0});var Rx=fn(),fu=he(),Ox=ye(),Dx=ye(),VD={keyword:"patternProperties",type:"object",schemaType:"object",code(t){let{gen:e,schema:n,data:r,parentSchema:i,it:o}=t,{opts:s}=o,a=(0,Rx.allSchemaProperties)(n),c=a.filter(g=>(0,Ox.alwaysValidSchema)(o,n[g]));if(a.length===0||c.length===a.length&&(!o.opts.unevaluated||o.props===!0))return;let u=s.strictSchema&&!s.allowMatchingProperties&&i.properties,l=e.name("valid");o.props!==!0&&!(o.props instanceof fu.Name)&&(o.props=(0,Dx.evaluatedPropsToName)(e,o.props));let{props:d}=o;f();function f(){for(let g of a)u&&h(g),o.allErrors?A(g):(e.var(l,!0),A(g),e.if(l))}function h(g){for(let b in u)new RegExp(g).test(b)&&(0,Ox.checkStrictMode)(o,`property ${b} matches pattern ${g} (use allowMatchingProperties)`)}function A(g){e.forIn("key",r,b=>{e.if((0,fu._)`${(0,Rx.usePattern)(t,g)}.test(${b})`,()=>{let x=c.includes(g);x||t.subschema({keyword:"patternProperties",schemaProp:g,dataProp:b,dataPropType:Dx.Type.Str},l),o.opts.unevaluated&&d!==!0?e.assign((0,fu._)`${d}[${b}]`,!0):!x&&!o.allErrors&&e.if((0,fu.not)(l),()=>e.break())})})}}};Ch.default=VD});var Mx=F(Th=>{"use strict";m();Object.defineProperty(Th,"__esModule",{value:!0});var $D=ye(),JD={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){let{gen:e,schema:n,it:r}=t;if((0,$D.alwaysValidSchema)(r,n)){t.fail();return}let i=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},i),t.failResult(i,()=>t.reset(),()=>t.error())},error:{message:"must NOT be valid"}};Th.default=JD});var Px=F(wh=>{"use strict";m();Object.defineProperty(wh,"__esModule",{value:!0});var XD=fn(),zD={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:XD.validateUnion,error:{message:"must match a schema in anyOf"}};wh.default=zD});var Lx=F(_h=>{"use strict";m();Object.defineProperty(_h,"__esModule",{value:!0});var hu=he(),ZD=ye(),eB={message:"must match exactly one schema in oneOf",params:({params:t})=>(0,hu._)`{passingSchemas: ${t.passing}}`},tB={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:eB,code(t){let{gen:e,schema:n,parentSchema:r,it:i}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(i.opts.discriminator&&r.discriminator)return;let o=n,s=e.let("valid",!1),a=e.let("passing",null),c=e.name("_valid");t.setParams({passing:a}),e.block(u),t.result(s,()=>t.reset(),()=>t.error(!0));function u(){o.forEach((l,d)=>{let f;(0,ZD.alwaysValidSchema)(i,l)?e.var(c,!0):f=t.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},c),d>0&&e.if((0,hu._)`${c} && ${s}`).assign(s,!1).assign(a,(0,hu._)`[${a}, ${d}]`).else(),e.if(c,()=>{e.assign(s,!0),e.assign(a,d),f&&t.mergeEvaluated(f,hu.Name)})})}}};_h.default=tB});var Fx=F(Sh=>{"use strict";m();Object.defineProperty(Sh,"__esModule",{value:!0});var nB=ye(),rB={keyword:"allOf",schemaType:"array",code(t){let{gen:e,schema:n,it:r}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");let i=e.name("valid");n.forEach((o,s)=>{if((0,nB.alwaysValidSchema)(r,o))return;let a=t.subschema({keyword:"allOf",schemaProp:s},i);t.ok(i),t.mergeEvaluated(a)})}};Sh.default=rB});var Yx=F(vh=>{"use strict";m();Object.defineProperty(vh,"__esModule",{value:!0});var Au=he(),Hx=ye(),iB={message:({params:t})=>(0,Au.str)`must match "${t.ifClause}" schema`,params:({params:t})=>(0,Au._)`{failingKeyword: ${t.ifClause}}`},oB={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:iB,code(t){let{gen:e,parentSchema:n,it:r}=t;n.then===void 0&&n.else===void 0&&(0,Hx.checkStrictMode)(r,'"if" without "then" and "else" is ignored');let i=Ux(r,"then"),o=Ux(r,"else");if(!i&&!o)return;let s=e.let("valid",!0),a=e.name("_valid");if(c(),t.reset(),i&&o){let l=e.let("ifClause");t.setParams({ifClause:l}),e.if(a,u("then",l),u("else",l))}else i?e.if(a,u("then")):e.if((0,Au.not)(a),u("else"));t.pass(s,()=>t.error(!0));function c(){let l=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},a);t.mergeEvaluated(l)}function u(l,d){return()=>{let f=t.subschema({keyword:l},a);e.assign(s,a),t.mergeValidEvaluated(f,s),d?e.assign(d,(0,Au._)`${l}`):t.setParams({ifClause:l})}}}};function Ux(t,e){let n=t.schema[e];return n!==void 0&&!(0,Hx.alwaysValidSchema)(t,n)}vh.default=oB});var Gx=F(kh=>{"use strict";m();Object.defineProperty(kh,"__esModule",{value:!0});var sB=ye(),aB={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:n}){e.if===void 0&&(0,sB.checkStrictMode)(n,`"${t}" without "if" is ignored`)}};kh.default=aB});var Kx=F(Nh=>{"use strict";m();Object.defineProperty(Nh,"__esModule",{value:!0});var cB=fh(),uB=xx(),lB=hh(),dB=Ix(),fB=yx(),hB=wx(),AB=Sx(),pB=Eh(),mB=Nx(),gB=Bx(),bB=Mx(),xB=Px(),EB=Lx(),IB=Fx(),yB=Yx(),CB=Gx();function TB(t=!1){let e=[bB.default,xB.default,EB.default,IB.default,yB.default,CB.default,AB.default,pB.default,hB.default,mB.default,gB.default];return t?e.push(uB.default,dB.default):e.push(cB.default,lB.default),e.push(fB.default),e}Nh.default=TB});var Qx=F(Rh=>{"use strict";m();Object.defineProperty(Rh,"__esModule",{value:!0});var it=he(),wB={message:({schemaCode:t})=>(0,it.str)`must match format "${t}"`,params:({schemaCode:t})=>(0,it._)`{format: ${t}}`},_B={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:wB,code(t,e){let{gen:n,data:r,$data:i,schema:o,schemaCode:s,it:a}=t,{opts:c,errSchemaPath:u,schemaEnv:l,self:d}=a;if(!c.validateFormats)return;i?f():h();function f(){let A=n.scopeValue("formats",{ref:d.formats,code:c.code.formats}),g=n.const("fDef",(0,it._)`${A}[${s}]`),b=n.let("fType"),x=n.let("format");n.if((0,it._)`typeof ${g} == "object" && !(${g} instanceof RegExp)`,()=>n.assign(b,(0,it._)`${g}.type || "string"`).assign(x,(0,it._)`${g}.validate`),()=>n.assign(b,(0,it._)`"string"`).assign(x,g)),t.fail$data((0,it.or)(E(),T()));function E(){return c.strictSchema===!1?it.nil:(0,it._)`${s} && !${x}`}function T(){let _=l.$async?(0,it._)`(${g}.async ? await ${x}(${r}) : ${x}(${r}))`:(0,it._)`${x}(${r})`,R=(0,it._)`(typeof ${x} == "function" ? ${_} : ${x}.test(${r}))`;return(0,it._)`${x} && ${x} !== true && ${b} === ${e} && !${R}`}}function h(){let A=d.formats[o];if(!A){E();return}if(A===!0)return;let[g,b,x]=T(A);g===e&&t.pass(_());function E(){if(c.strictSchema===!1){d.logger.warn(R());return}throw new Error(R());function R(){return`unknown format "${o}" ignored in schema at path "${u}"`}}function T(R){let S=R instanceof RegExp?(0,it.regexpCode)(R):c.code.formats?(0,it._)`${c.code.formats}${(0,it.getProperty)(o)}`:void 0,v=n.scopeValue("formats",{key:o,ref:R,code:S});return typeof R=="object"&&!(R instanceof RegExp)?[R.type||"string",R.validate,(0,it._)`${v}.validate`]:["string",R,v]}function _(){if(typeof A=="object"&&!(A instanceof RegExp)&&A.async){if(!l.$async)throw new Error("async format in sync schema");return(0,it._)`await ${x}(${r})`}return typeof b=="function"?(0,it._)`${x}(${r})`:(0,it._)`${x}.test(${r})`}}}};Rh.default=_B});var Wx=F(Oh=>{"use strict";m();Object.defineProperty(Oh,"__esModule",{value:!0});var SB=Qx(),vB=[SB.default];Oh.default=vB});var jx=F(Do=>{"use strict";m();Object.defineProperty(Do,"__esModule",{value:!0});Do.contentVocabulary=Do.metadataVocabulary=void 0;Do.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];Do.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var Vx=F(Dh=>{"use strict";m();Object.defineProperty(Dh,"__esModule",{value:!0});var kB=tx(),NB=px(),RB=Kx(),OB=Wx(),qx=jx(),DB=[kB.default,NB.default,(0,RB.default)(),OB.default,qx.metadataVocabulary,qx.contentVocabulary];Dh.default=DB});var Jx=F(pu=>{"use strict";m();Object.defineProperty(pu,"__esModule",{value:!0});pu.DiscrError=void 0;var $x;(function(t){t.Tag="tag",t.Mapping="mapping"})($x||(pu.DiscrError=$x={}))});var zx=F(Mh=>{"use strict";m();Object.defineProperty(Mh,"__esModule",{value:!0});var Bo=he(),Bh=Jx(),Xx=zc(),BB=Gs(),MB=ye(),PB={message:({params:{discrError:t,tagName:e}})=>t===Bh.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:n}})=>(0,Bo._)`{error: ${t}, tag: ${n}, tagValue: ${e}}`},LB={keyword:"discriminator",type:"object",schemaType:"object",error:PB,code(t){let{gen:e,data:n,schema:r,parentSchema:i,it:o}=t,{oneOf:s}=i;if(!o.opts.discriminator)throw new Error("discriminator: requires discriminator option");let a=r.propertyName;if(typeof a!="string")throw new Error("discriminator: requires propertyName");if(r.mapping)throw new Error("discriminator: mapping is not supported");if(!s)throw new Error("discriminator: requires oneOf keyword");let c=e.let("valid",!1),u=e.const("tag",(0,Bo._)`${n}${(0,Bo.getProperty)(a)}`);e.if((0,Bo._)`typeof ${u} == "string"`,()=>l(),()=>t.error(!1,{discrError:Bh.DiscrError.Tag,tag:u,tagName:a})),t.ok(c);function l(){let h=f();e.if(!1);for(let A in h)e.elseIf((0,Bo._)`${u} === ${A}`),e.assign(c,d(h[A]));e.else(),t.error(!1,{discrError:Bh.DiscrError.Mapping,tag:u,tagName:a}),e.endIf()}function d(h){let A=e.name("valid"),g=t.subschema({keyword:"oneOf",schemaProp:h},A);return t.mergeEvaluated(g,Bo.Name),A}function f(){var h;let A={},g=x(i),b=!0;for(let _=0;_{FB.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var Lh=F((Qe,Ph)=>{"use strict";m();Object.defineProperty(Qe,"__esModule",{value:!0});Qe.MissingRefError=Qe.ValidationError=Qe.CodeGen=Qe.Name=Qe.nil=Qe.stringify=Qe.str=Qe._=Qe.KeywordCxt=Qe.Ajv=void 0;var UB=$b(),HB=Vx(),YB=zx(),eE=Zx(),GB=["/properties"],mu="http://json-schema.org/draft-07/schema",Mo=class extends UB.default{_addVocabularies(){super._addVocabularies(),HB.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(YB.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(eE,GB):eE;this.addMetaSchema(e,mu,!1),this.refs["http://json-schema.org/schema"]=mu}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(mu)?mu:void 0)}};Qe.Ajv=Mo;Ph.exports=Qe=Mo;Ph.exports.Ajv=Mo;Object.defineProperty(Qe,"__esModule",{value:!0});Qe.default=Mo;var KB=Ys();Object.defineProperty(Qe,"KeywordCxt",{enumerable:!0,get:function(){return KB.KeywordCxt}});var Po=he();Object.defineProperty(Qe,"_",{enumerable:!0,get:function(){return Po._}});Object.defineProperty(Qe,"str",{enumerable:!0,get:function(){return Po.str}});Object.defineProperty(Qe,"stringify",{enumerable:!0,get:function(){return Po.stringify}});Object.defineProperty(Qe,"nil",{enumerable:!0,get:function(){return Po.nil}});Object.defineProperty(Qe,"Name",{enumerable:!0,get:function(){return Po.Name}});Object.defineProperty(Qe,"CodeGen",{enumerable:!0,get:function(){return Po.CodeGen}});var QB=Jc();Object.defineProperty(Qe,"ValidationError",{enumerable:!0,get:function(){return QB.default}});var WB=Gs();Object.defineProperty(Qe,"MissingRefError",{enumerable:!0,get:function(){return WB.default}})});var sI=F((IX,zh)=>{m();var le=String,oI=function(){return{isColorSupported:!1,reset:le,bold:le,dim:le,italic:le,underline:le,inverse:le,hidden:le,strikethrough:le,black:le,red:le,green:le,yellow:le,blue:le,magenta:le,cyan:le,white:le,gray:le,bgBlack:le,bgRed:le,bgGreen:le,bgYellow:le,bgBlue:le,bgMagenta:le,bgCyan:le,bgWhite:le,blackBright:le,redBright:le,greenBright:le,yellowBright:le,blueBright:le,magentaBright:le,cyanBright:le,whiteBright:le,bgBlackBright:le,bgRedBright:le,bgGreenBright:le,bgYellowBright:le,bgBlueBright:le,bgMagentaBright:le,bgCyanBright:le,bgWhiteBright:le}};zh.exports=oI();zh.exports.createColors=oI});var Zh=F(()=>{m()});var Uu=F((_X,uI)=>{"use strict";m();var aI=sI(),cI=Zh(),ga=class t extends Error{constructor(e,n,r,i,o,s){super(e),this.name="CssSyntaxError",this.reason=e,o&&(this.file=o),i&&(this.source=i),s&&(this.plugin=s),typeof n<"u"&&typeof r<"u"&&(typeof n=="number"?(this.line=n,this.column=r):(this.line=n.line,this.column=n.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,t)}setMessage(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",typeof this.line<"u"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason}showSourceCode(e){if(!this.source)return"";let n=this.source;e==null&&(e=aI.isColorSupported);let r=l=>l,i=l=>l,o=l=>l;if(e){let{bold:l,gray:d,red:f}=aI.createColors(!0);i=h=>l(f(h)),r=h=>d(h),cI&&(o=h=>cI(h))}let s=n.split(/\r?\n/),a=Math.max(this.line-3,0),c=Math.min(this.line+2,s.length),u=String(c).length;return s.slice(a,c).map((l,d)=>{let f=a+1+d,h=" "+(" "+f).slice(-u)+" | ";if(f===this.line){if(l.length>160){let g=20,b=Math.max(0,this.column-g),x=Math.max(this.column+g,this.endColumn+g),E=l.slice(b,x),T=r(h.replace(/\d/g," "))+l.slice(0,Math.min(this.column-1,g-1)).replace(/[^\t]/g," ");return i(">")+r(h)+o(E)+` + `+T+i("^")}let A=r(h.replace(/\d/g," "))+l.slice(0,this.column-1).replace(/[^\t]/g," ");return i(">")+r(h)+o(l)+` + `+A+i("^")}return" "+r(h)+o(l)}).join(` +`)}toString(){let e=this.showSourceCode();return e&&(e=` + +`+e+` +`),this.name+": "+this.message+e}};uI.exports=ga;ga.default=ga});var eA=F((vX,AI)=>{"use strict";m();var E3=/(<)(\/?style\b)/gi,I3=/(<)(!--)/g;function kn(t){return typeof t!="string"||!t.includes("<")?t:t.replace(E3,"\\3c $2").replace(I3,"\\3c $2")}var lI={after:` +`,beforeClose:` +`,beforeComment:` +`,beforeDecl:` +`,beforeOpen:" ",beforeRule:` +`,colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function y3(t){return t[0].toUpperCase()+t.slice(1)}function dI(t,e){let n="@"+e.name,r=e.params?t.rawValue(e,"params"):"";return typeof e.raws.afterName<"u"?n+=e.raws.afterName:r&&(n+=" "),n+r}function hI(t,e,n){let r=n.nodes,i=r.length-1;for(;i>0&&r[i].type==="comment";)i-=1;let o=t.raw(n,"semicolon"),s=n.type==="document";for(let a=r.length-1;a>=0;a--)e.push({document:s,node:r[a],semicolon:i!==a||o})}function fI(t,e,n,r){let i=t.raw(n,"between","beforeOpen");t.builder(kn(r+i)+"{",n,"start");let o=n.nodes&&n.nodes.length,s=()=>{let a=o?t.raw(n,"after"):t.raw(n,"after","emptyBody");a&&t.builder(kn(a)),t.builder("}",n,"end"),n.type==="rule"&&n.raws.ownSemicolon&&t.builder(kn(n.raws.ownSemicolon),n,"end")};o?(e.push(s),hI(t,e,n)):s()}var ba=class t{constructor(e){this.builder=e}atrule(e,n){let r=dI(this,e);if(e.nodes)this.block(e,r);else{let i=(e.raws.between||"")+(n?";":"");this.builder(kn(r+i),e)}}beforeAfter(e,n){let r;e.type==="decl"?r=this.raw(e,null,"beforeDecl"):e.type==="comment"?r=this.raw(e,null,"beforeComment"):n==="before"?r=this.raw(e,null,"beforeRule"):r=this.raw(e,null,"beforeClose");let i=e.parent,o=0;for(;i&&i.type!=="root";)o+=1,i=i.parent;if(r.includes(` +`)){let s=this.raw(e,null,"indent");if(s.length)for(let a=0;athis[o]===n[o]),i=[];for(hI(this,i,e);i.length>0;){let o=i.pop();if(typeof o=="function"){o();continue}let s=o.node,a=this.raw(s,"before");a&&this.builder(o.document?a:kn(a)),r&&s.type==="rule"?fI(this,i,s,this.rawValue(s,"selector")):r&&s.type==="atrule"&&s.nodes?fI(this,i,s,dI(this,s)):this.stringify(s,o.semicolon)}}comment(e){let n=this.raw(e,"left","commentLeft"),r=this.raw(e,"right","commentRight");this.builder(kn("/*"+n+e.text+r+"*/"),e)}decl(e,n){let r=e.raws,i=this.raw(e,"between","colon"),o=e.prop+i+this.rawValue(e,"value");e.important&&(o+=r.important||" !important"),n&&(o+=";"),this.builder(kn(o),e)}document(e){this.body(e)}raw(e,n,r){let i;if(r||(r=n),n&&(i=e.raws[n],typeof i<"u"))return i;let o=e.parent;if(r==="before"&&(!o||o.type==="root"&&o.first===e||o&&o.type==="document"))return"";if(!o)return lI[r];let s=e.root(),a=s.rawCache||(s.rawCache={});if(typeof a[r]<"u")return a[r];if(r==="before"||r==="after")return this.beforeAfter(e,r);{let c="raw"+y3(r);this[c]?i=this[c](s,e):s.walk(u=>{if(i=u.raws[n],typeof i<"u")return!1})}return typeof i>"u"&&(i=lI[r]),a[r]=i,i}rawBeforeClose(e){let n;return e.walk(r=>{if(r.nodes&&r.nodes.length>0&&typeof r.raws.after<"u")return n=r.raws.after,n.includes(` +`)&&(n=n.replace(/[^\n]+$/,"")),!1}),n&&(n=n.replace(/\S/g,"")),n}rawBeforeComment(e,n){let r;return e.walkComments(i=>{if(typeof i.raws.before<"u")return r=i.raws.before,r.includes(` +`)&&(r=r.replace(/[^\n]+$/,"")),!1}),typeof r>"u"?r=this.raw(n,null,"beforeDecl"):r&&(r=r.replace(/\S/g,"")),r}rawBeforeDecl(e,n){let r;return e.walkDecls(i=>{if(typeof i.raws.before<"u")return r=i.raws.before,r.includes(` +`)&&(r=r.replace(/[^\n]+$/,"")),!1}),typeof r>"u"?r=this.raw(n,null,"beforeRule"):r&&(r=r.replace(/\S/g,"")),r}rawBeforeOpen(e){let n;return e.walk(r=>{if(r.type!=="decl"&&(n=r.raws.between,typeof n<"u"))return!1}),n}rawBeforeRule(e){let n;return e.walk(r=>{if(r.nodes&&(r.parent!==e||e.first!==r)&&typeof r.raws.before<"u")return n=r.raws.before,n.includes(` +`)&&(n=n.replace(/[^\n]+$/,"")),!1}),n&&(n=n.replace(/\S/g,"")),n}rawColon(e){let n;return e.walkDecls(r=>{if(typeof r.raws.between<"u")return n=r.raws.between.replace(/[^\s:]/g,""),!1}),n}rawEmptyBody(e){let n;return e.walk(r=>{if(r.nodes&&r.nodes.length===0&&(n=r.raws.after,typeof n<"u"))return!1}),n}rawIndent(e){if(e.raws.indent)return e.raws.indent;let n;return e.walk(r=>{let i=r.parent;if(i&&i!==e&&i.parent&&i.parent===e&&typeof r.raws.before<"u"){let o=r.raws.before.split(` +`);return n=o[o.length-1],n=n.replace(/\S/g,""),!1}}),n}rawSemicolon(e){let n;return e.walk(r=>{if(r.nodes&&r.nodes.length&&r.last.type==="decl"&&(n=r.raws.semicolon,typeof n<"u"))return!1}),n}rawValue(e,n){let r=e[n],i=e.raws[n];return i&&i.value===r?i.raw:r}root(e){if(this.body(e),e.raws.after){let n=e.raws.after,r=e.parent&&e.parent.type==="document";this.builder(r?n:kn(n))}}rule(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(kn(e.raws.ownSemicolon),e,"end")}stringify(e,n){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,n)}};AI.exports=ba;ba.default=ba});var xa=F((NX,pI)=>{"use strict";m();var C3=eA();function tA(t,e){new C3(e).stringify(t)}pI.exports=tA;tA.default=tA});var Hu=F((OX,nA)=>{"use strict";m();nA.exports.isClean=Symbol("isClean");nA.exports.my=Symbol("my")});var ya=F((BX,mI)=>{"use strict";m();var T3=Uu(),w3=eA(),_3=xa(),{isClean:Ea,my:S3}=Hu();function v3(t,e){let n=new t.constructor,r=[[t,n,e]];for(;r.length>0;){let[i,o,s]=r.pop();for(let a in i){if(!Object.prototype.hasOwnProperty.call(i,a)||a==="proxyCache")continue;let c=i[a],u=typeof c;if(a==="parent"&&u==="object")s&&(o[a]=s);else if(a==="source")o[a]=c;else if(Array.isArray(c)){let l=[];o[a]=l;for(let d of c){let f=new d.constructor;l.push(f),r.push([d,f,o])}}else{if(u==="object"&&c!==null){let l=new c.constructor;r.push([c,l,void 0]),c=l}o[a]=c}}}return n}function Wn(t,e){if(e&&typeof e.offset<"u")return e.offset;let n=1,r=1,i=0;for(let o=0;oe.root().toProxy():e[n]},set(e,n,r){return e[n]===r||(e[n]=r,(n==="prop"||n==="value"||n==="name"||n==="params"||n==="important"||n==="text")&&e.markDirty()),!0}}}markClean(){this[Ea]=!0}markDirty(){if(this[Ea]){this[Ea]=!1;let e=this;for(;e=e.parent;)e[Ea]=!1}}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}positionBy(e={}){let n="document"in this.source.input?this.source.input.document:this.source.input.css,r={column:this.source.start.column,line:this.source.start.line,offset:Wn(n,this.source.start)};if(e.index)r=this.positionInside(e.index);else if(e.word){let o=n.slice(Wn(n,this.source.start),Wn(n,this.source.end)).indexOf(e.word);o!==-1&&(r=this.positionInside(o))}return r}positionInside(e){let n=this.source.start.column,r=this.source.start.line,i="document"in this.source.input?this.source.input.document:this.source.input.css,o=Wn(i,this.source.start),s=o+e;for(let a=o;aa.toJSON())),s}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(e=_3){e.stringify&&(e=e.stringify);let n="";return e(this,r=>{n+=r}),n}warn(e,n,r={}){let i={node:this};for(let o in r)i[o]=r[o];return e.warn(n,i)}};mI.exports=Ia;Ia.default=Ia});var Ta=F((PX,gI)=>{"use strict";m();var k3=ya(),Ca=class extends k3{constructor(e){super(e),this.type="comment"}};gI.exports=Ca;Ca.default=Ca});var _a=F((FX,bI)=>{"use strict";m();var N3=ya(),wa=class extends N3{get variable(){return this.prop.startsWith("--")||this.prop[0]==="$"}constructor(e){e&&typeof e.value<"u"&&typeof e.value!="string"&&(e={...e,value:String(e.value)}),super(e),this.type="decl"}};bI.exports=wa;wa.default=wa});var Hr=F((HX,_I)=>{"use strict";m();var EI=Ta(),II=_a(),xI=ya(),{isClean:yI,my:CI}=Hu(),rA,TI,wI,iA;function R3(t){let e=t.slice();for(;e.length>0;){let n=e.pop();if(delete n.source,n.nodes){n.nodes=n.nodes.slice();for(let r of n.nodes)e.push(r)}}return t.slice()}function O3(t){let e=[t];for(;e.length>0;){let n=e.pop();if(n[yI]=!1,n.proxyOf.nodes)for(let r of n.proxyOf.nodes)e.push(r)}}var jn=class t extends xI{get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}append(...e){for(let n of e){let r=this.normalize(n,this.last);for(let i of r)this.proxyOf.nodes.push(i)}return this.markDirty(),this}cleanRaws(e){let n=[this];for(;n.length>0;){let r=n.pop();if(r!==this&&r.cleanRaws!==t.prototype.cleanRaws){r.cleanRaws(e);continue}if(xI.prototype.cleanRaws.call(r,e),r.nodes)for(let i of r.nodes)n.push(i)}}each(e){if(!this.proxyOf.nodes)return;let n=this.getIterator(),r,i;for(;this.indexes[n]e[n](...r.map(i=>typeof i=="function"?(o,s)=>i(o.toProxy(),s):i)):n==="every"||n==="some"?r=>e[n]((i,...o)=>r(i.toProxy(),...o)):n==="root"?()=>e.root().toProxy():n==="nodes"?e.nodes.map(r=>r.toProxy()):n==="first"||n==="last"?e[n].toProxy():e[n]:e[n]},set(e,n,r){return e[n]===r||(e[n]=r,(n==="name"||n==="params"||n==="selector")&&e.markDirty()),!0}}}index(e){return typeof e=="number"?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}insertAfter(e,n){let r=this.index(e),i=this.normalize(n,this.proxyOf.nodes[r]).reverse();r=this.index(e);for(let s of i)this.proxyOf.nodes.splice(r+1,0,s);let o;for(let s in this.indexes)o=this.indexes[s],r"u")e=[];else if(Array.isArray(e)){e=e.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,"ignore")}else if(e.type==="root"&&this.type!=="document"){e=e.nodes.slice(0);for(let i of e)i.parent&&i.parent.removeChild(i,"ignore")}else if(e.type)e=[e];else if(e.prop){if(typeof e.value>"u")throw new Error("Value field is missed in node creation");typeof e.value!="string"&&(e.value=String(e.value)),e=[new II(e)]}else if(e.selector||e.selectors)e=[new iA(e)];else if(e.name)e=[new rA(e)];else if(e.text)e=[new EI(e)];else throw new Error("Unknown node type in node creation");return e.map(i=>(i[CI]||t.rebuild(i),i=i.proxyOf,i.parent&&i.parent.removeChild(i),i[yI]&&O3(i),i.raws||(i.raws={}),typeof i.raws.before>"u"&&n&&typeof n.raws.before<"u"&&(i.raws.before=n.raws.before.replace(/\S/g,"")),i.parent=this.proxyOf,i))}prepend(...e){e=e.reverse();for(let n of e){let r=this.normalize(n,this.first,"prepend").reverse();for(let i of r)this.proxyOf.nodes.unshift(i);for(let i in this.indexes)this.indexes[i]=this.indexes[i]+r.length}return this.markDirty(),this}push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(e){e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);let n;for(let r in this.indexes)n=this.indexes[r],n>=e&&(this.indexes[r]=n-1);return this.markDirty(),this}replaceValues(e,n,r){return r||(r=n,n={}),this.walkDecls(i=>{n.props&&!n.props.includes(i.prop)||n.fast&&!i.value.includes(n.fast)||(i.value=i.value.replace(e,r))}),this.markDirty(),this}some(e){return this.nodes.some(e)}walk(e){if(!this.proxyOf.nodes)return;let n=[{iterator:this.getIterator(),node:this.proxyOf}];for(;n.length>0;){let{iterator:r,node:i}=n[n.length-1],o=i.indexes[r];if(o>=i.proxyOf.nodes.length){delete i.indexes[r],n.pop();let c=n[n.length-1];c&&(c.node.indexes[c.iterator]+=1);continue}let s=i.proxyOf.nodes[o],a;try{a=e(s,o)}catch(c){throw s.addToError(c)}if(a===!1){for(let c of n)delete c.node.indexes[c.iterator];return!1}s.walk&&s.proxyOf.nodes?n.push({iterator:s.getIterator(),node:s}):i.indexes[r]+=1}}walkAtRules(e,n){return n?e instanceof RegExp?this.walk((r,i)=>{if(r.type==="atrule"&&e.test(r.name))return n(r,i)}):this.walk((r,i)=>{if(r.type==="atrule"&&r.name===e)return n(r,i)}):(n=e,this.walk((r,i)=>{if(r.type==="atrule")return n(r,i)}))}walkComments(e){return this.walk((n,r)=>{if(n.type==="comment")return e(n,r)})}walkDecls(e,n){return n?e instanceof RegExp?this.walk((r,i)=>{if(r.type==="decl"&&e.test(r.prop))return n(r,i)}):this.walk((r,i)=>{if(r.type==="decl"&&r.prop===e)return n(r,i)}):(n=e,this.walk((r,i)=>{if(r.type==="decl")return n(r,i)}))}walkRules(e,n){return n?e instanceof RegExp?this.walk((r,i)=>{if(r.type==="rule"&&e.test(r.selector))return n(r,i)}):this.walk((r,i)=>{if(r.type==="rule"&&r.selector===e)return n(r,i)}):(n=e,this.walk((r,i)=>{if(r.type==="rule")return n(r,i)}))}};jn.registerParse=t=>{TI=t};jn.registerRule=t=>{iA=t};jn.registerAtRule=t=>{rA=t};jn.registerRoot=t=>{wI=t};_I.exports=jn;jn.default=jn;jn.rebuild=t=>{let e=[t];for(;e.length>0;){let n=e.pop();if(n.type==="atrule"?Object.setPrototypeOf(n,rA.prototype):n.type==="rule"?Object.setPrototypeOf(n,iA.prototype):n.type==="decl"?Object.setPrototypeOf(n,II.prototype):n.type==="comment"?Object.setPrototypeOf(n,EI.prototype):n.type==="root"&&Object.setPrototypeOf(n,wI.prototype),n[CI]=!0,n.nodes)for(let r of n.nodes)e.push(r)}}});var Yu=F((GX,vI)=>{"use strict";m();var SI=Hr(),Uo=class extends SI{constructor(e){super(e),this.type="atrule"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}};vI.exports=Uo;Uo.default=Uo;SI.registerAtRule(Uo)});var Gu=F((QX,RI)=>{"use strict";m();var D3=Hr(),kI,NI,Mi=class extends D3{constructor(e){super({type:"document",...e}),this.nodes||(this.nodes=[])}toResult(e={}){return new kI(new NI,this,e).stringify()}};Mi.registerLazyResult=t=>{kI=t};Mi.registerProcessor=t=>{NI=t};RI.exports=Mi;Mi.default=Mi});var DI=F((jX,OI)=>{m();var B3="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",M3=(t,e=21)=>(n=e)=>{let r="",i=n|0;for(;i-- >0;)r+=t[Math.random()*t.length|0];return r},P3=(t=21)=>{let e="",n=t|0;for(;n-- >0;)e+=B3[Math.random()*64|0];return e};OI.exports={nanoid:P3,customAlphabet:M3}});var Ku=F(()=>{m()});var Qu=F(()=>{m()});var oA=F(()=>{m()});var BI=F(()=>{m()});var sA=F((sz,LI)=>{"use strict";m();var{existsSync:L3,readFileSync:F3}=BI(),{dirname:Wu,isAbsolute:U3,join:H3,relative:Y3,sep:G3}=Ku(),{SourceMapConsumer:MI,SourceMapGenerator:PI}=Qu();function K3(t){return Buffer?Buffer.from(t,"base64").toString():window.atob(t)}var Sa=class{constructor(e,n){if(n.map===!1)return;n.unsafeMap&&(this.unsafeMap=!0),this.loadAnnotation(e),this.inline=this.startWith(this.annotation,"data:");let r=n.map?n.map.prev:void 0,i=this.loadMap(n.from,r);!this.mapFile&&n.from&&(this.mapFile=n.from),this.mapFile&&(this.root=Wu(this.mapFile)),i&&(this.text=i)}consumer(){return this.consumerCache||(this.consumerCache=new MI(this.json||this.text)),this.consumerCache}decodeInline(e){let n=/^data:application\/json;charset=utf-?8;base64,/,r=/^data:application\/json;base64,/,i=/^data:application\/json;charset=utf-?8,/,o=/^data:application\/json,/,s=e.match(i)||e.match(o);if(s)return decodeURIComponent(e.substr(s[0].length));let a=e.match(n)||e.match(r);if(a)return K3(e.substr(a[0].length));let c=e.slice(22);throw c=c.slice(0,c.indexOf(",")),new Error("Unsupported source map encoding "+c)}getAnnotationURL(e){return e.replace(/^\/\*\s*# sourceMappingURL=/,"").trim()}isMap(e){return typeof e!="object"?!1:typeof e.mappings=="string"||typeof e._mappings=="string"||Array.isArray(e.sections)}loadAnnotation(e){let n=e.match(/\/\*\s*# sourceMappingURL=/g);if(!n)return;let r=e.lastIndexOf(n.pop()),i=e.indexOf("*/",r);r>-1&&i>-1&&(this.annotation=this.getAnnotationURL(e.substring(r,i)))}loadFile(e,n,r){if(!r&&!this.unsafeMap){if(!/\.map$/i.test(e))return;if(n){let i=Y3(Wu(n),e);if(i===".."||i.startsWith(".."+G3)||U3(i))return}}if(this.root=Wu(e),L3(e))return this.mapFile=e,F3(e,"utf-8").toString().trim()}loadMap(e,n){if(n===!1)return!1;if(n){if(typeof n=="string")return n;if(typeof n=="function"){let r=n(e);if(r){let i=this.loadFile(r,e,!0);if(!i)throw new Error("Unable to load previous source map: "+r.toString());return i}}else{if(n instanceof MI)return PI.fromSourceMap(n).toString();if(n instanceof PI)return n.toString();if(this.isMap(n))return JSON.stringify(n);throw new Error("Unsupported previous source map format: "+n.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let r=this.annotation;e&&(r=H3(Wu(e),r));let i=this.loadFile(r,e,!1);if(i)try{this.json=JSON.parse(i.replace(/^\)]}'[^\n]*\n/,""))}catch{return}return i}}}startWith(e,n){return e?e.substr(0,n.length)===n:!1}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}};LI.exports=Sa;Sa.default=Sa});var va=F((cz,GI)=>{"use strict";m();var{nanoid:Q3}=DI(),{isAbsolute:uA,resolve:lA}=Ku(),{SourceMapConsumer:W3,SourceMapGenerator:j3}=Qu(),{fileURLToPath:FI,pathToFileURL:ju}=oA(),UI=Uu(),q3=sA(),aA=Zh(),cA=Symbol("lineToIndexCache"),V3=!!(W3&&j3),HI=!!(lA&&uA);function YI(t){if(t[cA])return t[cA];let e=t.css.split(` +`),n=new Array(e.length),r=0;for(let i=0,o=e.length;i"u"||typeof e=="object"&&!e.toString)throw new Error(`PostCSS received ${e} instead of CSS string`);if(this.css=e.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,this.document=this.css,n.document&&(this.document=n.document.toString()),n.from&&(!HI||/^\w+:\/\//.test(n.from)||uA(n.from)?this.file=n.from:this.file=lA(n.from)),HI&&V3){let r=new q3(this.css,n);if(r.text){this.map=r;let i=r.consumer().file;!this.file&&i&&(this.file=this.mapResolve(i))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}error(e,n,r,i={}){let o,s,a,c,u;if(n&&typeof n=="object"){let d=n,f=r;if(typeof d.offset=="number"){c=d.offset;let h=this.fromOffset(c);n=h.line,r=h.col}else n=d.line,r=d.column,c=this.fromLineAndColumn(n,r);if(typeof f.offset=="number"){a=f.offset;let h=this.fromOffset(a);s=h.line,o=h.col}else s=f.line,o=f.column,a=this.fromLineAndColumn(f.line,f.column)}else if(r)c=this.fromLineAndColumn(n,r);else{c=n;let d=this.fromOffset(c);n=d.line,r=d.col}let l=this.origin(n,r,s,o);return l?u=new UI(e,l.endLine===void 0?l.line:{column:l.column,line:l.line},l.endLine===void 0?l.column:{column:l.endColumn,line:l.endLine},l.source,l.file,i.plugin):u=new UI(e,s===void 0?n:{column:r,line:n},s===void 0?r:{column:o,line:s},this.css,this.file,i.plugin),u.input={column:r,endColumn:o,endLine:s,endOffset:a,line:n,offset:c,source:this.css},this.file&&(ju&&(u.input.url=ju(this.file).toString()),u.input.file=this.file),u}fromLineAndColumn(e,n){return YI(this)[e-1]+n-1}fromOffset(e){let n=YI(this),r=n[n.length-1],i=0;if(e>=r)i=n.length-1;else{let o=n.length-2,s;for(;i>1),e=n[s+1])i=s+1;else{i=s;break}}return{col:e-n[i]+1,line:i+1}}mapResolve(e){return/^\w+:\/\//.test(e)?e:lA(this.map.consumer().sourceRoot||this.map.root||".",e)}origin(e,n,r,i){if(!this.map)return!1;let o=this.map.consumer(),s=o.originalPositionFor({column:n-1,line:e});if(!s.source)return!1;let a;if(typeof r=="number"){let d=o.originalPositionFor({column:i-1,line:r});d.source&&(a=d)}let c;uA(s.source)?c=ju(s.source):c=new URL(s.source,this.map.consumer().sourceRoot||ju(this.map.mapFile));let u={column:s.column+1,endColumn:a&&a.column+1,endLine:a&&a.line,line:s.line,url:c.toString()};if(c.protocol==="file:")if(FI)u.file=FI(c);else throw new Error("file: protocol is not available in this PostCSS build");let l=o.sourceContentFor(s.source);return l&&(u.source=l),u}toJSON(){let e={};for(let n of["hasBOM","css","file","id"])this[n]!=null&&(e[n]=this[n]);return this.map&&(e.map={...this.map},e.map.consumerCache&&(e.map.consumerCache=void 0)),e}};GI.exports=Ho;Ho.default=Ho;aA&&aA.registerInput&&aA.registerInput(Ho)});var Yo=F((lz,jI)=>{"use strict";m();var KI=Hr(),QI,WI,Yr=class extends KI{constructor(e){super(e),this.type="root",this.nodes||(this.nodes=[])}normalize(e,n,r){let i=new Set;for(let s of Array.isArray(e)?e:[e])s&&typeof s=="object"&&!s.parent&&s.raws&&typeof s.raws.before<"u"&&i.add(s.raws);let o=super.normalize(e);if(n){if(r==="prepend")this.nodes.length>1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n)for(let s of o)i.has(s.raws)||(s.raws.before=n.raws.before)}return o}removeChild(e,n){let r=this.index(e);return!n&&r===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(e)}toResult(e={}){return new QI(new WI,this,e).stringify()}};Yr.registerLazyResult=t=>{QI=t};Yr.registerProcessor=t=>{WI=t};jI.exports=Yr;Yr.default=Yr;KI.registerRoot(Yr)});var dA=F((fz,qI)=>{"use strict";m();var ka={comma(t){return ka.split(t,[","],!0)},space(t){let e=[" ",` +`," "];return ka.split(t,e)},split(t,e,n){let r=[],i="",o=!1,s=0,a=!1,c="",u=!1;for(let l of t)u?u=!1:l==="\\"?u=!0:a?l===c&&(a=!1):l==='"'||l==="'"?(a=!0,c=l):l==="("?s+=1:l===")"?s>0&&(s-=1):s===0&&e.includes(l)&&(o=!0),o?(i!==""&&r.push(i.trim()),i="",o=!1):i+=l;return(n||i!=="")&&r.push(i.trim()),r}};qI.exports=ka;ka.default=ka});var qu=F((Az,$I)=>{"use strict";m();var VI=Hr(),$3=dA(),Go=class extends VI{get selectors(){return $3.comma(this.selector)}set selectors(e){let n=this.selector?this.selector.match(/,\s*/):null,r=n?n[0]:","+this.raw("between","beforeOpen");this.selector=e.join(r)}constructor(e){super(e),this.type="rule",this.nodes||(this.nodes=[])}};$I.exports=Go;Go.default=Go;VI.registerRule(Go)});var zI=F((mz,XI)=>{"use strict";m();var J3=Yu(),X3=Ta(),z3=_a(),Z3=va(),eL=sA(),tL=Yo(),nL=qu();function JI(t,e){return t.inputs?t.inputs.map(n=>{let r={...n,__proto__:Z3.prototype};return r.map&&(r.map={...r.map,__proto__:eL.prototype}),r}):e}function rL(t,e,n){let r={...t};if(delete r.inputs,delete r.nodes,r.source){let{inputId:o,...s}=r.source;r.source=s,o!=null&&(r.source.input=e[o])}let i;if(r.type==="root")i=new tL(r);else if(r.type==="decl")i=new z3(r);else if(r.type==="rule")i=new nL(r);else if(r.type==="comment")i=new X3(r);else if(r.type==="atrule")i=new J3(r);else throw new Error("Unknown node type: "+t.type);if(n){i.nodes=n;for(let o of n)o.parent=i}return i}function Vu(t,e){if(Array.isArray(t))return t.map(i=>Vu(i));let n,r=[{childIndex:0,children:[],inputs:JI(t,e),json:t}];for(;r.length>0;){let i=r[r.length-1],o=i.json.nodes;if(o&&i.childIndex0?r[r.length-1].children.push(s):n=s}return n}XI.exports=Vu;Vu.default=Vu});var hA=F((bz,i1)=>{"use strict";m();var{dirname:$u,relative:e1,resolve:t1,sep:n1}=Ku(),{SourceMapConsumer:r1,SourceMapGenerator:Ju}=Qu(),{pathToFileURL:ZI}=oA(),iL=va(),oL=!!(r1&&Ju),sL=!!($u&&t1&&e1&&n1),fA=class{constructor(e,n,r,i){this.stringify=e,this.mapOpts=r.map||{},this.root=n,this.opts=r,this.css=i,this.originalCSS=i,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let e;this.isInline()?e="data:application/json;base64,"+this.toBase64(this.map.toString()):typeof this.mapOpts.annotation=="string"?e=this.mapOpts.annotation:typeof this.mapOpts.annotation=="function"?e=this.mapOpts.annotation(this.opts.to,this.root):e=this.outputFile()+".map";let n=` +`;this.css.includes(`\r +`)&&(n=`\r +`),this.css+=n+"/*# sourceMappingURL="+e+" */"}applyPrevMaps(){for(let e of this.previous()){let n=this.toUrl(this.path(e.file)),r=e.root||$u(e.file),i;this.mapOpts.sourcesContent===!1?(i=new r1(e.text),i.sourcesContent&&(i.sourcesContent=null)):i=e.consumer(),this.map.applySourceMap(i,n,this.toUrl(this.path(r)))}}clearAnnotation(){if(this.mapOpts.annotation!==!1){if(this.root){let e;for(let n=this.root.nodes.length-1;n>=0;n--)e=this.root.nodes[n],e.type==="comment"&&e.text.startsWith("# sourceMappingURL=")&&this.root.removeChild(n)}else if(this.css){let e;for(;(e=this.css.lastIndexOf("/*#"))!==-1;){let n=this.css.indexOf("*/",e+3);if(n===-1)break;for(;e>0&&this.css[e-1]===` +`;)e--;this.css=this.css.slice(0,e)+this.css.slice(n+2)}}}}generate(){if(this.clearAnnotation(),sL&&oL&&this.isMap())return this.generateMap();{let e="";return this.stringify(this.root,n=>{e+=n}),[e]}}generateMap(){if(this.root)this.generateString();else if(this.previous().length===1){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Ju.fromSourceMap(e,{ignoreInvalidMapping:!0})}else this.map=new Ju({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):""});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css="",this.map=new Ju({file:this.outputFile(),ignoreInvalidMapping:!0});let e=1,n=1,r="",i={generated:{column:0,line:0},original:{column:0,line:0},source:""},o,s;this.stringify(this.root,(a,c,u)=>{if(this.css+=a,c&&u!=="end"&&(i.generated.line=e,i.generated.column=n-1,c.source&&c.source.start?(i.source=this.sourcePath(c),i.original.line=c.source.start.line,i.original.column=c.source.start.column-1,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,this.map.addMapping(i))),s=a.match(/\n/g),s?(e+=s.length,o=a.lastIndexOf(` +`),n=a.length-o):n+=a.length,c&&u!=="start"){let l=c.parent||{raws:{}};(!(c.type==="decl"||c.type==="atrule"&&!c.nodes)||c!==l.last||l.raws.semicolon)&&(c.source&&c.source.end?(i.source=this.sourcePath(c),i.original.line=c.source.end.line,i.original.column=c.source.end.column-1,i.generated.line=e,i.generated.column=n-2,this.map.addMapping(i)):(i.source=r,i.original.line=1,i.original.column=0,i.generated.line=e,i.generated.column=n-1,this.map.addMapping(i)))}})}isAnnotation(){return this.isInline()?!0:typeof this.mapOpts.annotation<"u"?this.mapOpts.annotation:this.previous().length?this.previous().some(e=>e.annotation):!0}isInline(){if(typeof this.mapOpts.inline<"u")return this.mapOpts.inline;let e=this.mapOpts.annotation;return typeof e<"u"&&e!==!0?!1:this.previous().length?this.previous().some(n=>n.inline):!0}isMap(){return typeof this.opts.map<"u"?!!this.opts.map:this.previous().length>0}isSourcesContent(){return typeof this.mapOpts.sourcesContent<"u"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(e=>e.withContent()):!0}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"}path(e){if(this.mapOpts.absolute||e.charCodeAt(0)===60||/^\w+:\/\//.test(e))return e;let n=this.memoizedPaths.get(e);if(n)return n;let r=this.opts.to?$u(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(r=$u(t1(r,this.mapOpts.annotation)));let i=e1(r,e);return this.memoizedPaths.set(e,i),i}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(e=>{if(e.source&&e.source.input.map){let n=e.source.input.map;this.previousMaps.includes(n)||this.previousMaps.push(n)}});else{let e=new iL(this.originalCSS,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}setSourcesContent(){let e={};if(this.root)this.root.walk(n=>{if(n.source){let r=n.source.input.from;if(r&&!e[r]){e[r]=!0;let i=this.usesFileUrls?this.toFileUrl(r):this.toUrl(this.path(r));this.map.setSourceContent(i,n.source.input.css)}}});else if(this.css){let n=this.opts.from?this.toUrl(this.path(this.opts.from)):"";this.map.setSourceContent(n,this.css)}}sourcePath(e){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(e.source.input.from):this.toUrl(this.path(e.source.input.from))}toBase64(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))}toFileUrl(e){let n=this.memoizedFileURLs.get(e);if(n)return n;if(ZI){let r=ZI(e).toString();return this.memoizedFileURLs.set(e,r),r}else throw new Error("`map.absolute` option is not available in this PostCSS build")}toUrl(e){let n=this.memoizedURLs.get(e);if(n)return n;n1==="\\"&&(e=e.replace(/\\/g,"/"));let r=encodeURI(e).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(e,r),r}};i1.exports=fA});var a1=F((Ez,s1)=>{"use strict";m();var Xu=/[\t\n\f\r "#'()/;[\\\]{}]/g,zu=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,aL=/.[\r\n"'(/\\]/,o1=/[\da-f]/i;s1.exports=function(e,n={}){let r=e.css.valueOf(),i=n.ignoreErrors,o,s,a,c,u,l,d,f,h,A,g=r.length,b=0,x=[],E=[],T=-1;function _(){return b}function R(M){throw e.error("Unclosed "+M,b)}function S(){return E.length===0&&b>=g}function v(M){if(E.length)return E.pop();if(b>=g)return;let G=M?M.ignoreUnclosed:!1;switch(o=r.charCodeAt(b),o){case 10:case 32:case 9:case 13:case 12:{c=b;do c+=1,o=r.charCodeAt(c);while(o===32||o===10||o===9||o===13||o===12);l=["space",r.slice(b,c)],b=c-1;break}case 91:case 93:case 123:case 125:case 58:case 59:case 41:{let W=String.fromCharCode(o);l=[W,W,b];break}case 40:{if(A=x.length?x.pop()[1]:"",h=r.charCodeAt(b+1),A==="url"&&h!==39&&h!==34&&h!==32&&h!==10&&h!==9&&h!==12&&h!==13){c=b;do{if(d=!1,c=r.indexOf(")",c+1),c===-1)if(i||G){c=b;break}else R("bracket");for(f=c;r.charCodeAt(f-1)===92;)f-=1,d=!d}while(d);l=["brackets",r.slice(b,c+1),b,c],b=c}else b<=T?l=["(","(",b]:(c=r.indexOf(")",b+1),s=r.slice(b,c+1),c===-1||aL.test(s)?(T=c===-1?g:c,l=["(","(",b]):(l=["brackets",s,b,c],b=c));break}case 39:case 34:{u=o===39?"'":'"',c=b;do{if(d=!1,c=r.indexOf(u,c+1),c===-1)if(i||G){c=b+1;break}else R("string");for(f=c;r.charCodeAt(f-1)===92;)f-=1,d=!d}while(d);l=["string",r.slice(b,c+1),b,c],b=c;break}case 64:{Xu.lastIndex=b+1,Xu.test(r),Xu.lastIndex===0?c=r.length-1:c=Xu.lastIndex-2,l=["at-word",r.slice(b,c+1),b,c],b=c;break}case 92:{for(c=b,a=!0;r.charCodeAt(c+1)===92;)c+=1,a=!a;if(o=r.charCodeAt(c+1),a&&o!==47&&o!==32&&o!==10&&o!==9&&o!==13&&o!==12&&(c+=1,o1.test(r.charAt(c)))){for(;o1.test(r.charAt(c+1));)c+=1;r.charCodeAt(c+1)===32&&(c+=1)}l=["word",r.slice(b,c+1),b,c],b=c;break}default:{o===47&&r.charCodeAt(b+1)===42?(c=r.indexOf("*/",b+2)+1,c===0&&(i||G?c=r.length:R("comment")),l=["comment",r.slice(b,c+1),b,c],b=c):(zu.lastIndex=b+1,zu.test(r),zu.lastIndex===0?c=r.length-1:c=zu.lastIndex-2,l=["word",r.slice(b,c+1),b,c],x.push(l),b=c);break}}return b++,l}function D(M){E.push(M)}return{back:D,endOfFile:S,nextToken:v,position:_}}});var d1=F((yz,l1)=>{"use strict";m();var cL=Yu(),uL=Ta(),lL=_a(),dL=Yo(),c1=qu(),fL=a1(),u1={empty:!0,space:!0};function hL(t){for(let e=t.length-1;e>=0;e--){let n=t[e],r=n[3]||n[2];if(r)return r}}function AA(t,e,n){let r="";for(let i=e;i0?u.push("}"):r===u[u.length-1]&&u.pop(),u.length===0)if(r===";"){n.source.end=this.getPosition(e[2]),n.source.end.offset++,this.semicolon=!0;break}else if(r==="{"){a=!0;break}else if(r==="}"){if(c.length>0){for(o=c.length-1,i=c[o];i&&i[0]==="space";)i=c[--o];i&&(n.source.end=this.getPosition(i[3]||i[2]),n.source.end.offset++)}this.end(e);break}else c.push(e);else c.push(e);if(this.tokenizer.endOfFile()){s=!0;break}}n.raws.between=this.spacesAndCommentsFromEnd(c),c.length?(n.raws.afterName=this.spacesAndCommentsFromStart(c),this.raw(n,"params",c),s&&(e=c[c.length-1],n.source.end=this.getPosition(e[3]||e[2]),n.source.end.offset++,this.spaces=n.raws.between,n.raws.between="")):(n.raws.afterName="",n.params=""),a&&(n.nodes=[],this.current=n)}checkMissedSemicolon(e){let n=this.colon(e);if(n===!1)return;let r=0,i;for(let o=n-1;o>=0&&(i=e[o],!(i[0]!=="space"&&(r+=1,r===2)));o--);throw this.input.error("Missed semicolon",i[0]==="word"?i[3]+1:i[2])}colon(e){let n=0,r,i,o;for(let[s,a]of e.entries()){if(i=a,o=i[0],o==="("&&(n+=1),o===")"&&(n-=1),n===0&&o===":")if(!r)this.doubleColon(i);else{if(r[0]==="word"&&r[1]==="progid")continue;return s}r=i}return!1}comment(e){let n=new uL;this.init(n,e[2]),n.source.end=this.getPosition(e[3]||e[2]),n.source.end.offset++;let r=e[1].slice(2,-2);if(!r.trim())n.text="",n.raws.left=r,n.raws.right="";else{let i=r.match(/^(\s*)([^]*\S)(\s*)$/);n.text=i[2],n.raws.left=i[1],n.raws.right=i[3]}}createTokenizer(){this.tokenizer=fL(this.input)}decl(e,n){let r=new lL;this.init(r,e[0][2]);let i=e[e.length-1];i[0]===";"&&(this.semicolon=!0,e.pop()),r.source.end=this.getPosition(i[3]||i[2]||hL(e)),r.source.end.offset++;let o=0;for(;e[o][0]!=="word";)o===e.length-1&&this.unknownWord([e[o]]),o++;r.raws.before+=AA(e,0,o),r.source.start=this.getPosition(e[o][2]);let s=o;for(;o=0;f--){if(c=e[f],c[1].toLowerCase()==="!important"){r.important=!0;let h=this.stringFrom(e,f);h=this.spacesFromEnd(e)+h,h!==" !important"&&(r.raws.important=h);break}else if(c[1].toLowerCase()==="important"){let h=e.slice(0),A="";for(let g=f;g>0;g--){let b=h[g][0];if(A.trim().startsWith("!")&&b!=="space")break;A=h.pop()[1]+A}A.trim().startsWith("!")&&(r.important=!0,r.raws.important=A,e=h)}if(c[0]!=="space"&&c[0]!=="comment")break}e.some(f=>f[0]!=="space"&&f[0]!=="comment")&&(r.raws.between+=l.map(f=>f[1]).join(""),l=[]),this.raw(r,"value",l.concat(e),n),r.value.includes(":")&&!n&&this.checkMissedSemicolon(e)}doubleColon(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})}emptyRule(e){let n=new c1;this.init(n,e[2]),n.selector="",n.raws.between="",this.current=n}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let n=this.current.nodes[this.current.nodes.length-1];n&&n.type==="rule"&&!n.raws.ownSemicolon&&(n.raws.ownSemicolon=this.spaces,this.spaces="",n.source.end=this.getPosition(e[2]),n.source.end.offset+=n.raws.ownSemicolon.length)}}getPosition(e){let n=this.input.fromOffset(e);return{column:n.col,line:n.line,offset:e}}init(e,n){this.current.push(e),e.source={input:this.input,start:this.getPosition(n)},e.raws.before=this.spaces,this.spaces="",e.type!=="comment"&&(this.semicolon=!1)}other(e){let n=!1,r=null,i=!1,o=null,s=[],a=e[1].startsWith("--"),c=[],u=e;for(;u;){if(r=u[0],c.push(u),r==="("||r==="[")o||(o=u),s.push(r==="("?")":"]");else if(a&&i&&r==="{")o||(o=u),s.push("}");else if(s.length===0)if(r===";")if(i){this.decl(c,a);return}else break;else if(r==="{"){this.rule(c);return}else if(r==="}"){this.tokenizer.back(c.pop()),n=!0;break}else r===":"&&(i=!0);else r===s[s.length-1]&&(s.pop(),s.length===0&&(o=null));u=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(n=!0),s.length>0&&this.unclosedBracket(o),n&&i){if(!a)for(;c.length&&(u=c[c.length-1][0],!(u!=="space"&&u!=="comment"));)this.tokenizer.back(c.pop());this.decl(c,a)}else this.unknownWord(c)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e);break}this.endFile()}precheckMissedSemicolon(){}raw(e,n,r,i){let o,s,a=r.length,c="",u=!0,l,d;for(let f=0;fh+A[1],"");e.raws[n]={raw:f,value:c}}e[n]=c}rule(e){e.pop();let n=new c1;this.init(n,e[0][2]),n.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(n,"selector",e),this.current=n}spacesAndCommentsFromEnd(e){let n,r="";for(;e.length&&(n=e[e.length-1][0],!(n!=="space"&&n!=="comment"));)r=e.pop()[1]+r;return r}spacesAndCommentsFromStart(e){let n,r="";for(;e.length&&(n=e[0][0],!(n!=="space"&&n!=="comment"));)r+=e.shift()[1];return r}spacesFromEnd(e){let n,r="";for(;e.length&&(n=e[e.length-1][0],n==="space");)r=e.pop()[1]+r;return r}stringFrom(e,n){let r="";for(let i=n;i{"use strict";m();var AL=Hr(),pL=va(),mL=d1();function Zu(t,e){let n=new pL(t,e),r=new mL(n);try{r.parse()}catch(i){throw i}return r.root}f1.exports=Zu;Zu.default=Zu;AL.registerParse(Zu)});var mA=F((_z,h1)=>{"use strict";m();var Na=class{constructor(e,n={}){if(this.type="warning",this.text=e,n.node&&n.node.source){let r=n.node.rangeBy(n);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(let r in n)this[r]=n[r]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text}};h1.exports=Na;Na.default=Na});var tl=F((vz,A1)=>{"use strict";m();var gL=mA(),Ra=class{get content(){return this.css}constructor(e,n,r){this.processor=e,this.messages=[],this.root=n,this.opts=r,this.css="",this.map=void 0}toString(){return this.css}warn(e,n={}){n.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(n.plugin=this.lastPlugin.postcssPlugin);let r=new gL(e,n);return this.messages.push(r),r}warnings(){return this.messages.filter(e=>e.type==="warning")}};A1.exports=Ra;Ra.default=Ra});var gA=F((Nz,m1)=>{"use strict";m();var p1={};m1.exports=function(e){p1[e]||(p1[e]=!0,typeof console<"u"&&console.warn&&console.warn(e))}});var EA=F((Dz,E1)=>{"use strict";m();var bL=Hr(),xL=Gu(),EL=hA(),IL=el(),g1=tl(),yL=Yo(),CL=xa(),{isClean:Nn,my:TL}=Hu(),Oz=gA(),wL={atrule:"AtRule",comment:"Comment",decl:"Declaration",document:"Document",root:"Root",rule:"Rule"},_L={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},SL={Once:!0,postcssPlugin:!0,prepare:!0},Ko=0;function Oa(t){return typeof t=="object"&&typeof t.then=="function"}function bA(t){let e=!1,n=wL[t.type];return t.type==="decl"?e=t.prop.toLowerCase():t.type==="atrule"&&(e=t.name.toLowerCase()),e&&t.append?[n,n+"-"+e,Ko,n+"Exit",n+"Exit-"+e]:e?[n,n+"-"+e,n+"Exit",n+"Exit-"+e]:t.append?[n,Ko,n+"Exit"]:[n,n+"Exit"]}function b1(t){let e;return t.type==="document"?e=["Document",Ko,"DocumentExit"]:t.type==="root"?e=["Root",Ko,"RootExit"]:e=bA(t),{eventIndex:0,events:e,iterator:0,node:t,visitorIndex:0,visitors:[]}}function x1(t){let e=[t];for(;e.length>0;){let n=e.pop();if(n[Nn]=!1,n.nodes)for(let r of n.nodes)e.push(r)}return t}var xA={},Gr=class t{get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return"LazyResult"}constructor(e,n,r){this.stringified=!1,this.processed=!1;let i;if(typeof n=="object"&&n!==null&&(n.type==="root"||n.type==="document"))i=x1(n);else if(n instanceof t||n instanceof g1)i=x1(n.root),n.map&&(typeof r.map>"u"&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=n.map);else{let o=IL;r.syntax&&(o=r.syntax.parse),r.parser&&(o=r.parser),o.parse&&(o=o.parse);try{i=o(n,r)}catch(s){this.processed=!0,this.error=s}i&&!i[TL]&&bL.rebuild(i)}this.result=new g1(e,i,r),this.helpers={...xA,postcss:xA,result:this.result},this.plugins=this.processor.plugins.map(o=>typeof o=="object"&&o.prepare?{...o,...o.prepare(this.result)}:o)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}getAsyncError(){throw new Error("Use process(css).then(cb) to work with async plugins")}handleError(e,n){let r=this.result.lastPlugin;try{n&&n.addToError(e),this.error=e,e.name==="CssSyntaxError"&&!e.plugin?(e.plugin=r.postcssPlugin,e.setMessage()):r.postcssVersion}catch(i){console&&console.error&&console.error(i)}return e}prepareVisitors(){this.listeners={};let e=(n,r,i)=>{this.listeners[r]||(this.listeners[r]=[]),this.listeners[r].push([n,i])};for(let n of this.plugins)if(typeof n=="object")for(let r in n){if(!_L[r]&&/^[A-Z]/.test(r))throw new Error(`Unknown event ${r} in ${n.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!SL[r])if(typeof n[r]=="object")for(let i in n[r])i==="*"?e(n,r,n[r][i]):e(n,r+"-"+i.toLowerCase(),n[r][i]);else typeof n[r]=="function"&&e(n,r,n[r])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let e=0;e0;){let r=this.visitTick(n);if(Oa(r))try{await r}catch(i){let o=n[n.length-1].node;throw this.handleError(i,o)}}}if(this.listeners.OnceExit)for(let[n,r]of this.listeners.OnceExit){this.result.lastPlugin=n;try{if(e.type==="document"){let i=e.nodes.map(o=>r(o,this.helpers));await Promise.all(i)}else await r(e,this.helpers)}catch(i){throw this.handleError(i)}}}return this.processed=!0,this.stringify()}runOnRoot(e){this.result.lastPlugin=e;try{if(typeof e=="object"&&e.Once){if(this.result.root.type==="document"){let n=this.result.root.nodes.map(r=>e.Once(r,this.helpers));return Oa(n[0])?Promise.all(n):n}return e.Once(this.result.root,this.helpers)}else if(typeof e=="function")return e(this.result.root,this.result)}catch(n){throw this.handleError(n)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,n=CL;e.syntax&&(n=e.syntax.stringify),e.stringifier&&(n=e.stringifier),n.stringify&&(n=n.stringify);let r=this.result.root.source;if(e.map===void 0&&!(r&&r.input&&r.input.map)){let s="";return n(this.result.root,a=>{s+=a}),this.result.css=s,this.result}let o=new EL(n,this.result.root,this.result.opts).generate();return this.result.css=o[0],this.result.map=o[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins){let n=this.runOnRoot(e);if(Oa(n))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[Nn];)e[Nn]=!0,this.walkSync(e);if(this.listeners.OnceExit)if(e.type==="document")for(let n of e.nodes)this.visitSync(this.listeners.OnceExit,n);else this.visitSync(this.listeners.OnceExit,e)}return this.result}then(e,n){return this.async().then(e,n)}toString(){return this.css}visitSync(e,n){for(let[r,i]of e){this.result.lastPlugin=r;let o;try{o=i(n,this.helpers)}catch(s){throw this.handleError(s,n.proxyOf)}if(n.type!=="root"&&n.type!=="document"&&!n.parent)return!0;if(Oa(o))throw this.getAsyncError()}}visitTick(e){let n=e[e.length-1],{node:r,visitors:i}=n;if(r.type!=="root"&&r.type!=="document"&&!r.parent){e.pop();return}if(i.length>0&&n.visitorIndex0;){let r=n[n.length-1],i=r.node;if(r.iterator!==0){let o=r.iterator,s,a=!1;for(;s=i.nodes[i.indexes[o]];)if(i.indexes[o]+=1,!s[Nn]){s[Nn]=!0,n.push({eventIndex:0,events:bA(s),iterator:0,node:s}),a=!0;break}if(a)continue;r.iterator=0,delete i.indexes[o]}if(r.eventIndex{xA=t};E1.exports=Gr;Gr.default=Gr;yL.registerLazyResult(Gr);xL.registerLazyResult(Gr)});var y1=F((Pz,I1)=>{"use strict";m();var vL=hA(),kL=el(),NL=tl(),RL=xa(),Mz=gA(),Da=class{get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let e,n=kL;try{e=n(this._css,this._opts)}catch(r){this.error=r}if(this.error)throw this.error;return this._root=e,e}get[Symbol.toStringTag](){return"NoWorkResult"}constructor(e,n,r){n=n.toString(),this.stringified=!1,this._processor=e,this._css=n,this._opts=r,this._map=void 0;let i=RL;this.result=new NL(this._processor,void 0,this._opts),this.result.css=n;let o=this;Object.defineProperty(this.result,"root",{get(){return o.root}});let s=new vL(i,void 0,this._opts,n);if(s.isMap()){let[a,c]=s.generate();a&&(this.result.css=a),c&&(this.result.map=c)}else s.clearAnnotation(),this.result.css=s.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}sync(){if(this.error)throw this.error;return this.result}then(e,n){return this.async().then(e,n)}toString(){return this._css}warnings(){return[]}};I1.exports=Da;Da.default=Da});var T1=F((Fz,C1)=>{"use strict";m();var OL=Gu(),DL=EA(),BL=y1(),ML=Yo(),Pi=class{constructor(e=[]){this.version="8.5.19",this.plugins=this.normalize(e)}normalize(e){let n=[];for(let r of e)if(r.postcss===!0?r=r():r.postcss&&(r=r.postcss),typeof r=="object"&&Array.isArray(r.plugins))n=n.concat(r.plugins);else if(typeof r=="object"&&r.postcssPlugin)n.push(r);else if(typeof r=="function")n.push(r);else if(!(typeof r=="object"&&(r.parse||r.stringify)))throw new Error(r+" is not a PostCSS plugin");return n}process(e,n={}){return!this.plugins.length&&!n.parser&&!n.stringifier&&!n.syntax?new BL(this,e,n):new DL(this,e,n)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}};C1.exports=Pi;Pi.default=Pi;ML.registerProcessor(Pi);OL.registerProcessor(Pi)});var yA=F((Hz,R1)=>{"use strict";m();var w1=Yu(),_1=Ta(),PL=Hr(),LL=Uu(),S1=_a(),v1=Gu(),FL=zI(),UL=va(),HL=EA(),YL=dA(),GL=ya(),KL=el(),IA=T1(),QL=tl(),k1=Yo(),N1=qu(),WL=xa(),jL=mA();function Oe(...t){return t.length===1&&Array.isArray(t[0])&&(t=t[0]),new IA(t)}Oe.plugin=function(e,n){let r=!1;function i(...s){console&&console.warn&&!r&&(r=!0,console.warn(e+`: postcss.plugin was deprecated. Migration guide: +https://evilmartians.com/chronicles/postcss-8-plugin-migration`),I.LANG&&I.LANG.startsWith("cn")&&console.warn(e+`: \u91CC\u9762 postcss.plugin \u88AB\u5F03\u7528. \u8FC1\u79FB\u6307\u5357: +https://www.w3ctech.com/topic/2226`));let a=n(...s);return a.postcssPlugin=e,a.postcssVersion=new IA().version,a}let o;return Object.defineProperty(i,"postcss",{get(){return o||(o=i()),o}}),i.process=function(s,a,c){return Oe([i(c)]).process(s,a)},i};Oe.stringify=WL;Oe.parse=KL;Oe.fromJSON=FL;Oe.list=YL;Oe.comment=t=>new _1(t);Oe.atRule=t=>new w1(t);Oe.decl=t=>new S1(t);Oe.rule=t=>new N1(t);Oe.root=t=>new k1(t);Oe.document=t=>new v1(t);Oe.CssSyntaxError=LL;Oe.Declaration=S1;Oe.Container=PL;Oe.Processor=IA;Oe.Document=v1;Oe.Comment=_1;Oe.Warning=jL;Oe.AtRule=w1;Oe.Result=QL;Oe.Input=UL;Oe.Rule=N1;Oe.Root=k1;Oe.Node=GL;HL.registerPostcss(Oe);R1.exports=Oe;Oe.default=Oe});var NA=F(Fi=>{"use strict";m();var kA;Object.defineProperty(Fi,"__esModule",{value:!0});Fi.fromCodePoint=void 0;Fi.replaceCodePoint=ny;Fi.decodeCodePoint=TF;var CF=new Map([[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]]);Fi.fromCodePoint=(kA=String.fromCodePoint)!==null&&kA!==void 0?kA:(t=>{let e="";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|t&1023),e+=String.fromCharCode(t),e});function ny(t){var e;return t>=55296&&t<=57343||t>1114111?65533:(e=CF.get(t))!==null&&e!==void 0?e:t}function TF(t){return(0,Fi.fromCodePoint)(ny(t))}});var OA=F(RA=>{"use strict";m();Object.defineProperty(RA,"__esModule",{value:!0});RA.decodeBase64=wF;function wF(t){let e=typeof atob=="function"?atob(t):typeof Buffer.from=="function"?Buffer.from(t,"base64").toString("binary"):new Buffer(t,"base64").toString("binary"),n=e.length&-2,r=new Uint16Array(n/2);for(let i=0,o=0;i{"use strict";m();Object.defineProperty(sl,"__esModule",{value:!0});sl.htmlDecodeTree=void 0;var _F=OA();sl.htmlDecodeTree=(0,_F.decodeBase64)("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg")});var BA=F(al=>{"use strict";m();Object.defineProperty(al,"__esModule",{value:!0});al.xmlDecodeTree=void 0;var SF=OA();al.xmlDecodeTree=(0,SF.decodeBase64)("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg")});var iy=F(cl=>{"use strict";m();Object.defineProperty(cl,"__esModule",{value:!0});cl.BinTrieFlags=void 0;var ry;(function(t){t[t.VALUE_LENGTH=49152]="VALUE_LENGTH",t[t.FLAG13=8192]="FLAG13",t[t.BRANCH_LENGTH=8064]="BRANCH_LENGTH",t[t.JUMP_TABLE=127]="JUMP_TABLE"})(ry||(cl.BinTrieFlags=ry={}))});var FA=F(ot=>{"use strict";m();Object.defineProperty(ot,"__esModule",{value:!0});ot.xmlDecodeTree=ot.htmlDecodeTree=ot.replaceCodePoint=ot.fromCodePoint=ot.decodeCodePoint=ot.EntityDecoder=ot.DecodingMode=void 0;ot.determineBranch=cy;ot.decodeHTML=BF;ot.decodeHTMLAttribute=MF;ot.decodeHTMLStrict=PF;ot.decodeXML=LF;var sy=NA(),vF=DA(),kF=BA(),zt=iy(),et;(function(t){t[t.NUM=35]="NUM",t[t.SEMI=59]="SEMI",t[t.EQUALS=61]="EQUALS",t[t.ZERO=48]="ZERO",t[t.NINE=57]="NINE",t[t.LOWER_A=97]="LOWER_A",t[t.LOWER_F=102]="LOWER_F",t[t.LOWER_X=120]="LOWER_X",t[t.LOWER_Z=122]="LOWER_Z",t[t.UPPER_A=65]="UPPER_A",t[t.UPPER_F=70]="UPPER_F",t[t.UPPER_Z=90]="UPPER_Z"})(et||(et={}));var oy=32;function MA(t){return t>=et.ZERO&&t<=et.NINE}function NF(t){return t>=et.UPPER_A&&t<=et.UPPER_F||t>=et.LOWER_A&&t<=et.LOWER_F}function RF(t){return t>=et.UPPER_A&&t<=et.UPPER_Z||t>=et.LOWER_A&&t<=et.LOWER_Z||MA(t)}function OF(t){return t===et.EQUALS||RF(t)}var bt;(function(t){t[t.EntityStart=0]="EntityStart",t[t.NumericStart=1]="NumericStart",t[t.NumericDecimal=2]="NumericDecimal",t[t.NumericHex=3]="NumericHex",t[t.NamedEntity=4]="NamedEntity"})(bt||(bt={}));var Rn;(function(t){t[t.Legacy=0]="Legacy",t[t.Strict=1]="Strict",t[t.Attribute=2]="Attribute"})(Rn||(ot.DecodingMode=Rn={}));var ul=class{constructor(e,n,r){this.decodeTree=e,this.emitCodePoint=n,this.errors=r,this.state=bt.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Rn.Strict,this.runConsumed=0}startEntity(e){this.decodeMode=e,this.state=bt.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(e,n){switch(this.state){case bt.EntityStart:return e.charCodeAt(n)===et.NUM?(this.state=bt.NumericStart,this.consumed+=1,this.stateNumericStart(e,n+1)):(this.state=bt.NamedEntity,this.stateNamedEntity(e,n));case bt.NumericStart:return this.stateNumericStart(e,n);case bt.NumericDecimal:return this.stateNumericDecimal(e,n);case bt.NumericHex:return this.stateNumericHex(e,n);case bt.NamedEntity:return this.stateNamedEntity(e,n)}}stateNumericStart(e,n){return n>=e.length?-1:(e.charCodeAt(n)|oy)===et.LOWER_X?(this.state=bt.NumericHex,this.consumed+=1,this.stateNumericHex(e,n+1)):(this.state=bt.NumericDecimal,this.stateNumericDecimal(e,n))}stateNumericHex(e,n){for(;n>14;for(;n>7;if(this.runConsumed===0){let c=i&zt.BinTrieFlags.JUMP_TABLE;if(e.charCodeAt(n)!==c)return this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++}for(;this.runConsumed=e.length)return-1;let c=this.runConsumed-1,u=r[this.treeIndex+1+(c>>1)],l=c%2===0?u&255:u>>8&255;if(e.charCodeAt(n)!==l)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(a>>1),i=r[this.treeIndex],o=(i&zt.BinTrieFlags.VALUE_LENGTH)>>14}if(n>=e.length)break;let s=e.charCodeAt(n);if(s===et.SEMI&&o!==0&&(i&zt.BinTrieFlags.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,o,this.consumed+this.excess);if(this.treeIndex=cy(r,i,this.treeIndex+Math.max(1,o),s),this.treeIndex<0)return this.result===0||this.decodeMode===Rn.Attribute&&(o===0||OF(s))?0:this.emitNotTerminatedNamedEntity();if(i=r[this.treeIndex],o=(i&zt.BinTrieFlags.VALUE_LENGTH)>>14,o!==0){if(s===et.SEMI)return this.emitNamedEntityData(this.treeIndex,o,this.consumed+this.excess);this.decodeMode!==Rn.Strict&&(i&zt.BinTrieFlags.FLAG13)===0&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}n++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var e;let{result:n,decodeTree:r}=this,i=(r[n]&zt.BinTrieFlags.VALUE_LENGTH)>>14;return this.emitNamedEntityData(n,i,this.consumed),(e=this.errors)===null||e===void 0||e.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(e,n,r){let{decodeTree:i}=this;return this.emitCodePoint(n===1?i[e]&~(zt.BinTrieFlags.VALUE_LENGTH|zt.BinTrieFlags.FLAG13):i[e+1],r),n===3&&this.emitCodePoint(i[e+2],r),r}end(){var e;switch(this.state){case bt.NamedEntity:return this.result!==0&&(this.decodeMode!==Rn.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case bt.NumericDecimal:return this.emitNumericEntity(0,2);case bt.NumericHex:return this.emitNumericEntity(0,3);case bt.NumericStart:return(e=this.errors)===null||e===void 0||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case bt.EntityStart:return 0}}};ot.EntityDecoder=ul;function ay(t){let e="",n=new ul(t,r=>e+=(0,sy.fromCodePoint)(r));return function(i,o){let s=0,a=0;for(;(a=i.indexOf("&",a))>=0;){e+=i.slice(s,a),n.startEntity(o);let u=n.write(i,a+1);if(u<0){s=a+n.end();break}s=a+u,a=u===0?s+1:s}let c=e+i.slice(s);return e="",c}}function cy(t,e,n,r){let i=(e&zt.BinTrieFlags.BRANCH_LENGTH)>>7,o=e&zt.BinTrieFlags.JUMP_TABLE;if(i===0)return o!==0&&r===o?n:-1;if(o){let u=r-o;return u<0||u>=i?-1:t[n+u]-1}let s=i+1>>1,a=0,c=i-1;for(;a<=c;){let u=a+c>>>1,l=u>>1,f=t[n+l]>>(u&1)*8&255;if(fr)c=u-1;else return t[n+s+u]}return-1}var PA=ay(vF.htmlDecodeTree),DF=ay(kF.xmlDecodeTree);function BF(t,e=Rn.Legacy){return PA(t,e)}function MF(t){return PA(t,Rn.Attribute)}function PF(t){return PA(t,Rn.Strict)}function LF(t){return DF(t,Rn.Strict)}var LA=NA();Object.defineProperty(ot,"decodeCodePoint",{enumerable:!0,get:function(){return LA.decodeCodePoint}});Object.defineProperty(ot,"fromCodePoint",{enumerable:!0,get:function(){return LA.fromCodePoint}});Object.defineProperty(ot,"replaceCodePoint",{enumerable:!0,get:function(){return LA.replaceCodePoint}});var FF=DA();Object.defineProperty(ot,"htmlDecodeTree",{enumerable:!0,get:function(){return FF.htmlDecodeTree}});var UF=BA();Object.defineProperty(ot,"xmlDecodeTree",{enumerable:!0,get:function(){return UF.xmlDecodeTree}})});var HA=F(Pa=>{"use strict";m();Object.defineProperty(Pa,"__esModule",{value:!0});Pa.QuoteType=void 0;var Wo=FA(),re;(function(t){t[t.Tab=9]="Tab",t[t.NewLine=10]="NewLine",t[t.FormFeed=12]="FormFeed",t[t.CarriageReturn=13]="CarriageReturn",t[t.Space=32]="Space",t[t.ExclamationMark=33]="ExclamationMark",t[t.Number=35]="Number",t[t.Amp=38]="Amp",t[t.SingleQuote=39]="SingleQuote",t[t.DoubleQuote=34]="DoubleQuote",t[t.Dash=45]="Dash",t[t.Slash=47]="Slash",t[t.Zero=48]="Zero",t[t.Nine=57]="Nine",t[t.Semi=59]="Semi",t[t.Lt=60]="Lt",t[t.Eq=61]="Eq",t[t.Gt=62]="Gt",t[t.Questionmark=63]="Questionmark",t[t.UpperA=65]="UpperA",t[t.LowerA=97]="LowerA",t[t.UpperF=70]="UpperF",t[t.LowerF=102]="LowerF",t[t.UpperZ=90]="UpperZ",t[t.LowerZ=122]="LowerZ",t[t.LowerX=120]="LowerX",t[t.OpeningSquareBracket=91]="OpeningSquareBracket"})(re||(re={}));var j;(function(t){t[t.Text=1]="Text",t[t.BeforeTagName=2]="BeforeTagName",t[t.InTagName=3]="InTagName",t[t.InSelfClosingTag=4]="InSelfClosingTag",t[t.BeforeClosingTagName=5]="BeforeClosingTagName",t[t.InClosingTagName=6]="InClosingTagName",t[t.AfterClosingTagName=7]="AfterClosingTagName",t[t.BeforeAttributeName=8]="BeforeAttributeName",t[t.InAttributeName=9]="InAttributeName",t[t.AfterAttributeName=10]="AfterAttributeName",t[t.BeforeAttributeValue=11]="BeforeAttributeValue",t[t.InAttributeValueDq=12]="InAttributeValueDq",t[t.InAttributeValueSq=13]="InAttributeValueSq",t[t.InAttributeValueNq=14]="InAttributeValueNq",t[t.BeforeDeclaration=15]="BeforeDeclaration",t[t.InDeclaration=16]="InDeclaration",t[t.InProcessingInstruction=17]="InProcessingInstruction",t[t.BeforeComment=18]="BeforeComment",t[t.CDATASequence=19]="CDATASequence",t[t.InSpecialComment=20]="InSpecialComment",t[t.InCommentLike=21]="InCommentLike",t[t.BeforeSpecialS=22]="BeforeSpecialS",t[t.BeforeSpecialT=23]="BeforeSpecialT",t[t.SpecialStartSequence=24]="SpecialStartSequence",t[t.InSpecialTag=25]="InSpecialTag",t[t.InEntity=26]="InEntity"})(j||(j={}));function pr(t){return t===re.Space||t===re.NewLine||t===re.Tab||t===re.FormFeed||t===re.CarriageReturn}function ll(t){return t===re.Slash||t===re.Gt||pr(t)}function HF(t){return t>=re.LowerA&&t<=re.LowerZ||t>=re.UpperA&&t<=re.UpperZ}var Ui;(function(t){t[t.NoValue=0]="NoValue",t[t.Unquoted=1]="Unquoted",t[t.Single=2]="Single",t[t.Double=3]="Double"})(Ui||(Pa.QuoteType=Ui={}));var ct={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101]),TextareaEnd:new Uint8Array([60,47,116,101,120,116,97,114,101,97]),XmpEnd:new Uint8Array([60,47,120,109,112])},UA=class{constructor({xmlMode:e=!1,decodeEntities:n=!0},r){this.cbs=r,this.state=j.Text,this.buffer="",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=j.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.currentSequence=void 0,this.sequenceIndex=0,this.xmlMode=e,this.decodeEntities=n,this.entityDecoder=new Wo.EntityDecoder(e?Wo.xmlDecodeTree:Wo.htmlDecodeTree,(i,o)=>this.emitCodePoint(i,o))}reset(){this.state=j.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=j.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(e){this.offset+=this.buffer.length,this.buffer=e,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=j.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&e===re.Amp&&this.startEntity()}stateSpecialStartSequence(e){let n=this.sequenceIndex===this.currentSequence.length;if(!(n?ll(e):(e|32)===this.currentSequence[this.sequenceIndex]))this.isSpecial=!1;else if(!n){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=j.InTagName,this.stateInTagName(e)}stateInSpecialTag(e){if(this.sequenceIndex===this.currentSequence.length){if(e===re.Gt||pr(e)){let n=this.index-this.currentSequence.length;if(this.sectionStart=0)this.state=this.baseState,n===0&&(this.index-=1);else{if(e=e||(this.state===j.InCommentLike?this.currentSequence===ct.CdataEnd?this.cbs.oncdata(this.sectionStart,e,0):this.cbs.oncomment(this.sectionStart,e,0):this.state===j.InTagName||this.state===j.BeforeAttributeName||this.state===j.BeforeAttributeValue||this.state===j.AfterAttributeName||this.state===j.InAttributeName||this.state===j.InAttributeValueSq||this.state===j.InAttributeValueDq||this.state===j.InAttributeValueNq||this.state===j.InClosingTagName||this.cbs.ontext(this.sectionStart,e))}emitCodePoint(e,n){this.baseState!==j.Text&&this.baseState!==j.InSpecialTag?(this.sectionStart{"use strict";m();var YF=Vn&&Vn.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,i)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),GF=Vn&&Vn.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),KF=Vn&&Vn.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var r=t(e),i=0;i0&&s.has(this.stack[0]);){let a=this.stack.shift();(r=(n=this.cbs).onclosetag)===null||r===void 0||r.call(n,a,!0)}this.isVoidElement(e)||(this.stack.unshift(e),this.htmlMode&&(hy.has(e)?this.foreignContext.unshift(!0):Ay.has(e)&&this.foreignContext.unshift(!1))),(o=(i=this.cbs).onopentagname)===null||o===void 0||o.call(i,e),this.cbs.onopentag&&(this.attribs={})}endOpenTag(e){var n,r;this.startIndex=this.openTagStart,this.attribs&&((r=(n=this.cbs).onopentag)===null||r===void 0||r.call(n,this.tagname,this.attribs,e),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""}onopentagend(e){this.endIndex=e,this.endOpenTag(!1),this.startIndex=e+1}onclosetag(e,n){var r,i,o,s,a,c,u,l;this.endIndex=n;let d=this.getSlice(e,n);if(this.lowerCaseTagNames&&(d=d.toLowerCase()),this.htmlMode&&(hy.has(d)||Ay.has(d))&&this.foreignContext.shift(),this.isVoidElement(d))this.htmlMode&&d==="br"&&((s=(o=this.cbs).onopentagname)===null||s===void 0||s.call(o,"br"),(c=(a=this.cbs).onopentag)===null||c===void 0||c.call(a,"br",{},!0),(l=(u=this.cbs).onclosetag)===null||l===void 0||l.call(u,"br",!1));else{let f=this.stack.indexOf(d);if(f!==-1)for(let h=0;h<=f;h++){let A=this.stack.shift();(i=(r=this.cbs).onclosetag)===null||i===void 0||i.call(r,A,h!==f)}else this.htmlMode&&d==="p"&&(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=n+1}onselfclosingtag(e){this.endIndex=e,this.recognizeSelfClosing||this.foreignContext[0]?(this.closeCurrentTag(!1),this.startIndex=e+1):this.onopentagend(e)}closeCurrentTag(e){var n,r;let i=this.tagname;this.endOpenTag(e),this.stack[0]===i&&((r=(n=this.cbs).onclosetag)===null||r===void 0||r.call(n,i,!e),this.stack.shift())}onattribname(e,n){this.startIndex=e;let r=this.getSlice(e,n);this.attribname=this.lowerCaseAttributeNames?r.toLowerCase():r}onattribdata(e,n){this.attribvalue+=this.getSlice(e,n)}onattribentity(e){this.attribvalue+=(0,uy.fromCodePoint)(e)}onattribend(e,n){var r,i;this.endIndex=n,(i=(r=this.cbs).onattribute)===null||i===void 0||i.call(r,this.attribname,this.attribvalue,e===dl.QuoteType.Double?'"':e===dl.QuoteType.Single?"'":e===dl.QuoteType.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""}getInstructionName(e){let n=e.search(jF),r=n<0?e:e.substr(0,n);return this.lowerCaseTagNames&&(r=r.toLowerCase()),r}ondeclaration(e,n){this.endIndex=n;let r=this.getSlice(e,n);if(this.cbs.onprocessinginstruction){let i=this.getInstructionName(r);this.cbs.onprocessinginstruction(`!${i}`,`!${r}`)}this.startIndex=n+1}onprocessinginstruction(e,n){this.endIndex=n;let r=this.getSlice(e,n);if(this.cbs.onprocessinginstruction){let i=this.getInstructionName(r);this.cbs.onprocessinginstruction(`?${i}`,`?${r}`)}this.startIndex=n+1}oncomment(e,n,r){var i,o,s,a;this.endIndex=n,(o=(i=this.cbs).oncomment)===null||o===void 0||o.call(i,this.getSlice(e,n-r)),(a=(s=this.cbs).oncommentend)===null||a===void 0||a.call(s),this.startIndex=n+1}oncdata(e,n,r){var i,o,s,a,c,u,l,d,f,h;this.endIndex=n;let A=this.getSlice(e,n-r);!this.htmlMode||this.options.recognizeCDATA?((o=(i=this.cbs).oncdatastart)===null||o===void 0||o.call(i),(a=(s=this.cbs).ontext)===null||a===void 0||a.call(s,A),(u=(c=this.cbs).oncdataend)===null||u===void 0||u.call(c)):((d=(l=this.cbs).oncomment)===null||d===void 0||d.call(l,`[CDATA[${A}]]`),(h=(f=this.cbs).oncommentend)===null||h===void 0||h.call(f)),this.startIndex=n+1}onend(){var e,n;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let r=0;r=this.buffers[0].length;)this.shiftBuffer();let r=this.buffers[0].slice(e-this.bufferOffset,n-this.bufferOffset);for(;n-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),r+=this.buffers[0].slice(0,n-this.bufferOffset);return r}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(e){var n,r;if(this.ended){(r=(n=this.cbs).onerror)===null||r===void 0||r.call(n,new Error(".write() after done!"));return}this.buffers.push(e),this.tokenizer.running&&(this.tokenizer.write(e),this.writeIndex++)}end(e){var n,r;if(this.ended){(r=(n=this.cbs).onerror)===null||r===void 0||r.call(n,new Error(".end() after done!"));return}e&&this.write(e),this.ended=!0,this.tokenizer.end()}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex{"use strict";m();Object.defineProperty(We,"__esModule",{value:!0});We.Doctype=We.CDATA=We.Tag=We.Style=We.Script=We.Comment=We.Directive=We.Text=We.Root=We.isTag=We.ElementType=void 0;var Zt;(function(t){t.Root="root",t.Text="text",t.Directive="directive",t.Comment="comment",t.Script="script",t.Style="style",t.Tag="tag",t.CDATA="cdata",t.Doctype="doctype"})(Zt=We.ElementType||(We.ElementType={}));function qF(t){return t.type===Zt.Tag||t.type===Zt.Script||t.type===Zt.Style}We.isTag=qF;We.Root=Zt.Root;We.Text=Zt.Text;We.Directive=Zt.Directive;We.Comment=Zt.Comment;We.Script=Zt.Script;We.Style=Zt.Style;We.Tag=Zt.Tag;We.CDATA=Zt.CDATA;We.Doctype=Zt.Doctype});var jA=F(de=>{"use strict";m();var Qr=de&&de.__extends||(function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},t(e,n)};return function(e,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");t(e,n);function r(){this.constructor=e}e.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),La=de&&de.__assign||function(){return La=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"childNodes",{get:function(){return this.children},set:function(n){this.children=n},enumerable:!1,configurable:!0}),e})(QA);de.NodeWithChildren=hl;var by=(function(t){Qr(e,t);function e(){var n=t!==null&&t.apply(this,arguments)||this;return n.type=qt.ElementType.CDATA,n}return Object.defineProperty(e.prototype,"nodeType",{get:function(){return 4},enumerable:!1,configurable:!0}),e})(hl);de.CDATA=by;var xy=(function(t){Qr(e,t);function e(){var n=t!==null&&t.apply(this,arguments)||this;return n.type=qt.ElementType.Root,n}return Object.defineProperty(e.prototype,"nodeType",{get:function(){return 9},enumerable:!1,configurable:!0}),e})(hl);de.Document=xy;var Ey=(function(t){Qr(e,t);function e(n,r,i,o){i===void 0&&(i=[]),o===void 0&&(o=n==="script"?qt.ElementType.Script:n==="style"?qt.ElementType.Style:qt.ElementType.Tag);var s=t.call(this,i)||this;return s.name=n,s.attribs=r,s.type=o,s}return Object.defineProperty(e.prototype,"nodeType",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tagName",{get:function(){return this.name},set:function(n){this.name=n},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"attributes",{get:function(){var n=this;return Object.keys(this.attribs).map(function(r){var i,o;return{name:r,value:n.attribs[r],namespace:(i=n["x-attribsNamespace"])===null||i===void 0?void 0:i[r],prefix:(o=n["x-attribsPrefix"])===null||o===void 0?void 0:o[r]}})},enumerable:!1,configurable:!0}),e})(hl);de.Element=Ey;function Iy(t){return(0,qt.isTag)(t)}de.isTag=Iy;function yy(t){return t.type===qt.ElementType.CDATA}de.isCDATA=yy;function Cy(t){return t.type===qt.ElementType.Text}de.isText=Cy;function Ty(t){return t.type===qt.ElementType.Comment}de.isComment=Ty;function wy(t){return t.type===qt.ElementType.Directive}de.isDirective=wy;function _y(t){return t.type===qt.ElementType.Root}de.isDocument=_y;function VF(t){return Object.prototype.hasOwnProperty.call(t,"children")}de.hasChildren=VF;function WA(t,e){e===void 0&&(e=!1);var n;if(Cy(t))n=new py(t.data);else if(Ty(t))n=new my(t.data);else if(Iy(t)){var r=e?KA(t.children):[],i=new Ey(t.name,La({},t.attribs),r);r.forEach(function(c){return c.parent=i}),t.namespace!=null&&(i.namespace=t.namespace),t["x-attribsNamespace"]&&(i["x-attribsNamespace"]=La({},t["x-attribsNamespace"])),t["x-attribsPrefix"]&&(i["x-attribsPrefix"]=La({},t["x-attribsPrefix"])),n=i}else if(yy(t)){var r=e?KA(t.children):[],o=new by(r);r.forEach(function(u){return u.parent=o}),n=o}else if(_y(t)){var r=e?KA(t.children):[],s=new xy(r);r.forEach(function(u){return u.parent=s}),t["x-mode"]&&(s["x-mode"]=t["x-mode"]),n=s}else if(wy(t)){var a=new gy(t.name,t.data);t["x-name"]!=null&&(a["x-name"]=t["x-name"],a["x-publicId"]=t["x-publicId"],a["x-systemId"]=t["x-systemId"]),n=a}else throw new Error("Not implemented yet: ".concat(t.type));return n.startIndex=t.startIndex,n.endIndex=t.endIndex,t.sourceCodeLocation!=null&&(n.sourceCodeLocation=t.sourceCodeLocation),n}de.cloneNode=WA;function KA(t){for(var e=t.map(function(r){return WA(r,!0)}),n=1;n{"use strict";m();var $F=$n&&$n.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,i)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),JF=$n&&$n.__exportStar||function(t,e){for(var n in t)n!=="default"&&!Object.prototype.hasOwnProperty.call(e,n)&&$F(e,t,n)};Object.defineProperty($n,"__esModule",{value:!0});$n.DomHandler=void 0;var qA=qo(),Wr=jA();JF(jA(),$n);var Sy={withStartIndices:!1,withEndIndices:!1,xmlMode:!1},vy=(function(){function t(e,n,r){this.dom=[],this.root=new Wr.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,typeof n=="function"&&(r=n,n=Sy),typeof e=="object"&&(n=e,e=void 0),this.callback=e??null,this.options=n??Sy,this.elementCB=r??null}return t.prototype.onparserinit=function(e){this.parser=e},t.prototype.onreset=function(){this.dom=[],this.root=new Wr.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null},t.prototype.onend=function(){this.done||(this.done=!0,this.parser=null,this.handleCallback(null))},t.prototype.onerror=function(e){this.handleCallback(e)},t.prototype.onclosetag=function(){this.lastNode=null;var e=this.tagStack.pop();this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),this.elementCB&&this.elementCB(e)},t.prototype.onopentag=function(e,n){var r=this.options.xmlMode?qA.ElementType.Tag:void 0,i=new Wr.Element(e,n,void 0,r);this.addNode(i),this.tagStack.push(i)},t.prototype.ontext=function(e){var n=this.lastNode;if(n&&n.type===qA.ElementType.Text)n.data+=e,this.options.withEndIndices&&(n.endIndex=this.parser.endIndex);else{var r=new Wr.Text(e);this.addNode(r),this.lastNode=r}},t.prototype.oncomment=function(e){if(this.lastNode&&this.lastNode.type===qA.ElementType.Comment){this.lastNode.data+=e;return}var n=new Wr.Comment(e);this.addNode(n),this.lastNode=n},t.prototype.oncommentend=function(){this.lastNode=null},t.prototype.oncdatastart=function(){var e=new Wr.Text(""),n=new Wr.CDATA([e]);this.addNode(n),e.parent=n,this.lastNode=e},t.prototype.oncdataend=function(){this.lastNode=null},t.prototype.onprocessinginstruction=function(e,n){var r=new Wr.ProcessingInstruction(e,n);this.addNode(r)},t.prototype.handleCallback=function(e){if(typeof this.callback=="function")this.callback(e,this.dom);else if(e)throw e},t.prototype.addNode=function(e){var n=this.tagStack[this.tagStack.length-1],r=n.children[n.children.length-1];this.options.withStartIndices&&(e.startIndex=this.parser.startIndex),this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),n.children.push(e),r&&(e.prev=r,r.next=e),e.parent=n,this.lastNode=null},t})();$n.DomHandler=vy;$n.default=vy});var ky=F(VA=>{"use strict";m();Object.defineProperty(VA,"__esModule",{value:!0});VA.default=new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(function(t){return t.charCodeAt(0)}))});var Ny=F($A=>{"use strict";m();Object.defineProperty($A,"__esModule",{value:!0});$A.default=new Uint16Array("\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(function(t){return t.charCodeAt(0)}))});var XA=F(jr=>{"use strict";m();var JA;Object.defineProperty(jr,"__esModule",{value:!0});jr.replaceCodePoint=jr.fromCodePoint=void 0;var XF=new Map([[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]]);jr.fromCodePoint=(JA=String.fromCodePoint)!==null&&JA!==void 0?JA:function(t){var e="";return t>65535&&(t-=65536,e+=String.fromCharCode(t>>>10&1023|55296),t=56320|t&1023),e+=String.fromCharCode(t),e};function Ry(t){var e;return t>=55296&&t<=57343||t>1114111?65533:(e=XF.get(t))!==null&&e!==void 0?e:t}jr.replaceCodePoint=Ry;function zF(t){return(0,jr.fromCodePoint)(Ry(t))}jr.default=zF});var tp=F(pe=>{"use strict";m();var ZF=pe&&pe.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,i)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),e4=pe&&pe.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),t4=pe&&pe.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)n!=="default"&&Object.prototype.hasOwnProperty.call(t,n)&&ZF(e,t,n);return e4(e,t),e},Oy=pe&&pe.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pe,"__esModule",{value:!0});pe.decodeXML=pe.decodeHTMLStrict=pe.decodeHTMLAttribute=pe.decodeHTML=pe.determineBranch=pe.EntityDecoder=pe.DecodingMode=pe.BinTrieFlags=pe.fromCodePoint=pe.replaceCodePoint=pe.decodeCodePoint=pe.xmlDecodeTree=pe.htmlDecodeTree=void 0;var Dy=Oy(ky());pe.htmlDecodeTree=Dy.default;var By=Oy(Ny());pe.xmlDecodeTree=By.default;var ZA=t4(XA());pe.decodeCodePoint=ZA.default;var My=XA();Object.defineProperty(pe,"replaceCodePoint",{enumerable:!0,get:function(){return My.replaceCodePoint}});Object.defineProperty(pe,"fromCodePoint",{enumerable:!0,get:function(){return My.fromCodePoint}});var Et;(function(t){t[t.NUM=35]="NUM",t[t.SEMI=59]="SEMI",t[t.EQUALS=61]="EQUALS",t[t.ZERO=48]="ZERO",t[t.NINE=57]="NINE",t[t.LOWER_A=97]="LOWER_A",t[t.LOWER_F=102]="LOWER_F",t[t.LOWER_X=120]="LOWER_X",t[t.LOWER_Z=122]="LOWER_Z",t[t.UPPER_A=65]="UPPER_A",t[t.UPPER_F=70]="UPPER_F",t[t.UPPER_Z=90]="UPPER_Z"})(Et||(Et={}));var n4=32,Hi;(function(t){t[t.VALUE_LENGTH=49152]="VALUE_LENGTH",t[t.BRANCH_LENGTH=16256]="BRANCH_LENGTH",t[t.JUMP_TABLE=127]="JUMP_TABLE"})(Hi=pe.BinTrieFlags||(pe.BinTrieFlags={}));function zA(t){return t>=Et.ZERO&&t<=Et.NINE}function r4(t){return t>=Et.UPPER_A&&t<=Et.UPPER_F||t>=Et.LOWER_A&&t<=Et.LOWER_F}function i4(t){return t>=Et.UPPER_A&&t<=Et.UPPER_Z||t>=Et.LOWER_A&&t<=Et.LOWER_Z||zA(t)}function o4(t){return t===Et.EQUALS||i4(t)}var xt;(function(t){t[t.EntityStart=0]="EntityStart",t[t.NumericStart=1]="NumericStart",t[t.NumericDecimal=2]="NumericDecimal",t[t.NumericHex=3]="NumericHex",t[t.NamedEntity=4]="NamedEntity"})(xt||(xt={}));var Jn;(function(t){t[t.Legacy=0]="Legacy",t[t.Strict=1]="Strict",t[t.Attribute=2]="Attribute"})(Jn=pe.DecodingMode||(pe.DecodingMode={}));var Py=(function(){function t(e,n,r){this.decodeTree=e,this.emitCodePoint=n,this.errors=r,this.state=xt.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Jn.Strict}return t.prototype.startEntity=function(e){this.decodeMode=e,this.state=xt.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1},t.prototype.write=function(e,n){switch(this.state){case xt.EntityStart:return e.charCodeAt(n)===Et.NUM?(this.state=xt.NumericStart,this.consumed+=1,this.stateNumericStart(e,n+1)):(this.state=xt.NamedEntity,this.stateNamedEntity(e,n));case xt.NumericStart:return this.stateNumericStart(e,n);case xt.NumericDecimal:return this.stateNumericDecimal(e,n);case xt.NumericHex:return this.stateNumericHex(e,n);case xt.NamedEntity:return this.stateNamedEntity(e,n)}},t.prototype.stateNumericStart=function(e,n){return n>=e.length?-1:(e.charCodeAt(n)|n4)===Et.LOWER_X?(this.state=xt.NumericHex,this.consumed+=1,this.stateNumericHex(e,n+1)):(this.state=xt.NumericDecimal,this.stateNumericDecimal(e,n))},t.prototype.addToNumericResult=function(e,n,r,i){if(n!==r){var o=r-n;this.result=this.result*Math.pow(i,o)+parseInt(e.substr(n,o),i),this.consumed+=o}},t.prototype.stateNumericHex=function(e,n){for(var r=n;n>14;n>14,o!==0){if(s===Et.SEMI)return this.emitNamedEntityData(this.treeIndex,o,this.consumed+this.excess);this.decodeMode!==Jn.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1},t.prototype.emitNotTerminatedNamedEntity=function(){var e,n=this,r=n.result,i=n.decodeTree,o=(i[r]&Hi.VALUE_LENGTH)>>14;return this.emitNamedEntityData(r,o,this.consumed),(e=this.errors)===null||e===void 0||e.missingSemicolonAfterCharacterReference(),this.consumed},t.prototype.emitNamedEntityData=function(e,n,r){var i=this.decodeTree;return this.emitCodePoint(n===1?i[e]&~Hi.VALUE_LENGTH:i[e+1],r),n===3&&this.emitCodePoint(i[e+2],r),r},t.prototype.end=function(){var e;switch(this.state){case xt.NamedEntity:return this.result!==0&&(this.decodeMode!==Jn.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case xt.NumericDecimal:return this.emitNumericEntity(0,2);case xt.NumericHex:return this.emitNumericEntity(0,3);case xt.NumericStart:return(e=this.errors)===null||e===void 0||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case xt.EntityStart:return 0}},t})();pe.EntityDecoder=Py;function Ly(t){var e="",n=new Py(t,function(r){return e+=(0,ZA.fromCodePoint)(r)});return function(i,o){for(var s=0,a=0;(a=i.indexOf("&",a))>=0;){e+=i.slice(s,a),n.startEntity(o);var c=n.write(i,a+1);if(c<0){s=a+n.end();break}s=a+c,a=c===0?s+1:s}var u=e+i.slice(s);return e="",u}}function Fy(t,e,n,r){var i=(e&Hi.BRANCH_LENGTH)>>7,o=e&Hi.JUMP_TABLE;if(i===0)return o!==0&&r===o?n:-1;if(o){var s=r-o;return s<0||s>=i?-1:t[n+s]-1}for(var a=n,c=a+i-1;a<=c;){var u=a+c>>>1,l=t[u];if(lr)c=u-1;else return t[u+i]}return-1}pe.determineBranch=Fy;var ep=Ly(Dy.default),s4=Ly(By.default);function a4(t,e){return e===void 0&&(e=Jn.Legacy),ep(t,e)}pe.decodeHTML=a4;function c4(t){return ep(t,Jn.Attribute)}pe.decodeHTMLAttribute=c4;function u4(t){return ep(t,Jn.Strict)}pe.decodeHTMLStrict=u4;function l4(t){return s4(t,Jn.Strict)}pe.decodeXML=l4});var Uy=F(np=>{"use strict";m();Object.defineProperty(np,"__esModule",{value:!0});function Al(t){for(var e=1;e{"use strict";m();Object.defineProperty(ft,"__esModule",{value:!0});ft.escapeText=ft.escapeAttribute=ft.escapeUTF8=ft.escape=ft.encodeXML=ft.getCodePoint=ft.xmlReplacer=void 0;ft.xmlReplacer=/["&'<>$\x80-\uFFFF]/g;var Hy=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);ft.getCodePoint=String.prototype.codePointAt!=null?function(t,e){return t.codePointAt(e)}:function(t,e){return(t.charCodeAt(e)&64512)===55296?(t.charCodeAt(e)-55296)*1024+t.charCodeAt(e+1)-56320+65536:t.charCodeAt(e)};function Yy(t){for(var e="",n=0,r;(r=ft.xmlReplacer.exec(t))!==null;){var i=r.index,o=t.charCodeAt(i),s=Hy.get(o);s!==void 0?(e+=t.substring(n,i)+s,n=i+1):(e+="".concat(t.substring(n,i),"&#x").concat((0,ft.getCodePoint)(t,i).toString(16),";"),n=ft.xmlReplacer.lastIndex+=+((o&64512)===55296))}return e+t.substr(n)}ft.encodeXML=Yy;ft.escape=Yy;function rp(t,e){return function(r){for(var i,o=0,s="";i=t.exec(r);)o!==i.index&&(s+=r.substring(o,i.index)),s+=e.get(i[0].charCodeAt(0)),o=i.index+1;return s+r.substring(o)}}ft.escapeUTF8=rp(/[&<>'"]/g,Hy);ft.escapeAttribute=rp(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]]));ft.escapeText=rp(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]))});var ip=F(qr=>{"use strict";m();var d4=qr&&qr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(qr,"__esModule",{value:!0});qr.encodeNonAsciiHTML=qr.encodeHTML=void 0;var f4=d4(Uy()),Gy=pl(),h4=/[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;function A4(t){return Ky(h4,t)}qr.encodeHTML=A4;function p4(t){return Ky(Gy.xmlReplacer,t)}qr.encodeNonAsciiHTML=p4;function Ky(t,e){for(var n="",r=0,i;(i=t.exec(e))!==null;){var o=i.index;n+=e.substring(r,o);var s=e.charCodeAt(o),a=f4.default.get(s);if(typeof a=="object"){if(o+1{"use strict";m();Object.defineProperty(ne,"__esModule",{value:!0});ne.decodeXMLStrict=ne.decodeHTML5Strict=ne.decodeHTML4Strict=ne.decodeHTML5=ne.decodeHTML4=ne.decodeHTMLAttribute=ne.decodeHTMLStrict=ne.decodeHTML=ne.decodeXML=ne.DecodingMode=ne.EntityDecoder=ne.encodeHTML5=ne.encodeHTML4=ne.encodeNonAsciiHTML=ne.encodeHTML=ne.escapeText=ne.escapeAttribute=ne.escapeUTF8=ne.escape=ne.encodeXML=ne.encode=ne.decodeStrict=ne.decode=ne.EncodingMode=ne.EntityLevel=void 0;var op=tp(),Qy=ip(),ml=pl(),Vo;(function(t){t[t.XML=0]="XML",t[t.HTML=1]="HTML"})(Vo=ne.EntityLevel||(ne.EntityLevel={}));var Fa;(function(t){t[t.UTF8=0]="UTF8",t[t.ASCII=1]="ASCII",t[t.Extensive=2]="Extensive",t[t.Attribute=3]="Attribute",t[t.Text=4]="Text"})(Fa=ne.EncodingMode||(ne.EncodingMode={}));function Wy(t,e){e===void 0&&(e=Vo.XML);var n=typeof e=="number"?e:e.level;if(n===Vo.HTML){var r=typeof e=="object"?e.mode:void 0;return(0,op.decodeHTML)(t,r)}return(0,op.decodeXML)(t)}ne.decode=Wy;function m4(t,e){var n;e===void 0&&(e=Vo.XML);var r=typeof e=="number"?{level:e}:e;return(n=r.mode)!==null&&n!==void 0||(r.mode=op.DecodingMode.Strict),Wy(t,r)}ne.decodeStrict=m4;function g4(t,e){e===void 0&&(e=Vo.XML);var n=typeof e=="number"?{level:e}:e;return n.mode===Fa.UTF8?(0,ml.escapeUTF8)(t):n.mode===Fa.Attribute?(0,ml.escapeAttribute)(t):n.mode===Fa.Text?(0,ml.escapeText)(t):n.level===Vo.HTML?n.mode===Fa.ASCII?(0,Qy.encodeNonAsciiHTML)(t):(0,Qy.encodeHTML)(t):(0,ml.encodeXML)(t)}ne.encode=g4;var Ua=pl();Object.defineProperty(ne,"encodeXML",{enumerable:!0,get:function(){return Ua.encodeXML}});Object.defineProperty(ne,"escape",{enumerable:!0,get:function(){return Ua.escape}});Object.defineProperty(ne,"escapeUTF8",{enumerable:!0,get:function(){return Ua.escapeUTF8}});Object.defineProperty(ne,"escapeAttribute",{enumerable:!0,get:function(){return Ua.escapeAttribute}});Object.defineProperty(ne,"escapeText",{enumerable:!0,get:function(){return Ua.escapeText}});var gl=ip();Object.defineProperty(ne,"encodeHTML",{enumerable:!0,get:function(){return gl.encodeHTML}});Object.defineProperty(ne,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return gl.encodeNonAsciiHTML}});Object.defineProperty(ne,"encodeHTML4",{enumerable:!0,get:function(){return gl.encodeHTML}});Object.defineProperty(ne,"encodeHTML5",{enumerable:!0,get:function(){return gl.encodeHTML}});var On=tp();Object.defineProperty(ne,"EntityDecoder",{enumerable:!0,get:function(){return On.EntityDecoder}});Object.defineProperty(ne,"DecodingMode",{enumerable:!0,get:function(){return On.DecodingMode}});Object.defineProperty(ne,"decodeXML",{enumerable:!0,get:function(){return On.decodeXML}});Object.defineProperty(ne,"decodeHTML",{enumerable:!0,get:function(){return On.decodeHTML}});Object.defineProperty(ne,"decodeHTMLStrict",{enumerable:!0,get:function(){return On.decodeHTMLStrict}});Object.defineProperty(ne,"decodeHTMLAttribute",{enumerable:!0,get:function(){return On.decodeHTMLAttribute}});Object.defineProperty(ne,"decodeHTML4",{enumerable:!0,get:function(){return On.decodeHTML}});Object.defineProperty(ne,"decodeHTML5",{enumerable:!0,get:function(){return On.decodeHTML}});Object.defineProperty(ne,"decodeHTML4Strict",{enumerable:!0,get:function(){return On.decodeHTMLStrict}});Object.defineProperty(ne,"decodeHTML5Strict",{enumerable:!0,get:function(){return On.decodeHTMLStrict}});Object.defineProperty(ne,"decodeXMLStrict",{enumerable:!0,get:function(){return On.decodeXML}})});var qy=F($o=>{"use strict";m();Object.defineProperty($o,"__esModule",{value:!0});$o.attributeNames=$o.elementNames=void 0;$o.elementNames=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(function(t){return[t.toLowerCase(),t]}));$o.attributeNames=new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(function(t){return[t.toLowerCase(),t]}))});var Jy=F(en=>{"use strict";m();var Jo=en&&en.__assign||function(){return Jo=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0&&(r+=xl(t.children,e)),(e.xmlMode||!Vy.has(t.name))&&(r+=""))),r}function v4(t){return"<".concat(t.data,">")}function k4(t,e){var n,r=t.data||"";return((n=e.encodeEntities)!==null&&n!==void 0?n:e.decodeEntities)!==!1&&!(!e.xmlMode&&t.parent&&I4.has(t.parent.name))&&(r=e.xmlMode||e.encodeEntities!=="utf8"?(0,bl.encodeXML)(r):(0,bl.escapeText)(r)),r}function N4(t){return"")}function R4(t){return"")}});var cp=F(br=>{"use strict";m();var O4=br&&br.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(br,"__esModule",{value:!0});br.getOuterHTML=Xy;br.getInnerHTML=M4;br.getText=El;br.textContent=sp;br.innerText=ap;var Xn=mr(),D4=O4(Jy()),B4=qo();function Xy(t,e){return(0,D4.default)(t,e)}function M4(t,e){return(0,Xn.hasChildren)(t)?t.children.map(function(n){return Xy(n,e)}).join(""):""}function El(t){return Array.isArray(t)?t.map(El).join(""):(0,Xn.isTag)(t)?t.name==="br"?` +`:El(t.children):(0,Xn.isCDATA)(t)?El(t.children):(0,Xn.isText)(t)?t.data:""}function sp(t){return Array.isArray(t)?t.map(sp).join(""):(0,Xn.hasChildren)(t)&&!(0,Xn.isComment)(t)?sp(t.children):(0,Xn.isText)(t)?t.data:""}function ap(t){return Array.isArray(t)?t.map(ap).join(""):(0,Xn.hasChildren)(t)&&(t.type===B4.ElementType.Tag||(0,Xn.isCDATA)(t))?ap(t.children):(0,Xn.isText)(t)?t.data:""}});var eC=F(zn=>{"use strict";m();Object.defineProperty(zn,"__esModule",{value:!0});zn.getChildren=zy;zn.getParent=Zy;zn.getSiblings=P4;zn.getAttributeValue=L4;zn.hasAttrib=F4;zn.getName=U4;zn.nextElementSibling=H4;zn.prevElementSibling=Y4;var up=mr();function zy(t){return(0,up.hasChildren)(t)?t.children:[]}function Zy(t){return t.parent||null}function P4(t){var e,n,r=Zy(t);if(r!=null)return zy(r);for(var i=[t],o=t.prev,s=t.next;o!=null;)i.unshift(o),e=o,o=e.prev;for(;s!=null;)i.push(s),n=s,s=n.next;return i}function L4(t,e){var n;return(n=t.attribs)===null||n===void 0?void 0:n[e]}function F4(t,e){return t.attribs!=null&&Object.prototype.hasOwnProperty.call(t.attribs,e)&&t.attribs[e]!=null}function U4(t){return t.name}function H4(t){for(var e,n=t.next;n!==null&&!(0,up.isTag)(n);)e=n,n=e.next;return n}function Y4(t){for(var e,n=t.prev;n!==null&&!(0,up.isTag)(n);)e=n,n=e.prev;return n}});var tC=F(Vr=>{"use strict";m();Object.defineProperty(Vr,"__esModule",{value:!0});Vr.removeElement=Ha;Vr.replaceElement=G4;Vr.appendChild=K4;Vr.append=Q4;Vr.prependChild=W4;Vr.prepend=j4;function Ha(t){if(t.prev&&(t.prev.next=t.next),t.next&&(t.next.prev=t.prev),t.parent){var e=t.parent.children,n=e.lastIndexOf(t);n>=0&&e.splice(n,1)}t.next=null,t.prev=null,t.parent=null}function G4(t,e){var n=e.prev=t.prev;n&&(n.next=e);var r=e.next=t.next;r&&(r.prev=e);var i=e.parent=t.parent;if(i){var o=i.children;o[o.lastIndexOf(t)]=e,t.parent=null}}function K4(t,e){if(Ha(e),e.next=null,e.parent=t,t.children.push(e)>1){var n=t.children[t.children.length-2];n.next=e,e.prev=n}else e.prev=null}function Q4(t,e){Ha(e);var n=t.parent,r=t.next;if(e.next=r,e.prev=t,t.next=e,e.parent=n,r){if(r.prev=e,n){var i=n.children;i.splice(i.lastIndexOf(r),0,e)}}else n&&n.children.push(e)}function W4(t,e){if(Ha(e),e.parent=t,e.prev=null,t.children.unshift(e)!==1){var n=t.children[1];n.prev=e,e.next=n}else e.next=null}function j4(t,e){Ha(e);var n=t.parent;if(n){var r=n.children;r.splice(r.indexOf(t),0,e)}t.prev&&(t.prev.next=e),e.parent=n,e.prev=t.prev,e.next=t,t.prev=e}});var lp=F($r=>{"use strict";m();Object.defineProperty($r,"__esModule",{value:!0});$r.filter=q4;$r.find=nC;$r.findOneChild=V4;$r.findOne=rC;$r.existsOne=iC;$r.findAll=$4;var Yi=mr();function q4(t,e,n,r){return n===void 0&&(n=!0),r===void 0&&(r=1/0),nC(t,Array.isArray(e)?e:[e],n,r)}function nC(t,e,n,r){for(var i=[],o=[Array.isArray(e)?e:[e]],s=[0];;){if(s[0]>=o[0].length){if(s.length===1)return i;o.shift(),s.shift();continue}var a=o[0][s[0]++];if(t(a)&&(i.push(a),--r<=0))return i;n&&(0,Yi.hasChildren)(a)&&a.children.length>0&&(s.unshift(0),o.unshift(a.children))}}function V4(t,e){return e.find(t)}function rC(t,e,n){n===void 0&&(n=!0);for(var r=Array.isArray(e)?e:[e],i=0;i0){var s=rC(t,o.children,!0);if(s)return s}}return null}function iC(t,e){return(Array.isArray(e)?e:[e]).some(function(n){return(0,Yi.isTag)(n)&&t(n)||(0,Yi.hasChildren)(n)&&iC(t,n.children)})}function $4(t,e){for(var n=[],r=[Array.isArray(e)?e:[e]],i=[0];;){if(i[0]>=r[0].length){if(r.length===1)return n;r.shift(),i.shift();continue}var o=r[0][i[0]++];(0,Yi.isTag)(o)&&t(o)&&n.push(o),(0,Yi.hasChildren)(o)&&o.children.length>0&&(i.unshift(0),r.unshift(o.children))}}});var fp=F(Jr=>{"use strict";m();Object.defineProperty(Jr,"__esModule",{value:!0});Jr.testElement=X4;Jr.getElements=z4;Jr.getElementById=Z4;Jr.getElementsByTagName=e6;Jr.getElementsByClassName=t6;Jr.getElementsByTagType=n6;var Gi=mr(),Ya=lp(),Il={tag_name:function(t){return typeof t=="function"?function(e){return(0,Gi.isTag)(e)&&t(e.name)}:t==="*"?Gi.isTag:function(e){return(0,Gi.isTag)(e)&&e.name===t}},tag_type:function(t){return typeof t=="function"?function(e){return t(e.type)}:function(e){return e.type===t}},tag_contains:function(t){return typeof t=="function"?function(e){return(0,Gi.isText)(e)&&t(e.data)}:function(e){return(0,Gi.isText)(e)&&e.data===t}}};function dp(t,e){return typeof e=="function"?function(n){return(0,Gi.isTag)(n)&&e(n.attribs[t])}:function(n){return(0,Gi.isTag)(n)&&n.attribs[t]===e}}function J4(t,e){return function(n){return t(n)||e(n)}}function oC(t){var e=Object.keys(t).map(function(n){var r=t[n];return Object.prototype.hasOwnProperty.call(Il,n)?Il[n](r):dp(n,r)});return e.length===0?null:e.reduce(J4)}function X4(t,e){var n=oC(t);return n?n(e):!0}function z4(t,e,n,r){r===void 0&&(r=1/0);var i=oC(t);return i?(0,Ya.filter)(i,e,n,r):[]}function Z4(t,e,n){return n===void 0&&(n=!0),Array.isArray(e)||(e=[e]),(0,Ya.findOne)(dp("id",t),e,n)}function e6(t,e,n,r){return n===void 0&&(n=!0),r===void 0&&(r=1/0),(0,Ya.filter)(Il.tag_name(t),e,n,r)}function t6(t,e,n,r){return n===void 0&&(n=!0),r===void 0&&(r=1/0),(0,Ya.filter)(dp("class",t),e,n,r)}function n6(t,e,n,r){return n===void 0&&(n=!0),r===void 0&&(r=1/0),(0,Ya.filter)(Il.tag_type(t),e,n,r)}});var cC=F(Ki=>{"use strict";m();Object.defineProperty(Ki,"__esModule",{value:!0});Ki.DocumentPosition=void 0;Ki.removeSubsets=r6;Ki.compareDocumentPosition=aC;Ki.uniqueSort=i6;var sC=mr();function r6(t){for(var e=t.length;--e>=0;){var n=t[e];if(e>0&&t.lastIndexOf(n,e-1)>=0){t.splice(e,1);continue}for(var r=n.parent;r;r=r.parent)if(t.includes(r)){t.splice(e,1);break}}return t}var Dn;(function(t){t[t.DISCONNECTED=1]="DISCONNECTED",t[t.PRECEDING=2]="PRECEDING",t[t.FOLLOWING=4]="FOLLOWING",t[t.CONTAINS=8]="CONTAINS",t[t.CONTAINED_BY=16]="CONTAINED_BY"})(Dn||(Ki.DocumentPosition=Dn={}));function aC(t,e){var n=[],r=[];if(t===e)return 0;for(var i=(0,sC.hasChildren)(t)?t:t.parent;i;)n.unshift(i),i=i.parent;for(i=(0,sC.hasChildren)(e)?e:e.parent;i;)r.unshift(i),i=i.parent;for(var o=Math.min(n.length,r.length),s=0;sc.indexOf(l)?a===e?Dn.FOLLOWING|Dn.CONTAINED_BY:Dn.FOLLOWING:a===t?Dn.PRECEDING|Dn.CONTAINS:Dn.PRECEDING}function i6(t){return t=t.filter(function(e,n,r){return!r.includes(e,n+1)}),t.sort(function(e,n){var r=aC(e,n);return r&Dn.PRECEDING?-1:r&Dn.FOLLOWING?1:0}),t}});var lC=F(hp=>{"use strict";m();Object.defineProperty(hp,"__esModule",{value:!0});hp.getFeed=s6;var o6=cp(),Ga=fp();function s6(t){var e=yl(d6,t);return e?e.name==="feed"?a6(e):c6(e):null}function a6(t){var e,n=t.children,r={type:"atom",items:(0,Ga.getElementsByTagName)("entry",n).map(function(s){var a,c=s.children,u={media:uC(c)};Vt(u,"id","id",c),Vt(u,"title","title",c);var l=(a=yl("link",c))===null||a===void 0?void 0:a.attribs.href;l&&(u.link=l);var d=Xr("summary",c)||Xr("content",c);d&&(u.description=d);var f=Xr("updated",c);return f&&(u.pubDate=new Date(f)),u})};Vt(r,"id","id",n),Vt(r,"title","title",n);var i=(e=yl("link",n))===null||e===void 0?void 0:e.attribs.href;i&&(r.link=i),Vt(r,"description","subtitle",n);var o=Xr("updated",n);return o&&(r.updated=new Date(o)),Vt(r,"author","email",n,!0),r}function c6(t){var e,n,r=(n=(e=yl("channel",t.children))===null||e===void 0?void 0:e.children)!==null&&n!==void 0?n:[],i={type:t.name.substr(0,3),id:"",items:(0,Ga.getElementsByTagName)("item",t.children).map(function(s){var a=s.children,c={media:uC(a)};Vt(c,"id","guid",a),Vt(c,"title","title",a),Vt(c,"link","link",a),Vt(c,"description","description",a);var u=Xr("pubDate",a)||Xr("dc:date",a);return u&&(c.pubDate=new Date(u)),c})};Vt(i,"title","title",r),Vt(i,"link","link",r),Vt(i,"description","description",r);var o=Xr("lastBuildDate",r);return o&&(i.updated=new Date(o)),Vt(i,"author","managingEditor",r,!0),i}var u6=["url","type","lang"],l6=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function uC(t){return(0,Ga.getElementsByTagName)("media:content",t).map(function(e){for(var n=e.attribs,r={medium:n.medium,isDefault:!!n.isDefault},i=0,o=u6;i{"use strict";m();var f6=je&&je.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,i)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),Qi=je&&je.__exportStar||function(t,e){for(var n in t)n!=="default"&&!Object.prototype.hasOwnProperty.call(e,n)&&f6(e,t,n)};Object.defineProperty(je,"__esModule",{value:!0});je.hasChildren=je.isDocument=je.isComment=je.isText=je.isCDATA=je.isTag=void 0;Qi(cp(),je);Qi(eC(),je);Qi(tC(),je);Qi(lp(),je);Qi(fp(),je);Qi(cC(),je);Qi(lC(),je);var Xo=mr();Object.defineProperty(je,"isTag",{enumerable:!0,get:function(){return Xo.isTag}});Object.defineProperty(je,"isCDATA",{enumerable:!0,get:function(){return Xo.isCDATA}});Object.defineProperty(je,"isText",{enumerable:!0,get:function(){return Xo.isText}});Object.defineProperty(je,"isComment",{enumerable:!0,get:function(){return Xo.isComment}});Object.defineProperty(je,"isDocument",{enumerable:!0,get:function(){return Xo.isDocument}});Object.defineProperty(je,"hasChildren",{enumerable:!0,get:function(){return Xo.hasChildren}})});var mC=F(ke=>{"use strict";m();var h6=ke&&ke.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,i)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),A6=ke&&ke.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),dC=ke&&ke.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var r=t(e),i=0;it(i,r.root),e,n);return new Ap.Parser(r,e)}function b6(t,e,n){let r=new pp.DomHandler(t,e,n);return new Ap.Parser(r,e)}var pC=HA();Object.defineProperty(ke,"Tokenizer",{enumerable:!0,get:function(){return p6(pC).default}});Object.defineProperty(ke,"QuoteType",{enumerable:!0,get:function(){return pC.QuoteType}});ke.ElementType=dC(qo());var x6=Cl(),E6=Cl();Object.defineProperty(ke,"getFeed",{enumerable:!0,get:function(){return E6.getFeed}});var I6={xmlMode:!0};function y6(t,e=I6){return(0,x6.getFeed)(AC(t,e))}ke.DomUtils=dC(Cl())});var bC=F((Gte,gC)=>{"use strict";m();gC.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}});var EC=F(mp=>{"use strict";m();Object.defineProperty(mp,"__esModule",{value:!0});function xC(t){return Object.prototype.toString.call(t)==="[object Object]"}function C6(t){var e,n;return xC(t)===!1?!1:(e=t.constructor,e===void 0?!0:(n=e.prototype,!(xC(n)===!1||n.hasOwnProperty("isPrototypeOf")===!1)))}mp.isPlainObject=C6});var TC=F((jte,CC)=>{"use strict";m();var T6=function(e){return w6(e)&&!_6(e)};function w6(t){return!!t&&typeof t=="object"}function _6(t){var e=Object.prototype.toString.call(t);return e==="[object RegExp]"||e==="[object Date]"||k6(t)}var S6=typeof Symbol=="function"&&Symbol.for,v6=S6?Symbol.for("react.element"):60103;function k6(t){return t.$$typeof===v6}function N6(t){return Array.isArray(t)?[]:{}}function Ka(t,e){return e.clone!==!1&&e.isMergeableObject(t)?zo(N6(t),t,e):t}function R6(t,e,n){return t.concat(e).map(function(r){return Ka(r,n)})}function O6(t,e){if(!e.customMerge)return zo;var n=e.customMerge(t);return typeof n=="function"?n:zo}function D6(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter(function(e){return Object.propertyIsEnumerable.call(t,e)}):[]}function IC(t){return Object.keys(t).concat(D6(t))}function yC(t,e){try{return e in t}catch{return!1}}function B6(t,e){return yC(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))}function M6(t,e,n){var r={};return n.isMergeableObject(t)&&IC(t).forEach(function(i){r[i]=Ka(t[i],n)}),IC(e).forEach(function(i){B6(t,i)||(yC(t,i)&&n.isMergeableObject(e[i])?r[i]=O6(i,n)(t[i],e[i],n):r[i]=Ka(e[i],n))}),r}function zo(t,e,n){n=n||{},n.arrayMerge=n.arrayMerge||R6,n.isMergeableObject=n.isMergeableObject||T6,n.cloneUnlessOtherwiseSpecified=Ka;var r=Array.isArray(e),i=Array.isArray(t),o=r===i;return o?r?n.arrayMerge(t,e,n):M6(t,e,n):Ka(e,n)}zo.all=function(e,n){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce(function(r,i){return zo(r,i,n)},{})};var P6=zo;CC.exports=P6});var _C=F((wC,Tl)=>{m();(function(t,e){typeof define=="function"&&define.amd?define([],e):typeof Tl=="object"&&Tl.exports?Tl.exports=e():t.parseSrcset=e()})(wC,function(){return function(t){function e(T){return T===" "||T===" "||T===` +`||T==="\f"||T==="\r"}function n(T){var _,R=T.exec(t.substring(g));if(R)return _=R[0],g+=_.length,_}for(var r=t.length,i=/^[ \t\n\r\u000c]+/,o=/^[, \t\n\r\u000c]+/,s=/^[^ \t\n\r\u000c]+/,a=/[,]+$/,c=/^\d+$/,u=/^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,l,d,f,h,A,g=0,b=[];;){if(n(o),g>=r)return b;l=n(s),d=[],l.slice(-1)===","?(l=l.replace(a,""),E()):x()}function x(){for(n(i),f="",h="in descriptor";;){if(A=t.charAt(g),h==="in descriptor")if(e(A))f&&(d.push(f),f="",h="after descriptor");else if(A===","){g+=1,f&&d.push(f),E();return}else if(A==="(")f=f+A,h="in parens";else if(A===""){f&&d.push(f),E();return}else f=f+A;else if(h==="in parens")if(A===")")f=f+A,h="in descriptor";else if(A===""){d.push(f),E();return}else f=f+A;else if(h==="after descriptor"&&!e(A))if(A===""){E();return}else h="in descriptor",g-=1;g+=1}}function E(){var T=!1,_,R,S,v,D={},M,G,W,Y,H;for(v=0;v{m();(function(t,e){typeof gp=="object"&&typeof bp<"u"?bp.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(gp,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",o="minute",s="hour",a="day",c="week",u="month",l="quarter",d="year",f="date",h="Invalid Date",A=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,b={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(Y){var H=["th","st","nd","rd"],B=Y%100;return"["+Y+(H[(B-20)%10]||H[B]||H[0])+"]"}},x=function(Y,H,B){var y=String(Y);return!y||y.length>=H?Y:""+Array(H+1-y.length).join(B)+Y},E={s:x,z:function(Y){var H=-Y.utcOffset(),B=Math.abs(H),y=Math.floor(B/60),O=B%60;return(H<=0?"+":"-")+x(y,2,"0")+":"+x(O,2,"0")},m:function Y(H,B){if(H.date()1)return Y(P[0])}else{var K=H.name;_[K]=H,O=K}return!y&&O&&(T=O),O||!y&&T},D=function(Y,H){if(S(Y))return Y.clone();var B=typeof H=="object"?H:{};return B.date=Y,B.args=arguments,new G(B)},M=E;M.l=v,M.i=S,M.w=function(Y,H){return D(Y,{locale:H.$L,utc:H.$u,x:H.$x,$offset:H.$offset})};var G=(function(){function Y(B){this.$L=v(B.locale,null,!0),this.parse(B),this.$x=this.$x||B.x||{},this[R]=!0}var H=Y.prototype;return H.parse=function(B){this.$d=(function(y){var O=y.date,N=y.utc;if(O===null)return new Date(NaN);if(M.u(O))return new Date;if(O instanceof Date)return new Date(O);if(typeof O=="string"&&!/Z$/i.test(O)){var P=O.match(A);if(P){var K=P[2]-1||0,$=(P[7]||"0").substring(0,3);return N?new Date(Date.UTC(P[1],K,P[3]||1,P[4]||0,P[5]||0,P[6]||0,$)):new Date(P[1],K,P[3]||1,P[4]||0,P[5]||0,P[6]||0,$)}}return new Date(O)})(B),this.init()},H.init=function(){var B=this.$d;this.$y=B.getFullYear(),this.$M=B.getMonth(),this.$D=B.getDate(),this.$W=B.getDay(),this.$H=B.getHours(),this.$m=B.getMinutes(),this.$s=B.getSeconds(),this.$ms=B.getMilliseconds()},H.$utils=function(){return M},H.isValid=function(){return this.$d.toString()!==h},H.isSame=function(B,y){var O=D(B);return this.startOf(y)<=O&&O<=this.endOf(y)},H.isAfter=function(B,y){return D(B){m();var wl=SC();function vC(t){for(t=t.replace(/[\x00-\x20]+/g,"");;){let e=t.indexOf("",e+4);if(n===-1)break;t=t.substring(0,e)+t.substring(n+3)}return t}function xp(t,e){e=e||{};let n=e.allowedSchemes||["http","https","ftp","mailto","tel","sms"],r=e.allowProtocolRelative!==!1;if(typeof t!="string")return!1;t=vC(t);let i=t.match(/^([a-zA-Z][a-zA-Z0-9.\-+]*):/);if(!i)return t.match(/^[/\\]{2}/)?!r:!1;let o=i[1].toLowerCase();return n.indexOf(o)===-1}Ep.exports=function(t){let e={};return e.options=t||{},e.filterTag=e.options.filterTag||function(n){return n=n.trim(),n.toLowerCase()},e.string=function(n,r){return typeof n!="string"&&(typeof n=="number"||typeof n=="boolean"?n+="":n=""),n=n.trim(),r!==void 0&&n===""&&(n=r),n},e.strings=function(n){return Array.isArray(n)?n.map(function(r){return e.string(r)}):[]},e.integer=function(n,r,i,o){if(r===void 0&&(r=0),typeof n=="number")n=Math.floor(n);else try{n=parseInt(n,10),isNaN(n)&&(n=r)}catch{n=r}return typeof i=="number"&&no&&(n=o),n},e.padInteger=function(n,r){let i=n+"";for(;i.lengtho&&(n=o),n},e.naughtyHref=xp,e.url=function(n,r,i){if(n=e.string(n,r),n===r)return n;if(n=vC(n),xp(n)||(n=o(n),n===null))return r;return n;function o(s){return s.match(/^(((https?|ftp):\/\/)|((mailto|tel|sms):)|#|([^/.]+)?\/|[^/.]+$)/)?s:s.match(/^[^/.]+\.[^/.]+/)?(i?"https://":"http://")+s:null}},e.select=function(n,r,i){if(n=e.string(n),!r||!r.length)return i;let o;return typeof r[0]=="object"?(o=r.find(function(s){return s.value===null||s.value===void 0?!1:s.value.toString()===n}),o!=null?o.value:i):(o=r.find(function(s){return s==null?!1:s.toString()===n}),o!==void 0?o:i)},e.boolean=function(n,r){return n===!0?!0:n===!1?!1:(n=e.string(n,r),n===r?n===void 0?!1:n:(n=n.toLowerCase().charAt(0),n===""||n==="n"||n==="0"||n==="f"?!1:n==="t"||n==="y"||n==="1"))},e.addBooleanFilterToCriteria=function(n,r,i,o){o===void 0&&(o=null);let s=typeof n=="object"&&n!==null?n[r]:n;s=s===void 0?o:s,s=e.booleanOrNull(s),s===null||(s?i[r]=!0:i[r]={$ne:!0})},e.booleanOrNull=function(n,r){return n===!0||n===!1||n===null?n:(n=e.string(n,r),n===r?r===void 0?null:n:n==="null"?null:(n=n.toLowerCase().charAt(0),n===""||n==="n"||n==="0"||n==="f"?!1:n==="t"||n==="y"||n==="1"?!0:n==="a"?null:r))},e.date=function(n,r,i){let o;function s(){return r===void 0&&(r=wl().format("YYYY-MM-DD")),r}if(typeof n=="string"){if(n.match(/\//)){if(o=n.split("/"),o.length===2)return(i||new Date).getFullYear()+"-"+e.padInteger(o[0],2)+"-"+e.padInteger(o[1],2);if(o.length===3){if(o[2]<100){let a=i||new Date,c=a.getFullYear()%100,u=a.getFullYear()-c,l=parseInt(o[2])+u;l-a.getFullYear()>50&&(l-=100),o[2]=l}return e.padInteger(o[2],4)+"-"+e.padInteger(o[0],2)+"-"+e.padInteger(o[1],2)}else return s()}else if(n.match(/-/))return o=n.split("-"),o.length===2?(i||new Date).getFullYear()+"-"+e.padInteger(o[0],2)+"-"+e.padInteger(o[1],2):o.length===3?e.padInteger(o[0],4)+"-"+e.padInteger(o[1],2)+"-"+e.padInteger(o[2],2):s()}try{return n===null||(n=i||new Date(n),isNaN(n.getTime()))?s():n.getFullYear()+"-"+e.padInteger(n.getMonth()+1,2)+"-"+e.padInteger(n.getDate(),2)}catch{return s()}},e.formatDate=function(n){return wl(n).format("YYYY-MM-DD")},e.time=function(n,r){n=e.string(n).toLowerCase(),n=n.trim();let i=n.match(/^(\d+)([:|.](\d+))?([:|.](\d+))?\s*(am|pm|AM|PM|a|p|A|M)?$/);if(i){let o=parseInt(i[1],10),s=i[3]!==void 0?parseInt(i[3],10):0,a=i[5]!==void 0?parseInt(i[5],10):0,c=i[6]?i[6].toLowerCase():i[6];return c=c&&c.charAt(0),o===12&&c==="a"?o-=12:o===12&&c==="p"||c==="p"&&(o+=12),(o===24||o==="24")&&(o=0),e.padInteger(o,2)+":"+e.padInteger(s,2)+":"+e.padInteger(a,2)}else return r!==void 0?r:wl().format("HH:mm")},e.formatTime=function(n){return wl(n).format("HH:mm:ss")},e.tags=function(n,r){return typeof n=="string"&&(n=n.split(/,\s*/)),Array.isArray(n)?n.map(a=>e.string(a)).map(r||e.filterTag).filter(a=>a.length>0):[]},e.idRegExp=e.options.idRegExp||/^[A-Za-z0-9_]+$/,e.id=function(n,r){let i=e.string(n,r);return i===r||i.match(e.idRegExp)?i:r},e.ids=function(n){return Array.isArray(n)?n.filter(function(i){return e.id(i)!==void 0}):[]},e};Ep.exports.naughtyHref=xp});var BC=F((zte,DC)=>{m();var L6=mC(),NC=bC(),{isPlainObject:F6}=EC(),RC=TC(),U6=_C(),{parse:H6}=yA(),{naughtyHref:Y6}=kC(),G6=["img","audio","video","picture","svg","object","map","iframe","embed"],K6=["script","style"];function Zo(t,e){t&&Object.keys(t).forEach(function(n){e(t[n],n)})}function xr(t,e){return{}.hasOwnProperty.call(t,e)}function OC(t,e){let n=[];return Zo(t,function(r){e(r)&&n.push(r)}),n}function Q6(t){for(let e in t)if(xr(t,e))return!1;return!0}function W6(t){return t.map(function(e){if(!e.url)throw new Error("URL missing");return e.url+(e.w?` ${e.w}w`:"")+(e.h?` ${e.h}h`:"")+(e.d?` ${e.d}x`:"")}).join(", ")}DC.exports=Qa;var j6=/^[^\0\t\n\f\r /<=>]+$/;function Qa(t,e,n){if(t==null)return"";typeof t=="number"&&(t=t.toString());let r="",i="";function o(y,O){let N=this;this.tag=y,this.attribs=O||{},this.tagPosition=r.length,this.text="",this.openingTagLength=0,this.mediaChildren=[],this.updateParentNodeText=function(){if(b.length){let P=b[b.length-1];P.text+=N.text}},this.updateParentNodeMediaChildren=function(){b.length&&G6.includes(this.tag)&&b[b.length-1].mediaChildren.push(this.tag)}}e=Object.assign({},Qa.defaults,e),e.parser=Object.assign({},q6,e.parser);let s=function(y){return e.allowedTags===!1||(e.allowedTags||[]).indexOf(y)>-1};K6.forEach(function(y){s(y)&&!e.allowVulnerableTags&&console.warn(` + +\u26A0\uFE0F Your \`allowedTags\` option includes, \`${y}\`, which is inherently +vulnerable to XSS attacks. Please remove it from \`allowedTags\`. +Or, to disable this warning, add the \`allowVulnerableTags\` option +and ensure you are accounting for this risk. + +`)});let a=e.nonTextTags||["script","style","textarea","option","xmp"],c,u;e.allowedAttributes&&(c={},u={},Zo(e.allowedAttributes,function(y,O){c[O]=[];let N=[];y.forEach(function(P){typeof P=="string"&&P.indexOf("*")>=0?N.push(NC(P).replace(/\\\*/g,".*")):c[O].push(P)}),N.length&&(u[O]=new RegExp("^("+N.join("|")+")$"))}));let l={},d={},f={};Zo(e.allowedClasses,function(y,O){if(c&&(xr(c,O)||(c[O]=[]),c[O].push("class")),l[O]=y,Array.isArray(y)){let N=[];l[O]=[],f[O]=[],y.forEach(function(P){typeof P=="string"&&P.indexOf("*")>=0?N.push(NC(P).replace(/\\\*/g,".*")):P instanceof RegExp?f[O].push(P):l[O].push(P)}),N.length&&(d[O]=new RegExp("^("+N.join("|")+")$"))}});let h={},A;Zo(e.transformTags,function(y,O){let N;typeof y=="function"?N=y:typeof y=="string"&&(N=Qa.simpleTransform(y)),O==="*"?A=N:h[O]=N});let g,b,x,E,T,_,R=!1;v();let S=new L6.Parser({onopentag:function(y,O){if(e.onOpenTag&&e.onOpenTag(y,O),e.enforceHtmlBoundary&&y==="html"&&v(),T){_++;return}let N=new o(y,O);b.push(N);let P=!1,K=!!N.text,$;if(xr(h,y)&&($=h[y](y,O),N.attribs=O=$.attribs,$.text!==void 0&&(N.innerText=$.text),y!==$.tagName&&(N.name=y=$.tagName,E[g]=$.tagName)),A&&($=A(y,O),N.attribs=O=$.attribs,y!==$.tagName&&(N.name=y=$.tagName,E[g]=$.tagName)),(!s(y)||e.disallowedTagsMode==="recursiveEscape"&&!Q6(x)||e.nestingLimit!=null&&g>=e.nestingLimit)&&(P=!0,x[g]=!0,(e.disallowedTagsMode==="discard"||e.disallowedTagsMode==="completelyDiscard")&&a.indexOf(y)!==-1&&(T=!0,_=1)),g++,P){if(e.disallowedTagsMode==="discard"||e.disallowedTagsMode==="completelyDiscard"){if(N.innerText&&!K){let J=D(N.innerText);e.textFilter?r+=e.textFilter(J,y):r+=J,R=!0}return}i=r,r=""}r+="<"+y,y==="script"&&(e.allowedScriptHostnames||e.allowedScriptDomains)&&(N.innerText=""),P&&(e.disallowedTagsMode==="escape"||e.disallowedTagsMode==="recursiveEscape")&&e.preserveEscapedAttributes?Zo(O,function(J,X){r+=" "+X+'="'+D(J||"",!0)+'"'}):(!c||xr(c,y)||c["*"])&&Zo(O,function(J,X){if(!j6.test(X)){delete N.attribs[X];return}if(J===""&&!e.allowedEmptyAttributes.includes(X)&&(e.nonBooleanAttributes.includes(X)||e.nonBooleanAttributes.includes("*"))){delete N.attribs[X];return}let we=!1;if(!c||xr(c,y)&&c[y].indexOf(X)!==-1||c["*"]&&c["*"].indexOf(X)!==-1||xr(u,y)&&u[y].test(X)||u["*"]&&u["*"].test(X))we=!0;else if(c&&c[y]){for(let z of c[y])if(F6(z)&&z.name&&z.name===X){we=!0;let ee="";if(z.multiple===!0){let ae=J.split(" ");for(let ce of ae)z.values.indexOf(ce)!==-1&&(ee===""?ee=ce:ee+=" "+ce)}else z.values.indexOf(J)>=0&&(ee=J);J=ee}}if(we){if(e.allowedSchemesAppliedToAttributes.indexOf(X)!==-1&&M(y,J)){delete N.attribs[X];return}if(y==="script"&&X==="src"){let z=!0;try{let ee=G(J);if(e.allowedScriptHostnames||e.allowedScriptDomains){let ae=(e.allowedScriptHostnames||[]).find(function(be){return be===ee.url.hostname}),ce=(e.allowedScriptDomains||[]).find(function(be){return ee.url.hostname===be||ee.url.hostname.endsWith(`.${be}`)});z=ae||ce}}catch{z=!1}if(!z){delete N.attribs[X];return}}if(y==="iframe"&&X==="src"){let z=!0;try{let ee=G(J);if(ee.isRelativeUrl)z=xr(e,"allowIframeRelativeUrls")?e.allowIframeRelativeUrls:!e.allowedIframeHostnames&&!e.allowedIframeDomains;else if(e.allowedIframeHostnames||e.allowedIframeDomains){let ae=(e.allowedIframeHostnames||[]).find(function(be){return be===ee.url.hostname}),ce=(e.allowedIframeDomains||[]).find(function(be){return ee.url.hostname===be||ee.url.hostname.endsWith(`.${be}`)});z=ae||ce}}catch{z=!1}if(!z){delete N.attribs[X];return}}if(X==="srcset"||X==="imagesrcset")try{let z=U6(J);if(z.forEach(function(ee){M(X,ee.url)&&(ee.evil=!0)}),z=OC(z,function(ee){return!ee.evil}),z.length)J=W6(OC(z,function(ee){return!ee.evil})),N.attribs[X]=J;else{delete N.attribs[X];return}}catch{delete N.attribs[X];return}if(X==="class"){let z=l[y],ee=l["*"],ae=d[y],ce=f[y],be=f["*"],Ve=d["*"],Mt=[ae,Ve].concat(ce,be).filter(function(Jt){return Jt});if(z&&ee?J=B(J,RC(z,ee),Mt):J=B(J,z||ee,Mt),!J.length){delete N.attribs[X];return}}if(X==="style"){if(e.parseStyleAttributes)try{let z=H6(y+" {"+J+"}",{map:!1}),ee=W(z,e.allowedStyles);if(J=Y(ee),J.length===0){delete N.attribs[X];return}}catch{typeof window<"u"&&console.warn('Failed to parse "'+y+" {"+J+`}", If you're running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547`),delete N.attribs[X];return}else if(e.allowedStyles)throw new Error("allowedStyles option cannot be used together with parseStyleAttributes: false.")}r+=" "+X,J&&J.length?r+='="'+D(J,!0)+'"':e.allowedEmptyAttributes.includes(X)&&(r+='=""')}else delete N.attribs[X]}),e.selfClosing.indexOf(y)!==-1?r+=" />":(r+=">",N.innerText&&!K&&!e.textFilter&&(r+=D(N.innerText),R=!0)),P&&(r=i+D(r),i=""),N.openingTagLength=r.length-N.tagPosition},ontext:function(y){if(T)return;let O=b[b.length-1],N;if(O&&(N=O.tag,y=O.innerText!==void 0?O.innerText:y),e.disallowedTagsMode==="completelyDiscard"&&!s(N))y="";else if(N&&s(N)&&(e.disallowedTagsMode==="discard"||e.disallowedTagsMode==="completelyDiscard")&&(N==="script"||N==="style"))r+=y;else if(N&&s(N)&&(e.disallowedTagsMode==="discard"||e.disallowedTagsMode==="completelyDiscard")&&(N==="textarea"||N==="xmp"))r+=y;else if(!R){let P=D(y,!1);e.textFilter?r+=e.textFilter(P,N):r+=P}if(b.length){let P=b[b.length-1];P.text+=y}},onclosetag:function(y,O){if(e.onCloseTag&&e.onCloseTag(y,O),T)if(_--,!_)T=!1;else return;let N=b.pop();if(!N)return;if(N.tag!==y){b.push(N);return}T=e.enforceHtmlBoundary?y==="html":!1,g--;let P=x[g];if(P){if(delete x[g],e.disallowedTagsMode==="discard"||e.disallowedTagsMode==="completelyDiscard"){N.updateParentNodeText();return}i=r,r=""}if(E[g]&&(y=E[g],delete E[g]),e.exclusiveFilter){let K=e.exclusiveFilter(N);if(K==="excludeTag"){P&&(r=i,i=""),r=r.substring(0,N.tagPosition)+r.substring(N.tagPosition+N.openingTagLength);return}else if(K){r=r.substring(0,N.tagPosition);return}}if(N.updateParentNodeMediaChildren(),N.updateParentNodeText(),e.selfClosing.indexOf(y)!==-1||O&&!s(y)&&["escape","recursiveEscape"].indexOf(e.disallowedTagsMode)>=0){P&&(r=i,i="");return}r+="",P&&(r=i+D(r),i=""),R=!1}},e.parser);if(S.write(t),S.end(),e.disallowedTagsMode==="escape"||e.disallowedTagsMode==="recursiveEscape"){let y=S.endIndex;if(y!=null&&y>=0&&y0&&r===""&&(r=D(t))}return r;function v(){r="",g=0,b=[],x={},E={},T=!1,_=0}function D(y,O){return typeof y!="string"&&(y=y+""),e.parser.decodeEntities&&(y=y.replace(/&/g,"&").replace(//g,">"),O&&(y=y.replace(/"/g,"""))),y=y.replace(/&(?![a-zA-Z0-9#]{1,20};)/g,"&").replace(//g,">"),O&&(y=y.replace(/"/g,""")),y}function M(y,O){let N=xr(e.allowedSchemesByTag,y)?e.allowedSchemesByTag[y]:e.allowedSchemes||[];return Y6(O,{allowedSchemes:N,allowProtocolRelative:e.allowProtocolRelative})}function G(y){if(y=y.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/,"$1//"),y.startsWith("relative:"))throw new Error("relative: exploit attempt");let O="relative://relative-site";for(let K=0;K<100;K++)O+=`/${K}`;let N=new URL(y,O);return{isRelativeUrl:N&&N.hostname==="relative-site"&&N.protocol==="relative:",url:N}}function W(y,O){if(!O)return y;let N=y.nodes[0],P;return O[N.selector]&&O["*"]?P=RC(O[N.selector],O["*"]):P=O[N.selector]||O["*"],P&&(y.nodes[0].nodes=N.nodes.reduce(H(P),[])),y}function Y(y){return y.nodes[0].nodes.reduce(function(O,N){return O.push(`${N.prop}:${N.value}${N.important?" !important":""}`),O},[]).join(";")}function H(y){return function(O,N){return xr(y,N.prop)&&y[N.prop].some(function(K){return K.test(N.value)})&&O.push(N),O}}function B(y,O,N){return O?(y=y.split(/\s+/),y.filter(function(P){return O.indexOf(P)!==-1||N.some(function(K){return K.test(P)})}).join(" ")):y}}var q6={decodeEntities:!0};Qa.defaults={allowedTags:["address","article","aside","footer","header","h1","h2","h3","h4","h5","h6","hgroup","main","nav","section","blockquote","dd","div","dl","dt","figcaption","figure","hr","li","menu","ol","p","pre","ul","a","abbr","b","bdi","bdo","br","cite","code","data","dfn","em","i","kbd","mark","q","rb","rp","rt","rtc","ruby","s","samp","small","span","strong","sub","sup","time","u","var","wbr","caption","col","colgroup","table","tbody","td","tfoot","th","thead","tr"],nonBooleanAttributes:["abbr","accept","accept-charset","accesskey","action","allow","alt","as","autocapitalize","autocomplete","blocking","charset","cite","class","color","cols","colspan","content","contenteditable","coords","crossorigin","data","datetime","decoding","dir","dirname","download","draggable","enctype","enterkeyhint","fetchpriority","for","form","formaction","formenctype","formmethod","formtarget","headers","height","hidden","high","href","hreflang","http-equiv","id","imagesizes","imagesrcset","inputmode","integrity","is","itemid","itemprop","itemref","itemtype","kind","label","lang","list","loading","low","max","maxlength","media","method","min","minlength","name","nonce","optimum","pattern","ping","placeholder","popover","popovertarget","popovertargetaction","poster","preload","referrerpolicy","rel","rows","rowspan","sandbox","scope","shape","size","sizes","slot","span","spellcheck","src","srcdoc","srclang","srcset","start","step","style","tabindex","target","title","translate","type","usemap","value","width","wrap","onauxclick","onafterprint","onbeforematch","onbeforeprint","onbeforeunload","onbeforetoggle","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextlost","oncontextmenu","oncontextrestored","oncopy","oncuechange","oncut","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","onformdata","onhashchange","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onlanguagechange","onload","onloadeddata","onloadedmetadata","onloadstart","onmessage","onmessageerror","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onoffline","ononline","onpagehide","onpageshow","onpaste","onpause","onplay","onplaying","onpopstate","onprogress","onratechange","onreset","onresize","onrejectionhandled","onscroll","onscrollend","onsecuritypolicyviolation","onseeked","onseeking","onselect","onslotchange","onstalled","onstorage","onsubmit","onsuspend","ontimeupdate","ontoggle","onunhandledrejection","onunload","onvolumechange","onwaiting","onwheel"],disallowedTagsMode:"discard",allowedAttributes:{a:["href","name","target"],img:["src","srcset","alt","title","width","height","loading"]},allowedEmptyAttributes:["alt"],selfClosing:["img","br","hr","area","base","basefont","input","link","meta"],allowedSchemes:["http","https","ftp","mailto","tel"],allowedSchemesByTag:{},allowedSchemesAppliedToAttributes:["href","src","cite","action","formaction","data","xlink:href","poster","background","ping","longdesc","usemap","codebase","classid","archive","profile","manifest","itemid","dynsrc","lowsrc"],allowProtocolRelative:!0,enforceHtmlBoundary:!1,parseStyleAttributes:!0,preserveEscapedAttributes:!1};Qa.simpleTransform=function(t,e,n){return n=n===void 0?!0:n,e=e||{},function(r,i){let o;if(n)for(o in e)i[o]=e[o];else i=e;return{tagName:t,attribs:i}}}});m();m();m();var lm="*{box-sizing:border-box}[data-tpl]{font-family:var(--font-clean,sans-serif)}svg[stroke='currentColor']{stroke-width:calc(35 / clamp(1,var(--er-glyph-num,24),50))}.er-md p{margin:0}.er-md h1{font-size:26px;line-height:32px;font-weight:700;margin:32px 0 0}.er-md h2{font-size:21px;line-height:28px;font-weight:700;margin:24px 0 0}.er-md h3{font-size:17px;line-height:25px;font-weight:700;margin:18px 0 0}.er-md h1:first-child,.er-md h2:first-child,.er-md h3:first-child{margin-top:0}.er-md ul,.er-md ol{margin:0;padding-left:20px}.er-md li{margin-top:4px}.er-md li:first-child{margin-top:0}.er-md code{font-family:var(--font-mono,monospace);font-size:calc(1em * 13 / 15)}.er-md a{color:#457fe5;text-decoration:none}.er-washtex{position:absolute;inset:0;pointer-events:none;overflow:hidden;border-radius:inherit}.er-washtex svg{display:block;width:100%;height:100%}.er-grouplike .er-washtex{opacity:0.55}.er-dbtable .er-washtex{opacity:0.7}.er-grouplike .er-washmask{rx:6px}.er-dbtable .er-washmask{rx:5px}.er-grouplike[data-style='watercolor'][data-washtex-css]:not( [data-washtex-css=''] ){--er-fill:transparent}.er-grouplike[data-style='watercolor']{border-color:transparent;--er-wc-ink-alpha:var(--er-wc-border-alpha,45%)}.er-grouplike[data-style='watercolor']::after{content:'';position:absolute;inset:0;border:1px solid color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );border-radius:inherit;filter:blur(var(--er-wc-border-blur,0.7px));pointer-events:none}.er-grouplike[data-style='watercolor'][data-color]:not([data-color='']){--er-title-surface:hsl(from var(--er-color) h s 85% / 0.6)}.er-grouplike[data-style='watercolor'][data-title-bg]:not([data-title-bg='']){--er-title-paint:rgb(from var(--er-title-bg) r g b / 0.65)}.er-grouplike[data-style='watercolor'][data-title-width='full'] .er-grouplike__title,.er-grouplike[data-style='watercolor'][data-title-border='true'] .er-grouplike__title{border-color:color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent )}",dm={Shape:``,Icon:``,Activity:``,Event:``,Gateway:``,Textbox:``,Group:``,Lane:``,Pool:``,Divider:``,DatabaseTable:``,Legend:``,Relationship:``,DatabaseRelationship:``,Badge:``},fm={Shape:".er-shape{--er-fill:transparent;--er-stroke:#242424;--er-tint:#ffffff;--er-icon-base-num:20;--er-glyph-num:var(--er-icon-base-num);--er-icon-size:calc(var(--er-glyph-num) * 1px);position:relative;display:block;width:100%;height:100%;text-align:center;min-width:0;min-height:0;box-sizing:border-box;color:#242424}.er-shape[data-color]:not([data-color='']){--er-fill:hsl(from var(--er-color) h s 85%);--er-stroke:var(--er-color);--er-tint:hsl(from var(--er-color) h s 98%)}.er-shape[data-bg]:not([data-bg='']){--er-fill:var(--er-bg);--er-tint:hsl(from var(--er-bg) h s 98%)}.er-shape[data-bg='transparent']:not([data-bg='']),.er-shape[data-bg='none']:not([data-bg='']){--er-tint:#ffffff}.er-shape[data-border-color]:not([data-border-color='']){--er-stroke:var(--er-border)}.er-shape[data-style='watercolor']{--er-wc-ink-alpha:var(--er-wc-border-alpha,45%)}.er-shape[data-style='watercolor'][data-color]:not([data-color='']){--er-fill:hsl(from var(--er-color) h s 85% / 0.65)}.er-shape[data-style='watercolor'][data-bg]:not([data-bg='']){--er-fill:rgb(from var(--er-bg) r g b / 0.65)}.er-shape[data-style='watercolor'][data-bg='#ffffff' i]:not([data-bg='']),.er-shape[data-style='watercolor'][data-bg='white' i]:not([data-bg='']){--er-fill:var(--er-bg)}.er-shape[data-style='watercolor'][data-bg='transparent']:not([data-bg='']),.er-shape[data-style='watercolor'][data-bg='none']:not([data-bg='']){--er-fill:transparent}.er-shape[data-style='watercolor'][data-washtex-css]:not([data-washtex-css='']),.er-shape[data-style='watercolor'][data-washtex-geo]:not( [data-washtex-geo=''] ){--er-fill:transparent}.er-shape[data-icon-size='sm']{--er-icon-base-num:16}.er-shape[data-icon-size='md']{--er-icon-base-num:20}.er-shape[data-icon-size='lg']{--er-icon-base-num:28}.er-shape[data-icon-size='xl']{--er-icon-base-num:40}.er-shape[data-font-px]:not([data-font-px='']){--er-glyph-num:calc(var(--er-icon-base-num) * var(--er-font-num) / 15)}.er-shape__geo{display:none;position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}.er-shape__path,.er-shape__cap{display:none;fill:var(--er-fill);stroke:var(--er-stroke);stroke-width:1.2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.er-shape__cap{fill:transparent}.er-shape__path--dynamic,.er-shape__cap--dynamic{display:block}.er-shape__inner{position:relative;display:grid;grid-template-columns:minmax(0,1fr);align-items:center;--er-shape-h-inset:7.5%;width:100%;height:100%;min-width:0;min-height:0;border:1.2px solid var(--er-stroke);border-radius:min(12px,15%);background:var(--er-fill);padding:0 var(--er-shape-h-inset);box-sizing:border-box}.er-shape[data-style='shadow'] .er-shape__inner{box-shadow:4px 4px 0 0 #e8e8e8}.er-shape .er-washtex .er-washmask{rx:min(12px,15%)}.er-shape[data-shape='oval'] .er-washtex .er-washmask{rx:9999px}.er-shape[data-shape='circle'] .er-washtex .er-washmask,.er-shape[data-shape='ellipse'] .er-washtex .er-washmask{rx:50%;ry:50%}.er-shape[data-style='watercolor'] .er-shape__path,.er-shape[data-style='watercolor'] .er-shape__cap{stroke:color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );filter:blur(var(--er-wc-border-blur,0.7px))}.er-shape[data-style='watercolor'][data-washtex-css]:not([data-washtex-css='']) .er-shape__inner{border-color:transparent}.er-shape[data-style='watercolor'][data-washtex-css]:not([data-washtex-css='']) .er-shape__inner::after{content:'';position:absolute;inset:0;border-radius:inherit;border-width:1.2px;border-style:inherit;border-color:color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );filter:blur(var(--er-wc-border-blur,0.7px));pointer-events:none}.er-shape[data-border='dashed'] .er-shape__inner{border-style:dashed}.er-shape[data-border='dotted'] .er-shape__inner{border-style:dotted}.er-shape[data-border='dashed'] .er-shape__path,.er-shape[data-border='dashed'] .er-shape__cap{stroke-dasharray:8 8.75}.er-shape[data-border='dotted'] .er-shape__path,.er-shape[data-border='dotted'] .er-shape__cap{stroke-dasharray:1.5 6.75}.er-shape[data-shape='oval'] .er-shape__inner{border-radius:9999px}.er-shape[data-shape='circle'] .er-shape__inner,.er-shape[data-shape='ellipse'] .er-shape__inner{--er-shape-h-inset:12.5%;border-radius:50%}.er-shape[data-shape='parallelogram'] .er-shape__geo,.er-shape[data-shape='trapezoid'] .er-shape__geo,.er-shape[data-shape='diamond'] .er-shape__geo,.er-shape[data-shape='hexagon'] .er-shape__geo,.er-shape[data-shape='triangle'] .er-shape__geo,.er-shape[data-shape='star'] .er-shape__geo,.er-shape[data-shape='document'] .er-shape__geo,.er-shape[data-shape='cylinder'] .er-shape__geo{display:block}.er-shape[data-shape='parallelogram'] .er-shape__inner,.er-shape[data-shape='trapezoid'] .er-shape__inner,.er-shape[data-shape='diamond'] .er-shape__inner,.er-shape[data-shape='hexagon'] .er-shape__inner,.er-shape[data-shape='triangle'] .er-shape__inner,.er-shape[data-shape='star'] .er-shape__inner,.er-shape[data-shape='document'] .er-shape__inner,.er-shape[data-shape='cylinder'] .er-shape__inner{border:none;background:transparent;box-shadow:none}.er-shape[data-shape='parallelogram'] .er-shape__path--parallelogram,.er-shape[data-shape='trapezoid'] .er-shape__path--trapezoid,.er-shape[data-shape='diamond'] .er-shape__path--diamond,.er-shape[data-shape='hexagon'] .er-shape__path--hexagon,.er-shape[data-shape='triangle'] .er-shape__path--triangle,.er-shape[data-shape='star'] .er-shape__path--star,.er-shape[data-shape='document'] .er-shape__path--document,.er-shape[data-shape='cylinder'] .er-shape__path--cylinder-body{display:block}.er-shape[data-shape='cylinder'] .er-shape__path--cylinder-cap{display:block}.er-shape[data-style='shadow'] .er-shape__geo{filter:drop-shadow(4px 4px 0 #e8e8e8)}.er-shape[data-shape='triangle'] .er-shape__inner{--er-shape-h-inset:25%}.er-shape[data-shape='diamond'] .er-shape__inner,.er-shape[data-shape='star'] .er-shape__inner{--er-shape-h-inset:10%}.er-shape[data-shape='cylinder'] .er-shape__inner{grid-template-rows:minmax(10px,22%) 1fr minmax(6px,6%)}.er-shape[data-shape='cylinder'] .er-shape__icon,.er-shape[data-shape='cylinder'] .er-shape__texts{grid-row:2}.er-shape__inner[data-v-align='top']{align-content:start;padding-top:var(--er-v-margin,10px)}.er-shape__inner[data-v-align='bottom']{align-content:end;padding-bottom:var(--er-v-margin,10px)}.er-shape[data-shape='cylinder'] .er-shape__inner[data-v-align='top']{align-items:start}.er-shape[data-shape='cylinder'] .er-shape__inner[data-v-align='bottom']{align-items:end}.er-shape__inner:has(.er-shape__icon):has(.er-shape__text){grid-template-columns:10% var(--er-icon-size,20px) max(10px,var(--er-shape-h-inset)) minmax(0,1fr) var(--er-shape-h-inset);padding-left:0;padding-right:0}.er-shape[data-icon-pad]:not([data-icon-pad='']) .er-shape__inner:has(.er-shape__icon):has(.er-shape__text){grid-template-columns:var(--er-icon-pad) var(--er-icon-size,20px) max( 10px,var(--er-shape-h-inset) ) minmax(0,1fr) var(--er-shape-h-inset)}.er-shape__inner:has(.er-shape__icon):has(.er-shape__text) .er-shape__icon{grid-column:2}.er-shape__inner:has(.er-shape__icon):has(.er-shape__text) .er-shape__texts{grid-column:4}.er-shape__icon{width:var(--er-icon-size,20px);height:var(--er-icon-size,20px);justify-self:center;color:var(--er-icon-ink,#242424);line-height:0}.er-shape__icon svg{display:block;width:100%;height:100%}.er-shape__texts{margin:0;padding:0;width:100%;min-width:0;position:relative;z-index:1}.er-shape__texts:empty{display:none}.er-shape__text{--er-base:12px;font-family:var(--f,var(--font-clean,sans-serif));font-size:var(--er-base);font-weight:400;letter-spacing:-0.01em;line-height:1.25;overflow-wrap:break-word;word-break:normal;color:var(--er-ink,#242424)}.er-shape__text + .er-shape__text{margin-top:2px;opacity:0.72}.er-shape__text:first-child{--er-base:15px}.er-shape[data-font-px]:not([data-font-px='']) .er-shape__text{--er-base:var(--er-font-px)}.er-shape__text[data-run-px]:not([data-run-px='']){font-size:var(--er-run-px)}.er-shape__text[data-h-align='left']{text-align:left}.er-shape__text[data-h-align='right']{text-align:right}",Icon:".er-icon{--er-glyph-num:50;--er-icon-px:calc(var(--er-glyph-num) * 1px);position:relative;display:block;width:100%;height:100%;margin:0;text-align:center}.er-icon[data-size='sm']{--er-glyph-num:32}.er-icon[data-size='md']{--er-glyph-num:50}.er-icon[data-size='lg']{--er-glyph-num:72}.er-icon[data-size='xl']{--er-glyph-num:100}.er-icon[data-sized]:not([data-sized='']){--er-glyph-num:var(--er-bounds-num)}.er-icon__glyph{display:block;width:var(--er-icon-px);height:var(--er-icon-px);margin:0 auto;color:var(--er-glyph-ink,#242424);line-height:0}.er-icon__glyph svg{display:block;width:100%;height:100%}.er-icon__caption{position:absolute;top:calc(100% + 5px);left:50%;transform:translateX(-50%);width:max-content;max-width:180%;margin:0}.er-icon__caption-line{--er-base:15px;display:block;font-family:var(--f,var(--font-clean,sans-serif));font-size:var(--er-base);letter-spacing:-0.01em;line-height:1.25;color:var(--er-ink,#242424)}.er-icon[data-font-px]:not([data-font-px='']) .er-icon__caption-line{--er-base:var(--er-font-px)}.er-icon__caption-line[data-run-px]:not([data-run-px='']){font-size:var(--er-run-px)}.er-icon__caption-line + .er-icon__caption-line{margin-top:2px}.er-icon__caption:has(.er-icon__caption-line + .er-icon__caption-line){max-width:none}.er-icon__caption:has(.er-icon__caption-line + .er-icon__caption-line) .er-icon__caption-line{white-space:nowrap}",Activity:".er-activity{--er-fill:#ffffff;--er-stroke:#242424;position:relative;display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:100%;padding:12px 16px;border:2px solid var(--er-stroke);border-radius:10px;background:var(--er-fill);box-sizing:border-box}.er-activity[data-color]:not([data-color='']){--er-fill:hsl(from var(--er-color) h s 96%);--er-stroke:var(--er-color)}.er-activity[data-bg]:not([data-bg='']){--er-fill:var(--er-bg)}.er-activity[data-border-color]:not([data-border-color='']){--er-stroke:var(--er-border)}.er-activity[data-border='dashed']{border-style:dashed}.er-activity[data-border='dotted']{border-style:dotted}.er-activity__icon{--er-glyph-num:20;display:block;flex:none;width:calc(var(--er-glyph-num) * 1px);height:calc(var(--er-glyph-num) * 1px);color:#242424;line-height:0}.er-activity__icon svg{display:block;width:100%;height:100%}.er-activity__text{min-width:0;text-align:center}.er-activity__line{--er-base:16px;display:block;font-family:var(--f,var(--font-clean,sans-serif));font-size:var(--er-base);line-height:1.3;color:var(--er-ink,#242424);overflow-wrap:break-word}.er-activity[data-font-px]:not([data-font-px='']) .er-activity__line{font-size:var(--er-font-px)}.er-activity__line[data-run-px]:not([data-run-px='']){font-size:var(--er-run-px)}",Event:".er-event{position:relative;display:block;width:100%;height:100%;margin:0;text-align:center}.er-event__disc{--er-fill:#ffffff;--er-stroke:#242424;--er-glyph-num:22;position:relative;display:flex;align-items:center;justify-content:center;width:56px;height:56px;margin:0 auto;border:2px solid var(--er-stroke);border-radius:50%;background:var(--er-fill);box-sizing:border-box}.er-event[data-color]:not([data-color='']) .er-event__disc{--er-fill:hsl(from var(--er-color) h s 96%);--er-stroke:var(--er-color)}.er-event[data-bg]:not([data-bg='']) .er-event__disc{--er-fill:var(--er-bg)}.er-event[data-border-color]:not([data-border-color='']) .er-event__disc{--er-stroke:var(--er-border)}.er-event[data-border='dashed'] .er-event__disc{border-style:dashed}.er-event[data-border='dotted'] .er-event__disc{border-style:dotted}.er-event__glyph{display:block;width:calc(var(--er-glyph-num) * 1px);height:calc(var(--er-glyph-num) * 1px);color:#242424;line-height:0}.er-event__glyph svg{display:block;width:100%;height:100%}.er-event__caption{position:absolute;top:calc(100% + 6px);left:50%;transform:translateX(-50%);width:max-content;max-width:300%;margin:0}.er-event__caption-line{--er-base:15px;display:block;font-family:var(--f,var(--font-clean,sans-serif));font-size:var(--er-base);line-height:1.25;color:var(--er-ink,#242424)}.er-event[data-font-px]:not([data-font-px='']) .er-event__caption-line{font-size:var(--er-font-px)}.er-event__caption-line[data-run-px]:not([data-run-px='']){font-size:var(--er-run-px)}",Gateway:".er-gateway{position:relative;display:block;width:100%;height:100%;margin:0;text-align:center}.er-gateway__box{--er-fill:#ffffff;--er-stroke:#242424;--er-glyph-num:18;position:relative;display:block;width:56px;height:56px;margin:0 auto}.er-gateway[data-color]:not([data-color='']) .er-gateway__box{--er-fill:hsl(from var(--er-color) h s 96%);--er-stroke:var(--er-color)}.er-gateway[data-bg]:not([data-bg='']) .er-gateway__box{--er-fill:var(--er-bg)}.er-gateway[data-border-color]:not([data-border-color='']) .er-gateway__box{--er-stroke:var(--er-border)}.er-gateway__geo{display:block;width:100%;height:100%}.er-gateway__path{fill:var(--er-fill);stroke:var(--er-stroke);stroke-width:2;stroke-linejoin:round}.er-gateway[data-border='dashed'] .er-gateway__path{stroke-dasharray:6 5}.er-gateway[data-border='dotted'] .er-gateway__path{stroke-dasharray:1.5 4}.er-gateway__glyph{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:calc(var(--er-glyph-num) * 1px);height:calc(var(--er-glyph-num) * 1px);color:#242424;line-height:0}.er-gateway__glyph svg{display:block;width:100%;height:100%}.er-gateway__caption{position:absolute;top:calc(100% + 6px);left:50%;transform:translateX(-50%);width:max-content;max-width:300%;margin:0}.er-gateway__caption-line{--er-base:15px;display:block;font-family:var(--f,var(--font-clean,sans-serif));font-size:var(--er-base);line-height:1.25;color:var(--er-ink,#242424)}.er-gateway[data-font-px]:not([data-font-px='']) .er-gateway__caption-line{font-size:var(--er-font-px)}.er-gateway__caption-line[data-run-px]:not([data-run-px='']){font-size:var(--er-run-px)}",Textbox:".er-textbox{position:relative;display:block;width:100%;height:100%;min-width:0;min-height:0;overflow:visible}.er-textbox__text{width:100%;height:100%;margin:0;padding:0;font-family:var(--f,var(--font-clean,sans-serif));font-size:15px;font-weight:400;letter-spacing:-0.01em;line-height:1.25;white-space:pre-wrap;overflow-wrap:break-word;word-break:normal;text-align:left;color:var(--er-ink,#242424);box-sizing:border-box}.er-textbox[data-font-px]:not([data-font-px='']) .er-textbox__text{font-size:var(--er-font-px)}.er-textbox[data-wrap-mode='nowrap'] .er-textbox__text{white-space:pre;width:max-content;max-width:none;height:auto}.er-textbox[data-h-align='center'] .er-textbox__text{text-align:center}.er-textbox[data-h-align='right'] .er-textbox__text{text-align:right}",Group:".er-grouplike{--er-fill:transparent;--er-stroke:#242424;--er-tint:#ffffff;--er-title-surface:transparent;--er-title-paint:transparent;--er-title-icon-num:15;--er-title-icon-px:calc(var(--er-title-icon-num) * 1px);position:relative;display:block;width:100%;height:100%;border:1px solid var(--er-stroke);border-radius:6px;background:var(--er-fill);box-sizing:border-box}.er-grouplike[data-color]:not([data-color='']){--er-fill:hsl(from var(--er-color) h s 98%);--er-stroke:var(--er-color);--er-tint:hsl(from var(--er-color) h s 98%);--er-title-surface:hsl(from var(--er-color) h s 85%)}.er-grouplike[data-bg]:not([data-bg='']){--er-fill:var(--er-bg);--er-tint:hsl(from var(--er-bg) h s 98%);--er-title-surface:hsl(from var(--er-bg) h s 85%)}.er-grouplike[data-border-color]:not([data-border-color='']){--er-stroke:var(--er-border)}.er-grouplike[data-bg='transparent']:not([data-bg='']),.er-grouplike[data-bg='none']:not([data-bg='']){--er-fill:transparent;--er-tint:#ffffff;--er-title-surface:transparent}.er-grouplike[data-style='shadow']{box-shadow:4px 4px 0 0 #e8e8e8}.er-grouplike[data-bg='transparent'],.er-grouplike[data-bg='none'],.er-grouplike[data-border-color]:not( [data-border-color=''] )[data-color=''][data-bg='']{box-shadow:none}.er-grouplike[data-border='dashed'],.er-grouplike[data-border='dotted']{box-shadow:none;border-color:transparent}.er-grouplike__stroke{display:none;position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;color:var(--er-stroke)}.er-grouplike[data-border='dashed'] .er-grouplike__stroke,.er-grouplike[data-border='dotted'] .er-grouplike__stroke{display:block}.er-grouplike__dash{display:none}.er-grouplike[data-border='dashed'] .er-grouplike__dash--dashed{display:block}.er-grouplike[data-border='dotted'] .er-grouplike__dash--dotted{display:block}.er-grouplike__title{display:flex;align-items:center;gap:5px;width:fit-content;max-width:calc(100% - 15px);margin:7.5px 7.5px 0;padding:3px 5px;border-radius:2px;font-family:var(--f,var(--font-clean,sans-serif));font-size:16px;font-weight:400;letter-spacing:-0.01em;color:#242424;box-sizing:border-box}.er-grouplike[data-title-ink]:not([data-title-ink='']) .er-grouplike__title{color:var(--er-title-ink)}.er-grouplike[data-font-px]:not([data-font-px='']) .er-grouplike__title{font-size:var(--er-font-px)}.er-grouplike[data-title-icon-size='sm']{--er-title-icon-num:12}.er-grouplike[data-title-icon-size='md']{--er-title-icon-num:15}.er-grouplike[data-title-icon-size='lg']{--er-title-icon-num:22}.er-grouplike[data-title-icon-size='xl']{--er-title-icon-num:32}.er-grouplike__title-text{min-width:0;overflow-wrap:break-word;word-break:normal}.er-grouplike[data-title-align='center'] .er-grouplike__title{margin-left:auto;margin-right:auto}.er-grouplike[data-title-align='right'] .er-grouplike__title{margin-left:auto;margin-right:7.5px}.er-grouplike[data-title-border='true']{--er-title-paint:var(--er-title-surface)}.er-grouplike[data-title-bg]:not([data-title-bg='']){--er-title-paint:var(--er-title-bg)}.er-grouplike[data-title-width='snug'][data-title-border='true'] .er-grouplike__title,.er-grouplike[data-title-width='snug'][data-title-bg]:not([data-title-bg='']) .er-grouplike__title,.er-grouplike[data-title-width='full'][data-title-border='true'] .er-grouplike__title,.er-grouplike[data-title-width='full'][data-title-bg]:not([data-title-bg='']) .er-grouplike__title{background:var(--er-title-paint)}.er-grouplike[data-title-width='snug'][data-title-border='true'] .er-grouplike__title{border:1px solid var(--er-stroke)}.er-grouplike[data-title-width='full'] .er-grouplike__title{width:100%;margin:0;padding:8px 12.5px;border-radius:5px 5px 0 0;box-sizing:border-box;max-width:100%}.er-grouplike[data-title-width='full'][data-title-border='true'] .er-grouplike__title{border-bottom:1px solid var(--er-stroke)}.er-grouplike[data-style='watercolor'][data-title-border='true'] .er-grouplike__title{position:relative;border-color:transparent}.er-grouplike[data-style='watercolor'][data-title-width='full'][data-title-border='true'] .er-grouplike__title::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:1px;background:color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );filter:blur(var(--er-wc-border-blur,0.7px));pointer-events:none}.er-grouplike[data-style='watercolor'][data-title-width='snug'][data-title-border='true'] .er-grouplike__title::after{content:'';position:absolute;inset:0;border:1px solid color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );border-radius:inherit;filter:blur(var(--er-wc-border-blur,0.7px));pointer-events:none}.er-grouplike[data-title-width='full'][data-title-align='center'] .er-grouplike__title{justify-content:center}.er-grouplike[data-title-width='full'][data-title-align='right'] .er-grouplike__title{justify-content:flex-end}.er-grouplike__title-icon{--er-glyph-num:var(--er-title-icon-num);flex:0 0 auto;width:var(--er-title-icon-px,15px);height:var(--er-title-icon-px,15px);color:inherit;line-height:0}.er-grouplike[data-title-icon-ink]:not([data-title-icon-ink='']) .er-grouplike__title-icon{color:var(--er-title-icon-ink)}.er-grouplike__title-icon svg{display:block;width:100%;height:100%}",Lane:".er-grouplike{--er-fill:transparent;--er-stroke:#242424;--er-tint:#ffffff;--er-title-surface:transparent;--er-title-paint:transparent;--er-title-icon-num:15;--er-title-icon-px:calc(var(--er-title-icon-num) * 1px);position:relative;display:block;width:100%;height:100%;border:1px solid var(--er-stroke);border-radius:6px;background:var(--er-fill);box-sizing:border-box}.er-grouplike[data-color]:not([data-color='']){--er-fill:hsl(from var(--er-color) h s 98%);--er-stroke:var(--er-color);--er-tint:hsl(from var(--er-color) h s 98%);--er-title-surface:hsl(from var(--er-color) h s 85%)}.er-grouplike[data-bg]:not([data-bg='']){--er-fill:var(--er-bg);--er-tint:hsl(from var(--er-bg) h s 98%);--er-title-surface:hsl(from var(--er-bg) h s 85%)}.er-grouplike[data-border-color]:not([data-border-color='']){--er-stroke:var(--er-border)}.er-grouplike[data-bg='transparent']:not([data-bg='']),.er-grouplike[data-bg='none']:not([data-bg='']){--er-fill:transparent;--er-tint:#ffffff;--er-title-surface:transparent}.er-grouplike[data-style='shadow']{box-shadow:4px 4px 0 0 #e8e8e8}.er-grouplike[data-bg='transparent'],.er-grouplike[data-bg='none'],.er-grouplike[data-border-color]:not( [data-border-color=''] )[data-color=''][data-bg='']{box-shadow:none}.er-grouplike[data-border='dashed'],.er-grouplike[data-border='dotted']{box-shadow:none;border-color:transparent}.er-grouplike__stroke{display:none;position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;color:var(--er-stroke)}.er-grouplike[data-border='dashed'] .er-grouplike__stroke,.er-grouplike[data-border='dotted'] .er-grouplike__stroke{display:block}.er-grouplike__dash{display:none}.er-grouplike[data-border='dashed'] .er-grouplike__dash--dashed{display:block}.er-grouplike[data-border='dotted'] .er-grouplike__dash--dotted{display:block}.er-grouplike__title{display:flex;align-items:center;gap:5px;width:fit-content;max-width:calc(100% - 15px);margin:7.5px 7.5px 0;padding:3px 5px;border-radius:2px;font-family:var(--f,var(--font-clean,sans-serif));font-size:16px;font-weight:400;letter-spacing:-0.01em;color:#242424;box-sizing:border-box}.er-grouplike[data-title-ink]:not([data-title-ink='']) .er-grouplike__title{color:var(--er-title-ink)}.er-grouplike[data-font-px]:not([data-font-px='']) .er-grouplike__title{font-size:var(--er-font-px)}.er-grouplike[data-title-icon-size='sm']{--er-title-icon-num:12}.er-grouplike[data-title-icon-size='md']{--er-title-icon-num:15}.er-grouplike[data-title-icon-size='lg']{--er-title-icon-num:22}.er-grouplike[data-title-icon-size='xl']{--er-title-icon-num:32}.er-grouplike__title-text{min-width:0;overflow-wrap:break-word;word-break:normal}.er-grouplike[data-title-align='center'] .er-grouplike__title{margin-left:auto;margin-right:auto}.er-grouplike[data-title-align='right'] .er-grouplike__title{margin-left:auto;margin-right:7.5px}.er-grouplike[data-title-border='true']{--er-title-paint:var(--er-title-surface)}.er-grouplike[data-title-bg]:not([data-title-bg='']){--er-title-paint:var(--er-title-bg)}.er-grouplike[data-title-width='snug'][data-title-border='true'] .er-grouplike__title,.er-grouplike[data-title-width='snug'][data-title-bg]:not([data-title-bg='']) .er-grouplike__title,.er-grouplike[data-title-width='full'][data-title-border='true'] .er-grouplike__title,.er-grouplike[data-title-width='full'][data-title-bg]:not([data-title-bg='']) .er-grouplike__title{background:var(--er-title-paint)}.er-grouplike[data-title-width='snug'][data-title-border='true'] .er-grouplike__title{border:1px solid var(--er-stroke)}.er-grouplike[data-title-width='full'] .er-grouplike__title{width:100%;margin:0;padding:8px 12.5px;border-radius:5px 5px 0 0;box-sizing:border-box;max-width:100%}.er-grouplike[data-title-width='full'][data-title-border='true'] .er-grouplike__title{border-bottom:1px solid var(--er-stroke)}.er-grouplike[data-style='watercolor'][data-title-border='true'] .er-grouplike__title{position:relative;border-color:transparent}.er-grouplike[data-style='watercolor'][data-title-width='full'][data-title-border='true'] .er-grouplike__title::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:1px;background:color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );filter:blur(var(--er-wc-border-blur,0.7px));pointer-events:none}.er-grouplike[data-style='watercolor'][data-title-width='snug'][data-title-border='true'] .er-grouplike__title::after{content:'';position:absolute;inset:0;border:1px solid color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );border-radius:inherit;filter:blur(var(--er-wc-border-blur,0.7px));pointer-events:none}.er-grouplike[data-title-width='full'][data-title-align='center'] .er-grouplike__title{justify-content:center}.er-grouplike[data-title-width='full'][data-title-align='right'] .er-grouplike__title{justify-content:flex-end}.er-grouplike__title-icon{--er-glyph-num:var(--er-title-icon-num);flex:0 0 auto;width:var(--er-title-icon-px,15px);height:var(--er-title-icon-px,15px);color:inherit;line-height:0}.er-grouplike[data-title-icon-ink]:not([data-title-icon-ink='']) .er-grouplike__title-icon{color:var(--er-title-icon-ink)}.er-grouplike__title-icon svg{display:block;width:100%;height:100%}.er-grouplike__title{position:absolute;top:7.5px;bottom:7.5px;left:7.5px;writing-mode:sideways-lr;width:fit-content;height:fit-content;max-width:none;max-height:calc(100% - 15px);margin:auto 0}.er-grouplike[data-title-align='center'] .er-grouplike__title{margin:auto 0}.er-grouplike[data-title-align='right'] .er-grouplike__title{margin:0 0 auto}.er-grouplike[data-title-width='full'] .er-grouplike__title{top:0;bottom:0;left:0;width:fit-content;max-width:none;height:100%;max-height:100%;margin:0;padding:12.5px 8px;border-radius:5px 0 0 5px;justify-content:center}.er-grouplike[data-title-width='full'][data-title-border='true'] .er-grouplike__title{border-bottom:none;border-right:1px solid var(--er-stroke)}.er-grouplike[data-style='watercolor'][data-title-width='full'][data-title-border='true'] .er-grouplike__title::after{top:0;bottom:0;left:auto;right:-1px;width:1px;height:auto}",Pool:".er-grouplike{--er-fill:transparent;--er-stroke:#242424;--er-tint:#ffffff;--er-title-surface:transparent;--er-title-paint:transparent;--er-title-icon-num:15;--er-title-icon-px:calc(var(--er-title-icon-num) * 1px);position:relative;display:block;width:100%;height:100%;border:1px solid var(--er-stroke);border-radius:6px;background:var(--er-fill);box-sizing:border-box}.er-grouplike[data-color]:not([data-color='']){--er-fill:hsl(from var(--er-color) h s 98%);--er-stroke:var(--er-color);--er-tint:hsl(from var(--er-color) h s 98%);--er-title-surface:hsl(from var(--er-color) h s 85%)}.er-grouplike[data-bg]:not([data-bg='']){--er-fill:var(--er-bg);--er-tint:hsl(from var(--er-bg) h s 98%);--er-title-surface:hsl(from var(--er-bg) h s 85%)}.er-grouplike[data-border-color]:not([data-border-color='']){--er-stroke:var(--er-border)}.er-grouplike[data-bg='transparent']:not([data-bg='']),.er-grouplike[data-bg='none']:not([data-bg='']){--er-fill:transparent;--er-tint:#ffffff;--er-title-surface:transparent}.er-grouplike[data-style='shadow']{box-shadow:4px 4px 0 0 #e8e8e8}.er-grouplike[data-bg='transparent'],.er-grouplike[data-bg='none'],.er-grouplike[data-border-color]:not( [data-border-color=''] )[data-color=''][data-bg='']{box-shadow:none}.er-grouplike[data-border='dashed'],.er-grouplike[data-border='dotted']{box-shadow:none;border-color:transparent}.er-grouplike__stroke{display:none;position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;color:var(--er-stroke)}.er-grouplike[data-border='dashed'] .er-grouplike__stroke,.er-grouplike[data-border='dotted'] .er-grouplike__stroke{display:block}.er-grouplike__dash{display:none}.er-grouplike[data-border='dashed'] .er-grouplike__dash--dashed{display:block}.er-grouplike[data-border='dotted'] .er-grouplike__dash--dotted{display:block}.er-grouplike__title{display:flex;align-items:center;gap:5px;width:fit-content;max-width:calc(100% - 15px);margin:7.5px 7.5px 0;padding:3px 5px;border-radius:2px;font-family:var(--f,var(--font-clean,sans-serif));font-size:16px;font-weight:400;letter-spacing:-0.01em;color:#242424;box-sizing:border-box}.er-grouplike[data-title-ink]:not([data-title-ink='']) .er-grouplike__title{color:var(--er-title-ink)}.er-grouplike[data-font-px]:not([data-font-px='']) .er-grouplike__title{font-size:var(--er-font-px)}.er-grouplike[data-title-icon-size='sm']{--er-title-icon-num:12}.er-grouplike[data-title-icon-size='md']{--er-title-icon-num:15}.er-grouplike[data-title-icon-size='lg']{--er-title-icon-num:22}.er-grouplike[data-title-icon-size='xl']{--er-title-icon-num:32}.er-grouplike__title-text{min-width:0;overflow-wrap:break-word;word-break:normal}.er-grouplike[data-title-align='center'] .er-grouplike__title{margin-left:auto;margin-right:auto}.er-grouplike[data-title-align='right'] .er-grouplike__title{margin-left:auto;margin-right:7.5px}.er-grouplike[data-title-border='true']{--er-title-paint:var(--er-title-surface)}.er-grouplike[data-title-bg]:not([data-title-bg='']){--er-title-paint:var(--er-title-bg)}.er-grouplike[data-title-width='snug'][data-title-border='true'] .er-grouplike__title,.er-grouplike[data-title-width='snug'][data-title-bg]:not([data-title-bg='']) .er-grouplike__title,.er-grouplike[data-title-width='full'][data-title-border='true'] .er-grouplike__title,.er-grouplike[data-title-width='full'][data-title-bg]:not([data-title-bg='']) .er-grouplike__title{background:var(--er-title-paint)}.er-grouplike[data-title-width='snug'][data-title-border='true'] .er-grouplike__title{border:1px solid var(--er-stroke)}.er-grouplike[data-title-width='full'] .er-grouplike__title{width:100%;margin:0;padding:8px 12.5px;border-radius:5px 5px 0 0;box-sizing:border-box;max-width:100%}.er-grouplike[data-title-width='full'][data-title-border='true'] .er-grouplike__title{border-bottom:1px solid var(--er-stroke)}.er-grouplike[data-style='watercolor'][data-title-border='true'] .er-grouplike__title{position:relative;border-color:transparent}.er-grouplike[data-style='watercolor'][data-title-width='full'][data-title-border='true'] .er-grouplike__title::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:1px;background:color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );filter:blur(var(--er-wc-border-blur,0.7px));pointer-events:none}.er-grouplike[data-style='watercolor'][data-title-width='snug'][data-title-border='true'] .er-grouplike__title::after{content:'';position:absolute;inset:0;border:1px solid color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );border-radius:inherit;filter:blur(var(--er-wc-border-blur,0.7px));pointer-events:none}.er-grouplike[data-title-width='full'][data-title-align='center'] .er-grouplike__title{justify-content:center}.er-grouplike[data-title-width='full'][data-title-align='right'] .er-grouplike__title{justify-content:flex-end}.er-grouplike__title-icon{--er-glyph-num:var(--er-title-icon-num);flex:0 0 auto;width:var(--er-title-icon-px,15px);height:var(--er-title-icon-px,15px);color:inherit;line-height:0}.er-grouplike[data-title-icon-ink]:not([data-title-icon-ink='']) .er-grouplike__title-icon{color:var(--er-title-icon-ink)}.er-grouplike__title-icon svg{display:block;width:100%;height:100%}.er-grouplike__title{position:absolute;top:7.5px;bottom:7.5px;left:7.5px;writing-mode:sideways-lr;width:fit-content;height:fit-content;max-width:none;max-height:calc(100% - 15px);margin:auto 0}.er-grouplike[data-title-align='center'] .er-grouplike__title{margin:auto 0}.er-grouplike[data-title-align='right'] .er-grouplike__title{margin:0 0 auto}.er-grouplike[data-title-width='full'] .er-grouplike__title{top:0;bottom:0;left:0;width:fit-content;max-width:none;height:100%;max-height:100%;margin:0;padding:12.5px 8px;border-radius:5px 0 0 5px;justify-content:center}.er-grouplike[data-title-width='full'][data-title-border='true'] .er-grouplike__title{border-bottom:none;border-right:1px solid var(--er-stroke)}.er-grouplike[data-style='watercolor'][data-title-width='full'][data-title-border='true'] .er-grouplike__title::after{top:0;bottom:0;left:auto;right:-1px;width:1px;height:auto}",Divider:".er-divider{display:flex;align-items:center;width:100%;height:100%;font-family:var(--f,var(--font-clean,sans-serif))}.er-divider__line{flex:1;border-top:var(--er-line-w,1.3px) solid var(--er-stroke,#1c1c1c)}.er-divider[data-line-style='dashed'] .er-divider__line{border-top-style:dashed}.er-divider[data-line-style='dotted'] .er-divider__line{border-top-style:dotted}.er-divider__label{flex:0 0 auto;margin:0 6px;font-size:14px;letter-spacing:-0.01em;line-height:1.2;white-space:nowrap;color:#242424}.er-divider[data-font-px]:not([data-font-px='']) .er-divider__label{font-size:var(--er-font-px)}.er-divider[data-orientation='vertical']{flex-direction:column}.er-divider[data-orientation='vertical'] .er-divider__line{border-top:none;border-left:var(--er-line-w,1.3px) solid var(--er-stroke,#1c1c1c)}.er-divider[data-orientation='vertical'][data-line-style='dashed'] .er-divider__line{border-left-style:dashed}.er-divider[data-orientation='vertical'][data-line-style='dotted'] .er-divider__line{border-left-style:dotted}.er-divider[data-orientation='vertical'] .er-divider__label{margin:6px 0}",DatabaseTable:".er-dbtable{--er-stroke:#737373;--er-divider:#ebebeb;--er-tint:#ffffff;--er-base:17px;position:relative;display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;border:1.8px solid var(--er-stroke);border-radius:5px;background:var(--er-tint);box-sizing:border-box;font-family:var(--f,var(--font-clean,sans-serif))}.er-dbtable[data-style='shadow']{box-shadow:4px 4px 0 0 #e8e8e8}.er-dbtable[data-font-px]:not([data-font-px='']){--er-base:var(--er-font-px)}.er-dbtable[data-color]:not([data-color='']){--er-stroke:var(--er-color);--er-divider:hsl(from var(--er-color) h s 92%);--er-tint:hsl(from var(--er-color) h s 98%)}.er-dbtable[data-bg]:not([data-bg='']){--er-tint:var(--er-bg)}.er-dbtable[data-border-color]:not([data-border-color='']){--er-stroke:var(--er-border)}.er-dbtable[data-border='dashed']{border-style:dashed}.er-dbtable[data-border='dotted']{border-style:dotted}.er-dbtable[data-style='watercolor'][data-washtex-css]:not( [data-washtex-css=''] ) .er-dbtable__head{background:transparent}.er-dbtable[data-style='watercolor']{border-color:transparent;--er-wc-ink-alpha:var(--er-wc-border-alpha,45%)}.er-dbtable[data-style='watercolor']::after{content:'';position:absolute;inset:0;border:1.8px solid color-mix( in srgb,var(--er-stroke) var(--er-wc-border-alpha,45%),transparent );border-radius:inherit;filter:blur(var(--er-wc-border-blur,0.7px));pointer-events:none}.er-dbtable__head{display:flex;align-items:center;gap:8px;min-height:36px;padding:0 10px;background:#ffffff;border-bottom:1px solid var(--er-divider);box-sizing:border-box}.er-dbtable[data-title-bg]:not([data-title-bg='']) .er-dbtable__head{background:var(--er-title-bg);border-bottom-color:var(--er-stroke)}.er-dbtable__title{flex:1;margin:0;font-size:calc(var(--er-base) * 18 / 17);font-weight:400;letter-spacing:-0.01em;color:#242424;text-align:left}.er-dbtable[data-h-align='center'] .er-dbtable__title{text-align:center}.er-dbtable[data-h-align='right'] .er-dbtable__title{text-align:right}.er-dbtable__icon{--er-glyph-num:25;flex:0 0 auto;width:25px;height:25px;color:#454545;line-height:0}.er-dbtable__icon svg{display:block;width:100%;height:100%}.er-dbtable__rows{margin:0;padding:0;list-style:none}.er-dbtable__row{display:flex;gap:8px;align-items:center;min-height:28px;padding:0 10px;border-bottom:1px solid var(--er-divider);box-sizing:border-box}.er-dbtable__row:last-child{border-bottom:none}.er-dbtable__f-name{font-size:var(--er-base);color:#2e2e2e}.er-dbtable__f-type{flex:1;text-align:right;color:#737373;font-family:var(--font-mono,monospace);font-size:calc(var(--er-base) * 15 / 17)}.er-dbtable__f-meta{text-align:right;color:#737373;font-family:var(--font-mono,monospace);font-size:calc(var(--er-base) * 15 / 17)}.er-dbtable__f-meta:empty{display:none}",Legend:".er-legend{--er-fill:#ffffff;--er-stroke:#242424;width:100%;height:100%;border:1px solid var(--er-stroke);border-radius:6px;background:var(--er-fill);padding:8px 10px;box-sizing:border-box;font-family:var(--font-clean,sans-serif)}.er-legend[data-color]:not([data-color='']){--er-fill:hsl(from var(--er-color) h s 85%);--er-stroke:var(--er-color)}.er-legend[data-bg]:not([data-bg='']){--er-fill:var(--er-bg)}.er-legend[data-border-color]:not([data-border-color='']){--er-stroke:var(--er-border)}.er-legend__items{margin:0;padding:0;list-style:none}.er-legend__item{display:flex;align-items:center;gap:8px;min-height:22px}.er-legend__swatch{flex:0 0 auto;width:12px;height:12px;border-radius:3px;border:1px solid rgba(36,36,36,0.4);background:#e4e4e4}.er-legend__swatch[data-swatch]:not([data-swatch='']){background:var(--er-swatch)}.er-legend__text{font-size:13px;letter-spacing:-0.01em;color:#242424}",Relationship:".er-rel__line{fill:none;stroke:var(--er-stroke,#1c1c1c);stroke-width:var(--er-line-w,1.3px)}.er-rel[data-line-style='dashed'] .er-rel__line{stroke-dasharray:8 8.75}.er-rel[data-line-style='dotted'] .er-rel__line{stroke-dasharray:1.5 6.75}.er-rel__label{position:relative;display:inline-block;z-index:1;font-family:var(--f,var(--font-clean,sans-serif));font-size:14px;font-weight:400;letter-spacing:-0.01em;line-height:1.2;text-align:center;white-space:normal;overflow-wrap:break-word;word-break:normal;color:#242424;background:transparent;padding:0 2px}.er-rel[data-font-px]:not([data-font-px='']) .er-rel__label{font-size:var(--er-font-px)}",DatabaseRelationship:".er-dbrel__line{fill:none;stroke:var(--er-stroke,#1c1c1c);stroke-width:var(--er-line-w,1.3px)}.er-dbrel[data-line-style='dashed'] .er-dbrel__line{stroke-dasharray:8 8.75}.er-dbrel[data-line-style='dotted'] .er-dbrel__line{stroke-dasharray:1.5 6.75}.er-dbrel__label{position:relative;display:inline-block;z-index:1;font-family:var(--f,var(--font-clean,sans-serif));font-size:14px;font-weight:400;letter-spacing:-0.01em;line-height:1.2;text-align:center;white-space:normal;overflow-wrap:break-word;word-break:normal;color:#242424;background:transparent;padding:0 2px}.er-dbrel[data-font-px]:not([data-font-px='']) .er-dbrel__label{font-size:var(--er-font-px)}",Badge:".er-badge{position:absolute;z-index:5;top:0;right:12px;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;gap:4px;border-radius:5px;padding:4px;min-width:calc(1.2em + 8px + 2px);background:var(--er-tint,#ffffff);color:#000000;border:1px solid color-mix(in srgb,#242424 var(--er-wc-ink-alpha,100%),transparent);font-family:var(--font-clean,sans-serif);font-size:15px;line-height:1.2;white-space:nowrap;box-sizing:border-box}.er-badge[data-font-px]:not([data-font-px='']){font-size:var(--er-font-px)}.er-badge[data-bg]:not([data-bg='']){background:var(--er-badge-bg)}.er-badge[data-ink]:not([data-ink='']){color:var(--er-badge-ink)}.er-badge[data-pad]:not([data-pad='']){padding:var(--er-badge-pad);min-width:calc(1.2em + 2 * var(--er-badge-pad) + 2px)}.er-badge[data-shape='circle']{border-radius:999px;aspect-ratio:1}.er-badge__icon{--er-glyph-num:18;display:inline-block;width:18px;height:18px;line-height:0}.er-badge__icon svg{display:block;width:100%;height:100%}.er-badge[data-placement='top-left'],.er-badge[data-placement='start']{right:auto;left:12px}.er-badge[data-placement='middle']{right:auto;left:50%;transform:translate(-50%,-50%)}.er-badge[data-placement='bottom-left']{top:auto;right:auto;bottom:0;left:12px;transform:translateY(50%)}.er-badge[data-placement='bottom-right']{top:auto;bottom:0;transform:translateY(50%)}"};m();m();m();m();m();m();var vc=["entity","connection"],Yt="x-schema-kind",cn="x-is-container",Ii="x-content",Fn="x-css-color",bo="x-icon-name",Gt="x-ref",Xt="x-palette",kc=/^[A-Za-z][A-Za-z0-9_-]{0,63}$/,Yd={[Ii]:"string",[Fn]:"boolean",[bo]:"boolean",[Gt]:"string",[Xt]:"boolean"},ve={type:"string","x-css-color":!0},un={type:"string","x-palette":!0},ws={x:{type:"number",minimum:0},y:{type:"number",minimum:0},width:{type:"number",minimum:0},height:{type:"number",minimum:0}},hm={x:ws.x,y:ws.y},Am={containerId:{anyOf:[{type:"string",minLength:1},{type:"null"}],"x-ref":"element"},isContainer:{type:"boolean"}},pm={from:{type:"string",minLength:1,"x-ref":"element"},to:{type:"string",minLength:1,"x-ref":"element"}},zk=new Set(["tag","id","x","y","width","height","containerId","isContainer","from","to"]);function Ge(t,e,n={}){return mm("entity",t,e,n)}function _s(t,e,n={}){return mm("connection",t,e,n)}function xo(t){let e=t?.[Yt];return typeof e=="string"&&vc.includes(e)?e:void 0}function Nc(t){return t?.[cn]===!0}function mm(t,e,n,r){let i=Object.fromEntries(Object.entries(n).filter(([f])=>!zk.has(f))),o=r.required??[],s=o.filter(f=>Object.hasOwn(i,f)?!0:t==="entity"&&Object.hasOwn(ws,f)),a=t==="entity"&&r.isContainer===!0,c=t==="entity"?{...ws,...Am,isContainer:{type:"boolean",...a?{default:!0}:{}}}:{...hm,...pm},u=["tag",...t==="entity"||o.includes("id")?["id"]:[],...t==="connection"?["from","to"]:[]],l=[...new Set([...u,...s])];return{type:"object","x-schema-kind":t,...a?{"x-is-container":!0}:{},not:{anyOf:t==="entity"?[{required:["from"]},{required:["to"]}]:[{required:["containerId"]},{required:["width"]},{required:["height"]}]},additionalProperties:!1,required:l,properties:{...i,tag:{const:e,type:"string"},id:{type:"string",minLength:1},...c}}}m();var gm=["rectangle","parallelogram","trapezoid","diamond","cylinder","hexagon","circle","ellipse","oval","triangle","document","star"],bm=["plain","shadow","watercolor"],dt=["rough","clean","mono"],Rc=["arrow","bar","dot","triangle","crowFootSingle","crowFootMany"],Gd=["top","right","bottom","left"],xm=["crows-foot","chen"],Em=["one-to-one","one-to-many","many-to-one","many-to-many"],Oc=["sm","md","lg","xl"],In=["solid","dashed","dotted"],kr=["left","center","right"],Im=["top","middle","bottom"],ym=["horizontal","vertical"],Cm=["circle","rectangle"],Tm=["top-left","top-right","bottom-left","bottom-right","start","middle","end"],wm=["elbow","straight"],Dc=["straight","elbow"];var Kd=["snug","full","none"];m();m();var rt={type:"number"},Un={type:"object",additionalProperties:!1,required:["text"],properties:{text:{type:"string","x-content":"markdown"},color:ve,fontSize:rt,hAlign:{type:"string",enum:[...kr]},typeface:{type:"string",enum:[...dt]}}};m();var st={type:"object",additionalProperties:!1,properties:{text:{type:"string","x-content":"inline-markdown"},icon:{type:"string","x-icon-name":!0},color:ve,bgColor:ve,fontSize:rt,shape:{type:"string",enum:[...Cm]},padding:{type:"number"},placement:{type:"string",enum:[...Tm]}}};var Zk={anyOf:[{const:"round",type:"string"},{const:"sharp",type:"string"},{type:"array",items:[{type:"number"},{type:"number"},{type:"number"},{type:"number"}],additionalItems:!1,minItems:4,maxItems:4}]},Nr={color:un,bgColor:ve,borderColor:ve,styleMode:{type:"string",enum:[...bm],default:"shadow"},cornerRadius:Zk,borderStyle:{type:"string",enum:[...In]},borderWidth:{type:"number"}},Eo={washTexCss:{type:"boolean"},washUid:{type:"string",pattern:"^[A-Za-z0-9_-]+$"},washShade:{type:"string",pattern:"^#[0-9a-f]{6}$"},washMid:{type:"string",pattern:"^#[0-9a-f]{6}$"},washSym:{type:"string",pattern:"^[A-Za-z0-9_-]+$"}},Qd={type:"object",additionalProperties:!1,properties:{color:ve,size:{type:"string",enum:[...Oc]}}},e2=Qd,Bc={type:"object",additionalProperties:!1,properties:{text:{type:"string","x-content":"inline-markdown"},icon:{type:"string","x-icon-name":!0},iconProps:e2,width:{type:"string",enum:[...Kd],default:"snug"},bgColor:ve,border:{type:"boolean",default:!0},color:ve,fontSize:rt,hAlign:{type:"string",enum:[...kr]},typeface:{type:"string",enum:[...dt]}}},_m={...Bc,properties:{...Bc.properties,width:{type:"string",enum:[...Kd],default:"full"}}},t2={type:"object",additionalProperties:!1,required:["x","y"],properties:{x:{type:"number"},y:{type:"number"},width:{type:"number"},height:{type:"number"},lineOffset:{type:"number"}}},n2={type:"object",additionalProperties:!1,required:["x","y"],properties:{x:{type:"number"},y:{type:"number"}}},Mc={points:{type:"array",items:n2,minItems:2},typeface:{type:"string",enum:[...dt]},fontSize:rt,label:{type:"string","x-content":"inline-markdown"},labelPlacement:t2,lineStyle:{type:"string",enum:[...In]},cornerStyle:{type:"string",enum:[...Dc]},lineWidth:{type:"number"},color:un,badge:st,lineWidthPx:{type:"number"}};m();var Pc={white:"#242424",yellow:"#d3d61e",green:"#30a050",blue:"#2866c4",purple:"#c43dcf",red:"#bd413a",orange:"#c38424",black:"#3a3a3a"},r2=Object.keys(Pc);m();var ln={type:"string","x-icon-name":!0},Sm={type:"string",enum:[...Oc]},Hn={type:"string","x-content":"plain"},vm={type:"string","x-content":"markdown"},km={type:"object",additionalProperties:!1,required:["name"],properties:{name:Hn,type:Hn,meta:Hn}},Wd={title:Bc,...Nr,...Eo,badge:st},Lc={...Wd,title:_m};var Nm=Ge("Shape",{shape:{type:"string",enum:[...gm],default:"rectangle"},...Nr,texts:{type:"array",items:Un},icon:ln,iconProps:Qd,iconPadding:{type:"number"},iconColor:ve,vAlign:{type:"string",enum:[...Im],default:"middle"},vMargin:{type:"number"},textAspectRatio:{type:"number"},fontSize:rt,badge:st,...Eo,washTexGeo:{type:"boolean"},washUseW:{type:"number"},washUseH:{type:"number"},geoPath:{type:"string",pattern:"^[MLHVCAZ0-9,. \\-]+$"},geoCapPath:{type:"string",pattern:"^[MLHVCAZ0-9,. \\-]+$"},geoWashFloorPath:{type:"string",pattern:"^[MLHVCAZ0-9,. \\-]+$"},geoW:{type:"number"},geoH:{type:"number"},staticGeo:{type:"boolean"},outline:{type:"object",required:["kind"],additionalProperties:!1,properties:{kind:{type:"string",enum:["polygon","ellipse"]},vertices:{type:"array",minItems:3,items:{type:"array",items:{type:"number"},minItems:2,maxItems:2}},cornerRadius:{type:"number"},cornerRadiusPercent:{type:"number"}}}},{required:["x","y"]});var Rm="Shape",Om=Nm;m();m();var Dm=Ge("Icon",{icon:ln,size:Sm,texts:{type:"array",items:Un},typeface:{type:"string",enum:[...dt]},color:ve,fontSize:rt,badge:st,sizePx:{type:"number"}},{required:["x","y"]});var Bm="Icon",Mm=Dm;m();m();var Pm=Ge("Activity",{texts:{type:"array",items:Un},icon:ln,color:un,bgColor:ve,borderColor:ve,borderStyle:{type:"string",enum:[...In]},fontSize:rt,typeface:{type:"string",enum:[...dt]},badge:st},{required:["x","y"]});var Lm="Activity",Fm=Pm;m();m();var Um=Ge("Event",{texts:{type:"array",items:Un},icon:ln,color:un,bgColor:ve,borderColor:ve,borderStyle:{type:"string",enum:[...In]},fontSize:rt,typeface:{type:"string",enum:[...dt]},badge:st},{required:["x","y"]});var Hm="Event",Ym=Um;m();m();var Gm=Ge("Gateway",{texts:{type:"array",items:Un},icon:ln,color:un,bgColor:ve,borderColor:ve,borderStyle:{type:"string",enum:[...In]},fontSize:rt,typeface:{type:"string",enum:[...dt]},badge:st},{required:["x","y"]});var Km="Gateway",Qm=Gm;m();m();var Wm=Ge("Textbox",{text:vm,color:ve,fontSize:rt,hAlign:{type:"string",enum:[...kr]},typeface:{type:"string",enum:[...dt]},fixedWidth:{type:"boolean"},badge:st,wrapMode:{type:"string",enum:["wrap","nowrap"]}},{required:["x","y","text"]});var jm="Textbox",qm=Wm;m();m();var Vm=Ge("Group",Wd,{required:["x","y"],isContainer:!0});var $m="Group",Jm=Vm;m();m();var Xm=Ge("Lane",Lc,{required:["x","y"],isContainer:!0});var zm="Lane",Zm=Xm;m();m();var eg=Ge("Pool",Lc,{required:["x","y"],isContainer:!0});var tg="Pool",ng=eg;m();m();var rg=Ge("Divider",{orientation:{type:"string",enum:[...ym]},label:Hn,typeface:{type:"string",enum:[...dt]},fontSize:rt,color:un,lineStyle:{type:"string",enum:[...In]},lineWidth:{type:"number"},lineWidthPx:{type:"number"}},{required:["x","y","orientation"]});var ig="Divider",og=rg;m();m();var sg=Ge("DatabaseTable",{label:Hn,icon:ln,fields:{type:"array",items:km},fontSize:rt,typeface:{type:"string",enum:[...dt]},titleBgColor:ve,hAlign:{type:"string",enum:[...kr],default:"left"},...Nr,...Eo,badge:st},{required:["x","y"]});var ag="DatabaseTable",cg=sg;m();m();var i2={type:"object",additionalProperties:!1,required:["text"],properties:{text:{type:"string","x-content":"plain"},color:ve}},ug=Ge("Legend",{entries:{type:"array",items:i2},...Nr},{required:["x","y"]});var lg="Legend",dg=ug;m();m();var fg={anyOf:[{type:"string",enum:[...Rc]},{type:"null"}]},hg=_s("Relationship",{...Mc,fromPort:{type:"string",enum:[...Gd]},toPort:{type:"string",enum:[...Gd]},startArrowhead:fg,endArrowhead:{...fg,default:"triangle"},connectorStyle:{type:"string",enum:[...wm]},cornerStyle:{type:"string",enum:[...Dc],default:"elbow"}});var jd="Relationship",Ag=hg;m();m();var pg={anyOf:[{type:"string",enum:[...Rc]},{type:"null"}]},mg=_s("DatabaseRelationship",{...Mc,fromField:Hn,toField:Hn,relType:{type:"string",enum:[...Em]},notation:{type:"string",enum:[...xm]},startArrowhead:pg,endArrowhead:pg});var gg="DatabaseRelationship",bg=mg;m();var qd="Badge",xg=st;m();m();var Eg="data:image/jpeg;base64,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";var Ss=/^#([0-9a-f]{6})/i;function o2(t){let e=Number.parseInt(Ss.exec(t)[1],16),n=r=>Math.round((e>>r&255)*.55).toString(16).padStart(2,"0");return`#${n(16)}${n(8)}${n(0)}`}function Vd(t,e,n){if(!Ss.test(t))return null;let r=typeof e=="string"&&Ss.test(e)?`#${Ss.exec(e)[1].toLowerCase()}`:o2(t);return{washUid:n.replace(/[^A-Za-z0-9_-]/g,"-"),washShade:r,washMid:`#${Ss.exec(t)[1].toLowerCase()}`}}function $d(t){return{templates:Object.fromEntries(t.templates.map(e=>[e.name,{html:e.html,css:e.css}])),baseCss:t.baseCss,washMaster:Eg}}var Ig=[Rm,Bm,Lm,Hm,Km,jm,$m,zm,tg,ig,ag,lg,jd,gg,qd];function s2(t){let e=dm[t],n=fm[t];if(e===void 0||n===void 0)throw new Error(`Missing generated template markup for ${t}`);return{name:t,html:e,css:n}}var a2=Ig.map(s2),yg={Icon:Mm,Shape:Om,Activity:Fm,Event:Ym,Gateway:Qm,DatabaseTable:cg,Textbox:qm,Group:Jm,Lane:Zm,Pool:ng,Divider:og,Legend:dg,Relationship:Ag,DatabaseRelationship:bg},Cg={[qd]:xg},lV=(()=>{let t={};for(let[e,n]of Object.entries({...yg,...Cg}))t[e]=Object.keys(n.properties??{});return t})(),Jd={manifest:Ig,schemas:yg,templates:a2,baseCss:lm,subTemplates:Cg,defaultConnectionTag:jd,palette:Pc};m();m();m();var cE=Sc(Lh(),1);m();function tE(t){t.getKeyword(Yt)||t.addKeyword({keyword:Yt,schemaType:"string",metaSchema:{enum:[...vc]}}),t.getKeyword(cn)||t.addKeyword({keyword:cn,schemaType:"boolean",metaSchema:{const:!0}});for(let[e,n]of Object.entries(Yd))t.getKeyword(e)||t.addKeyword({keyword:e,schemaType:n,metaSchema:{type:[n]}})}m();function bu(t,e){gu(t,"",e)}function gu(t,e,n){if(!t||typeof t!="object")return;n(t,e);let r=t.properties;if(r)for(let o of Object.keys(r))gu(r[o],`${e}/${jB(o)}`,n);let i=t.items;i&&!Array.isArray(i)&&gu(i,`${e}/*`,n);for(let o of["anyOf","oneOf","allOf"]){let s=t[o];if(Array.isArray(s))for(let a of s)gu(a,e,n)}}function jB(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}m();var oE=Sc(Lh(),1);var nE={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://schemas.eraser.io/mdp/0.1/tag-schema.schema.json",title:"MDP 0.1 tag schema",description:"The closed JSON Schema draft-07 subset accepted for one MDP profile tag.",$ref:"#/definitions/tagSchema",definitions:{schemaNode:{type:"object",additionalProperties:!1,properties:{type:{enum:["object","array","string","number","boolean","null"]},const:{type:"string"},enum:{type:"array",items:{type:"string"},minItems:1,uniqueItems:!0},anyOf:{type:"array",items:{$ref:"#/definitions/schemaNode"},minItems:1},not:{$ref:"#/definitions/schemaNode"},properties:{type:"object",additionalProperties:{$ref:"#/definitions/schemaNode"}},required:{type:"array",items:{type:"string",minLength:1},uniqueItems:!0},additionalProperties:{type:"boolean"},items:{anyOf:[{$ref:"#/definitions/schemaNode"},{type:"array",items:{$ref:"#/definitions/schemaNode"},minItems:1}]},additionalItems:{type:"boolean"},minItems:{type:"integer",minimum:0},maxItems:{type:"integer",minimum:0},minLength:{type:"integer",minimum:0},minimum:{type:"number"},pattern:{type:"string"},default:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},"x-schema-kind":{enum:["entity","connection"]},"x-is-container":{const:!0},"x-content":{enum:["plain","markdown","inline-markdown","html"]},"x-css-color":{const:!0},"x-icon-name":{const:!0},"x-ref":{const:"element"},"x-palette":{const:!0}}},tagSchema:{allOf:[{$ref:"#/definitions/schemaNode"},{type:"object",required:["type","x-schema-kind","additionalProperties","required","properties"],properties:{type:{const:"object"},"x-schema-kind":{enum:["entity","connection"]},"x-is-container":{const:!0},additionalProperties:{const:!1},required:{type:"array"},properties:{type:"object"}}}]}}};var na=class extends TypeError{tag;issues;constructor(e,n){super(`Invalid MDP schema for tag "${e}": +${n.map(r=>` ${r.path}: ${r.message}`).join(` +`)}`),this.tag=e,this.issues=n,this.name="SchemaDefinitionError"}},VB=new oE.Ajv({allErrors:!0,strict:!0}),rE=VB.compile(nE);function sE(t,e,n=!1){if(!rE(e))throw new na(t,(rE.errors??[]).map($B));let r=JB(t,e,n);if(r.length>0)throw new na(t,r)}function $B(t){if(t.keyword==="additionalProperties"){let e=String(t.params.additionalProperty);return{path:`${t.instancePath}/${Uh(e)}`||"/",keyword:t.keyword,message:`unsupported keyword "${e}"`}}return{path:t.instancePath||"/",keyword:t.keyword,message:t.message??"invalid schema definition"}}function JB(t,e,n){let r=[],i=e.properties,o=new Set(e.required),s=e[Yt];xu(o,"tag",r),XB(t,i.tag,r),Fh("/properties/id",i.id,r,{minLength:!0});for(let a of o)Object.hasOwn(i,a)||ge(r,"/required","required",`required property "${a}" is not declared in properties`);if(s==="entity"){xu(o,"id",r);for(let a of["x","y","width","height"])iE(a,i[a],r);(i.from!==void 0||i.to!==void 0)&&ge(r,"/properties",Yt,"entity schemas may not declare the connection-owned from/to properties"),zB(i.containerId,o,r),ZB(i.isContainer,o,r)}else{for(let a of["x","y"])iE(a,i[a],r),o.has(a)&&ge(r,"/required","required",`connection origin property "${a}" must remain optional`);for(let a of["width","height"])(i[a]!==void 0||o.has(a))&&ge(r,`/properties/${a}`,Yt,`connection schemas may not declare the entity-owned ${a} property`);xu(o,"from",r),xu(o,"to",r),Fh("/properties/from",i.from,r,{minLength:!0,reference:!0}),Fh("/properties/to",i.to,r,{minLength:!0,reference:!0}),(i.containerId!==void 0||o.has("containerId"))&&ge(r,"/properties/containerId",Yt,"connection schemas may not declare containerId"),(i.isContainer!==void 0||o.has("isContainer"))&&ge(r,"/properties/isContainer",Yt,"connection schemas may not declare isContainer"),e[cn]!==void 0&&ge(r,`/${cn}`,cn,"connection schemas may not declare x-is-container")}return Lo(e,"",!0,n,r),r}function xu(t,e,n){t.has(e)||ge(n,"/required","required",`must include core property "${e}"`)}function XB(t,e,n){if(!e){ge(n,"/properties/tag","properties","must declare the core tag property");return}e.type!=="string"&&ge(n,"/properties/tag/type","type",'must be "string"'),e.const!==t&&ge(n,"/properties/tag/const","const",`must equal its registry key "${t}"`)}function Fh(t,e,n,r={}){if(!e){ge(n,t,"properties","must declare this core string property");return}e.type!=="string"&&ge(n,`${t}/type`,"type",'must be "string"'),r.minLength&&!(typeof e.minLength=="number"&&e.minLength>=1)&&ge(n,`${t}/minLength`,"minLength","must be at least 1"),r.reference&&e[Gt]!=="element"&&ge(n,`${t}/${Gt}`,Gt,'must be "element"')}function iE(t,e,n){let r=`/properties/${t}`;if(!e){ge(n,r,"properties","must declare optional MDP geometry");return}e.type!=="number"&&ge(n,`${r}/type`,"type",'must be "number"'),e.minimum!==0&&ge(n,`${r}/minimum`,"minimum","must be 0"),e.default!==void 0&&ge(n,`${r}/default`,"default","geometry properties may not declare a default; absence is distinct from zero")}function zB(t,e,n){let r="/properties/containerId";if(!t){ge(n,r,"properties","entity schemas must declare optional nullable containment");return}t[Gt]!=="element"&&ge(n,`${r}/${Gt}`,Gt,'must be "element"');let i=Hh(t);(!i||!i.has("string")||!i.has("null")||i.size!==2)&&ge(n,r,"anyOf","must accept exactly a non-empty string or null");let o=Array.isArray(t.anyOf)?t.anyOf.find(s=>s.type==="string"):void 0;typeof o?.minLength=="number"&&o.minLength>=1||ge(n,`${r}/anyOf`,"minLength","the string branch must have minLength of at least 1"),e.has("containerId")&&ge(n,"/required","required","containerId must remain optional")}function ZB(t,e,n){let r="/properties/isContainer";e.has("isContainer")&&ge(n,"/required","required","isContainer must remain optional"),t&&t.type!=="boolean"&&ge(n,`${r}/type`,"type",'must be "boolean"')}function Lo(t,e,n,r,i){!n&&t[Yt]!==void 0&&ge(i,`${e}/${Yt}`,Yt,"is only allowed on the tag-schema root"),!n&&t[cn]!==void 0&&ge(i,`${e}/${cn}`,cn,"is only allowed on the tag-schema root"),eM(t,e,r,i),tM(t,e,n,i),typeof t.minItems=="number"&&typeof t.maxItems=="number"&&t.minItems>t.maxItems&&ge(i,e||"/","minItems","minItems may not exceed maxItems");let o=t.properties,s=Array.isArray(t.required)?t.required.filter(d=>typeof d=="string"):[],a=new Set(s);if(Fr(o))for(let[d,f]of Object.entries(o))Fr(f)&&(a.has(d)&&f.default!==void 0&&ge(i,`${e}/properties/${Uh(d)}/default`,"default","may not annotate a required property"),Lo(f,`${e}/properties/${Uh(d)}`,!1,r,i));let c=t.anyOf;Array.isArray(c)&&c.forEach((d,f)=>{Fr(d)&&Lo(d,`${e}/anyOf/${f}`,!1,r,i)});let u=t.not;Fr(u)&&Lo(u,`${e}/not`,!1,r,i);let l=t.items;Array.isArray(l)?l.forEach((d,f)=>{Fr(d)&&Lo(d,`${e}/items/${f}`,!1,r,i)}):Fr(l)&&Lo(l,`${e}/items`,!1,r,i)}function eM(t,e,n,r){let i=Hh(t);for(let o of[Ii,Fn,bo,Xt])t[o]!==void 0&&(!i||i.size!==1||!i.has("string"))&&ge(r,`${e}/${o}`,o,"may only annotate a schema that accepts strings");t[Gt]!==void 0&&(!i||!i.has("string")||[...i].some(o=>o!=="string"&&o!=="null"))&&ge(r,`${e}/${Gt}`,Gt,"may only annotate a string or nullable-string schema"),t[Xt]!==void 0&&(n||ge(r,`${e}/${Xt}`,Xt,"requires the library to declare a palette"),t[Fn]!==void 0&&ge(r,`${e}/${Xt}`,Xt,`may not be combined with ${Fn} on the same schema`))}function tM(t,e,n,r){if(t.default===void 0)return;let i=`${e}/default`;if(n){ge(r,i,"default","is only allowed on properties, not the tag schema root");return}aE(t,t.default)||ge(r,i,"default","must be a valid instance of this schema")}function aE(t,e){if(Array.isArray(t.anyOf))return t.anyOf.some(r=>Fr(r)&&aE(r,e));if(typeof t.const=="string")return e===t.const;if(Array.isArray(t.enum))return t.enum.includes(e);let n=t.type;if(n==="string"){if(typeof e!="string"||typeof t.minLength=="number"&&e.length=t.minimum):n==="boolean"?typeof e=="boolean":n==="null"?e===null:!1}function Hh(t){if(typeof t.type=="string")return new Set([t.type]);if(typeof t.const=="string"||Array.isArray(t.enum))return new Set(["string"]);if(!Array.isArray(t.anyOf))return;let e=new Set;for(let n of t.anyOf){if(!Fr(n))return;let r=Hh(n);if(!r)return;for(let i of r)e.add(i)}return e}function ge(t,e,n,r){t.push({path:e||"/",keyword:n,message:r})}function Fr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Uh(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function nM(){let t=new cE.Ajv({allErrors:!0,strict:!1,allowUnionTypes:!0,removeAdditional:!1,useDefaults:!0});return tE(t),t}function uE(t,e=!1){let n=nM(),r=Object.create(null),i=Object.create(null),o=Object.create(null),s=Object.create(null),a=new Set;for(let[c,u]of Object.entries(t)){sE(c,u,e);let l=xo(u);if(!l)throw new TypeError(`schema for tag "${c}" must declare x-schema-kind`);r[c]=n.compile(rM(u,l)),i[c]=Yh(u),o[c]=u,s[c]=l,Nc(u)&&a.add(c)}return{validators:r,policyTables:i,rawSchemas:o,kinds:s,containers:a}}function rM(t,e){if(e!=="entity")return t;let n=t,r=n.properties;return typeof r!="object"||r===null||Array.isArray(r)||Object.hasOwn(r,"isContainer")?t:{...n,properties:{...r,isContainer:{type:"boolean",...Nc(t)?{default:!0}:{}}}}}function Yh(t){let e=[];return bu(t,(n,r)=>{typeof n[Ii]=="string"&&e.push({pointer:r,kind:"content",contentPolicy:n[Ii]}),n[Fn]===!0&&e.push({pointer:r,kind:"css-color"}),n[bo]===!0&&e.push({pointer:r,kind:"icon-name"}),typeof n[Gt]=="string"&&e.push({pointer:r,kind:"ref"}),n[Xt]===!0&&(e.push({pointer:r,kind:"palette"}),e.push({pointer:r,kind:"css-color"}))}),e}m();m();m();m();m();m();m();var iM=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),He="\uFFFD",C;(function(t){t[t.EOF=-1]="EOF",t[t.NULL=0]="NULL",t[t.TABULATION=9]="TABULATION",t[t.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",t[t.LINE_FEED=10]="LINE_FEED",t[t.FORM_FEED=12]="FORM_FEED",t[t.SPACE=32]="SPACE",t[t.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",t[t.QUOTATION_MARK=34]="QUOTATION_MARK",t[t.AMPERSAND=38]="AMPERSAND",t[t.APOSTROPHE=39]="APOSTROPHE",t[t.HYPHEN_MINUS=45]="HYPHEN_MINUS",t[t.SOLIDUS=47]="SOLIDUS",t[t.DIGIT_0=48]="DIGIT_0",t[t.DIGIT_9=57]="DIGIT_9",t[t.SEMICOLON=59]="SEMICOLON",t[t.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",t[t.EQUALS_SIGN=61]="EQUALS_SIGN",t[t.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",t[t.QUESTION_MARK=63]="QUESTION_MARK",t[t.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",t[t.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",t[t.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",t[t.GRAVE_ACCENT=96]="GRAVE_ACCENT",t[t.LATIN_SMALL_A=97]="LATIN_SMALL_A",t[t.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(C||(C={}));var Ft={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function Eu(t){return t>=55296&&t<=57343}function lE(t){return t>=56320&&t<=57343}function dE(t,e){return(t-55296)*1024+9216+e}function Iu(t){return t!==32&&t!==10&&t!==13&&t!==9&&t!==12&&t>=1&&t<=31||t>=127&&t<=159}function yu(t){return t>=64976&&t<=65007||iM.has(t)}m();var U;(function(t){t.controlCharacterInInputStream="control-character-in-input-stream",t.noncharacterInInputStream="noncharacter-in-input-stream",t.surrogateInInputStream="surrogate-in-input-stream",t.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",t.endTagWithAttributes="end-tag-with-attributes",t.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",t.unexpectedSolidusInTag="unexpected-solidus-in-tag",t.unexpectedNullCharacter="unexpected-null-character",t.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",t.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",t.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",t.missingEndTagName="missing-end-tag-name",t.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",t.unknownNamedCharacterReference="unknown-named-character-reference",t.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",t.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",t.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",t.eofBeforeTagName="eof-before-tag-name",t.eofInTag="eof-in-tag",t.missingAttributeValue="missing-attribute-value",t.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",t.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",t.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",t.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",t.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",t.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",t.missingDoctypePublicIdentifier="missing-doctype-public-identifier",t.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",t.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",t.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",t.cdataInHtmlContent="cdata-in-html-content",t.incorrectlyOpenedComment="incorrectly-opened-comment",t.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",t.eofInDoctype="eof-in-doctype",t.nestedComment="nested-comment",t.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",t.eofInComment="eof-in-comment",t.incorrectlyClosedComment="incorrectly-closed-comment",t.eofInCdata="eof-in-cdata",t.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",t.nullCharacterReference="null-character-reference",t.surrogateCharacterReference="surrogate-character-reference",t.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",t.controlCharacterReference="control-character-reference",t.noncharacterCharacterReference="noncharacter-character-reference",t.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",t.missingDoctypeName="missing-doctype-name",t.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",t.duplicateAttribute="duplicate-attribute",t.nonConformingDoctype="non-conforming-doctype",t.missingDoctype="missing-doctype",t.misplacedDoctype="misplaced-doctype",t.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",t.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",t.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",t.openElementsLeftAfterEof="open-elements-left-after-eof",t.abandonedHeadElementChild="abandoned-head-element-child",t.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",t.nestedNoscriptInHead="nested-noscript-in-head",t.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(U||(U={}));var sM=65536,Cu=class{constructor(e){this.handler=e,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=sM,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(e,n){let{line:r,col:i,offset:o}=this,s=i+n,a=o+n;return{code:e,startLine:r,endLine:r,startCol:s,endCol:s,startOffset:a,endOffset:a}}_err(e){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(e,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.html.length-1){let n=this.html.charCodeAt(this.pos+1);if(lE(n))return this.pos++,this._addGap(),dE(e,n)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,C.EOF;return this._err(U.surrogateInInputStream),e}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(e,n){this.html.length>0?this.html+=e:this.html=e,this.endOfChunkHit=!1,this.lastChunkWritten=n}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(e,n){if(this.pos+e.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(n)return this.html.startsWith(e,this.pos);for(let r=0;r=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,C.EOF;let r=this.html.charCodeAt(n);return r===C.CARRIAGE_RETURN?C.LINE_FEED:r}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,C.EOF;let e=this.html.charCodeAt(this.pos);return e===C.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,C.LINE_FEED):e===C.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,Eu(e)&&(e=this._processSurrogate(e)),this.handler.onParseError===null||e>31&&e<127||e===C.LINE_FEED||e===C.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e)}_checkForProblematicCharacters(e){Iu(e)?this._err(U.controlCharacterInInputStream):yu(e)&&this._err(U.noncharacterInInputStream)}retreat(e){for(this.pos-=e;this.pos=0;n--)if(t.attrs[n].name===e)return t.attrs[n].value;return null}m();m();var cM=new Map([[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]]);function fE(t){return t>=55296&&t<=57343||t>1114111?65533:cM.get(t)??t}m();m();function hE(t){let e=atob(t),n=e.length&-2,r=new Uint16Array(n/2);for(let i=0,o=0;i=ze.ZERO&&t<=ze.NINE}function uM(t){return t>=ze.UPPER_A&&t<=ze.UPPER_F||t>=ze.LOWER_A&&t<=ze.LOWER_F}function lM(t){return t>=ze.UPPER_A&&t<=ze.UPPER_Z||t>=ze.LOWER_A&&t<=ze.LOWER_Z||Kh(t)}function dM(t){return t===ze.EQUALS||lM(t)}var gt;(function(t){t[t.EntityStart=0]="EntityStart",t[t.NumericStart=1]="NumericStart",t[t.NumericDecimal=2]="NumericDecimal",t[t.NumericHex=3]="NumericHex",t[t.NamedEntity=4]="NamedEntity"})(gt||(gt={}));var Qn;(function(t){t[t.Legacy=0]="Legacy",t[t.Strict=1]="Strict",t[t.Attribute=2]="Attribute"})(Qn||(Qn={}));var wu=class{decodeTree;emitCodePoint;errors;constructor(e,n,r){this.decodeTree=e,this.emitCodePoint=n,this.errors=r}state=gt.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=Qn.Strict;runConsumed=0;startEntity(e){this.decodeMode=e,this.state=gt.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(e,n){switch(this.state){case gt.EntityStart:return e.charCodeAt(n)===ze.NUM?(this.state=gt.NumericStart,this.consumed+=1,this.stateNumericStart(e,n+1)):(this.state=gt.NamedEntity,this.stateNamedEntity(e,n));case gt.NumericStart:return this.stateNumericStart(e,n);case gt.NumericDecimal:return this.stateNumericDecimal(e,n);case gt.NumericHex:return this.stateNumericHex(e,n);case gt.NamedEntity:return this.stateNamedEntity(e,n)}}stateNumericStart(e,n){return n>=e.length?-1:(e.charCodeAt(n)|AE)===ze.LOWER_X?(this.state=gt.NumericHex,this.consumed+=1,this.stateNumericHex(e,n+1)):(this.state=gt.NumericDecimal,this.stateNumericDecimal(e,n))}stateNumericHex(e,n){for(;n>14;for(;n>7;if(this.runConsumed===0){let c=i&kt.JUMP_TABLE;if(e.charCodeAt(n)!==c)return this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++}for(;this.runConsumed=e.length)return-1;let c=this.runConsumed-1,u=r[this.treeIndex+1+(c>>1)],l=c%2===0?u&255:u>>8&255;if(e.charCodeAt(n)!==l)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(a>>1),i=r[this.treeIndex],o=(i&kt.VALUE_LENGTH)>>14}if(n>=e.length)break;let s=e.charCodeAt(n);if(s===ze.SEMI&&o!==0&&(i&kt.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,o,this.consumed+this.excess);if(this.treeIndex=fM(r,i,this.treeIndex+Math.max(1,o),s),this.treeIndex<0)return this.result===0||this.decodeMode===Qn.Attribute&&(o===0||dM(s))?0:this.emitNotTerminatedNamedEntity();if(i=r[this.treeIndex],o=(i&kt.VALUE_LENGTH)>>14,o!==0){if(s===ze.SEMI)return this.emitNamedEntityData(this.treeIndex,o,this.consumed+this.excess);this.decodeMode!==Qn.Strict&&(i&kt.FLAG13)===0&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}n++,this.excess++}return-1}emitNotTerminatedNamedEntity(){let{result:e,decodeTree:n}=this,r=(n[e]&kt.VALUE_LENGTH)>>14;return this.emitNamedEntityData(e,r,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(e,n,r){let{decodeTree:i}=this;return this.emitCodePoint(n===1?i[e]&~(kt.VALUE_LENGTH|kt.FLAG13):i[e+1],r),n===3&&this.emitCodePoint(i[e+2],r),r}end(){switch(this.state){case gt.NamedEntity:return this.result!==0&&(this.decodeMode!==Qn.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case gt.NumericDecimal:return this.emitNumericEntity(0,2);case gt.NumericHex:return this.emitNumericEntity(0,3);case gt.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case gt.EntityStart:return 0}}};function fM(t,e,n,r){let i=(e&kt.BRANCH_LENGTH)>>7,o=e&kt.JUMP_TABLE;if(i===0)return o!==0&&r===o?n:-1;if(o){let u=r-o;return u<0||u>=i?-1:t[n+u]-1}let s=i+1>>1,a=0,c=i-1;for(;a<=c;){let u=a+c>>>1,l=u>>1,f=t[n+l]>>(u&1)*8&255;if(fr)c=u-1;else return t[n+s+u]}return-1}m();var Q;(function(t){t.HTML="http://www.w3.org/1999/xhtml",t.MATHML="http://www.w3.org/1998/Math/MathML",t.SVG="http://www.w3.org/2000/svg",t.XLINK="http://www.w3.org/1999/xlink",t.XML="http://www.w3.org/XML/1998/namespace",t.XMLNS="http://www.w3.org/2000/xmlns/"})(Q||(Q={}));var dr;(function(t){t.TYPE="type",t.ACTION="action",t.ENCODING="encoding",t.PROMPT="prompt",t.NAME="name",t.COLOR="color",t.FACE="face",t.SIZE="size"})(dr||(dr={}));var Ut;(function(t){t.NO_QUIRKS="no-quirks",t.QUIRKS="quirks",t.LIMITED_QUIRKS="limited-quirks"})(Ut||(Ut={}));var L;(function(t){t.A="a",t.ADDRESS="address",t.ANNOTATION_XML="annotation-xml",t.APPLET="applet",t.AREA="area",t.ARTICLE="article",t.ASIDE="aside",t.B="b",t.BASE="base",t.BASEFONT="basefont",t.BGSOUND="bgsound",t.BIG="big",t.BLOCKQUOTE="blockquote",t.BODY="body",t.BR="br",t.BUTTON="button",t.CAPTION="caption",t.CENTER="center",t.CODE="code",t.COL="col",t.COLGROUP="colgroup",t.DD="dd",t.DESC="desc",t.DETAILS="details",t.DIALOG="dialog",t.DIR="dir",t.DIV="div",t.DL="dl",t.DT="dt",t.EM="em",t.EMBED="embed",t.FIELDSET="fieldset",t.FIGCAPTION="figcaption",t.FIGURE="figure",t.FONT="font",t.FOOTER="footer",t.FOREIGN_OBJECT="foreignObject",t.FORM="form",t.FRAME="frame",t.FRAMESET="frameset",t.H1="h1",t.H2="h2",t.H3="h3",t.H4="h4",t.H5="h5",t.H6="h6",t.HEAD="head",t.HEADER="header",t.HGROUP="hgroup",t.HR="hr",t.HTML="html",t.I="i",t.IMG="img",t.IMAGE="image",t.INPUT="input",t.IFRAME="iframe",t.KEYGEN="keygen",t.LABEL="label",t.LI="li",t.LINK="link",t.LISTING="listing",t.MAIN="main",t.MALIGNMARK="malignmark",t.MARQUEE="marquee",t.MATH="math",t.MENU="menu",t.META="meta",t.MGLYPH="mglyph",t.MI="mi",t.MO="mo",t.MN="mn",t.MS="ms",t.MTEXT="mtext",t.NAV="nav",t.NOBR="nobr",t.NOFRAMES="noframes",t.NOEMBED="noembed",t.NOSCRIPT="noscript",t.OBJECT="object",t.OL="ol",t.OPTGROUP="optgroup",t.OPTION="option",t.P="p",t.PARAM="param",t.PLAINTEXT="plaintext",t.PRE="pre",t.RB="rb",t.RP="rp",t.RT="rt",t.RTC="rtc",t.RUBY="ruby",t.S="s",t.SCRIPT="script",t.SEARCH="search",t.SECTION="section",t.SELECT="select",t.SOURCE="source",t.SMALL="small",t.SPAN="span",t.STRIKE="strike",t.STRONG="strong",t.STYLE="style",t.SUB="sub",t.SUMMARY="summary",t.SUP="sup",t.TABLE="table",t.TBODY="tbody",t.TEMPLATE="template",t.TEXTAREA="textarea",t.TFOOT="tfoot",t.TD="td",t.TH="th",t.THEAD="thead",t.TITLE="title",t.TR="tr",t.TRACK="track",t.TT="tt",t.U="u",t.UL="ul",t.SVG="svg",t.VAR="var",t.WBR="wbr",t.XMP="xmp"})(L||(L={}));var p;(function(t){t[t.UNKNOWN=0]="UNKNOWN",t[t.A=1]="A",t[t.ADDRESS=2]="ADDRESS",t[t.ANNOTATION_XML=3]="ANNOTATION_XML",t[t.APPLET=4]="APPLET",t[t.AREA=5]="AREA",t[t.ARTICLE=6]="ARTICLE",t[t.ASIDE=7]="ASIDE",t[t.B=8]="B",t[t.BASE=9]="BASE",t[t.BASEFONT=10]="BASEFONT",t[t.BGSOUND=11]="BGSOUND",t[t.BIG=12]="BIG",t[t.BLOCKQUOTE=13]="BLOCKQUOTE",t[t.BODY=14]="BODY",t[t.BR=15]="BR",t[t.BUTTON=16]="BUTTON",t[t.CAPTION=17]="CAPTION",t[t.CENTER=18]="CENTER",t[t.CODE=19]="CODE",t[t.COL=20]="COL",t[t.COLGROUP=21]="COLGROUP",t[t.DD=22]="DD",t[t.DESC=23]="DESC",t[t.DETAILS=24]="DETAILS",t[t.DIALOG=25]="DIALOG",t[t.DIR=26]="DIR",t[t.DIV=27]="DIV",t[t.DL=28]="DL",t[t.DT=29]="DT",t[t.EM=30]="EM",t[t.EMBED=31]="EMBED",t[t.FIELDSET=32]="FIELDSET",t[t.FIGCAPTION=33]="FIGCAPTION",t[t.FIGURE=34]="FIGURE",t[t.FONT=35]="FONT",t[t.FOOTER=36]="FOOTER",t[t.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",t[t.FORM=38]="FORM",t[t.FRAME=39]="FRAME",t[t.FRAMESET=40]="FRAMESET",t[t.H1=41]="H1",t[t.H2=42]="H2",t[t.H3=43]="H3",t[t.H4=44]="H4",t[t.H5=45]="H5",t[t.H6=46]="H6",t[t.HEAD=47]="HEAD",t[t.HEADER=48]="HEADER",t[t.HGROUP=49]="HGROUP",t[t.HR=50]="HR",t[t.HTML=51]="HTML",t[t.I=52]="I",t[t.IMG=53]="IMG",t[t.IMAGE=54]="IMAGE",t[t.INPUT=55]="INPUT",t[t.IFRAME=56]="IFRAME",t[t.KEYGEN=57]="KEYGEN",t[t.LABEL=58]="LABEL",t[t.LI=59]="LI",t[t.LINK=60]="LINK",t[t.LISTING=61]="LISTING",t[t.MAIN=62]="MAIN",t[t.MALIGNMARK=63]="MALIGNMARK",t[t.MARQUEE=64]="MARQUEE",t[t.MATH=65]="MATH",t[t.MENU=66]="MENU",t[t.META=67]="META",t[t.MGLYPH=68]="MGLYPH",t[t.MI=69]="MI",t[t.MO=70]="MO",t[t.MN=71]="MN",t[t.MS=72]="MS",t[t.MTEXT=73]="MTEXT",t[t.NAV=74]="NAV",t[t.NOBR=75]="NOBR",t[t.NOFRAMES=76]="NOFRAMES",t[t.NOEMBED=77]="NOEMBED",t[t.NOSCRIPT=78]="NOSCRIPT",t[t.OBJECT=79]="OBJECT",t[t.OL=80]="OL",t[t.OPTGROUP=81]="OPTGROUP",t[t.OPTION=82]="OPTION",t[t.P=83]="P",t[t.PARAM=84]="PARAM",t[t.PLAINTEXT=85]="PLAINTEXT",t[t.PRE=86]="PRE",t[t.RB=87]="RB",t[t.RP=88]="RP",t[t.RT=89]="RT",t[t.RTC=90]="RTC",t[t.RUBY=91]="RUBY",t[t.S=92]="S",t[t.SCRIPT=93]="SCRIPT",t[t.SEARCH=94]="SEARCH",t[t.SECTION=95]="SECTION",t[t.SELECT=96]="SELECT",t[t.SOURCE=97]="SOURCE",t[t.SMALL=98]="SMALL",t[t.SPAN=99]="SPAN",t[t.STRIKE=100]="STRIKE",t[t.STRONG=101]="STRONG",t[t.STYLE=102]="STYLE",t[t.SUB=103]="SUB",t[t.SUMMARY=104]="SUMMARY",t[t.SUP=105]="SUP",t[t.TABLE=106]="TABLE",t[t.TBODY=107]="TBODY",t[t.TEMPLATE=108]="TEMPLATE",t[t.TEXTAREA=109]="TEXTAREA",t[t.TFOOT=110]="TFOOT",t[t.TD=111]="TD",t[t.TH=112]="TH",t[t.THEAD=113]="THEAD",t[t.TITLE=114]="TITLE",t[t.TR=115]="TR",t[t.TRACK=116]="TRACK",t[t.TT=117]="TT",t[t.U=118]="U",t[t.UL=119]="UL",t[t.SVG=120]="SVG",t[t.VAR=121]="VAR",t[t.WBR=122]="WBR",t[t.XMP=123]="XMP"})(p||(p={}));var hM=new Map([[L.A,p.A],[L.ADDRESS,p.ADDRESS],[L.ANNOTATION_XML,p.ANNOTATION_XML],[L.APPLET,p.APPLET],[L.AREA,p.AREA],[L.ARTICLE,p.ARTICLE],[L.ASIDE,p.ASIDE],[L.B,p.B],[L.BASE,p.BASE],[L.BASEFONT,p.BASEFONT],[L.BGSOUND,p.BGSOUND],[L.BIG,p.BIG],[L.BLOCKQUOTE,p.BLOCKQUOTE],[L.BODY,p.BODY],[L.BR,p.BR],[L.BUTTON,p.BUTTON],[L.CAPTION,p.CAPTION],[L.CENTER,p.CENTER],[L.CODE,p.CODE],[L.COL,p.COL],[L.COLGROUP,p.COLGROUP],[L.DD,p.DD],[L.DESC,p.DESC],[L.DETAILS,p.DETAILS],[L.DIALOG,p.DIALOG],[L.DIR,p.DIR],[L.DIV,p.DIV],[L.DL,p.DL],[L.DT,p.DT],[L.EM,p.EM],[L.EMBED,p.EMBED],[L.FIELDSET,p.FIELDSET],[L.FIGCAPTION,p.FIGCAPTION],[L.FIGURE,p.FIGURE],[L.FONT,p.FONT],[L.FOOTER,p.FOOTER],[L.FOREIGN_OBJECT,p.FOREIGN_OBJECT],[L.FORM,p.FORM],[L.FRAME,p.FRAME],[L.FRAMESET,p.FRAMESET],[L.H1,p.H1],[L.H2,p.H2],[L.H3,p.H3],[L.H4,p.H4],[L.H5,p.H5],[L.H6,p.H6],[L.HEAD,p.HEAD],[L.HEADER,p.HEADER],[L.HGROUP,p.HGROUP],[L.HR,p.HR],[L.HTML,p.HTML],[L.I,p.I],[L.IMG,p.IMG],[L.IMAGE,p.IMAGE],[L.INPUT,p.INPUT],[L.IFRAME,p.IFRAME],[L.KEYGEN,p.KEYGEN],[L.LABEL,p.LABEL],[L.LI,p.LI],[L.LINK,p.LINK],[L.LISTING,p.LISTING],[L.MAIN,p.MAIN],[L.MALIGNMARK,p.MALIGNMARK],[L.MARQUEE,p.MARQUEE],[L.MATH,p.MATH],[L.MENU,p.MENU],[L.META,p.META],[L.MGLYPH,p.MGLYPH],[L.MI,p.MI],[L.MO,p.MO],[L.MN,p.MN],[L.MS,p.MS],[L.MTEXT,p.MTEXT],[L.NAV,p.NAV],[L.NOBR,p.NOBR],[L.NOFRAMES,p.NOFRAMES],[L.NOEMBED,p.NOEMBED],[L.NOSCRIPT,p.NOSCRIPT],[L.OBJECT,p.OBJECT],[L.OL,p.OL],[L.OPTGROUP,p.OPTGROUP],[L.OPTION,p.OPTION],[L.P,p.P],[L.PARAM,p.PARAM],[L.PLAINTEXT,p.PLAINTEXT],[L.PRE,p.PRE],[L.RB,p.RB],[L.RP,p.RP],[L.RT,p.RT],[L.RTC,p.RTC],[L.RUBY,p.RUBY],[L.S,p.S],[L.SCRIPT,p.SCRIPT],[L.SEARCH,p.SEARCH],[L.SECTION,p.SECTION],[L.SELECT,p.SELECT],[L.SOURCE,p.SOURCE],[L.SMALL,p.SMALL],[L.SPAN,p.SPAN],[L.STRIKE,p.STRIKE],[L.STRONG,p.STRONG],[L.STYLE,p.STYLE],[L.SUB,p.SUB],[L.SUMMARY,p.SUMMARY],[L.SUP,p.SUP],[L.TABLE,p.TABLE],[L.TBODY,p.TBODY],[L.TEMPLATE,p.TEMPLATE],[L.TEXTAREA,p.TEXTAREA],[L.TFOOT,p.TFOOT],[L.TD,p.TD],[L.TH,p.TH],[L.THEAD,p.THEAD],[L.TITLE,p.TITLE],[L.TR,p.TR],[L.TRACK,p.TRACK],[L.TT,p.TT],[L.U,p.U],[L.UL,p.UL],[L.SVG,p.SVG],[L.VAR,p.VAR],[L.WBR,p.WBR],[L.XMP,p.XMP]]);function Di(t){var e;return(e=hM.get(t))!==null&&e!==void 0?e:p.UNKNOWN}var q=p,pE={[Q.HTML]:new Set([q.ADDRESS,q.APPLET,q.AREA,q.ARTICLE,q.ASIDE,q.BASE,q.BASEFONT,q.BGSOUND,q.BLOCKQUOTE,q.BODY,q.BR,q.BUTTON,q.CAPTION,q.CENTER,q.COL,q.COLGROUP,q.DD,q.DETAILS,q.DIR,q.DIV,q.DL,q.DT,q.EMBED,q.FIELDSET,q.FIGCAPTION,q.FIGURE,q.FOOTER,q.FORM,q.FRAME,q.FRAMESET,q.H1,q.H2,q.H3,q.H4,q.H5,q.H6,q.HEAD,q.HEADER,q.HGROUP,q.HR,q.HTML,q.IFRAME,q.IMG,q.INPUT,q.LI,q.LINK,q.LISTING,q.MAIN,q.MARQUEE,q.MENU,q.META,q.NAV,q.NOEMBED,q.NOFRAMES,q.NOSCRIPT,q.OBJECT,q.OL,q.P,q.PARAM,q.PLAINTEXT,q.PRE,q.SCRIPT,q.SECTION,q.SELECT,q.SOURCE,q.STYLE,q.SUMMARY,q.TABLE,q.TBODY,q.TD,q.TEMPLATE,q.TEXTAREA,q.TFOOT,q.TH,q.THEAD,q.TITLE,q.TR,q.TRACK,q.UL,q.WBR,q.XMP]),[Q.MATHML]:new Set([q.MI,q.MO,q.MN,q.MS,q.MTEXT,q.ANNOTATION_XML]),[Q.SVG]:new Set([q.TITLE,q.FOREIGN_OBJECT,q.DESC]),[Q.XLINK]:new Set,[Q.XML]:new Set,[Q.XMLNS]:new Set},ra=new Set([q.H1,q.H2,q.H3,q.H4,q.H5,q.H6]),wJ=new Set([L.STYLE,L.SCRIPT,L.XMP,L.IFRAME,L.NOEMBED,L.NOFRAMES,L.PLAINTEXT]);var w;(function(t){t[t.DATA=0]="DATA",t[t.RCDATA=1]="RCDATA",t[t.RAWTEXT=2]="RAWTEXT",t[t.SCRIPT_DATA=3]="SCRIPT_DATA",t[t.PLAINTEXT=4]="PLAINTEXT",t[t.TAG_OPEN=5]="TAG_OPEN",t[t.END_TAG_OPEN=6]="END_TAG_OPEN",t[t.TAG_NAME=7]="TAG_NAME",t[t.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",t[t.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",t[t.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",t[t.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",t[t.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",t[t.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",t[t.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",t[t.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",t[t.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",t[t.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",t[t.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",t[t.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",t[t.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",t[t.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",t[t.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",t[t.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",t[t.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",t[t.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",t[t.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",t[t.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",t[t.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",t[t.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",t[t.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",t[t.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",t[t.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",t[t.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",t[t.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",t[t.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",t[t.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",t[t.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",t[t.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",t[t.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",t[t.BOGUS_COMMENT=40]="BOGUS_COMMENT",t[t.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",t[t.COMMENT_START=42]="COMMENT_START",t[t.COMMENT_START_DASH=43]="COMMENT_START_DASH",t[t.COMMENT=44]="COMMENT",t[t.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",t[t.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",t[t.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",t[t.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",t[t.COMMENT_END_DASH=49]="COMMENT_END_DASH",t[t.COMMENT_END=50]="COMMENT_END",t[t.COMMENT_END_BANG=51]="COMMENT_END_BANG",t[t.DOCTYPE=52]="DOCTYPE",t[t.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",t[t.DOCTYPE_NAME=54]="DOCTYPE_NAME",t[t.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",t[t.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",t[t.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",t[t.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",t[t.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",t[t.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",t[t.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",t[t.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",t[t.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",t[t.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",t[t.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",t[t.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",t[t.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",t[t.CDATA_SECTION=68]="CDATA_SECTION",t[t.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",t[t.CDATA_SECTION_END=70]="CDATA_SECTION_END",t[t.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",t[t.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(w||(w={}));var Nt={DATA:w.DATA,RCDATA:w.RCDATA,RAWTEXT:w.RAWTEXT,SCRIPT_DATA:w.SCRIPT_DATA,PLAINTEXT:w.PLAINTEXT,CDATA_SECTION:w.CDATA_SECTION};function pM(t){return t>=C.DIGIT_0&&t<=C.DIGIT_9}function ia(t){return t>=C.LATIN_CAPITAL_A&&t<=C.LATIN_CAPITAL_Z}function mM(t){return t>=C.LATIN_SMALL_A&&t<=C.LATIN_SMALL_Z}function Ur(t){return mM(t)||ia(t)}function mE(t){return Ur(t)||pM(t)}function _u(t){return t+32}function bE(t){return t===C.SPACE||t===C.LINE_FEED||t===C.TABULATION||t===C.FORM_FEED}function gE(t){return bE(t)||t===C.SOLIDUS||t===C.GREATER_THAN_SIGN}function gM(t){return t===C.NULL?U.nullCharacterReference:t>1114111?U.characterReferenceOutsideUnicodeRange:Eu(t)?U.surrogateCharacterReference:yu(t)?U.noncharacterCharacterReference:Iu(t)||t===C.CARRIAGE_RETURN?U.controlCharacterReference:null}var oa=class{constructor(e,n){this.options=e,this.handler=n,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=w.DATA,this.returnState=w.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new Cu(n),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new wu(Gh,(r,i)=>{this.preprocessor.pos=this.entityStartPos+i-1,this._flushCodePointConsumedAsCharacterReference(r)},n.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(U.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:r=>{this._err(U.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+r)},validateNumericCharacterReference:r=>{let i=gM(r);i&&this._err(i,1)}}:void 0)}_err(e,n=0){var r,i;(i=(r=this.handler).onParseError)===null||i===void 0||i.call(r,this.preprocessor.getError(e,n))}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-e,startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;let e=this._consume();this._ensureHibernation()||this._callState(e)}this.inLoop=!1}}pause(){this.paused=!0}resume(e){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||e?.())}write(e,n,r){this.active=!0,this.preprocessor.write(e,n),this._runParsingLoop(),this.paused||r?.()}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(e){this.consumedAfterSnapshot+=e;for(let n=0;n0&&this._err(U.endTagWithAttributes),e.selfClosing&&this._err(U.endTagWithTrailingSolidus),this.handler.onEndTag(e)),this.preprocessor.dropParsedChunk()}emitCurrentComment(e){this.prepareToken(e),this.handler.onComment(e),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(e){this.prepareToken(e),this.handler.onDoctype(e),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(e){if(this.currentCharacterToken){switch(e&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=e.startLine,this.currentCharacterToken.location.endCol=e.startCol,this.currentCharacterToken.location.endOffset=e.startOffset),this.currentCharacterToken.type){case Ee.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case Ee.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case Ee.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){let e=this.getCurrentLocation(0);e&&(e.endLine=e.startLine,e.endCol=e.startCol,e.endOffset=e.startOffset),this._emitCurrentCharacterToken(e),this.handler.onEof({type:Ee.EOF,location:e}),this.active=!1}_appendCharToCurrentCharacterToken(e,n){if(this.currentCharacterToken)if(this.currentCharacterToken.type===e){this.currentCharacterToken.chars+=n;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(e,n)}_emitCodePoint(e){let n=bE(e)?Ee.WHITESPACE_CHARACTER:e===C.NULL?Ee.NULL_CHARACTER:Ee.CHARACTER;this._appendCharToCurrentCharacterToken(n,e<65536?String.fromCharCode(e):String.fromCodePoint(e))}_emitChars(e){this._appendCharToCurrentCharacterToken(Ee.CHARACTER,e)}_startCharacterReference(){this.returnState=this.state,this.state=w.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Qn.Attribute:Qn.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===w.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===w.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===w.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(e){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e)}_callState(e){switch(this.state){case w.DATA:{this._stateData(e);break}case w.RCDATA:{this._stateRcdata(e);break}case w.RAWTEXT:{this._stateRawtext(e);break}case w.SCRIPT_DATA:{this._stateScriptData(e);break}case w.PLAINTEXT:{this._statePlaintext(e);break}case w.TAG_OPEN:{this._stateTagOpen(e);break}case w.END_TAG_OPEN:{this._stateEndTagOpen(e);break}case w.TAG_NAME:{this._stateTagName(e);break}case w.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(e);break}case w.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(e);break}case w.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(e);break}case w.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(e);break}case w.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(e);break}case w.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(e);break}case w.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(e);break}case w.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(e);break}case w.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(e);break}case w.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(e);break}case w.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(e);break}case w.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(e);break}case w.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(e);break}case w.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(e);break}case w.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(e);break}case w.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(e);break}case w.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(e);break}case w.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(e);break}case w.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(e);break}case w.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(e);break}case w.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(e);break}case w.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(e);break}case w.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(e);break}case w.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(e);break}case w.ATTRIBUTE_NAME:{this._stateAttributeName(e);break}case w.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(e);break}case w.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(e);break}case w.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(e);break}case w.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(e);break}case w.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(e);break}case w.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(e);break}case w.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(e);break}case w.BOGUS_COMMENT:{this._stateBogusComment(e);break}case w.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(e);break}case w.COMMENT_START:{this._stateCommentStart(e);break}case w.COMMENT_START_DASH:{this._stateCommentStartDash(e);break}case w.COMMENT:{this._stateComment(e);break}case w.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(e);break}case w.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(e);break}case w.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(e);break}case w.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(e);break}case w.COMMENT_END_DASH:{this._stateCommentEndDash(e);break}case w.COMMENT_END:{this._stateCommentEnd(e);break}case w.COMMENT_END_BANG:{this._stateCommentEndBang(e);break}case w.DOCTYPE:{this._stateDoctype(e);break}case w.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(e);break}case w.DOCTYPE_NAME:{this._stateDoctypeName(e);break}case w.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(e);break}case w.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(e);break}case w.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(e);break}case w.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(e);break}case w.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(e);break}case w.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(e);break}case w.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break}case w.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(e);break}case w.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(e);break}case w.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(e);break}case w.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(e);break}case w.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(e);break}case w.BOGUS_DOCTYPE:{this._stateBogusDoctype(e);break}case w.CDATA_SECTION:{this._stateCdataSection(e);break}case w.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(e);break}case w.CDATA_SECTION_END:{this._stateCdataSectionEnd(e);break}case w.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case w.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(e);break}default:throw new Error("Unknown state")}}_stateData(e){switch(e){case C.LESS_THAN_SIGN:{this.state=w.TAG_OPEN;break}case C.AMPERSAND:{this._startCharacterReference();break}case C.NULL:{this._err(U.unexpectedNullCharacter),this._emitCodePoint(e);break}case C.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateRcdata(e){switch(e){case C.AMPERSAND:{this._startCharacterReference();break}case C.LESS_THAN_SIGN:{this.state=w.RCDATA_LESS_THAN_SIGN;break}case C.NULL:{this._err(U.unexpectedNullCharacter),this._emitChars(He);break}case C.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateRawtext(e){switch(e){case C.LESS_THAN_SIGN:{this.state=w.RAWTEXT_LESS_THAN_SIGN;break}case C.NULL:{this._err(U.unexpectedNullCharacter),this._emitChars(He);break}case C.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateScriptData(e){switch(e){case C.LESS_THAN_SIGN:{this.state=w.SCRIPT_DATA_LESS_THAN_SIGN;break}case C.NULL:{this._err(U.unexpectedNullCharacter),this._emitChars(He);break}case C.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_statePlaintext(e){switch(e){case C.NULL:{this._err(U.unexpectedNullCharacter),this._emitChars(He);break}case C.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateTagOpen(e){if(Ur(e))this._createStartTagToken(),this.state=w.TAG_NAME,this._stateTagName(e);else switch(e){case C.EXCLAMATION_MARK:{this.state=w.MARKUP_DECLARATION_OPEN;break}case C.SOLIDUS:{this.state=w.END_TAG_OPEN;break}case C.QUESTION_MARK:{this._err(U.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=w.BOGUS_COMMENT,this._stateBogusComment(e);break}case C.EOF:{this._err(U.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(U.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=w.DATA,this._stateData(e)}}_stateEndTagOpen(e){if(Ur(e))this._createEndTagToken(),this.state=w.TAG_NAME,this._stateTagName(e);else switch(e){case C.GREATER_THAN_SIGN:{this._err(U.missingEndTagName),this.state=w.DATA;break}case C.EOF:{this._err(U.eofBeforeTagName),this._emitChars("");break}case C.NULL:{this._err(U.unexpectedNullCharacter),this.state=w.SCRIPT_DATA_ESCAPED,this._emitChars(He);break}case C.EOF:{this._err(U.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=w.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedLessThanSign(e){e===C.SOLIDUS?this.state=w.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Ur(e)?(this._emitChars("<"),this.state=w.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars("<"),this.state=w.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagOpen(e){Ur(e)?(this.state=w.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(e)):(this._emitChars("");break}case C.NULL:{this._err(U.unexpectedNullCharacter),this.state=w.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(He);break}case C.EOF:{this._err(U.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=w.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedLessThanSign(e){e===C.SOLIDUS?(this.state=w.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=w.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){if(this.preprocessor.startsWith(Ft.SCRIPT,!1)&&gE(this.preprocessor.peek(Ft.SCRIPT.length))){this._emitCodePoint(e);for(let n=0;n0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!0)}replace(e,n){let r=this._indexOf(e);this.items[r]=n,r===this.stackTop&&(this.current=n)}insertAfter(e,n,r){let i=this._indexOf(e)+1;this.items.splice(i,0,n),this.tagIDs.splice(i,0,r),this.stackTop++,i===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,i===this.stackTop)}popUntilTagNamePopped(e){let n=this.stackTop+1;do n=this.tagIDs.lastIndexOf(e,n-1);while(n>0&&this.treeAdapter.getNamespaceURI(this.items[n])!==Q.HTML);this.shortenToLength(Math.max(n,0))}shortenToLength(e){for(;this.stackTop>=e;){let n=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(n,this.stackTop=0;r--)if(e.has(this.tagIDs[r])&&this.treeAdapter.getNamespaceURI(this.items[r])===n)return r;return-1}clearBackTo(e,n){let r=this._indexOfTagNames(e,n);this.shortenToLength(r+1)}clearBackToTableContext(){this.clearBackTo(yM,Q.HTML)}clearBackToTableBodyContext(){this.clearBackTo(IM,Q.HTML)}clearBackToTableRowContext(){this.clearBackTo(EM,Q.HTML)}remove(e){let n=this._indexOf(e);n>=0&&(n===this.stackTop?this.pop():(this.items.splice(n,1),this.tagIDs.splice(n,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===p.BODY?this.items[1]:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){let n=this._indexOf(e)-1;return n>=0?this.items[n]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===p.HTML}hasInDynamicScope(e,n){for(let r=this.stackTop;r>=0;r--){let i=this.tagIDs[r];switch(this.treeAdapter.getNamespaceURI(this.items[r])){case Q.HTML:{if(i===e)return!0;if(n.has(i))return!1;break}case Q.SVG:{if(IE.has(i))return!1;break}case Q.MATHML:{if(EE.has(i))return!1;break}}}return!0}hasInScope(e){return this.hasInDynamicScope(e,Su)}hasInListItemScope(e){return this.hasInDynamicScope(e,bM)}hasInButtonScope(e){return this.hasInDynamicScope(e,xM)}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){let n=this.tagIDs[e];switch(this.treeAdapter.getNamespaceURI(this.items[e])){case Q.HTML:{if(ra.has(n))return!0;if(Su.has(n))return!1;break}case Q.SVG:{if(IE.has(n))return!1;break}case Q.MATHML:{if(EE.has(n))return!1;break}}}return!0}hasInTableScope(e){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===Q.HTML)switch(this.tagIDs[n]){case e:return!0;case p.TABLE:case p.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--)if(this.treeAdapter.getNamespaceURI(this.items[e])===Q.HTML)switch(this.tagIDs[e]){case p.TBODY:case p.THEAD:case p.TFOOT:return!0;case p.TABLE:case p.HTML:return!1}return!0}hasInSelectScope(e){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===Q.HTML)switch(this.tagIDs[n]){case e:return!0;case p.OPTION:case p.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&yE.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&xE.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;this.currentTagId!==void 0&&this.currentTagId!==e&&xE.has(this.currentTagId);)this.pop()}};m();var _n;(function(t){t[t.Marker=0]="Marker",t[t.Element=1]="Element"})(_n||(_n={}));var CE={type:_n.Marker},ku=class{constructor(e){this.treeAdapter=e,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(e,n){let r=[],i=n.length,o=this.treeAdapter.getTagName(e),s=this.treeAdapter.getNamespaceURI(e);for(let a=0;a[s.name,s.value])),o=0;for(let s=0;si.get(c.name)===c.value)&&(o+=1,o>=3&&this.entries.splice(a.idx,1))}}insertMarker(){this.entries.unshift(CE)}pushElement(e,n){this._ensureNoahArkCondition(e),this.entries.unshift({type:_n.Element,element:e,token:n})}insertElementAfterBookmark(e,n){let r=this.entries.indexOf(this.bookmark);this.entries.splice(r,0,{type:_n.Element,element:e,token:n})}removeEntry(e){let n=this.entries.indexOf(e);n!==-1&&this.entries.splice(n,1)}clearToLastMarker(){let e=this.entries.indexOf(CE);e===-1?this.entries.length=0:this.entries.splice(0,e+1)}getElementEntryInScopeWithTagName(e){let n=this.entries.find(r=>r.type===_n.Marker||this.treeAdapter.getTagName(r.element)===e);return n&&n.type===_n.Element?n:null}getElementEntry(e){return this.entries.find(n=>n.type===_n.Element&&n.element===e)}};m();var Sn={createDocument(){return{nodeName:"#document",mode:Ut.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(t,e,n){return{nodeName:t,tagName:t,attrs:n,namespaceURI:e,childNodes:[],parentNode:null}},createCommentNode(t){return{nodeName:"#comment",data:t,parentNode:null}},createTextNode(t){return{nodeName:"#text",value:t,parentNode:null}},appendChild(t,e){t.childNodes.push(e),e.parentNode=t},insertBefore(t,e,n){let r=t.childNodes.indexOf(n);t.childNodes.splice(r,0,e),e.parentNode=t},setTemplateContent(t,e){t.content=e},getTemplateContent(t){return t.content},setDocumentType(t,e,n,r){let i=t.childNodes.find(o=>o.nodeName==="#documentType");if(i)i.name=e,i.publicId=n,i.systemId=r;else{let o={nodeName:"#documentType",name:e,publicId:n,systemId:r,parentNode:null};Sn.appendChild(t,o)}},setDocumentMode(t,e){t.mode=e},getDocumentMode(t){return t.mode},detachNode(t){if(t.parentNode){let e=t.parentNode.childNodes.indexOf(t);t.parentNode.childNodes.splice(e,1),t.parentNode=null}},insertText(t,e){if(t.childNodes.length>0){let n=t.childNodes[t.childNodes.length-1];if(Sn.isTextNode(n)){n.value+=e;return}}Sn.appendChild(t,Sn.createTextNode(e))},insertTextBefore(t,e,n){let r=t.childNodes[t.childNodes.indexOf(n)-1];r&&Sn.isTextNode(r)?r.value+=e:Sn.insertBefore(t,Sn.createTextNode(e),n)},adoptAttributes(t,e){let n=new Set(t.attrs.map(r=>r.name));for(let r=0;rt.startsWith(n))}function vE(t){return t.name===wE&&t.publicId===null&&(t.systemId===null||t.systemId===TM)}function kE(t){if(t.name!==wE)return Ut.QUIRKS;let{systemId:e}=t;if(e&&e.toLowerCase()===wM)return Ut.QUIRKS;let{publicId:n}=t;if(n!==null){if(n=n.toLowerCase(),SM.has(n))return Ut.QUIRKS;let r=e===null?_M:_E;if(TE(n,r))return Ut.QUIRKS;if(r=e===null?SE:vM,TE(n,r))return Ut.LIMITED_QUIRKS}return Ut.NO_QUIRKS}m();var NE={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},NM="definitionurl",RM="definitionURL",OM=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(t=>[t.toLowerCase(),t])),DM=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:Q.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:Q.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:Q.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:Q.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:Q.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:Q.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:Q.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:Q.XML}],["xml:space",{prefix:"xml",name:"space",namespace:Q.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:Q.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:Q.XMLNS}]]),BM=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(t=>[t.toLowerCase(),t])),MM=new Set([p.B,p.BIG,p.BLOCKQUOTE,p.BODY,p.BR,p.CENTER,p.CODE,p.DD,p.DIV,p.DL,p.DT,p.EM,p.EMBED,p.H1,p.H2,p.H3,p.H4,p.H5,p.H6,p.HEAD,p.HR,p.I,p.IMG,p.LI,p.LISTING,p.MENU,p.META,p.NOBR,p.OL,p.P,p.PRE,p.RUBY,p.S,p.SMALL,p.SPAN,p.STRONG,p.STRIKE,p.SUB,p.SUP,p.TABLE,p.TT,p.U,p.UL,p.VAR]);function RE(t){let e=t.tagID;return e===p.FONT&&t.attrs.some(({name:r})=>r===dr.COLOR||r===dr.SIZE||r===dr.FACE)||MM.has(e)}function Qh(t){for(let e=0;e0&&this._setContextModes(e,n)}onItemPop(e,n){var r,i;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(e,this.currentToken),(i=(r=this.treeAdapter).onItemPop)===null||i===void 0||i.call(r,e,this.openElements.current),n){let o,s;this.openElements.stackTop===0&&this.fragmentContext?(o=this.fragmentContext,s=this.fragmentContextID):{current:o,currentTagId:s}=this.openElements,this._setContextModes(o,s)}}_setContextModes(e,n){let r=e===this.document||e&&this.treeAdapter.getNamespaceURI(e)===Q.HTML;this.currentNotInHTML=!r,this.tokenizer.inForeignNode=!r&&e!==void 0&&n!==void 0&&!this._isIntegrationPoint(n,e)}_switchToTextParsing(e,n){this._insertElement(e,Q.HTML),this.tokenizer.state=n,this.originalInsertionMode=this.insertionMode,this.insertionMode=k.TEXT}switchToPlaintextParsing(){this.insertionMode=k.TEXT,this.originalInsertionMode=k.IN_BODY,this.tokenizer.state=Nt.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;for(;e;){if(this.treeAdapter.getTagName(e)===L.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==Q.HTML))switch(this.fragmentContextID){case p.TITLE:case p.TEXTAREA:{this.tokenizer.state=Nt.RCDATA;break}case p.STYLE:case p.XMP:case p.IFRAME:case p.NOEMBED:case p.NOFRAMES:case p.NOSCRIPT:{this.tokenizer.state=Nt.RAWTEXT;break}case p.SCRIPT:{this.tokenizer.state=Nt.SCRIPT_DATA;break}case p.PLAINTEXT:{this.tokenizer.state=Nt.PLAINTEXT;break}default:}}_setDocumentType(e){let n=e.name||"",r=e.publicId||"",i=e.systemId||"";if(this.treeAdapter.setDocumentType(this.document,n,r,i),e.location){let s=this.treeAdapter.getChildNodes(this.document).find(a=>this.treeAdapter.isDocumentTypeNode(a));s&&this.treeAdapter.setNodeSourceCodeLocation(s,e.location)}}_attachElementToTree(e,n){if(this.options.sourceCodeLocationInfo){let r=n&&{...n,startTag:n};this.treeAdapter.setNodeSourceCodeLocation(e,r)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{let r=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(r??this.document,e)}}_appendElement(e,n){let r=this.treeAdapter.createElement(e.tagName,n,e.attrs);this._attachElementToTree(r,e.location)}_insertElement(e,n){let r=this.treeAdapter.createElement(e.tagName,n,e.attrs);this._attachElementToTree(r,e.location),this.openElements.push(r,e.tagID)}_insertFakeElement(e,n){let r=this.treeAdapter.createElement(e,Q.HTML,[]);this._attachElementToTree(r,null),this.openElements.push(r,n)}_insertTemplate(e){let n=this.treeAdapter.createElement(e.tagName,Q.HTML,e.attrs),r=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(n,r),this._attachElementToTree(n,e.location),this.openElements.push(n,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(r,null)}_insertFakeRootElement(){let e=this.treeAdapter.createElement(L.HTML,Q.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null),this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e,p.HTML)}_appendCommentNode(e,n){let r=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(n,r),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(r,e.location)}_insertCharacters(e){let n,r;if(this._shouldFosterParentOnInsertion()?({parent:n,beforeElement:r}=this._findFosterParentingLocation(),r?this.treeAdapter.insertTextBefore(n,e.chars,r):this.treeAdapter.insertText(n,e.chars)):(n=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(n,e.chars)),!e.location)return;let i=this.treeAdapter.getChildNodes(n),o=r?i.lastIndexOf(r):i.length,s=i[o-1];if(this.treeAdapter.getNodeSourceCodeLocation(s)){let{endLine:c,endCol:u,endOffset:l}=e.location;this.treeAdapter.updateNodeSourceCodeLocation(s,{endLine:c,endCol:u,endOffset:l})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(s,e.location)}_adoptNodes(e,n){for(let r=this.treeAdapter.getFirstChild(e);r;r=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(r),this.treeAdapter.appendChild(n,r)}_setEndLocation(e,n){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&n.location){let r=n.location,i=this.treeAdapter.getTagName(e),o=n.type===Ee.END_TAG&&i===n.tagName?{endTag:{...r},endLine:r.endLine,endCol:r.endCol,endOffset:r.endOffset}:{endLine:r.startLine,endCol:r.startCol,endOffset:r.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(e,o)}}shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1;let n,r;return this.openElements.stackTop===0&&this.fragmentContext?(n=this.fragmentContext,r=this.fragmentContextID):{current:n,currentTagId:r}=this.openElements,e.tagID===p.SVG&&this.treeAdapter.getTagName(n)===L.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(n)===Q.MATHML?!1:this.tokenizer.inForeignNode||(e.tagID===p.MGLYPH||e.tagID===p.MALIGNMARK)&&r!==void 0&&!this._isIntegrationPoint(r,n,Q.HTML)}_processToken(e){switch(e.type){case Ee.CHARACTER:{this.onCharacter(e);break}case Ee.NULL_CHARACTER:{this.onNullCharacter(e);break}case Ee.COMMENT:{this.onComment(e);break}case Ee.DOCTYPE:{this.onDoctype(e);break}case Ee.START_TAG:{this._processStartTag(e);break}case Ee.END_TAG:{this.onEndTag(e);break}case Ee.EOF:{this.onEof(e);break}case Ee.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(e);break}}}_isIntegrationPoint(e,n,r){let i=this.treeAdapter.getNamespaceURI(n),o=this.treeAdapter.getAttrList(n);return DE(e,i,o,r)}_reconstructActiveFormattingElements(){let e=this.activeFormattingElements.entries.length;if(e){let n=this.activeFormattingElements.entries.findIndex(i=>i.type===_n.Marker||this.openElements.contains(i.element)),r=n===-1?e-1:n-1;for(let i=r;i>=0;i--){let o=this.activeFormattingElements.entries[i];this._insertElement(o.token,this.treeAdapter.getNamespaceURI(o.element)),o.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=k.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(p.P),this.openElements.popUntilTagNamePopped(p.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop;e>=0;e--)switch(e===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){case p.TR:{this.insertionMode=k.IN_ROW;return}case p.TBODY:case p.THEAD:case p.TFOOT:{this.insertionMode=k.IN_TABLE_BODY;return}case p.CAPTION:{this.insertionMode=k.IN_CAPTION;return}case p.COLGROUP:{this.insertionMode=k.IN_COLUMN_GROUP;return}case p.TABLE:{this.insertionMode=k.IN_TABLE;return}case p.BODY:{this.insertionMode=k.IN_BODY;return}case p.FRAMESET:{this.insertionMode=k.IN_FRAMESET;return}case p.SELECT:{this._resetInsertionModeForSelect(e);return}case p.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case p.HTML:{this.insertionMode=this.headElement?k.AFTER_HEAD:k.BEFORE_HEAD;return}case p.TD:case p.TH:{if(e>0){this.insertionMode=k.IN_CELL;return}break}case p.HEAD:{if(e>0){this.insertionMode=k.IN_HEAD;return}break}}this.insertionMode=k.IN_BODY}_resetInsertionModeForSelect(e){if(e>0)for(let n=e-1;n>0;n--){let r=this.openElements.tagIDs[n];if(r===p.TEMPLATE)break;if(r===p.TABLE){this.insertionMode=k.IN_SELECT_IN_TABLE;return}}this.insertionMode=k.IN_SELECT}_isElementCausesFosterParenting(e){return FE.has(e)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let e=this.openElements.stackTop;e>=0;e--){let n=this.openElements.items[e];switch(this.openElements.tagIDs[e]){case p.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(n)===Q.HTML)return{parent:this.treeAdapter.getTemplateContent(n),beforeElement:null};break}case p.TABLE:{let r=this.treeAdapter.getParentNode(n);return r?{parent:r,beforeElement:n}:{parent:this.openElements.items[e-1],beforeElement:null}}default:}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(e){let n=this._findFosterParentingLocation();n.beforeElement?this.treeAdapter.insertBefore(n.parent,e,n.beforeElement):this.treeAdapter.appendChild(n.parent,e)}_isSpecialElement(e,n){let r=this.treeAdapter.getNamespaceURI(e);return pE[r].has(n)}onCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){g3(this,e);return}switch(this.insertionMode){case k.INITIAL:{sa(this,e);break}case k.BEFORE_HTML:{ca(this,e);break}case k.BEFORE_HEAD:{ua(this,e);break}case k.IN_HEAD:{la(this,e);break}case k.IN_HEAD_NO_SCRIPT:{da(this,e);break}case k.AFTER_HEAD:{fa(this,e);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:{HE(this,e);break}case k.TEXT:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{this._insertCharacters(e);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{jh(this,e);break}case k.IN_TABLE_TEXT:{jE(this,e);break}case k.IN_COLUMN_GROUP:{Ou(this,e);break}case k.AFTER_BODY:{Du(this,e);break}case k.AFTER_AFTER_BODY:{Ru(this,e);break}default:}}onNullCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){m3(this,e);return}switch(this.insertionMode){case k.INITIAL:{sa(this,e);break}case k.BEFORE_HTML:{ca(this,e);break}case k.BEFORE_HEAD:{ua(this,e);break}case k.IN_HEAD:{la(this,e);break}case k.IN_HEAD_NO_SCRIPT:{da(this,e);break}case k.AFTER_HEAD:{fa(this,e);break}case k.TEXT:{this._insertCharacters(e);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{jh(this,e);break}case k.IN_COLUMN_GROUP:{Ou(this,e);break}case k.AFTER_BODY:{Du(this,e);break}case k.AFTER_AFTER_BODY:{Ru(this,e);break}default:}}onComment(e){if(this.skipNextNewLine=!1,this.currentNotInHTML){qh(this,e);return}switch(this.insertionMode){case k.INITIAL:case k.BEFORE_HTML:case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_TEMPLATE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{qh(this,e);break}case k.IN_TABLE_TEXT:{aa(this,e);break}case k.AFTER_BODY:{VM(this,e);break}case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{$M(this,e);break}default:}}onDoctype(e){switch(this.skipNextNewLine=!1,this.insertionMode){case k.INITIAL:{JM(this,e);break}case k.BEFORE_HEAD:case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:{this._err(e,U.misplacedDoctype);break}case k.IN_TABLE_TEXT:{aa(this,e);break}default:}}onStartTag(e){this.skipNextNewLine=!1,this.currentToken=e,this._processStartTag(e),e.selfClosing&&!e.ackSelfClosing&&this._err(e,U.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(e){this.shouldProcessStartTagTokenInForeignContent(e)?b3(this,e):this._startTagOutsideForeignContent(e)}_startTagOutsideForeignContent(e){switch(this.insertionMode){case k.INITIAL:{sa(this,e);break}case k.BEFORE_HTML:{XM(this,e);break}case k.BEFORE_HEAD:{ZM(this,e);break}case k.IN_HEAD:{vn(this,e);break}case k.IN_HEAD_NO_SCRIPT:{nP(this,e);break}case k.AFTER_HEAD:{iP(this,e);break}case k.IN_BODY:{Rt(this,e);break}case k.IN_TABLE:{Fo(this,e);break}case k.IN_TABLE_TEXT:{aa(this,e);break}case k.IN_CAPTION:{e3(this,e);break}case k.IN_COLUMN_GROUP:{Xh(this,e);break}case k.IN_TABLE_BODY:{Pu(this,e);break}case k.IN_ROW:{Lu(this,e);break}case k.IN_CELL:{r3(this,e);break}case k.IN_SELECT:{$E(this,e);break}case k.IN_SELECT_IN_TABLE:{o3(this,e);break}case k.IN_TEMPLATE:{a3(this,e);break}case k.AFTER_BODY:{u3(this,e);break}case k.IN_FRAMESET:{l3(this,e);break}case k.AFTER_FRAMESET:{f3(this,e);break}case k.AFTER_AFTER_BODY:{A3(this,e);break}case k.AFTER_AFTER_FRAMESET:{p3(this,e);break}default:}}onEndTag(e){this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?x3(this,e):this._endTagOutsideForeignContent(e)}_endTagOutsideForeignContent(e){switch(this.insertionMode){case k.INITIAL:{sa(this,e);break}case k.BEFORE_HTML:{zM(this,e);break}case k.BEFORE_HEAD:{eP(this,e);break}case k.IN_HEAD:{tP(this,e);break}case k.IN_HEAD_NO_SCRIPT:{rP(this,e);break}case k.AFTER_HEAD:{oP(this,e);break}case k.IN_BODY:{Mu(this,e);break}case k.TEXT:{QP(this,e);break}case k.IN_TABLE:{Aa(this,e);break}case k.IN_TABLE_TEXT:{aa(this,e);break}case k.IN_CAPTION:{t3(this,e);break}case k.IN_COLUMN_GROUP:{n3(this,e);break}case k.IN_TABLE_BODY:{Vh(this,e);break}case k.IN_ROW:{VE(this,e);break}case k.IN_CELL:{i3(this,e);break}case k.IN_SELECT:{JE(this,e);break}case k.IN_SELECT_IN_TABLE:{s3(this,e);break}case k.IN_TEMPLATE:{c3(this,e);break}case k.AFTER_BODY:{zE(this,e);break}case k.IN_FRAMESET:{d3(this,e);break}case k.AFTER_FRAMESET:{h3(this,e);break}case k.AFTER_AFTER_BODY:{Ru(this,e);break}default:}}onEof(e){switch(this.insertionMode){case k.INITIAL:{sa(this,e);break}case k.BEFORE_HTML:{ca(this,e);break}case k.BEFORE_HEAD:{ua(this,e);break}case k.IN_HEAD:{la(this,e);break}case k.IN_HEAD_NO_SCRIPT:{da(this,e);break}case k.AFTER_HEAD:{fa(this,e);break}case k.IN_BODY:case k.IN_TABLE:case k.IN_CAPTION:case k.IN_COLUMN_GROUP:case k.IN_TABLE_BODY:case k.IN_ROW:case k.IN_CELL:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:{QE(this,e);break}case k.TEXT:{WP(this,e);break}case k.IN_TABLE_TEXT:{aa(this,e);break}case k.IN_TEMPLATE:{XE(this,e);break}case k.AFTER_BODY:case k.IN_FRAMESET:case k.AFTER_FRAMESET:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{Jh(this,e);break}default:}}onWhitespaceCharacter(e){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,e.chars.charCodeAt(0)===C.LINE_FEED)){if(e.chars.length===1)return;e.chars=e.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(e);return}switch(this.insertionMode){case k.IN_HEAD:case k.IN_HEAD_NO_SCRIPT:case k.AFTER_HEAD:case k.TEXT:case k.IN_COLUMN_GROUP:case k.IN_SELECT:case k.IN_SELECT_IN_TABLE:case k.IN_FRAMESET:case k.AFTER_FRAMESET:{this._insertCharacters(e);break}case k.IN_BODY:case k.IN_CAPTION:case k.IN_CELL:case k.IN_TEMPLATE:case k.AFTER_BODY:case k.AFTER_AFTER_BODY:case k.AFTER_AFTER_FRAMESET:{UE(this,e);break}case k.IN_TABLE:case k.IN_TABLE_BODY:case k.IN_ROW:{jh(this,e);break}case k.IN_TABLE_TEXT:{WE(this,e);break}default:}}};function GM(t,e){let n=t.activeFormattingElements.getElementEntryInScopeWithTagName(e.tagName);return n?t.openElements.contains(n.element)?t.openElements.hasInScope(e.tagID)||(n=null):(t.activeFormattingElements.removeEntry(n),n=null):KE(t,e),n}function KM(t,e){let n=null,r=t.openElements.stackTop;for(;r>=0;r--){let i=t.openElements.items[r];if(i===e.element)break;t._isSpecialElement(i,t.openElements.tagIDs[r])&&(n=i)}return n||(t.openElements.shortenToLength(Math.max(r,0)),t.activeFormattingElements.removeEntry(e)),n}function QM(t,e,n){let r=e,i=t.openElements.getCommonAncestor(e);for(let o=0,s=i;s!==n;o++,s=i){i=t.openElements.getCommonAncestor(s);let a=t.activeFormattingElements.getElementEntry(s),c=a&&o>=HM;!a||c?(c&&t.activeFormattingElements.removeEntry(a),t.openElements.remove(s)):(s=WM(t,a),r===e&&(t.activeFormattingElements.bookmark=a),t.treeAdapter.detachNode(r),t.treeAdapter.appendChild(s,r),r=s)}return r}function WM(t,e){let n=t.treeAdapter.getNamespaceURI(e.element),r=t.treeAdapter.createElement(e.token.tagName,n,e.token.attrs);return t.openElements.replace(e.element,r),e.element=r,r}function jM(t,e,n){let r=t.treeAdapter.getTagName(e),i=Di(r);if(t._isElementCausesFosterParenting(i))t._fosterParentElement(n);else{let o=t.treeAdapter.getNamespaceURI(e);i===p.TEMPLATE&&o===Q.HTML&&(e=t.treeAdapter.getTemplateContent(e)),t.treeAdapter.appendChild(e,n)}}function qM(t,e,n){let r=t.treeAdapter.getNamespaceURI(n.element),{token:i}=n,o=t.treeAdapter.createElement(i.tagName,r,i.attrs);t._adoptNodes(e,o),t.treeAdapter.appendChild(e,o),t.activeFormattingElements.insertElementAfterBookmark(o,i),t.activeFormattingElements.removeEntry(n),t.openElements.remove(n.element),t.openElements.insertAfter(e,o,i.tagID)}function $h(t,e){for(let n=0;n=n;r--)t._setEndLocation(t.openElements.items[r],e);if(!t.fragmentContext&&t.openElements.stackTop>=0){let r=t.openElements.items[0],i=t.treeAdapter.getNodeSourceCodeLocation(r);if(i&&!i.endTag&&(t._setEndLocation(r,e),t.openElements.stackTop>=1)){let o=t.openElements.items[1],s=t.treeAdapter.getNodeSourceCodeLocation(o);s&&!s.endTag&&t._setEndLocation(o,e)}}}}function JM(t,e){t._setDocumentType(e);let n=e.forceQuirks?Ut.QUIRKS:kE(e);vE(e)||t._err(e,U.nonConformingDoctype),t.treeAdapter.setDocumentMode(t.document,n),t.insertionMode=k.BEFORE_HTML}function sa(t,e){t._err(e,U.missingDoctype,!0),t.treeAdapter.setDocumentMode(t.document,Ut.QUIRKS),t.insertionMode=k.BEFORE_HTML,t._processToken(e)}function XM(t,e){e.tagID===p.HTML?(t._insertElement(e,Q.HTML),t.insertionMode=k.BEFORE_HEAD):ca(t,e)}function zM(t,e){let n=e.tagID;(n===p.HTML||n===p.HEAD||n===p.BODY||n===p.BR)&&ca(t,e)}function ca(t,e){t._insertFakeRootElement(),t.insertionMode=k.BEFORE_HEAD,t._processToken(e)}function ZM(t,e){switch(e.tagID){case p.HTML:{Rt(t,e);break}case p.HEAD:{t._insertElement(e,Q.HTML),t.headElement=t.openElements.current,t.insertionMode=k.IN_HEAD;break}default:ua(t,e)}}function eP(t,e){let n=e.tagID;n===p.HEAD||n===p.BODY||n===p.HTML||n===p.BR?ua(t,e):t._err(e,U.endTagWithoutMatchingOpenElement)}function ua(t,e){t._insertFakeElement(L.HEAD,p.HEAD),t.headElement=t.openElements.current,t.insertionMode=k.IN_HEAD,t._processToken(e)}function vn(t,e){switch(e.tagID){case p.HTML:{Rt(t,e);break}case p.BASE:case p.BASEFONT:case p.BGSOUND:case p.LINK:case p.META:{t._appendElement(e,Q.HTML),e.ackSelfClosing=!0;break}case p.TITLE:{t._switchToTextParsing(e,Nt.RCDATA);break}case p.NOSCRIPT:{t.options.scriptingEnabled?t._switchToTextParsing(e,Nt.RAWTEXT):(t._insertElement(e,Q.HTML),t.insertionMode=k.IN_HEAD_NO_SCRIPT);break}case p.NOFRAMES:case p.STYLE:{t._switchToTextParsing(e,Nt.RAWTEXT);break}case p.SCRIPT:{t._switchToTextParsing(e,Nt.SCRIPT_DATA);break}case p.TEMPLATE:{t._insertTemplate(e),t.activeFormattingElements.insertMarker(),t.framesetOk=!1,t.insertionMode=k.IN_TEMPLATE,t.tmplInsertionModeStack.unshift(k.IN_TEMPLATE);break}case p.HEAD:{t._err(e,U.misplacedStartTagForHeadElement);break}default:la(t,e)}}function tP(t,e){switch(e.tagID){case p.HEAD:{t.openElements.pop(),t.insertionMode=k.AFTER_HEAD;break}case p.BODY:case p.BR:case p.HTML:{la(t,e);break}case p.TEMPLATE:{Bi(t,e);break}default:t._err(e,U.endTagWithoutMatchingOpenElement)}}function Bi(t,e){t.openElements.tmplCount>0?(t.openElements.generateImpliedEndTagsThoroughly(),t.openElements.currentTagId!==p.TEMPLATE&&t._err(e,U.closingOfElementWithOpenChildElements),t.openElements.popUntilTagNamePopped(p.TEMPLATE),t.activeFormattingElements.clearToLastMarker(),t.tmplInsertionModeStack.shift(),t._resetInsertionMode()):t._err(e,U.endTagWithoutMatchingOpenElement)}function la(t,e){t.openElements.pop(),t.insertionMode=k.AFTER_HEAD,t._processToken(e)}function nP(t,e){switch(e.tagID){case p.HTML:{Rt(t,e);break}case p.BASEFONT:case p.BGSOUND:case p.HEAD:case p.LINK:case p.META:case p.NOFRAMES:case p.STYLE:{vn(t,e);break}case p.NOSCRIPT:{t._err(e,U.nestedNoscriptInHead);break}default:da(t,e)}}function rP(t,e){switch(e.tagID){case p.NOSCRIPT:{t.openElements.pop(),t.insertionMode=k.IN_HEAD;break}case p.BR:{da(t,e);break}default:t._err(e,U.endTagWithoutMatchingOpenElement)}}function da(t,e){let n=e.type===Ee.EOF?U.openElementsLeftAfterEof:U.disallowedContentInNoscriptInHead;t._err(e,n),t.openElements.pop(),t.insertionMode=k.IN_HEAD,t._processToken(e)}function iP(t,e){switch(e.tagID){case p.HTML:{Rt(t,e);break}case p.BODY:{t._insertElement(e,Q.HTML),t.framesetOk=!1,t.insertionMode=k.IN_BODY;break}case p.FRAMESET:{t._insertElement(e,Q.HTML),t.insertionMode=k.IN_FRAMESET;break}case p.BASE:case p.BASEFONT:case p.BGSOUND:case p.LINK:case p.META:case p.NOFRAMES:case p.SCRIPT:case p.STYLE:case p.TEMPLATE:case p.TITLE:{t._err(e,U.abandonedHeadElementChild),t.openElements.push(t.headElement,p.HEAD),vn(t,e),t.openElements.remove(t.headElement);break}case p.HEAD:{t._err(e,U.misplacedStartTagForHeadElement);break}default:fa(t,e)}}function oP(t,e){switch(e.tagID){case p.BODY:case p.HTML:case p.BR:{fa(t,e);break}case p.TEMPLATE:{Bi(t,e);break}default:t._err(e,U.endTagWithoutMatchingOpenElement)}}function fa(t,e){t._insertFakeElement(L.BODY,p.BODY),t.insertionMode=k.IN_BODY,Bu(t,e)}function Bu(t,e){switch(e.type){case Ee.CHARACTER:{HE(t,e);break}case Ee.WHITESPACE_CHARACTER:{UE(t,e);break}case Ee.COMMENT:{qh(t,e);break}case Ee.START_TAG:{Rt(t,e);break}case Ee.END_TAG:{Mu(t,e);break}case Ee.EOF:{QE(t,e);break}default:}}function UE(t,e){t._reconstructActiveFormattingElements(),t._insertCharacters(e)}function HE(t,e){t._reconstructActiveFormattingElements(),t._insertCharacters(e),t.framesetOk=!1}function sP(t,e){t.openElements.tmplCount===0&&t.treeAdapter.adoptAttributes(t.openElements.items[0],e.attrs)}function aP(t,e){let n=t.openElements.tryPeekProperlyNestedBodyElement();n&&t.openElements.tmplCount===0&&(t.framesetOk=!1,t.treeAdapter.adoptAttributes(n,e.attrs))}function cP(t,e){let n=t.openElements.tryPeekProperlyNestedBodyElement();t.framesetOk&&n&&(t.treeAdapter.detachNode(n),t.openElements.popAllUpToHtmlElement(),t._insertElement(e,Q.HTML),t.insertionMode=k.IN_FRAMESET)}function uP(t,e){t.openElements.hasInButtonScope(p.P)&&t._closePElement(),t._insertElement(e,Q.HTML)}function lP(t,e){t.openElements.hasInButtonScope(p.P)&&t._closePElement(),t.openElements.currentTagId!==void 0&&ra.has(t.openElements.currentTagId)&&t.openElements.pop(),t._insertElement(e,Q.HTML)}function dP(t,e){t.openElements.hasInButtonScope(p.P)&&t._closePElement(),t._insertElement(e,Q.HTML),t.skipNextNewLine=!0,t.framesetOk=!1}function fP(t,e){let n=t.openElements.tmplCount>0;(!t.formElement||n)&&(t.openElements.hasInButtonScope(p.P)&&t._closePElement(),t._insertElement(e,Q.HTML),n||(t.formElement=t.openElements.current))}function hP(t,e){t.framesetOk=!1;let n=e.tagID;for(let r=t.openElements.stackTop;r>=0;r--){let i=t.openElements.tagIDs[r];if(n===p.LI&&i===p.LI||(n===p.DD||n===p.DT)&&(i===p.DD||i===p.DT)){t.openElements.generateImpliedEndTagsWithExclusion(i),t.openElements.popUntilTagNamePopped(i);break}if(i!==p.ADDRESS&&i!==p.DIV&&i!==p.P&&t._isSpecialElement(t.openElements.items[r],i))break}t.openElements.hasInButtonScope(p.P)&&t._closePElement(),t._insertElement(e,Q.HTML)}function AP(t,e){t.openElements.hasInButtonScope(p.P)&&t._closePElement(),t._insertElement(e,Q.HTML),t.tokenizer.state=Nt.PLAINTEXT}function pP(t,e){t.openElements.hasInScope(p.BUTTON)&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilTagNamePopped(p.BUTTON)),t._reconstructActiveFormattingElements(),t._insertElement(e,Q.HTML),t.framesetOk=!1}function mP(t,e){let n=t.activeFormattingElements.getElementEntryInScopeWithTagName(L.A);n&&($h(t,e),t.openElements.remove(n.element),t.activeFormattingElements.removeEntry(n)),t._reconstructActiveFormattingElements(),t._insertElement(e,Q.HTML),t.activeFormattingElements.pushElement(t.openElements.current,e)}function gP(t,e){t._reconstructActiveFormattingElements(),t._insertElement(e,Q.HTML),t.activeFormattingElements.pushElement(t.openElements.current,e)}function bP(t,e){t._reconstructActiveFormattingElements(),t.openElements.hasInScope(p.NOBR)&&($h(t,e),t._reconstructActiveFormattingElements()),t._insertElement(e,Q.HTML),t.activeFormattingElements.pushElement(t.openElements.current,e)}function xP(t,e){t._reconstructActiveFormattingElements(),t._insertElement(e,Q.HTML),t.activeFormattingElements.insertMarker(),t.framesetOk=!1}function EP(t,e){t.treeAdapter.getDocumentMode(t.document)!==Ut.QUIRKS&&t.openElements.hasInButtonScope(p.P)&&t._closePElement(),t._insertElement(e,Q.HTML),t.framesetOk=!1,t.insertionMode=k.IN_TABLE}function YE(t,e){t._reconstructActiveFormattingElements(),t._appendElement(e,Q.HTML),t.framesetOk=!1,e.ackSelfClosing=!0}function GE(t){let e=Tu(t,dr.TYPE);return e!=null&&e.toLowerCase()===FM}function IP(t,e){t._reconstructActiveFormattingElements(),t._appendElement(e,Q.HTML),GE(e)||(t.framesetOk=!1),e.ackSelfClosing=!0}function yP(t,e){t._appendElement(e,Q.HTML),e.ackSelfClosing=!0}function CP(t,e){t.openElements.hasInButtonScope(p.P)&&t._closePElement(),t._appendElement(e,Q.HTML),t.framesetOk=!1,e.ackSelfClosing=!0}function TP(t,e){e.tagName=L.IMG,e.tagID=p.IMG,YE(t,e)}function wP(t,e){t._insertElement(e,Q.HTML),t.skipNextNewLine=!0,t.tokenizer.state=Nt.RCDATA,t.originalInsertionMode=t.insertionMode,t.framesetOk=!1,t.insertionMode=k.TEXT}function _P(t,e){t.openElements.hasInButtonScope(p.P)&&t._closePElement(),t._reconstructActiveFormattingElements(),t.framesetOk=!1,t._switchToTextParsing(e,Nt.RAWTEXT)}function SP(t,e){t.framesetOk=!1,t._switchToTextParsing(e,Nt.RAWTEXT)}function PE(t,e){t._switchToTextParsing(e,Nt.RAWTEXT)}function vP(t,e){t._reconstructActiveFormattingElements(),t._insertElement(e,Q.HTML),t.framesetOk=!1,t.insertionMode=t.insertionMode===k.IN_TABLE||t.insertionMode===k.IN_CAPTION||t.insertionMode===k.IN_TABLE_BODY||t.insertionMode===k.IN_ROW||t.insertionMode===k.IN_CELL?k.IN_SELECT_IN_TABLE:k.IN_SELECT}function kP(t,e){t.openElements.currentTagId===p.OPTION&&t.openElements.pop(),t._reconstructActiveFormattingElements(),t._insertElement(e,Q.HTML)}function NP(t,e){t.openElements.hasInScope(p.RUBY)&&t.openElements.generateImpliedEndTags(),t._insertElement(e,Q.HTML)}function RP(t,e){t.openElements.hasInScope(p.RUBY)&&t.openElements.generateImpliedEndTagsWithExclusion(p.RTC),t._insertElement(e,Q.HTML)}function OP(t,e){t._reconstructActiveFormattingElements(),Qh(e),Nu(e),e.selfClosing?t._appendElement(e,Q.MATHML):t._insertElement(e,Q.MATHML),e.ackSelfClosing=!0}function DP(t,e){t._reconstructActiveFormattingElements(),Wh(e),Nu(e),e.selfClosing?t._appendElement(e,Q.SVG):t._insertElement(e,Q.SVG),e.ackSelfClosing=!0}function LE(t,e){t._reconstructActiveFormattingElements(),t._insertElement(e,Q.HTML)}function Rt(t,e){switch(e.tagID){case p.I:case p.S:case p.B:case p.U:case p.EM:case p.TT:case p.BIG:case p.CODE:case p.FONT:case p.SMALL:case p.STRIKE:case p.STRONG:{gP(t,e);break}case p.A:{mP(t,e);break}case p.H1:case p.H2:case p.H3:case p.H4:case p.H5:case p.H6:{lP(t,e);break}case p.P:case p.DL:case p.OL:case p.UL:case p.DIV:case p.DIR:case p.NAV:case p.MAIN:case p.MENU:case p.ASIDE:case p.CENTER:case p.FIGURE:case p.FOOTER:case p.HEADER:case p.HGROUP:case p.DIALOG:case p.DETAILS:case p.ADDRESS:case p.ARTICLE:case p.SEARCH:case p.SECTION:case p.SUMMARY:case p.FIELDSET:case p.BLOCKQUOTE:case p.FIGCAPTION:{uP(t,e);break}case p.LI:case p.DD:case p.DT:{hP(t,e);break}case p.BR:case p.IMG:case p.WBR:case p.AREA:case p.EMBED:case p.KEYGEN:{YE(t,e);break}case p.HR:{CP(t,e);break}case p.RB:case p.RTC:{NP(t,e);break}case p.RT:case p.RP:{RP(t,e);break}case p.PRE:case p.LISTING:{dP(t,e);break}case p.XMP:{_P(t,e);break}case p.SVG:{DP(t,e);break}case p.HTML:{sP(t,e);break}case p.BASE:case p.LINK:case p.META:case p.STYLE:case p.TITLE:case p.SCRIPT:case p.BGSOUND:case p.BASEFONT:case p.TEMPLATE:{vn(t,e);break}case p.BODY:{aP(t,e);break}case p.FORM:{fP(t,e);break}case p.NOBR:{bP(t,e);break}case p.MATH:{OP(t,e);break}case p.TABLE:{EP(t,e);break}case p.INPUT:{IP(t,e);break}case p.PARAM:case p.TRACK:case p.SOURCE:{yP(t,e);break}case p.IMAGE:{TP(t,e);break}case p.BUTTON:{pP(t,e);break}case p.APPLET:case p.OBJECT:case p.MARQUEE:{xP(t,e);break}case p.IFRAME:{SP(t,e);break}case p.SELECT:{vP(t,e);break}case p.OPTION:case p.OPTGROUP:{kP(t,e);break}case p.NOEMBED:case p.NOFRAMES:{PE(t,e);break}case p.FRAMESET:{cP(t,e);break}case p.TEXTAREA:{wP(t,e);break}case p.NOSCRIPT:{t.options.scriptingEnabled?PE(t,e):LE(t,e);break}case p.PLAINTEXT:{AP(t,e);break}case p.COL:case p.TH:case p.TD:case p.TR:case p.HEAD:case p.FRAME:case p.TBODY:case p.TFOOT:case p.THEAD:case p.CAPTION:case p.COLGROUP:break;default:LE(t,e)}}function BP(t,e){if(t.openElements.hasInScope(p.BODY)&&(t.insertionMode=k.AFTER_BODY,t.options.sourceCodeLocationInfo)){let n=t.openElements.tryPeekProperlyNestedBodyElement();n&&t._setEndLocation(n,e)}}function MP(t,e){t.openElements.hasInScope(p.BODY)&&(t.insertionMode=k.AFTER_BODY,zE(t,e))}function PP(t,e){let n=e.tagID;t.openElements.hasInScope(n)&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilTagNamePopped(n))}function LP(t){let e=t.openElements.tmplCount>0,{formElement:n}=t;e||(t.formElement=null),(n||e)&&t.openElements.hasInScope(p.FORM)&&(t.openElements.generateImpliedEndTags(),e?t.openElements.popUntilTagNamePopped(p.FORM):n&&t.openElements.remove(n))}function FP(t){t.openElements.hasInButtonScope(p.P)||t._insertFakeElement(L.P,p.P),t._closePElement()}function UP(t){t.openElements.hasInListItemScope(p.LI)&&(t.openElements.generateImpliedEndTagsWithExclusion(p.LI),t.openElements.popUntilTagNamePopped(p.LI))}function HP(t,e){let n=e.tagID;t.openElements.hasInScope(n)&&(t.openElements.generateImpliedEndTagsWithExclusion(n),t.openElements.popUntilTagNamePopped(n))}function YP(t){t.openElements.hasNumberedHeaderInScope()&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilNumberedHeaderPopped())}function GP(t,e){let n=e.tagID;t.openElements.hasInScope(n)&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilTagNamePopped(n),t.activeFormattingElements.clearToLastMarker())}function KP(t){t._reconstructActiveFormattingElements(),t._insertFakeElement(L.BR,p.BR),t.openElements.pop(),t.framesetOk=!1}function KE(t,e){let n=e.tagName,r=e.tagID;for(let i=t.openElements.stackTop;i>0;i--){let o=t.openElements.items[i],s=t.openElements.tagIDs[i];if(r===s&&(r!==p.UNKNOWN||t.treeAdapter.getTagName(o)===n)){t.openElements.generateImpliedEndTagsWithExclusion(r),t.openElements.stackTop>=i&&t.openElements.shortenToLength(i);break}if(t._isSpecialElement(o,s))break}}function Mu(t,e){switch(e.tagID){case p.A:case p.B:case p.I:case p.S:case p.U:case p.EM:case p.TT:case p.BIG:case p.CODE:case p.FONT:case p.NOBR:case p.SMALL:case p.STRIKE:case p.STRONG:{$h(t,e);break}case p.P:{FP(t);break}case p.DL:case p.UL:case p.OL:case p.DIR:case p.DIV:case p.NAV:case p.PRE:case p.MAIN:case p.MENU:case p.ASIDE:case p.BUTTON:case p.CENTER:case p.FIGURE:case p.FOOTER:case p.HEADER:case p.HGROUP:case p.DIALOG:case p.ADDRESS:case p.ARTICLE:case p.DETAILS:case p.SEARCH:case p.SECTION:case p.SUMMARY:case p.LISTING:case p.FIELDSET:case p.BLOCKQUOTE:case p.FIGCAPTION:{PP(t,e);break}case p.LI:{UP(t);break}case p.DD:case p.DT:{HP(t,e);break}case p.H1:case p.H2:case p.H3:case p.H4:case p.H5:case p.H6:{YP(t);break}case p.BR:{KP(t);break}case p.BODY:{BP(t,e);break}case p.HTML:{MP(t,e);break}case p.FORM:{LP(t);break}case p.APPLET:case p.OBJECT:case p.MARQUEE:{GP(t,e);break}case p.TEMPLATE:{Bi(t,e);break}default:KE(t,e)}}function QE(t,e){t.tmplInsertionModeStack.length>0?XE(t,e):Jh(t,e)}function QP(t,e){var n;e.tagID===p.SCRIPT&&((n=t.scriptHandler)===null||n===void 0||n.call(t,t.openElements.current)),t.openElements.pop(),t.insertionMode=t.originalInsertionMode}function WP(t,e){t._err(e,U.eofInElementThatCanContainOnlyText),t.openElements.pop(),t.insertionMode=t.originalInsertionMode,t.onEof(e)}function jh(t,e){if(t.openElements.currentTagId!==void 0&&FE.has(t.openElements.currentTagId))switch(t.pendingCharacterTokens.length=0,t.hasNonWhitespacePendingCharacterToken=!1,t.originalInsertionMode=t.insertionMode,t.insertionMode=k.IN_TABLE_TEXT,e.type){case Ee.CHARACTER:{jE(t,e);break}case Ee.WHITESPACE_CHARACTER:{WE(t,e);break}}else pa(t,e)}function jP(t,e){t.openElements.clearBackToTableContext(),t.activeFormattingElements.insertMarker(),t._insertElement(e,Q.HTML),t.insertionMode=k.IN_CAPTION}function qP(t,e){t.openElements.clearBackToTableContext(),t._insertElement(e,Q.HTML),t.insertionMode=k.IN_COLUMN_GROUP}function VP(t,e){t.openElements.clearBackToTableContext(),t._insertFakeElement(L.COLGROUP,p.COLGROUP),t.insertionMode=k.IN_COLUMN_GROUP,Xh(t,e)}function $P(t,e){t.openElements.clearBackToTableContext(),t._insertElement(e,Q.HTML),t.insertionMode=k.IN_TABLE_BODY}function JP(t,e){t.openElements.clearBackToTableContext(),t._insertFakeElement(L.TBODY,p.TBODY),t.insertionMode=k.IN_TABLE_BODY,Pu(t,e)}function XP(t,e){t.openElements.hasInTableScope(p.TABLE)&&(t.openElements.popUntilTagNamePopped(p.TABLE),t._resetInsertionMode(),t._processStartTag(e))}function zP(t,e){GE(e)?t._appendElement(e,Q.HTML):pa(t,e),e.ackSelfClosing=!0}function ZP(t,e){!t.formElement&&t.openElements.tmplCount===0&&(t._insertElement(e,Q.HTML),t.formElement=t.openElements.current,t.openElements.pop())}function Fo(t,e){switch(e.tagID){case p.TD:case p.TH:case p.TR:{JP(t,e);break}case p.STYLE:case p.SCRIPT:case p.TEMPLATE:{vn(t,e);break}case p.COL:{VP(t,e);break}case p.FORM:{ZP(t,e);break}case p.TABLE:{XP(t,e);break}case p.TBODY:case p.TFOOT:case p.THEAD:{$P(t,e);break}case p.INPUT:{zP(t,e);break}case p.CAPTION:{jP(t,e);break}case p.COLGROUP:{qP(t,e);break}default:pa(t,e)}}function Aa(t,e){switch(e.tagID){case p.TABLE:{t.openElements.hasInTableScope(p.TABLE)&&(t.openElements.popUntilTagNamePopped(p.TABLE),t._resetInsertionMode());break}case p.TEMPLATE:{Bi(t,e);break}case p.BODY:case p.CAPTION:case p.COL:case p.COLGROUP:case p.HTML:case p.TBODY:case p.TD:case p.TFOOT:case p.TH:case p.THEAD:case p.TR:break;default:pa(t,e)}}function pa(t,e){let n=t.fosterParentingEnabled;t.fosterParentingEnabled=!0,Bu(t,e),t.fosterParentingEnabled=n}function WE(t,e){t.pendingCharacterTokens.push(e)}function jE(t,e){t.pendingCharacterTokens.push(e),t.hasNonWhitespacePendingCharacterToken=!0}function aa(t,e){let n=0;if(t.hasNonWhitespacePendingCharacterToken)for(;n0&&t.openElements.currentTagId===p.OPTION&&t.openElements.tagIDs[t.openElements.stackTop-1]===p.OPTGROUP&&t.openElements.pop(),t.openElements.currentTagId===p.OPTGROUP&&t.openElements.pop();break}case p.OPTION:{t.openElements.currentTagId===p.OPTION&&t.openElements.pop();break}case p.SELECT:{t.openElements.hasInSelectScope(p.SELECT)&&(t.openElements.popUntilTagNamePopped(p.SELECT),t._resetInsertionMode());break}case p.TEMPLATE:{Bi(t,e);break}default:}}function o3(t,e){let n=e.tagID;n===p.CAPTION||n===p.TABLE||n===p.TBODY||n===p.TFOOT||n===p.THEAD||n===p.TR||n===p.TD||n===p.TH?(t.openElements.popUntilTagNamePopped(p.SELECT),t._resetInsertionMode(),t._processStartTag(e)):$E(t,e)}function s3(t,e){let n=e.tagID;n===p.CAPTION||n===p.TABLE||n===p.TBODY||n===p.TFOOT||n===p.THEAD||n===p.TR||n===p.TD||n===p.TH?t.openElements.hasInTableScope(n)&&(t.openElements.popUntilTagNamePopped(p.SELECT),t._resetInsertionMode(),t.onEndTag(e)):JE(t,e)}function a3(t,e){switch(e.tagID){case p.BASE:case p.BASEFONT:case p.BGSOUND:case p.LINK:case p.META:case p.NOFRAMES:case p.SCRIPT:case p.STYLE:case p.TEMPLATE:case p.TITLE:{vn(t,e);break}case p.CAPTION:case p.COLGROUP:case p.TBODY:case p.TFOOT:case p.THEAD:{t.tmplInsertionModeStack[0]=k.IN_TABLE,t.insertionMode=k.IN_TABLE,Fo(t,e);break}case p.COL:{t.tmplInsertionModeStack[0]=k.IN_COLUMN_GROUP,t.insertionMode=k.IN_COLUMN_GROUP,Xh(t,e);break}case p.TR:{t.tmplInsertionModeStack[0]=k.IN_TABLE_BODY,t.insertionMode=k.IN_TABLE_BODY,Pu(t,e);break}case p.TD:case p.TH:{t.tmplInsertionModeStack[0]=k.IN_ROW,t.insertionMode=k.IN_ROW,Lu(t,e);break}default:t.tmplInsertionModeStack[0]=k.IN_BODY,t.insertionMode=k.IN_BODY,Rt(t,e)}}function c3(t,e){e.tagID===p.TEMPLATE&&Bi(t,e)}function XE(t,e){t.openElements.tmplCount>0?(t.openElements.popUntilTagNamePopped(p.TEMPLATE),t.activeFormattingElements.clearToLastMarker(),t.tmplInsertionModeStack.shift(),t._resetInsertionMode(),t.onEof(e)):Jh(t,e)}function u3(t,e){e.tagID===p.HTML?Rt(t,e):Du(t,e)}function zE(t,e){var n;if(e.tagID===p.HTML){if(t.fragmentContext||(t.insertionMode=k.AFTER_AFTER_BODY),t.options.sourceCodeLocationInfo&&t.openElements.tagIDs[0]===p.HTML){t._setEndLocation(t.openElements.items[0],e);let r=t.openElements.items[1];r&&!(!((n=t.treeAdapter.getNodeSourceCodeLocation(r))===null||n===void 0)&&n.endTag)&&t._setEndLocation(r,e)}}else Du(t,e)}function Du(t,e){t.insertionMode=k.IN_BODY,Bu(t,e)}function l3(t,e){switch(e.tagID){case p.HTML:{Rt(t,e);break}case p.FRAMESET:{t._insertElement(e,Q.HTML);break}case p.FRAME:{t._appendElement(e,Q.HTML),e.ackSelfClosing=!0;break}case p.NOFRAMES:{vn(t,e);break}default:}}function d3(t,e){e.tagID===p.FRAMESET&&!t.openElements.isRootHtmlElementCurrent()&&(t.openElements.pop(),!t.fragmentContext&&t.openElements.currentTagId!==p.FRAMESET&&(t.insertionMode=k.AFTER_FRAMESET))}function f3(t,e){switch(e.tagID){case p.HTML:{Rt(t,e);break}case p.NOFRAMES:{vn(t,e);break}default:}}function h3(t,e){e.tagID===p.HTML&&(t.insertionMode=k.AFTER_AFTER_FRAMESET)}function A3(t,e){e.tagID===p.HTML?Rt(t,e):Ru(t,e)}function Ru(t,e){t.insertionMode=k.IN_BODY,Bu(t,e)}function p3(t,e){switch(e.tagID){case p.HTML:{Rt(t,e);break}case p.NOFRAMES:{vn(t,e);break}default:}}function m3(t,e){e.chars=He,t._insertCharacters(e)}function g3(t,e){t._insertCharacters(e),t.framesetOk=!1}function ZE(t){for(;t.treeAdapter.getNamespaceURI(t.openElements.current)!==Q.HTML&&t.openElements.currentTagId!==void 0&&!t._isIntegrationPoint(t.openElements.currentTagId,t.openElements.current);)t.openElements.pop()}function b3(t,e){if(RE(e))ZE(t),t._startTagOutsideForeignContent(e);else{let n=t._getAdjustedCurrentElement(),r=t.treeAdapter.getNamespaceURI(n);r===Q.MATHML?Qh(e):r===Q.SVG&&(OE(e),Wh(e)),Nu(e),e.selfClosing?t._appendElement(e,r):t._insertElement(e,r),e.ackSelfClosing=!0}}function x3(t,e){if(e.tagID===p.P||e.tagID===p.BR){ZE(t),t._endTagOutsideForeignContent(e);return}for(let n=t.openElements.stackTop;n>0;n--){let r=t.openElements.items[n];if(t.treeAdapter.getNamespaceURI(r)===Q.HTML){t._endTagOutsideForeignContent(e);break}let i=t.treeAdapter.getTagName(r);if(i.toLowerCase()===e.tagName){e.tagName=i,t.openElements.shortenToLength(n);break}}}m();var oX=new Set([L.AREA,L.BASE,L.BASEFONT,L.BGSOUND,L.BR,L.COL,L.EMBED,L.FRAME,L.HR,L.IMG,L.INPUT,L.KEYGEN,L.LINK,L.META,L.PARAM,L.SOURCE,L.TRACK,L.WBR]);function eI(t,e,n){typeof t=="string"&&(n=e,e=t,t=null);let r=ha.getFragmentParser(t,n);return r.tokenizer.write(e,!0),r.getFragment()}var tI=/\{\{\s*([^}]*?)\s*\}\}/g;function Fu(t){let n=eI(t.html).childNodes.find(x=>x.tagName==="template");if(!n)throw new ma(t.name,"no