faf-cli 7.6.0 → 7.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/yaml/dist/nodes/identity.js", "../node_modules/yaml/dist/visit.js", "../node_modules/yaml/dist/doc/directives.js", "../node_modules/yaml/dist/doc/anchors.js", "../node_modules/yaml/dist/doc/applyReviver.js", "../node_modules/yaml/dist/nodes/toJS.js", "../node_modules/yaml/dist/nodes/Node.js", "../node_modules/yaml/dist/nodes/Alias.js", "../node_modules/yaml/dist/nodes/Scalar.js", "../node_modules/yaml/dist/doc/createNode.js", "../node_modules/yaml/dist/nodes/Collection.js", "../node_modules/yaml/dist/stringify/stringifyComment.js", "../node_modules/yaml/dist/stringify/foldFlowLines.js", "../node_modules/yaml/dist/stringify/stringifyString.js", "../node_modules/yaml/dist/stringify/stringify.js", "../node_modules/yaml/dist/stringify/stringifyPair.js", "../node_modules/yaml/dist/log.js", "../node_modules/yaml/dist/schema/yaml-1.1/merge.js", "../node_modules/yaml/dist/nodes/addPairToJSMap.js", "../node_modules/yaml/dist/nodes/Pair.js", "../node_modules/yaml/dist/stringify/stringifyCollection.js", "../node_modules/yaml/dist/nodes/YAMLMap.js", "../node_modules/yaml/dist/schema/common/map.js", "../node_modules/yaml/dist/nodes/YAMLSeq.js", "../node_modules/yaml/dist/schema/common/seq.js", "../node_modules/yaml/dist/schema/common/string.js", "../node_modules/yaml/dist/schema/common/null.js", "../node_modules/yaml/dist/schema/core/bool.js", "../node_modules/yaml/dist/stringify/stringifyNumber.js", "../node_modules/yaml/dist/schema/core/float.js", "../node_modules/yaml/dist/schema/core/int.js", "../node_modules/yaml/dist/schema/core/schema.js", "../node_modules/yaml/dist/schema/json/schema.js", "../node_modules/yaml/dist/schema/yaml-1.1/binary.js", "../node_modules/yaml/dist/schema/yaml-1.1/pairs.js", "../node_modules/yaml/dist/schema/yaml-1.1/omap.js", "../node_modules/yaml/dist/schema/yaml-1.1/bool.js", "../node_modules/yaml/dist/schema/yaml-1.1/float.js", "../node_modules/yaml/dist/schema/yaml-1.1/int.js", "../node_modules/yaml/dist/schema/yaml-1.1/set.js", "../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js", "../node_modules/yaml/dist/schema/yaml-1.1/schema.js", "../node_modules/yaml/dist/schema/tags.js", "../node_modules/yaml/dist/schema/Schema.js", "../node_modules/yaml/dist/stringify/stringifyDocument.js", "../node_modules/yaml/dist/doc/Document.js", "../node_modules/yaml/dist/errors.js", "../node_modules/yaml/dist/compose/resolve-props.js", "../node_modules/yaml/dist/compose/util-contains-newline.js", "../node_modules/yaml/dist/compose/util-flow-indent-check.js", "../node_modules/yaml/dist/compose/util-map-includes.js", "../node_modules/yaml/dist/compose/resolve-block-map.js", "../node_modules/yaml/dist/compose/resolve-block-seq.js", "../node_modules/yaml/dist/compose/resolve-end.js", "../node_modules/yaml/dist/compose/resolve-flow-collection.js", "../node_modules/yaml/dist/compose/compose-collection.js", "../node_modules/yaml/dist/compose/resolve-block-scalar.js", "../node_modules/yaml/dist/compose/resolve-flow-scalar.js", "../node_modules/yaml/dist/compose/compose-scalar.js", "../node_modules/yaml/dist/compose/util-empty-scalar-position.js", "../node_modules/yaml/dist/compose/compose-node.js", "../node_modules/yaml/dist/compose/compose-doc.js", "../node_modules/yaml/dist/compose/composer.js", "../node_modules/yaml/dist/parse/cst-scalar.js", "../node_modules/yaml/dist/parse/cst-stringify.js", "../node_modules/yaml/dist/parse/cst-visit.js", "../node_modules/yaml/dist/parse/cst.js", "../node_modules/yaml/dist/parse/lexer.js", "../node_modules/yaml/dist/parse/line-counter.js", "../node_modules/yaml/dist/parse/parser.js", "../node_modules/yaml/dist/public-api.js", "../src/core/slots.ts", "../src/ui/colors.ts", "../src/core/tiers.ts", "../src/wasm/kernel.ts", "../src/core/scorer.ts", "../src/core/schema.ts", "../src/interop/faf.ts", "../node_modules/yaml/dist/index.js", "../src/interop/projecthtml.ts", "../src/interop/servercard.ts", "../src/fafm/types.ts", "../src/fafm/soul.ts", "../src/fafm/from-claude-dir.ts", "../src/core/interview.ts", "../src/core/loop.ts", "../src/commands/bench.ts", "../src/detect/turbo-cat.ts", "../src/detect/turbo-cat-knowledge.ts", "../src/detect/dart.ts", "../src/detect/go.ts", "../src/detect/csharp.ts", "../src/detect/jvm.ts", "../src/detect/ruby.ts", "../src/detect/relentless.ts", "../src/core/version.ts", "../src/detect/scanner.ts", "../src/detect/frameworks.ts", "../src/detect/stack.ts", "../src/interrogate/readme.ts", "../src/interrogate/types.ts", "../src/interrogate/cargo.ts", "../src/interrogate/index.ts", "../src/detect/assemble.ts"],
3
+ "sources": ["../node_modules/yaml/dist/nodes/identity.js", "../node_modules/yaml/dist/visit.js", "../node_modules/yaml/dist/doc/directives.js", "../node_modules/yaml/dist/doc/anchors.js", "../node_modules/yaml/dist/doc/applyReviver.js", "../node_modules/yaml/dist/nodes/toJS.js", "../node_modules/yaml/dist/nodes/Node.js", "../node_modules/yaml/dist/nodes/Alias.js", "../node_modules/yaml/dist/nodes/Scalar.js", "../node_modules/yaml/dist/doc/createNode.js", "../node_modules/yaml/dist/nodes/Collection.js", "../node_modules/yaml/dist/stringify/stringifyComment.js", "../node_modules/yaml/dist/stringify/foldFlowLines.js", "../node_modules/yaml/dist/stringify/stringifyString.js", "../node_modules/yaml/dist/stringify/stringify.js", "../node_modules/yaml/dist/stringify/stringifyPair.js", "../node_modules/yaml/dist/log.js", "../node_modules/yaml/dist/schema/yaml-1.1/merge.js", "../node_modules/yaml/dist/nodes/addPairToJSMap.js", "../node_modules/yaml/dist/nodes/Pair.js", "../node_modules/yaml/dist/stringify/stringifyCollection.js", "../node_modules/yaml/dist/nodes/YAMLMap.js", "../node_modules/yaml/dist/schema/common/map.js", "../node_modules/yaml/dist/nodes/YAMLSeq.js", "../node_modules/yaml/dist/schema/common/seq.js", "../node_modules/yaml/dist/schema/common/string.js", "../node_modules/yaml/dist/schema/common/null.js", "../node_modules/yaml/dist/schema/core/bool.js", "../node_modules/yaml/dist/stringify/stringifyNumber.js", "../node_modules/yaml/dist/schema/core/float.js", "../node_modules/yaml/dist/schema/core/int.js", "../node_modules/yaml/dist/schema/core/schema.js", "../node_modules/yaml/dist/schema/json/schema.js", "../node_modules/yaml/dist/schema/yaml-1.1/binary.js", "../node_modules/yaml/dist/schema/yaml-1.1/pairs.js", "../node_modules/yaml/dist/schema/yaml-1.1/omap.js", "../node_modules/yaml/dist/schema/yaml-1.1/bool.js", "../node_modules/yaml/dist/schema/yaml-1.1/float.js", "../node_modules/yaml/dist/schema/yaml-1.1/int.js", "../node_modules/yaml/dist/schema/yaml-1.1/set.js", "../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js", "../node_modules/yaml/dist/schema/yaml-1.1/schema.js", "../node_modules/yaml/dist/schema/tags.js", "../node_modules/yaml/dist/schema/Schema.js", "../node_modules/yaml/dist/stringify/stringifyDocument.js", "../node_modules/yaml/dist/doc/Document.js", "../node_modules/yaml/dist/errors.js", "../node_modules/yaml/dist/compose/resolve-props.js", "../node_modules/yaml/dist/compose/util-contains-newline.js", "../node_modules/yaml/dist/compose/util-flow-indent-check.js", "../node_modules/yaml/dist/compose/util-map-includes.js", "../node_modules/yaml/dist/compose/resolve-block-map.js", "../node_modules/yaml/dist/compose/resolve-block-seq.js", "../node_modules/yaml/dist/compose/resolve-end.js", "../node_modules/yaml/dist/compose/resolve-flow-collection.js", "../node_modules/yaml/dist/compose/compose-collection.js", "../node_modules/yaml/dist/compose/resolve-block-scalar.js", "../node_modules/yaml/dist/compose/resolve-flow-scalar.js", "../node_modules/yaml/dist/compose/compose-scalar.js", "../node_modules/yaml/dist/compose/util-empty-scalar-position.js", "../node_modules/yaml/dist/compose/compose-node.js", "../node_modules/yaml/dist/compose/compose-doc.js", "../node_modules/yaml/dist/compose/composer.js", "../node_modules/yaml/dist/parse/cst-scalar.js", "../node_modules/yaml/dist/parse/cst-stringify.js", "../node_modules/yaml/dist/parse/cst-visit.js", "../node_modules/yaml/dist/parse/cst.js", "../node_modules/yaml/dist/parse/lexer.js", "../node_modules/yaml/dist/parse/line-counter.js", "../node_modules/yaml/dist/parse/parser.js", "../node_modules/yaml/dist/public-api.js", "../src/core/slots.ts", "../src/ui/colors.ts", "../src/core/tiers.ts", "../src/wasm/kernel.ts", "../src/core/about.ts", "../src/core/scorer.ts", "../src/core/schema.ts", "../src/interop/faf.ts", "../node_modules/yaml/dist/index.js", "../src/interop/projecthtml.ts", "../src/interop/servercard.ts", "../src/interop/cards.ts", "../src/fafm/types.ts", "../src/fafm/soul.ts", "../src/fafm/from-claude-dir.ts", "../src/core/interview.ts", "../src/core/loop.ts", "../src/commands/bench.ts", "../src/detect/turbo-cat.ts", "../src/detect/turbo-cat-knowledge.ts", "../src/detect/dart.ts", "../src/detect/go.ts", "../src/detect/csharp.ts", "../src/detect/jvm.ts", "../src/detect/ruby.ts", "../src/detect/swift.ts", "../src/detect/relentless.ts", "../src/core/version.ts", "../src/detect/scanner.ts", "../src/detect/frameworks.ts", "../src/detect/stack.ts", "../src/interrogate/readme.ts", "../src/interrogate/types.ts", "../src/interrogate/cargo.ts", "../src/interrogate/index.ts", "../src/detect/assemble.ts"],
4
4
  "sourcesContent": [
5
5
  "'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n",
6
6
  "'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n",
@@ -9,7 +9,7 @@
9
9
  "'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n",
10
10
  "'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !identity.hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexports.toJS = toJS;\n",
11
11
  "'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!identity.isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexports.NodeBase = NodeBase;\n",
12
- "'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n constructor(source) {\n super(identity.ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit.visit(doc, {\n Node: (_key, node) => {\n if (identity.isAlias(node) || identity.hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS.toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchors.anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (identity.isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (identity.isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (identity.isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexports.Alias = Alias;\n",
12
+ "'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n constructor(source) {\n super(identity.ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n if (ctx?.maxAliasCount === 0)\n throw new ReferenceError('Alias resolution is disabled');\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit.visit(doc, {\n Node: (_key, node) => {\n if (identity.isAlias(node) || identity.hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS.toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchors.anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (identity.isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (identity.isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (identity.isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexports.Alias = Alias;\n",
13
13
  "'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n constructor(value) {\n super(identity.SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n",
14
14
  "'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (identity.isDocument(value))\n value = value.contents;\n if (identity.isNode(value))\n return value;\n if (identity.isPair(value)) {\n const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias.Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar.Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[identity.MAP]\n : Symbol.iterator in Object(value)\n ? schema[identity.SEQ]\n : schema[identity.MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar.Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexports.createNode = createNode;\n",
15
15
  "'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode.createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (identity.isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && identity.isScalar(node) ? node.value : node;\n else\n return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!identity.isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n identity.isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return identity.isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n",
@@ -19,7 +19,7 @@
19
19
  "'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment.stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trailingComma: false,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (identity.isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n if (anchor && anchors.anchorIsValid(anchor)) {\n anchors$1.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (identity.isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (identity.isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = identity.isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : identity.isScalar(node)\n ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n",
20
20
  "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (identity.isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n identity.isCollection(key) ||\n (identity.isScalar(key)\n ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (identity.isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && identity.isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n identity.isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && identity.isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexports.stringifyPair = stringifyPair;\n",
21
21
  "'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n if (typeof node_process.emitWarning === 'function')\n node_process.emitWarning(warning);\n else\n console.warn(warning);\n }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n",
22
- "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (identity.isScalar(key) &&\n (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (identity.isSeq(value))\n for (const it of value.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(value))\n for (const it of value)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (!identity.isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n",
22
+ "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (identity.isScalar(key) &&\n (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (identity.isSeq(source))\n for (const it of source.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(source))\n for (const it of source)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, source);\n}\nfunction mergeValue(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (!identity.isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\nfunction resolveAliasValue(ctx, value) {\n return ctx && identity.isAlias(value) ? value.resolve(ctx.doc, ctx) : value;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n",
23
23
  "'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (identity.isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (merge.isMergeKey(ctx, key))\n merge.addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS.toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS.toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (identity.isNode(key) && ctx?.doc) {\n const strCtx = stringify.createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n",
24
24
  "'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n const k = createNode.createNode(key, undefined, ctx);\n const v = createNode.createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (identity.isNode(key))\n key = key.clone(schema);\n if (identity.isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n",
25
25
  "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = identity.isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify.stringify(item, itemCtx, () => (comment = null));\n reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\\n'));\n if (i < items.length - 1) {\n str += ',';\n }\n else if (ctx.options.trailingComma) {\n if (ctx.options.lineWidth > 0) {\n reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +\n (str.length + 2) >\n ctx.options.lineWidth);\n }\n if (reqNewline) {\n str += ',';\n }\n }\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = stringifyComment.indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexports.stringifyCollection = stringifyCollection;\n",
@@ -30,7 +30,7 @@
30
30
  "'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexports.string = string;\n",
31
31
  "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar.Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n",
32
32
  "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexports.boolTag = boolTag;\n",
33
- "'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^\\d/.test(n)) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n",
33
+ "'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^-?\\d/.test(n) &&\n !n.includes('e')) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n",
34
34
  "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n",
35
35
  "'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n",
36
36
  "'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.boolTag,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float\n];\n\nexports.schema = schema;\n",
@@ -59,47 +59,50 @@
59
59
  "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps.resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (identity.isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // → key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap.YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n",
60
60
  "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = identity.isNode(res)\n ? res\n : new Scalar.Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexports.composeCollection = composeCollection;\n",
61
61
  "'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n",
62
- "'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = { x: 2, u: 4, U: 8 }[next];\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n if (isNaN(code)) {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n return String.fromCodePoint(code);\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n",
62
+ "'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = next === 'x' ? 2 : next === 'u' ? 4 : 8;\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n try {\n return String.fromCodePoint(code);\n }\n catch {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n",
63
63
  "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[identity.SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[identity.SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar.Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[identity.SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[identity.SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[identity.SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexports.composeScalar = composeScalar;\n",
64
64
  "'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n",
65
65
  "'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n try {\n node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n }\n catch (error) {\n // Almost certainly here due to a stack overflow\n const message = error instanceof Error ? error.message : String(error);\n onError(token, 'RESOURCE_EXHAUSTION', message);\n }\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n isSrcToken = false;\n }\n }\n node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError));\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!identity.isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias.Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n",
66
66
  "'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document.Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps.resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode.composeNode(ctx, value, props, onError)\n : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexports.composeDoc = composeDoc;\n",
67
- "'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n Array.prototype.push.apply(doc.errors, this.errors);\n Array.prototype.push.apply(doc.warnings, this.warnings);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n",
67
+ "'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n for (let i = 0; i < this.errors.length; ++i)\n doc.errors.push(this.errors[i]);\n for (let i = 0; i < this.warnings.length; ++i)\n doc.warnings.push(this.warnings[i]);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n",
68
68
  "'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n if (token) {\n const _onError = (pos, code, message) => {\n const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n if (onError)\n onError(offset, code, message);\n else\n throw new errors.YAMLParseError([offset, offset + 1], code, message);\n };\n switch (token.type) {\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n case 'block-scalar':\n return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n }\n }\n return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey,\n indent: indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n const end = context.end ?? [\n { type: 'newline', offset: -1, indent, source: '\\n' }\n ];\n switch (source[0]) {\n case '|':\n case '>': {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, end))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n return { type: 'block-scalar', offset, indent, props, source: body };\n }\n case '\"':\n return { type: 'double-quoted-scalar', offset, indent, source, end };\n case \"'\":\n return { type: 'single-quoted-scalar', offset, indent, source, end };\n default:\n return { type: 'scalar', offset, indent, source, end };\n }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n let indent = 'indent' in token ? token.indent : null;\n if (afterKey && typeof indent === 'number')\n indent += 2;\n if (!type)\n switch (token.type) {\n case 'single-quoted-scalar':\n type = 'QUOTE_SINGLE';\n break;\n case 'double-quoted-scalar':\n type = 'QUOTE_DOUBLE';\n break;\n case 'block-scalar': {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n break;\n }\n default:\n type = 'PLAIN';\n }\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey: implicitKey || indent === null,\n indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n switch (source[0]) {\n case '|':\n case '>':\n setBlockScalarValue(token, source);\n break;\n case '\"':\n setFlowScalarValue(token, source, 'double-quoted-scalar');\n break;\n case \"'\":\n setFlowScalarValue(token, source, 'single-quoted-scalar');\n break;\n default:\n setFlowScalarValue(token, source, 'scalar');\n }\n}\nfunction setBlockScalarValue(token, source) {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n if (token.type === 'block-scalar') {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n header.source = head;\n token.source = body;\n }\n else {\n const { offset } = token;\n const indent = 'indent' in token ? token.indent : -1;\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n if (end)\n for (const st of end)\n switch (st.type) {\n case 'space':\n case 'comment':\n props.push(st);\n break;\n case 'newline':\n props.push(st);\n return true;\n }\n return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n switch (token.type) {\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n token.type = type;\n token.source = source;\n break;\n case 'block-scalar': {\n const end = token.props.slice(1);\n let oa = source.length;\n if (token.props[0].type === 'block-scalar-header')\n oa -= token.props[0].source.length;\n for (const tok of end)\n tok.offset += oa;\n delete token.props;\n Object.assign(token, { type, source, end });\n break;\n }\n case 'block-map':\n case 'block-seq': {\n const offset = token.offset + source.length;\n const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n delete token.items;\n Object.assign(token, { type, source, end: [nl] });\n break;\n }\n default: {\n const indent = 'indent' in token ? token.indent : -1;\n const end = 'end' in token && Array.isArray(token.end)\n ? token.end.filter(st => st.type === 'space' ||\n st.type === 'comment' ||\n st.type === 'newline')\n : [];\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type, indent, source, end });\n }\n }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n",
69
69
  "'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n switch (token.type) {\n case 'block-scalar': {\n let res = '';\n for (const tok of token.props)\n res += stringifyToken(tok);\n return res + token.source;\n }\n case 'block-map':\n case 'block-seq': {\n let res = '';\n for (const item of token.items)\n res += stringifyItem(item);\n return res;\n }\n case 'flow-collection': {\n let res = token.start.source;\n for (const item of token.items)\n res += stringifyItem(item);\n for (const st of token.end)\n res += st.source;\n return res;\n }\n case 'document': {\n let res = stringifyItem(token);\n if (token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n default: {\n let res = token.source;\n if ('end' in token && token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n let res = '';\n for (const st of start)\n res += st.source;\n if (key)\n res += stringifyToken(key);\n if (sep)\n for (const st of sep)\n res += st.source;\n if (value)\n res += stringifyToken(value);\n return res;\n}\n\nexports.stringify = stringify;\n",
70
70
  "'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` – Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` – Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` – Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` – The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n",
71
71
  "'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n",
72
- "'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === cst.BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield cst.DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return yield* this.parseBlockStart();\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield cst.FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield cst.SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield cst.SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n switch (this.charAt(0)) {\n case '!':\n return ((yield* this.pushTag()) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '&':\n return ((yield* this.pushUntil(isNotAnchorChar)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n return ((yield* this.pushCount(1)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n }\n }\n }\n return 0;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexports.Lexer = Lexer;\n",
72
+ "'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === cst.BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield cst.DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return 'block-start';\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield cst.FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield cst.SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield cst.SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n let n = 0;\n loop: while (true) {\n switch (this.charAt(0)) {\n case '!':\n n += yield* this.pushTag();\n n += yield* this.pushSpaces(true);\n continue loop;\n case '&':\n n += yield* this.pushUntil(isNotAnchorChar);\n n += yield* this.pushSpaces(true);\n continue loop;\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n continue loop;\n }\n }\n }\n break loop;\n }\n return n;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexports.Lexer = Lexer;\n",
73
73
  "'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexports.LineCounter = LineCounter;\n",
74
- "'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n Array.prototype.push.apply(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n Array.prototype.push.apply(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n",
74
+ "'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction arrayPushArray(target, source) {\n // May exhaust call stack with large `source` array\n if (source.length < 1e5)\n Array.prototype.push.apply(target, source);\n else\n for (let i = 0; i < source.length; ++i)\n target.push(source[i]);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n arrayPushArray(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n arrayPushArray(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n",
75
75
  "'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (identity.isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n",
76
- "import type { SlotDef, SlotCategory } from './types.js';\n\n/** All 33 Mk4 canonical slots */\nexport const SLOTS: SlotDef[] = [\n // Project Meta (3)\n { index: 1, path: 'project.name', label: 'Name', description: 'Project name', category: 'project' },\n { index: 2, path: 'project.goal', label: 'Goal', description: 'Goal (use case)', category: 'project' },\n { index: 3, path: 'project.main_language', label: 'Language', description: 'Primary language', category: 'project' },\n\n // Human Context (6)\n { index: 4, path: 'human_context.who', label: 'Who', description: 'Who is this for?', category: 'human' },\n { index: 5, path: 'human_context.what', label: 'What', description: 'What are they building', category: 'human' },\n { index: 6, path: 'human_context.why', label: 'Why', description: 'Why does it exist', category: 'human' },\n { index: 7, path: 'human_context.where', label: 'Where', description: 'Where does it run', category: 'human' },\n { index: 8, path: 'human_context.when', label: 'When', description: 'When was it started / timeline', category: 'human' },\n { index: 9, path: 'human_context.how', label: 'How', description: 'How is it built', category: 'human' },\n\n // Frontend Stack (4)\n { index: 10, path: 'stack.frontend', canonical: 'stack.framework', label: 'Framework', description: 'Framework (React, Svelte, etc.)', category: 'frontend' },\n { index: 11, path: 'stack.css_framework', canonical: 'stack.css', label: 'CSS', description: 'CSS framework', category: 'frontend' },\n { index: 12, path: 'stack.ui_library', label: 'UI Library', description: 'UI component library', category: 'frontend' },\n { index: 13, path: 'stack.state_management', canonical: 'stack.state', label: 'State', description: 'State management', category: 'frontend' },\n\n // Backend Stack (5)\n { index: 14, path: 'stack.backend', label: 'Backend', description: 'Backend framework', category: 'backend' },\n { index: 15, path: 'stack.api_type', canonical: 'stack.api', label: 'API', description: 'API style (REST, GraphQL, etc.)', category: 'backend' },\n { index: 16, path: 'stack.runtime', label: 'Runtime', description: 'Runtime (Node, Bun, Python, etc.)', category: 'backend' },\n { index: 17, path: 'stack.database', canonical: 'stack.db', label: 'Database', description: 'Database', category: 'backend' },\n { index: 18, path: 'stack.connection', label: 'Connection', description: 'Connection method (Prisma, etc.)', category: 'backend' },\n\n // Universal Stack (3)\n { index: 19, path: 'stack.hosting', label: 'Hosting', description: 'Hosting platform', category: 'universal' },\n { index: 20, path: 'stack.build', label: 'Build', description: 'Build tool', category: 'universal' },\n { index: 21, path: 'stack.cicd', label: 'CI/CD', description: 'CI/CD', category: 'universal' },\n\n // Enterprise Infra (5)\n { index: 22, path: 'stack.monorepo_tool', label: 'Monorepo', description: 'Monorepo tool', category: 'enterprise_infra' },\n { index: 23, path: 'stack.package_manager', canonical: 'stack.pkg_manager', label: 'Package Manager', description: 'Package manager', category: 'enterprise_infra' },\n { index: 24, path: 'stack.workspaces', label: 'Workspaces', description: 'Workspace configuration', category: 'enterprise_infra' },\n { index: 25, path: 'monorepo.packages_count', label: 'Packages', description: 'Number of packages', category: 'enterprise_infra' },\n { index: 26, path: 'monorepo.build_orchestrator', label: 'Build Orchestrator', description: 'Build orchestration tool', category: 'enterprise_infra' },\n\n // Enterprise App (4)\n { index: 27, path: 'stack.admin', label: 'Admin', description: 'Admin panel', category: 'enterprise_app' },\n { index: 28, path: 'stack.cache', label: 'Cache', description: 'Caching layer', category: 'enterprise_app' },\n { index: 29, path: 'stack.search', label: 'Search', description: 'Search engine', category: 'enterprise_app' },\n { index: 30, path: 'stack.storage', label: 'Storage', description: 'Object storage', category: 'enterprise_app' },\n\n // Enterprise Ops (3)\n { index: 31, path: 'monorepo.versioning_strategy', label: 'Versioning', description: 'Version strategy', category: 'enterprise_ops' },\n { index: 32, path: 'monorepo.shared_configs', label: 'Shared Configs', description: 'Shared configs', category: 'enterprise_ops' },\n { index: 33, path: 'monorepo.remote_cache', label: 'Remote Cache', description: 'Remote build cache', category: 'enterprise_ops' },\n];\n\n/** Slot lookup by path — dual-keyed (current on-wire `path` AND Mk4 `canonical`\n * where defined) so callers can look up by either name. See issue #66. */\nexport const SLOT_BY_PATH = new Map<string, SlotDef>(\n SLOTS.flatMap(s => s.canonical ? [[s.path, s], [s.canonical, s]] : [[s.path, s]])\n);\n\n/** Mk4 canonical → current on-wire path. Used by read helpers to resolve\n * a canonical name back to the path that read/write/kernel actually uses\n * today. Empty for slots whose path is already canonical. */\nexport const CANONICAL_TO_CURRENT: ReadonlyMap<string, string> = new Map(\n SLOTS.filter(s => s.canonical).map(s => [s.canonical as string, s.path])\n);\n\n/** Current on-wire path → Mk4 canonical. Used by display helpers when the\n * UI wants to surface the forward-spec name. */\nexport const CURRENT_TO_CANONICAL: ReadonlyMap<string, string> = new Map(\n SLOTS.filter(s => s.canonical).map(s => [s.path, s.canonical as string])\n);\n\n/** Resolve any path (legacy or canonical) to the slot definition. */\nexport function getSlotByAnyPath(path: string): SlotDef | undefined {\n return SLOT_BY_PATH.get(path);\n}\n\n/** Read a value from a .faf data object, checking both the slot's current\n * `path` and its Mk4 `canonical` (if defined). Returns the first non-undefined\n * value. Lets the cli read .faf files that contain either legacy or canonical\n * keys without forcing a migration. */\nexport function readSlotValue(\n data: Record<string, unknown>,\n slot: SlotDef\n): unknown {\n const tryPath = (p: string): unknown => {\n const parts = p.split('.');\n let cur: unknown = data;\n for (const part of parts) {\n if (cur && typeof cur === 'object' && part in (cur as Record<string, unknown>)) {\n cur = (cur as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return cur;\n };\n const primary = tryPath(slot.path);\n if (primary !== undefined) {return primary;}\n if (slot.canonical) {return tryPath(slot.canonical);}\n return undefined;\n}\n\n/** Slots grouped by category */\nexport function slotsByCategory(category: SlotCategory): SlotDef[] {\n return SLOTS.filter(s => s.category === category);\n}\n\n/** Base-tier slots (1-21) — used by score_faf */\nexport const BASE_SLOTS = SLOTS.filter(s => s.index <= 21);\n\n/** Enterprise-tier slots (1-33) — used by score_faf_enterprise */\nexport const ENTERPRISE_SLOTS = SLOTS;\n\n/** Placeholder values treated as Empty */\nexport const PLACEHOLDERS = new Set([\n 'describe your project goal',\n 'development teams',\n 'cloud platform',\n 'null',\n 'none',\n 'unknown',\n 'n/a',\n 'not applicable',\n]);\n\n/** Check if a value is a placeholder (empty) */\nexport function isPlaceholder(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {return true;}\n if (typeof value === 'string') {\n return PLACEHOLDERS.has(value.toLowerCase().trim());\n }\n if (Array.isArray(value) && value.length === 0) {return true;}\n if (typeof value === 'object' && Object.keys(value as object).length === 0) {return true;}\n return false;\n}\n\n/** App-type to active category mapping. The canonical 24-type ladder —\n * 21 detectable apps + `about` (non-app, 0 slots, owner-attested)\n * + `encyclopedia` (curated knowledge surface, FAFipedia and similar)\n * + `intent` (human-intent seed from builder.faf.one, not auto-detected).\n * (See v6.6.md doctrine memory + fafipedia-vs-grokipedia-architecture.)\n * Sorted ascending by active slot count for readability.\n *\n * v6.5.0 changes vs prior:\n * - Added `universal` to cli / library / mcp / frontend / data-science.\n * These types ship/build/CI somewhere — slotignoring those slots was\n * losing real signal. (cli/library: 9→12; mcp/data-science: 14→17;\n * frontend: 13→16.)\n * - Order is by ascending slot count, not insertion order.\n */\nexport const APP_TYPE_CATEGORIES: Record<string, SlotCategory[]> = {\n // 0 slots — non-app representation surface. Score is INHERITED, not calculated.\n // About Repos are public faces of private codebases (private source / public\n // about pattern, same shape as Anthropic's claude-code repo). They display\n // the source's Trophy badge; they don't earn one. Required: about.represents\n // (Wolfe-Jam/<source>). Optional: about.source_score (number). Scorer\n // short-circuits when app_type === 'about' — see scorer.ts.\n // Doctrine: memory/private-source-public-about-pattern.md.\n about: [],\n\n // 9 slots — minimal (project meta + human only)\n documentation: ['project', 'human'],\n // intent: the human-intent SEED type, produced by builder.faf.one — a human\n // captures name/goal + the 6 Ws (no stack yet). Same 9 active slots as\n // documentation, but named honestly: it is intent awaiting a stack. An AI that\n // fills the stack re-types it to the real app_type (cli/mcp/frontend/…). Reads\n // honestly even if abandoned (\"intent captured, never built\").\n intent: ['project', 'human'],\n // encyclopedia: same shape as documentation — content repo with project\n // metadata + human context. Used by FAFipedia and similar curated-knowledge\n // surfaces. Per fafipedia-vs-grokipedia-architecture doctrine, this is the\n // structured, git-versioned, agent-consumable knowledge layer. Each .fafi\n // file under an encyclopedia repo is itself a valid .faf (inclusion marker).\n encyclopedia: ['project', 'human'],\n\n // 12 slots — project + human + universal (build/ci/hosting matters)\n cli: ['project', 'human', 'universal'],\n library: ['project', 'human', 'universal'],\n sdk: ['project', 'human', 'universal'],\n wasm: ['project', 'human', 'universal'],\n html: ['project', 'human', 'universal'],\n // server-card: a published MCP Server Card (discovery manifest) — artifact-class\n // like sdk/wasm/html. Identity + human context + build/ship matter; frontend,\n // backend and DB are N/A. By design it carries the FAF context-block in the\n // card's `_meta[\"one.faf/context\"]` by default — so anyone generating a Server\n // Card through FAF gets FAF context for free. See faf-server-card-ref.\n 'server-card': ['project', 'human', 'universal'],\n\n // 16 slots — project + frontend + human + universal\n frontend: ['project', 'frontend', 'human', 'universal'],\n website: ['project', 'frontend', 'human', 'universal'],\n mobile: ['project', 'frontend', 'human', 'universal'],\n // browser/chrome extension — popup/content-script UI + build/CI/store\n // (manifest_version), NO backend. Detected via manifest_version in scanner.ts.\n extension: ['project', 'frontend', 'human', 'universal'],\n\n // 17 slots — project + backend + universal + human\n mcp: ['project', 'backend', 'human', 'universal'],\n backend: ['project', 'backend', 'universal', 'human'],\n 'data-science': ['project', 'backend', 'human', 'universal'],\n\n // 21 slots — full base ladder\n fullstack: ['project', 'frontend', 'backend', 'universal', 'human'],\n svelte: ['project', 'frontend', 'backend', 'universal', 'human'],\n framework: ['project', 'frontend', 'backend', 'universal', 'human'],\n 'monorepo-root': ['project', 'human', 'enterprise_infra', 'enterprise_app', 'enterprise_ops'],\n\n // 24-25 slots — platform / SaaS shapes (base + selected enterprise)\n mcpaas: ['project', 'backend', 'universal', 'human', 'enterprise_app', 'enterprise_ops'],\n saas: ['project', 'frontend', 'backend', 'universal', 'human', 'enterprise_app'],\n\n // 33 slots — full enterprise\n enterprise: ['project', 'frontend', 'backend', 'universal', 'human', 'enterprise_infra', 'enterprise_app', 'enterprise_ops'],\n};\n",
76
+ "import type { SlotDef, SlotCategory } from './types.js';\n\n/** All 33 Mk4 canonical slots */\nexport const SLOTS: SlotDef[] = [\n // Project Meta (3)\n { index: 1, path: 'project.name', label: 'Name', description: 'Project name', category: 'project' },\n { index: 2, path: 'project.goal', label: 'Goal', description: 'Goal (use case)', category: 'project' },\n { index: 3, path: 'project.main_language', label: 'Language', description: 'Primary language', category: 'project' },\n\n // Human Context (6)\n { index: 4, path: 'human_context.who', label: 'Who', description: 'Who is this for?', category: 'human' },\n { index: 5, path: 'human_context.what', label: 'What', description: 'What are they building', category: 'human' },\n { index: 6, path: 'human_context.why', label: 'Why', description: 'Why does it exist', category: 'human' },\n { index: 7, path: 'human_context.where', label: 'Where', description: 'Where does it run', category: 'human' },\n { index: 8, path: 'human_context.when', label: 'When', description: 'When was it started / timeline', category: 'human' },\n { index: 9, path: 'human_context.how', label: 'How', description: 'How is it built', category: 'human' },\n\n // Frontend Stack (4)\n { index: 10, path: 'stack.frontend', canonical: 'stack.framework', label: 'Framework', description: 'Framework (React, Svelte, etc.)', category: 'frontend' },\n { index: 11, path: 'stack.css_framework', canonical: 'stack.css', label: 'CSS', description: 'CSS framework', category: 'frontend' },\n { index: 12, path: 'stack.ui_library', label: 'UI Library', description: 'UI component library', category: 'frontend' },\n { index: 13, path: 'stack.state_management', canonical: 'stack.state', label: 'State', description: 'State management', category: 'frontend' },\n\n // Backend Stack (5)\n { index: 14, path: 'stack.backend', label: 'Backend', description: 'Backend framework', category: 'backend' },\n { index: 15, path: 'stack.api_type', canonical: 'stack.api', label: 'API', description: 'API style (REST, GraphQL, etc.)', category: 'backend' },\n { index: 16, path: 'stack.runtime', label: 'Runtime', description: 'Runtime (Node, Bun, Python, etc.)', category: 'backend' },\n { index: 17, path: 'stack.database', canonical: 'stack.db', label: 'Database', description: 'Database', category: 'backend' },\n { index: 18, path: 'stack.connection', label: 'Connection', description: 'Connection method (Prisma, etc.)', category: 'backend' },\n\n // Universal Stack (3)\n { index: 19, path: 'stack.hosting', label: 'Hosting', description: 'Hosting platform', category: 'universal' },\n { index: 20, path: 'stack.build', label: 'Build', description: 'Build tool', category: 'universal' },\n { index: 21, path: 'stack.cicd', label: 'CI/CD', description: 'CI/CD', category: 'universal' },\n\n // Enterprise Infra (5)\n { index: 22, path: 'stack.monorepo_tool', label: 'Monorepo', description: 'Monorepo tool', category: 'enterprise_infra' },\n { index: 23, path: 'stack.package_manager', canonical: 'stack.pkg_manager', label: 'Package Manager', description: 'Package manager', category: 'enterprise_infra' },\n { index: 24, path: 'stack.workspaces', label: 'Workspaces', description: 'Workspace configuration', category: 'enterprise_infra' },\n { index: 25, path: 'monorepo.packages_count', label: 'Packages', description: 'Number of packages', category: 'enterprise_infra' },\n { index: 26, path: 'monorepo.build_orchestrator', label: 'Build Orchestrator', description: 'Build orchestration tool', category: 'enterprise_infra' },\n\n // Enterprise App (4)\n { index: 27, path: 'stack.admin', label: 'Admin', description: 'Admin panel', category: 'enterprise_app' },\n { index: 28, path: 'stack.cache', label: 'Cache', description: 'Caching layer', category: 'enterprise_app' },\n { index: 29, path: 'stack.search', label: 'Search', description: 'Search engine', category: 'enterprise_app' },\n { index: 30, path: 'stack.storage', label: 'Storage', description: 'Object storage', category: 'enterprise_app' },\n\n // Enterprise Ops (3)\n { index: 31, path: 'monorepo.versioning_strategy', label: 'Versioning', description: 'Version strategy', category: 'enterprise_ops' },\n { index: 32, path: 'monorepo.shared_configs', label: 'Shared Configs', description: 'Shared configs', category: 'enterprise_ops' },\n { index: 33, path: 'monorepo.remote_cache', label: 'Remote Cache', description: 'Remote build cache', category: 'enterprise_ops' },\n];\n\n/** Slot lookup by path — dual-keyed (current on-wire `path` AND Mk4 `canonical`\n * where defined) so callers can look up by either name. See issue #66. */\nexport const SLOT_BY_PATH = new Map<string, SlotDef>(\n SLOTS.flatMap(s => s.canonical ? [[s.path, s], [s.canonical, s]] : [[s.path, s]])\n);\n\n/** Mk4 canonical → current on-wire path. Used by read helpers to resolve\n * a canonical name back to the path that read/write/kernel actually uses\n * today. Empty for slots whose path is already canonical. */\nexport const CANONICAL_TO_CURRENT: ReadonlyMap<string, string> = new Map(\n SLOTS.filter(s => s.canonical).map(s => [s.canonical as string, s.path])\n);\n\n/** Current on-wire path → Mk4 canonical. Used by display helpers when the\n * UI wants to surface the forward-spec name. */\nexport const CURRENT_TO_CANONICAL: ReadonlyMap<string, string> = new Map(\n SLOTS.filter(s => s.canonical).map(s => [s.path, s.canonical as string])\n);\n\n/** Resolve any path (legacy or canonical) to the slot definition. */\nexport function getSlotByAnyPath(path: string): SlotDef | undefined {\n return SLOT_BY_PATH.get(path);\n}\n\n/** Read a value from a .faf data object, checking both the slot's current\n * `path` and its Mk4 `canonical` (if defined). Returns the first non-undefined\n * value. Lets the cli read .faf files that contain either legacy or canonical\n * keys without forcing a migration. */\nexport function readSlotValue(\n data: Record<string, unknown>,\n slot: SlotDef\n): unknown {\n const tryPath = (p: string): unknown => {\n const parts = p.split('.');\n let cur: unknown = data;\n for (const part of parts) {\n if (cur && typeof cur === 'object' && part in (cur as Record<string, unknown>)) {\n cur = (cur as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return cur;\n };\n const primary = tryPath(slot.path);\n if (primary !== undefined) {return primary;}\n if (slot.canonical) {return tryPath(slot.canonical);}\n return undefined;\n}\n\n/** Slots grouped by category */\nexport function slotsByCategory(category: SlotCategory): SlotDef[] {\n return SLOTS.filter(s => s.category === category);\n}\n\n/** Base-tier slots (1-21) — used by score_faf */\nexport const BASE_SLOTS = SLOTS.filter(s => s.index <= 21);\n\n/** Enterprise-tier slots (1-33) — used by score_faf_enterprise */\nexport const ENTERPRISE_SLOTS = SLOTS;\n\n/** Placeholder values treated as Empty */\nexport const PLACEHOLDERS = new Set([\n 'describe your project goal',\n 'development teams',\n 'cloud platform',\n 'null',\n 'none',\n 'unknown',\n 'n/a',\n 'not applicable',\n]);\n\n/** Check if a value is a placeholder (empty) */\nexport function isPlaceholder(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {return true;}\n if (typeof value === 'string') {\n return PLACEHOLDERS.has(value.toLowerCase().trim());\n }\n if (Array.isArray(value) && value.length === 0) {return true;}\n if (typeof value === 'object' && Object.keys(value as object).length === 0) {return true;}\n return false;\n}\n\n/** App-type to active category mapping. The canonical 24-type ladder —\n * detectable apps + `encyclopedia` (curated knowledge) + `intent` (seed).\n * About is NOT an app_type — it is a repo role (`about.represents`).\n * (See v6.6.md doctrine memory + fafipedia-vs-grokipedia-architecture.)\n * Sorted ascending by active slot count for readability.\n *\n * v6.5.0 changes vs prior:\n * - Added `universal` to cli / library / mcp / frontend / data-science.\n * These types ship/build/CI somewhere — slotignoring those slots was\n * losing real signal. (cli/library: 9→12; mcp/data-science: 14→17;\n * frontend: 13→16.)\n * - Order is by ascending slot count, not insertion order.\n */\nexport const APP_TYPE_CATEGORIES: Record<string, SlotCategory[]> = {\n // 9 slots — minimal (project meta + human only)\n documentation: ['project', 'human'],\n // intent: the human-intent SEED type, produced by builder.faf.one — a human\n // captures name/goal + the 6 Ws (no stack yet). Same 9 active slots as\n // documentation, but named honestly: it is intent awaiting a stack. An AI that\n // fills the stack re-types it to the real app_type (cli/mcp/frontend/…). Reads\n // honestly even if abandoned (\"intent captured, never built\").\n intent: ['project', 'human'],\n // encyclopedia: same shape as documentation — content repo with project\n // metadata + human context. Used by FAFipedia and similar curated-knowledge\n // surfaces. Per fafipedia-vs-grokipedia-architecture doctrine, this is the\n // structured, git-versioned, agent-consumable knowledge layer. Each .fafi\n // file under an encyclopedia repo is itself a valid .faf (inclusion marker).\n encyclopedia: ['project', 'human'],\n\n // 12 slots — project + human + universal (build/ci/hosting matters)\n cli: ['project', 'human', 'universal'],\n library: ['project', 'human', 'universal'],\n sdk: ['project', 'human', 'universal'],\n wasm: ['project', 'human', 'universal'],\n html: ['project', 'human', 'universal'],\n // server-card: a published MCP Server Card (discovery manifest) — artifact-class\n // like sdk/wasm/html. Identity + human context + build/ship matter; frontend,\n // backend and DB are N/A. By design it carries the FAF context-block in the\n // card's `_meta[\"one.faf/context\"]` by default — so anyone generating a Server\n // Card through FAF gets FAF context for free. See faf-server-card-ref.\n 'server-card': ['project', 'human', 'universal'],\n\n // 16 slots — project + frontend + human + universal\n frontend: ['project', 'frontend', 'human', 'universal'],\n website: ['project', 'frontend', 'human', 'universal'],\n mobile: ['project', 'frontend', 'human', 'universal'],\n // Swift / Apple client apps (iOS/macOS/…) — same ladder as mobile; name is\n // `app` so SPM libraries/servers/CLIs are not forced into \"mobile\".\n app: ['project', 'frontend', 'human', 'universal'],\n // browser/chrome extension — popup/content-script UI + build/CI/store\n // (manifest_version), NO backend. Detected via manifest_version in scanner.ts.\n extension: ['project', 'frontend', 'human', 'universal'],\n\n // 17 slots — project + backend + universal + human\n mcp: ['project', 'backend', 'human', 'universal'],\n backend: ['project', 'backend', 'universal', 'human'],\n 'data-science': ['project', 'backend', 'human', 'universal'],\n\n // 21 slots — full base ladder\n fullstack: ['project', 'frontend', 'backend', 'universal', 'human'],\n svelte: ['project', 'frontend', 'backend', 'universal', 'human'],\n framework: ['project', 'frontend', 'backend', 'universal', 'human'],\n 'monorepo-root': ['project', 'human', 'enterprise_infra', 'enterprise_app', 'enterprise_ops'],\n\n // 24-25 slots — platform / SaaS shapes (base + selected enterprise)\n mcpaas: ['project', 'backend', 'universal', 'human', 'enterprise_app', 'enterprise_ops'],\n saas: ['project', 'frontend', 'backend', 'universal', 'human', 'enterprise_app'],\n\n // 33 slots — full enterprise\n enterprise: ['project', 'frontend', 'backend', 'universal', 'human', 'enterprise_infra', 'enterprise_app', 'enterprise_ops'],\n};\n",
77
77
  "// ANSI color helpers — zero deps\n// Design: black/white text by default. Cyan + orange are the only brand colors.\nconst esc = (code: string) => (s: string) => `\\x1b[${code}m${s}\\x1b[0m`;\n\nexport const bold = esc('1');\nexport const dim = esc('2');\nexport const italic = esc('3');\n\n// Brand colors only — no red/green/yellow rainbow.\n// FAF_HEX is the single source of record for brand hex — ANSI fns below\n// AND HTML renders (project.html) derive from it. Change here, propagates.\nexport const FAF_HEX = {\n cyan: '#00D4D4', // Silver tier · interaction\n cyanDeep: '#0E8C8C', // Bronze tier — same cyan lane, one rung down\n orange: '#FF6B35', // Trophy/Gold · CTAs\n} as const;\n\nexport const fafCyan = (s: string) => `\\x1b[38;2;0;212;212m${s}\\x1b[0m`; // #00D4D4\nexport const fafCyanDeep = (s: string) => `\\x1b[38;2;14;140;140m${s}\\x1b[0m`; // #0E8C8C\nexport const orange = (s: string) => `\\x1b[38;5;208m${s}\\x1b[0m`;\n",
78
78
  "import type { TierInfo } from './types.js';\nimport { bold, dim, fafCyan, fafCyanDeep, orange } from '../ui/colors.js';\n\n/** Tier boundaries — ordered from highest to lowest\n *\n * Indicators (work surfaces — CLI · code · docs · receipts):\n * ✪ Proof Seal (Trophy 100% — work glyph; social still uses 🏆; brand uses Trophy Mark PNG)\n * ★ filled star (gold — orange)\n * ◆ filled diamond (silver — cyan)\n * ◇ open diamond (bronze — deep cyan, one rung below silver)\n * ● filled circle (mid tiers)\n * ○ open circle (low — dim)\n * ♡ heart (empty — good luck)\n *\n * All three 100% glyphs mean the same score: ✪ work · 🏆 social · Trophy Mark (PNG) visual.\n */\nexport const TIERS: TierInfo[] = [\n { name: 'TROPHY', indicator: `${orange('✪')} ${orange('TROPHY')}`, threshold: 100 },\n { name: 'GOLD', indicator: `${orange(bold('★'))} ${orange('GOLD')}`, threshold: 99 },\n { name: 'SILVER', indicator: `${fafCyan('◆')} ${fafCyan('SILVER')}`, threshold: 95 },\n { name: 'BRONZE', indicator: `${fafCyanDeep('◇')} ${fafCyanDeep('BRONZE')}`, threshold: 85 },\n { name: 'GREEN', indicator: `${bold('●')} GREEN`, threshold: 70 },\n { name: 'YELLOW', indicator: `${dim('●')} YELLOW`, threshold: 55 },\n { name: 'RED', indicator: `${dim('○')} RED`, threshold: 1 },\n { name: 'WHITE', indicator: `${dim('♡')}`, threshold: 0 },\n];\n\n/** Get the display badge for a tier */\nexport function tierBadge(tier: TierInfo): string {\n return tier.indicator;\n}\n\n/** Get tier info for a given score */\nexport function getTier(score: number): TierInfo {\n for (const tier of TIERS) {\n if (score >= tier.threshold) {return tier;}\n }\n return TIERS[TIERS.length - 1]; // White\n}\n\n/** Get the next tier above the current score (for progress display) */\nexport function getNextTier(score: number): TierInfo | null {\n const current = getTier(score);\n const idx = TIERS.indexOf(current);\n return idx > 0 ? TIERS[idx - 1] : null;\n}\n",
79
79
  "import type { KernelScoreResult, FafbInfo } from '../core/types.js';\n\n// faf-scoring-kernel is CommonJS with synchronous WASM loading\n \nlet kernel: typeof import('faf-scoring-kernel') | null = null;\n\nfunction getKernel(): typeof import('faf-scoring-kernel') {\n if (kernel) {return kernel;}\n try {\n const loaded = require('faf-scoring-kernel') as typeof import('faf-scoring-kernel');\n kernel = loaded;\n return loaded;\n } catch {\n throw new Error(\n 'faf-scoring-kernel not installed.\\n\\n Run: npm install faf-scoring-kernel\\n'\n );\n }\n}\n\n/** Score a .faf YAML string (21 base slots) */\nexport function score(yaml: string): KernelScoreResult {\n return JSON.parse(getKernel().score_faf(yaml));\n}\n\n/** Score a .faf YAML string (33 enterprise slots) */\nexport function scoreEnterprise(yaml: string): KernelScoreResult {\n return JSON.parse(getKernel().score_faf_enterprise(yaml));\n}\n\n/** Validate .faf YAML */\nexport function validate(yaml: string): boolean {\n return getKernel().validate_faf(yaml);\n}\n\n/** Compile .faf YAML to FAFb binary */\nexport function compile(yaml: string): Uint8Array {\n return getKernel().compile_fafb(yaml);\n}\n\n/** Decompile FAFb binary to JSON info */\nexport function decompile(bytes: Uint8Array): FafbInfo {\n return JSON.parse(getKernel().decompile_fafb(bytes));\n}\n\n/** Get FAFb file metadata */\nexport function fafbInfo(bytes: Uint8Array): FafbInfo {\n return JSON.parse(getKernel().fafb_info(bytes));\n}\n\n/** Get FAFb binary metadata (name, version, source) */\nexport interface FafbMeta {\n source: string;\n name: string;\n faf_version: string;\n}\n\nexport function scoreFafb(bytes: Uint8Array): FafbMeta {\n return JSON.parse(getKernel().score_fafb(bytes));\n}\n\n/** Get WASM SDK version */\nexport function sdkVersion(): string {\n return getKernel().sdk_version();\n}\n",
80
- "import type { KernelScoreResult, ScoreResult } from './types.js';\nimport { getTier, TIERS } from './tiers.js';\nimport * as kernel from '../wasm/kernel.js';\n\n/** Convert kernel result into enriched ScoreResult */\nexport function enrichScore(kernel: KernelScoreResult): ScoreResult {\n return {\n score: kernel.score,\n tier: getTier(kernel.score),\n populated: kernel.populated,\n empty: kernel.empty,\n ignored: kernel.ignored,\n active: kernel.active,\n total: kernel.total,\n slots: kernel.slots,\n };\n}\n\n/**\n * Score a .faf YAML string with About-Repo short-circuit.\n *\n * About Repos (app_type: about) are documentation surfaces, not apps.\n * They DISPLAY the source codebase's Trophy, they don't earn one. The\n * scorer reads `about.source_score` from the project.faf and emits that\n * directly — no slot scoring, no kernel call.\n *\n * Truth-printing is preserved by owner accountability: the score is\n * their attestation of the source's score; they're on the hook if it's wrong.\n *\n * Required for about: `app_type: about` + `about.represents: <owner>/<repo>`.\n * Optional: `about.source_score: <number>` — without it, score is -1\n * (renders as \"—\" honest unknown).\n *\n * Doctrine: memory/private-source-public-about-pattern.md.\n *\n * For non-about types: delegates to kernel.score() + enrichScore().\n */\nexport function scoreFafYaml(yaml: string): ScoreResult {\n // Light regex detection — avoids pulling in a full YAML parser on the\n // hot path. Matches `app_type: about` at the document root (line start).\n const isAboutType = /^\\s*app_type:\\s*about\\s*$/m.test(yaml);\n\n if (isAboutType) {\n // Read declared source_score under the `about:` block.\n const sourceScoreMatch = yaml.match(/^\\s+source_score:\\s*(\\d+)\\s*$/m);\n const declared = sourceScoreMatch ? parseInt(sourceScoreMatch[1], 10) : -1;\n const score = (declared >= 0 && declared <= 100) ? declared : -1;\n // Read `about.represents` for downstream consumers (TAF receipts etc.).\n const representsMatch = yaml.match(/^\\s+represents:\\s*(\\S+)\\s*$/m);\n const represents = representsMatch ? representsMatch[1] : undefined;\n // About repos have no scored slots — return a ScoreResult with zeroed\n // counts but a real score+tier. White ♡ when source_score unknown.\n // `inherited: true` flags this as an attested score, not calculated —\n // TAF + display code can distinguish.\n return {\n score,\n tier: score >= 0 ? getTier(score) : TIERS[TIERS.length - 1], // White when unknown\n populated: 0,\n empty: 0,\n ignored: 0,\n active: 0,\n total: 0,\n slots: {},\n inherited: true,\n represents,\n };\n }\n\n // Normal app: kernel does the math.\n return enrichScore(kernel.score(yaml));\n}\n",
81
- "import type { FafData } from './types.js';\n\n/** Validate a parsed .faf object */\nexport function validateFaf(data: unknown): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!data || typeof data !== 'object') {\n errors.push('File is not a valid YAML mapping');\n return { valid: false, errors };\n }\n\n const faf = data as FafData;\n\n if (!faf.faf_version) {\n errors.push('Missing required field: faf_version');\n }\n\n if (!faf.project?.name) {\n errors.push('Missing required field: project.name');\n }\n\n // About Repo validation — when app_type is 'about', about.represents is\n // required. Without it, the About says \"I'm about something\" but doesn't\n // tell anyone WHAT — useless to AI consumers who can't trace back to the\n // source codebase. See memory/private-source-public-about-pattern.md.\n if (faf.app_type === 'about') {\n if (!faf.about?.represents) {\n errors.push(\"app_type 'about' requires about.represents (owner/repo of the source codebase)\");\n } else if (!/^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+$/.test(faf.about.represents)) {\n errors.push(`about.represents must be \"owner/repo\" format (got: ${faf.about.represents})`);\n }\n // source_score is optional — missing renders as \"—\" (White ♡). When\n // present, must be 0-100.\n if (faf.about?.source_score !== undefined) {\n const s = faf.about.source_score;\n if (typeof s !== 'number' || s < 0 || s > 100) {\n errors.push(`about.source_score must be a number 0-100 (got: ${s})`);\n }\n }\n }\n\n return { valid: errors.length === 0, errors };\n}\n",
80
+ "/** About is a repo role, not an app_type.\n *\n * Signal: the `about:` block with `represents: owner/repo`.\n * Score is inherited (`about.source_score`) or unknown (−1 / —).\n */\n\nexport const REPRESENTS_RE = /^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+$/;\n\nexport interface AboutDecl {\n represents: string;\n sourceScore: number; // −1 when missing or out of range\n}\n\n/** Parsed .faf object: About iff about.represents is a non-empty string. */\nexport function isAboutFaf(data: { about?: { represents?: unknown } } | null | undefined): boolean {\n const r = data?.about?.represents;\n return typeof r === 'string' && r.length > 0;\n}\n\n/**\n * Hot-path YAML detect — no parser.\n * About = an `about:` map that contains `represents:`.\n * `app_type: about` is not a type and does not trigger this.\n */\nexport function aboutFromYaml(yaml: string): AboutDecl | null {\n const block = yaml.match(/^about:\\s*\\n((?:[ \\t]+.*\\n?)*)/m);\n if (!block) {return null;}\n const body = block[1] ?? '';\n const representsMatch = body.match(/^[ \\t]+represents:\\s*(\\S+)\\s*$/m);\n if (!representsMatch) {return null;}\n const represents = representsMatch[1];\n const scoreMatch = body.match(/^[ \\t]+source_score:\\s*(\\d+)\\s*$/m);\n let sourceScore = -1;\n if (scoreMatch) {\n const n = parseInt(scoreMatch[1], 10);\n if (n >= 0 && n <= 100) {sourceScore = n;}\n }\n return { represents, sourceScore };\n}\n",
81
+ "import type { KernelScoreResult, ScoreResult } from './types.js';\nimport { getTier, TIERS } from './tiers.js';\nimport * as kernel from '../wasm/kernel.js';\nimport { aboutFromYaml } from './about.js';\n\n/** Convert kernel result into enriched ScoreResult */\nexport function enrichScore(kernel: KernelScoreResult): ScoreResult {\n return {\n score: kernel.score,\n tier: getTier(kernel.score),\n populated: kernel.populated,\n empty: kernel.empty,\n ignored: kernel.ignored,\n active: kernel.active,\n total: kernel.total,\n slots: kernel.slots,\n };\n}\n\n/**\n * Score a .faf YAML string with About-Repo short-circuit.\n *\n * About is a repo role, not an app_type. The signal is the `about:` block\n * (`about.represents`). The scorer reads `about.source_score` and emits\n * that directly — no slot scoring, no kernel call.\n *\n * Optional: `about.source_score: <number>` — without it, score is -1\n * (renders as \"—\" honest unknown).\n *\n * Doctrine: memory/private-source-public-about-pattern.md.\n *\n * For apps: delegates to kernel.score() + enrichScore().\n */\nexport function scoreFafYaml(yaml: string): ScoreResult {\n const about = aboutFromYaml(yaml);\n if (about) {\n const score = about.sourceScore;\n return {\n score,\n tier: score >= 0 ? getTier(score) : TIERS[TIERS.length - 1],\n populated: 0,\n empty: 0,\n ignored: 0,\n active: 0,\n total: 0,\n slots: {},\n inherited: true,\n represents: about.represents,\n };\n }\n\n return enrichScore(kernel.score(yaml));\n}\n",
82
+ "import type { FafData } from './types.js';\nimport { REPRESENTS_RE, isAboutFaf } from './about.js';\n\n/** Validate a parsed .faf object */\nexport function validateFaf(data: unknown): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!data || typeof data !== 'object') {\n errors.push('File is not a valid YAML mapping');\n return { valid: false, errors };\n }\n\n const faf = data as FafData;\n\n if (!faf.faf_version) {\n errors.push('Missing required field: faf_version');\n }\n\n if (!faf.project?.name) {\n errors.push('Missing required field: project.name');\n }\n\n // about is a repo role, not an app_type.\n if (faf.app_type === 'about') {\n errors.push(\"about is not an app_type — declare about.represents (owner/repo) instead\");\n }\n\n // About Repo: the about: block is the signal. represents is required.\n if (faf.about !== undefined) {\n if (!isAboutFaf(faf) || typeof faf.about.represents !== 'string') {\n errors.push('about.represents is required (owner/repo of the source codebase)');\n } else if (!REPRESENTS_RE.test(faf.about.represents)) {\n errors.push(`about.represents must be \"owner/repo\" format (got: ${faf.about.represents})`);\n }\n if (faf.about.source_score !== undefined) {\n const s = faf.about.source_score;\n if (typeof s !== 'number' || s < 0 || s > 100) {\n errors.push(`about.source_score must be a number 0-100 (got: ${s})`);\n }\n }\n }\n\n return { valid: errors.length === 0, errors };\n}\n",
82
83
  "import { readFileSync, writeFileSync, existsSync } from 'fs';\nimport { join, dirname, basename } from 'path';\nimport { execFileSync } from 'child_process';\nimport { parse, stringify } from 'yaml';\nimport type { FafData } from '../core/types.js';\n\n/** Read and parse a .faf file */\nexport function readFaf(path: string): FafData {\n const text = readFileSync(path, 'utf-8');\n return parse(text) as FafData;\n}\n\n/** Write a .faf file from data.\n *\n * If `data._meta.found` is present, it's stripped before serialization and\n * rendered as a `# found: <list>` YAML comment next to the `type:` field —\n * Glass Hood doctrine: the user sees WHY the cli classified the project as\n * it did. `_meta` is a runtime hint, never a serialized .faf field. */\n/** Serialize .faf data to YAML text (the exact bytes writeFaf would write).\n * Strips runtime `_meta` and renders its `found` rationale as a `# found:`\n * comment by `type:`. Used by writeFaf and by `faf git --stdout`. */\nexport function serializeFaf(data: FafData): string {\n const meta = (data as FafData & { _meta?: { found?: string[] } })._meta;\n // Strip _meta before serialization — it's never part of the .faf schema.\n const cleanData: FafData = { ...data };\n delete (cleanData as Record<string, unknown>)._meta;\n\n let text = stringify(cleanData, { lineWidth: 0 });\n\n // Inject `# found: ...` next to `type:` if rationale was provided.\n if (meta?.found && meta.found.length > 0) {\n const comment = meta.found.join(' + ');\n // Match ` type: <value>` — only inject if there isn't already a comment.\n text = text.replace(\n /^(\\s+type:\\s+\\S+)(\\s*)$/m,\n (match, prefix: string, trailing: string) => {\n if (trailing.includes('#')) {return match;}\n return `${prefix} # found: ${comment}`;\n },\n );\n }\n\n return text;\n}\n\nexport function writeFaf(path: string, data: FafData): void {\n writeFileSync(path, serializeFaf(data), 'utf-8');\n}\n\n/** Read raw YAML text from a .faf file */\nexport function readFafRaw(path: string): string {\n return readFileSync(path, 'utf-8');\n}\n\n/** Parse .faf data from a YAML string — e.g. the output of `git show <ref>:project.faf`.\n * The readers above are path-only; `faf diff` needs to parse a version that\n * lives in git history, never on disk. */\nexport function readFafFromString(text: string): FafData {\n return parse(text) as FafData;\n}\n\n/** Find the .faf file in a directory (walks up) */\nexport function findFafFile(dir: string = process.cwd()): string | null {\n const candidates = ['project.faf', '.faf'];\n // Use path.join for cross-platform separator handling — earlier\n // template-literal `${dir}/${name}` produced forward-slash paths\n // even on Windows, breaking strict path equality and any consumer\n // that path-compared the result.\n for (const name of candidates) {\n const full = join(dir, name);\n if (existsSync(full)) {return full;}\n }\n // Walk up one level — use path.dirname for cross-platform parent\n // resolution. The earlier regex `dir.replace(/\\/[^/]+$/, '')`\n // only matched POSIX separators and silently no-op'd on Windows.\n const parent = dirname(dir);\n if (parent !== dir) {\n for (const name of candidates) {\n const full = join(parent, name);\n if (existsSync(full)) {return full;}\n }\n }\n return null;\n}\n\n/** Repo-root-relative path of a .faf, computed BY git — runtime- and OS-independent.\n * Replaces `path.relative(top, fafPath)`, which breaks on Windows when git's\n * long-form `--show-toplevel` and an 8.3 short-name cwd (e.g. `RUNNER~1`) disagree.\n * git resolves both representations internally and emits forward slashes; works for\n * tracked AND untracked .faf (it's the cwd's location under the root, not file status).\n * Caller must already be inside a git repo. */\nexport function gitRepoRel(fafPath: string, cwd: string = process.cwd()): string {\n const prefix = execFileSync('git', ['-C', dirname(fafPath), 'rev-parse', '--show-prefix'], {\n cwd,\n encoding: 'utf-8',\n }).trim(); // '' at repo root, or 'sub/dir/' (trailing slash)\n return prefix + basename(fafPath);\n}\n",
83
84
  "'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n",
84
85
  "import { writeFileSync } from 'fs';\nimport { join } from 'path';\nimport type { FafData, ScoreResult } from '../core/types.js';\nimport { FAF_HEX } from '../ui/colors.js';\n\n/**\n * project.html — the visual render of project.faf.\n *\n * A \"show-me\" for .faf: rendered from the current project.faf, opens in any\n * browser, zero deps, self-contained. NOT a format, NOT a mime-type, NOT an\n * IANA application — a derived view that registers nothing and adds zero spec\n * surface. The inverse of style-source.html (that one is authored; this is\n * rendered). Deterministic on purpose: no timestamps, so a regenerate only\n * diffs when project.faf actually changed (versioned like .fafb).\n *\n * Humans like visuals. We gave them one.\n */\n\n// Tier glyph + accent. Glyphs = canonical tier symbols (core/tiers.ts).\n// BRAND colors DERIVE from ui/colors.ts FAF_HEX (single source — change there,\n// propagates to CLI + here). STATUS: warning/error hex for HTML (CLI has no\n// status band colors). Two registers: brand (orange Trophy/Gold · cyan Silver ·\n// deep-cyan Bronze)\n// + status (HTML affords color the CLI can't). Green #00BF63 reserved for the\n// GO/✅ all-pass state, never a tier band. Neutral = theme grey, not brand.\nconst ORANGE = FAF_HEX.orange; // brand — derived\nconst CYAN = FAF_HEX.cyan; // brand — derived (Silver)\nconst CYAN_DEEP = FAF_HEX.cyanDeep; // brand — derived (Bronze: same lane, one rung down)\nconst WARNING = '#FF9500'; // --faf-warning (status: caution)\nconst ERROR = '#FF3B30'; // --faf-error (status: danger)\nconst NEUTRAL_BRIGHT = '#E6EDF3'; // theme grey — \"good, not done, no alarm\"\nconst NEUTRAL_DIM = '#6E7681'; // theme grey — empty\nconst TIER_VIS: Record<string, { glyph: string; color: string }> = {\n TROPHY: { glyph: '✪', color: ORANGE },\n GOLD: { glyph: '★', color: ORANGE },\n SILVER: { glyph: '◆', color: CYAN },\n BRONZE: { glyph: '◇', color: CYAN_DEEP },\n GREEN: { glyph: '●', color: NEUTRAL_BRIGHT },\n YELLOW: { glyph: '●', color: WARNING },\n RED: { glyph: '○', color: ERROR },\n WHITE: { glyph: '♡', color: NEUTRAL_DIM },\n};\n\n/** HTML-escape — project.faf content is arbitrary; never inject raw. */\nfunction esc(v: unknown): string {\n return String(v ?? '')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nconst SIX_W = ['who', 'what', 'why', 'where', 'when', 'how'] as const;\n\nfunction rows(entries: [string, unknown][]): string {\n return entries\n .filter(([, v]) => v !== undefined && v !== null && String(v).trim() !== '')\n .map(\n ([k, v]) =>\n `<div class=\"row\"><div class=\"k\">${esc(k)}</div><div class=\"v\">${esc(v)}</div></div>`,\n )\n .join('\\n');\n}\n\n/** Render project.faf data + its score into a self-contained HTML string. */\nexport function generateProjectHtml(\n data: FafData,\n result: ScoreResult,\n fafPath = 'project.faf',\n): string {\n const name = esc(data.project?.name ?? 'Project');\n const tierName = result.tier?.name ?? 'WHITE';\n const vis = TIER_VIS[tierName] ?? TIER_VIS.WHITE;\n const scoreText = result.inherited\n ? result.represents\n ? `inherited from ${esc(result.represents)}`\n : 'inherited'\n : `${result.score}%`;\n // Trophy = earned (not an About-repo inherited 100 — that one displays, doesn't earn).\n const isTrophy = tierName === 'TROPHY' && !result.inherited;\n\n // 6 W's first, in canonical order, then any other human_context keys.\n const hc = data.human_context ?? {};\n const sixW: [string, unknown][] = SIX_W.map((w) => [w, hc[w]]);\n const otherHc = Object.entries(hc).filter(\n ([k]) => !SIX_W.includes(k as (typeof SIX_W)[number]),\n );\n\n const projectMeta: [string, unknown][] = [\n ['goal', data.project?.goal],\n ['main_language', data.project?.main_language],\n ['type', data.project?.type],\n ['framework', (data.project as Record<string, unknown> | undefined)?.framework],\n ['faf_version', data.faf_version],\n ];\n\n const stackEntries = Object.entries(data.stack ?? {});\n const stackActive = stackEntries.filter(\n ([, v]) => v && v !== 'slotignored' && String(v).trim() !== '',\n );\n const stackIgnored = stackEntries.filter(([, v]) => v === 'slotignored').length;\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${name} — project.faf</title>\n<meta name=\"description\" content=\"Visual render of project.faf. Authored by faf — humans like visuals, we gave them one.\">\n<meta name=\"robots\" content=\"index,follow\">\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;background:#0a0a0a;color:#e6edf3;line-height:1.55;padding:48px 20px}\n.wrap{max-width:880px;margin:0 auto}\n.bar{height:3px;border-radius:2px;background:linear-gradient(90deg,transparent,${vis.color},transparent);margin-bottom:40px}\nheader{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap;margin-bottom:8px}\nh1{font-size:2.2rem;font-weight:800;letter-spacing:-1px}\n.badge{font-size:1.05rem;font-weight:800;color:${vis.color};white-space:nowrap}\n.score{font-size:1.05rem;font-weight:700;color:#8b949e}\n.eyebrow{font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#6e7681;margin-bottom:36px}\nsection{margin-bottom:34px}\nh2{font-size:12px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:${vis.color};margin-bottom:14px;padding-bottom:6px;border-bottom:1px solid rgba(255,255,255,.07)}\n.row{display:flex;gap:18px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.04)}\n.k{flex:0 0 150px;color:#8b949e;font-size:.9rem;text-transform:capitalize}\n.v{flex:1;color:#e6edf3;font-size:.95rem;word-break:break-word}\n.meter{height:8px;border-radius:4px;background:rgba(255,255,255,.06);overflow:hidden;margin:6px 0 10px}\n.meter span{display:block;height:100%;background:${vis.color};width:${Math.max(0, Math.min(100, result.score))}%}\n.award{font-size:.95rem}\n.statline{margin-bottom:32px}\n.awd-pre{color:#6E7681}\n.awd-win{color:#FFFFFF;font-weight:700}\n.muted{color:#6e7681;font-size:.85rem}\nfooter{margin-top:48px;padding-top:20px;border-top:1px solid rgba(255,255,255,.07);font-size:.82rem;color:#6e7681}\nfooter strong{color:#e6edf3}\n@media(max-width:560px){.row{flex-direction:column;gap:2px}.k{flex:none}}\n</style>\n</head>\n<body>\n<div class=\"wrap\">\n<div class=\"bar\"></div>\n<div class=\"eyebrow\">project.faf · visual render</div>\n<header>\n<h1>${name}</h1>\n<span class=\"badge\">${vis.glyph} ${esc(tierName)}</span>\n<span class=\"score\">${scoreText}</span>\n</header>\n<div class=\"meter\"><span></span></div>\n${\n isTrophy\n ? '<p class=\"award statline\"><span class=\"awd-pre\">✅ All Required slots filled.</span> <span class=\"awd-win\">100% Trophy ✪ Awarded</span></p>'\n : `<p class=\"muted statline\">${result.populated}/${result.active} slots populated · ${result.total} total${stackIgnored ? ` · ${stackIgnored} N/A` : ''}</p>`\n}\n\n<section>\n<h2>The 6 W's</h2>\n${rows(sixW) || '<p class=\"muted\">No human_context yet.</p>'}\n${otherHc.length ? rows(otherHc) : ''}\n</section>\n\n<section>\n<h2>Project</h2>\n${rows(projectMeta) || '<p class=\"muted\">—</p>'}\n</section>\n\n<section>\n<h2>Stack</h2>\n${\n stackActive.length\n ? rows(stackActive)\n : '<p class=\"muted\">No active stack slots.</p>'\n}\n</section>\n\n<footer>\nRendered on-demand from your current <strong>${esc(fafPath)}</strong><br>\n<strong>Humans like visuals. <span style=\"color:#00D4D4\">We gave them one.</span></strong>\n</footer>\n</div>\n</body>\n</html>\n`;\n}\n\n/** Write project.html beside project.faf (repo root). */\nexport function writeProjectHtml(\n dir: string,\n data: FafData,\n result: ScoreResult,\n fafPath = 'project.faf',\n): void {\n writeFileSync(\n join(dir, 'project.html'),\n generateProjectHtml(data, result, fafPath),\n 'utf-8',\n );\n}\n",
85
86
  "import { writeFileSync } from 'fs';\nimport { join } from 'path';\nimport type { FafData } from '../core/types.js';\n\n/**\n * Generate an MCP Server Card (SEP-2127) from a .faf.\n *\n * The card is a published discovery manifest. By design it carries the FAF\n * context-block in `_meta[\"one.faf/context\"]` — so every Server Card produced\n * through FAF ships FAF context by default. This emitter is the SINGLE SOURCE of\n * the block — faf-server-card-ref and `.fafa` provenance compose it (never\n * hand-roll), so every surface is byte-identical by construction: one context,\n * one source, every door.\n *\n * Honest-first: no score is baked (it would go stale on disk); the block points\n * to the .faf and asserts the score is deterministic. The card omits `remotes`\n * unless a deployment URL is supplied — it must not claim an endpoint it lacks.\n */\n\nexport interface ServerCardOptions {\n /** Pointer to the .faf context (default: ./project.faf). Pass an absolute URL\n * for a remote/served card (e.g. faf-server-card-ref at context.faf.one). */\n fafPointer?: string;\n /** Optional live endpoint; adds a streamable-http remote when set. */\n remoteUrl?: string;\n /** Optional \"verify the score here\" URL — makes verify-don't-trust actionable\n * (faf-server-card-ref uses https://faf.one). Omitted from the block if unset. */\n scoreEndpoint?: string;\n /** Override timestamp (tests); otherwise .faf `generated`, else now. */\n now?: string;\n}\n\nconst MEDIA_TYPE = 'application/vnd.faf+yaml';\nconst SCHEMA = 'https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json';\nconst NAME_RE = /^[a-zA-Z0-9.-]+\\/[a-zA-Z0-9._-]+$/;\n\n/** Derive a reverse-DNS `namespace/name` for the card. */\nfunction serverName(data: FafData): string {\n const raw = String(data.project?.name ?? 'project').trim();\n if (raw.includes('/') && NAME_RE.test(raw)) {return raw;} // already namespaced\n\n const homepage = (data.project?.homepage ??\n data.project?.website ??\n data.project?.url) as string | undefined;\n let ns = 'local';\n if (homepage) {\n try {\n const host = new URL(homepage).hostname.replace(/^www\\./, '');\n ns = host.split('.').reverse().join('.'); // faf.one -> one.faf\n } catch {\n /* keep 'local' */\n }\n }\n const name = raw.replace(/[^a-zA-Z0-9._-]/g, '-').replace(/^-+|-+$/g, '') || 'project';\n return `${ns}/${name}`;\n}\n\n/** Server Card `description` is capped at 100 chars; never empty. */\nfunction clampDescription(data: FafData): string {\n const src = String(\n data.project?.goal ?? data.context ?? data.project?.name ?? 'MCP server',\n )\n .replace(/\\s+/g, ' ')\n .trim();\n if (!src) {return 'MCP server';}\n return src.length <= 100 ? src : `${src.slice(0, 97).trimEnd() }...`;\n}\n\n/**\n * The canonical FAF context-block — the value of `_meta[\"one.faf/context\"]`,\n * identical across every surface (Server Card, registry `server.json`, `.fafa`):\n * one context, every door. Honest-first: no score baked (it would go stale on\n * disk); it points to the .faf and asserts the score is deterministic.\n */\nexport function fafContextBlock(\n data: FafData,\n opts: ServerCardOptions = {},\n): Record<string, unknown> {\n return {\n faf: opts.fafPointer ?? './project.faf',\n mediaType: MEDIA_TYPE,\n iana: `https://www.iana.org/assignments/media-types/${MEDIA_TYPE}`,\n deterministic: true,\n ...(opts.scoreEndpoint ? { scoreEndpoint: opts.scoreEndpoint } : {}),\n generated:\n (data.generated as string | undefined) ?? opts.now ?? new Date().toISOString(),\n };\n}\n\n/** Build the Server Card object from .faf data. */\nexport function generateServerCard(\n data: FafData,\n opts: ServerCardOptions = {},\n): Record<string, unknown> {\n const card: Record<string, unknown> = {\n $schema: SCHEMA,\n name: serverName(data),\n version: String(data.project?.version ?? '0.1.0'),\n description: clampDescription(data),\n };\n\n const title = registryTitle(data) ?? (data.project?.name as string | undefined);\n if (title && title.length <= 100) {card.title = title;}\n\n const homepage = (data.project?.homepage ??\n data.project?.website ??\n data.project?.url) as string | undefined;\n if (homepage) {card.websiteUrl = homepage;}\n\n if (opts.remoteUrl) {\n card.remotes = [{ type: 'streamable-http', url: opts.remoteUrl }];\n }\n\n // The canonical FAF context-block — parity with faf-server-card-ref + .fafa.\n card._meta = { 'one.faf/context': fafContextBlock(data, opts) };\n\n return card;\n}\n\nexport const REGISTRY_PUBLISHER_KEY = 'io.modelcontextprotocol.registry/publisher-provided';\nconst REGISTRY_META_CAP = 4096; // official registry cap on publisher-provided JSON (bytes)\n\n/**\n * Build the `_meta` for an MCP Registry `server.json`.\n *\n * The SAME canonical context-block as the Server Card, but nested under\n * `io.modelcontextprotocol.registry/publisher-provided` — the ONLY `_meta` key\n * the official registry preserves on publish. Top-level keys (the way the card\n * carries `one.faf/context`) are silently dropped by the registry. Throws if the\n * block exceeds the registry's 4KB cap. Merge the result into an existing\n * `server.json` `_meta`; don't regenerate the manifest (packages/mcpb are tuned).\n */\nexport function registryMeta(\n data: FafData,\n opts: ServerCardOptions = {},\n): Record<string, unknown> {\n const provided = { 'one.faf/context': fafContextBlock(data, opts) };\n const bytes = new TextEncoder().encode(JSON.stringify(provided)).length;\n if (bytes > REGISTRY_META_CAP) {\n throw new Error(\n `publisher-provided _meta is ${bytes}B — exceeds the registry ${REGISTRY_META_CAP}B cap`,\n );\n }\n return { [REGISTRY_PUBLISHER_KEY]: provided };\n}\n\n/** The canonical reverse-DNS registry name, e.g. `one.faf/claude-faf-mcp`.\n *\n * HOMEPAGE REQUIRED: the namespace is derived from `project.homepage`'s host\n * (faf.one -> one.faf). With no homepage/website/url the namespace falls back\n * to `local/<name>`. This can't silently ship — the migration is guarded\n * (`rewrite-server-json.ts` refuses any name that isn't `one.faf/*`) — but set\n * `homepage: https://faf.one` in the .faf to get the correct `one.faf/<name>`. */\nexport function registryName(data: FafData): string {\n return serverName(data);\n}\n\n/** The display title for a registry `server.json` — the human-readable card name\n * (e.g. \"Claude FAF\"), sourced from `project.title` in the .faf. This is the\n * SINGLE SOURCE of the title across the fleet: JS emitters import it, and the\n * `faf server-card` CLI uses it so Python/Rust repos compose the identical\n * value (compose-not-fork). Distinct from `registryName` (the reverse-DNS id).\n * Returns undefined when unset or >100 chars (the registry cap) so the field is\n * omitted rather than shipped invalid — GitHub's registry then derives a name\n * from the namespace, so set `project.title` to control the display. */\nexport function registryTitle(data: FafData): string | undefined {\n const raw = (data.project as { title?: unknown } | undefined)?.title;\n if (typeof raw === 'string') {\n const t = raw.trim();\n if (t && t.length <= 100) {return t;}\n }\n return undefined;\n}\n\n/** Write the Server Card to a `server-card` file. Returns the path.\n * Per experimental-ext-server-card#22 the reserved location is\n * `<streamable-http-url>/server-card` (no longer `.well-known`); serve the\n * emitted file there as `application/mcp-server-card+json`. */\nexport function writeServerCard(\n dir: string,\n data: FafData,\n opts: ServerCardOptions = {},\n): string {\n const card = generateServerCard(data, opts);\n const out = join(dir, 'server-card');\n writeFileSync(out, `${JSON.stringify(card, null, 2) }\\n`, 'utf-8');\n return out;\n}\n",
87
+ "import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { parse } from 'yaml';\nimport type { FafData } from '../core/types.js';\nimport {\n fafContextBlock,\n generateServerCard,\n registryMeta,\n registryName,\n registryTitle,\n type ServerCardOptions,\n} from './servercard.js';\n\n/** A2A extension URI — dereference, not the MCP `_meta` key `one.faf/context`. */\nexport const A2A_CONTEXT_URI = 'https://faf.one/context';\nexport const A2A_PROTOCOL_BINDING = 'JSONRPC';\nexport const A2A_PROTOCOL_VERSION = '1.0';\n\nexport type CardTarget = 'a2a' | 'mcp' | 'registry' | 'catalog';\nexport const CARD_TARGETS: CardTarget[] = ['a2a', 'mcp', 'registry', 'catalog'];\n\nexport interface FafaAgent {\n name?: string;\n displayName?: string;\n id?: string;\n vendor?: string;\n version?: string;\n description?: string;\n homepage?: string;\n}\n\nexport interface FafaCapability {\n name?: string;\n description?: string;\n tags?: unknown;\n}\n\nexport interface FafaEndpoint {\n protocol?: string;\n transport?: string;\n location?: string;\n version?: string;\n}\n\nexport interface FafaDoc {\n agent?: FafaAgent;\n capabilities?: FafaCapability[];\n endpoints?: FafaEndpoint[];\n provenance?: Record<string, unknown>;\n metadata?: { persona?: string };\n [key: string]: unknown;\n}\n\nexport interface ProjectCardsOptions extends ServerCardOptions {\n /** Public URL of the emitted A2A card (catalog row). */\n a2aCardUrl?: string;\n /** Caller-supplied A2A door when `.fafa` has no `endpoints[].protocol: a2a`. */\n doorUrl?: string;\n}\n\nexport interface ProjectedA2A {\n name: string;\n description: string;\n supportedInterfaces: Array<{\n url: string;\n protocolBinding: string;\n protocolVersion: string;\n }>;\n provider: { organization: string; url: string };\n version: string;\n capabilities: {\n streaming: boolean;\n pushNotifications: boolean;\n extendedAgentCard: boolean;\n extensions: Array<{\n uri: string;\n description: string;\n required: boolean;\n params: Record<string, unknown>;\n }>;\n };\n defaultInputModes: string[];\n defaultOutputModes: string[];\n skills: Array<{\n id: string;\n name: string;\n description: string;\n tags: string[];\n }>;\n}\n\nexport interface CatalogEntry {\n identifier: string;\n displayName?: string;\n type: string;\n description?: string;\n url: string;\n updatedAt?: string;\n}\n\nexport interface AiCatalog {\n specVersion: string;\n host?: Record<string, unknown>;\n entries: CatalogEntry[];\n [key: string]: unknown;\n}\n\nexport interface ProjectedCards {\n block: Record<string, unknown>;\n a2a?: ProjectedA2A;\n mcp?: Record<string, unknown>;\n registry?: {\n name: string;\n title?: string;\n _meta: Record<string, unknown>;\n };\n catalog?: CatalogEntry[];\n}\n\nexport function readFafa(path: string): FafaDoc {\n return parse(readFileSync(path, 'utf-8')) as FafaDoc;\n}\n\n/** Discover agent.fafa / .fafa (cwd, then one parent). */\nexport function findFafaFile(dir: string = process.cwd()): string | null {\n const candidates = ['agent.fafa', '.fafa'];\n for (const name of candidates) {\n const full = join(dir, name);\n if (existsSync(full)) {return full;}\n }\n const parent = dirname(dir);\n if (parent !== dir) {\n for (const name of candidates) {\n const full = join(parent, name);\n if (existsSync(full)) {return full;}\n }\n }\n return null;\n}\n\nexport function a2aEndpoints(fafa: FafaDoc): FafaEndpoint[] {\n return (fafa.endpoints ?? []).filter(\n (e) => String(e.protocol ?? '').toLowerCase() === 'a2a' && e.location,\n );\n}\n\n/** Authored A2A endpoints, else a single `doorUrl`. Never invents a door. */\nexport function a2aDoors(fafa: FafaDoc, opts: ProjectCardsOptions = {}): FafaEndpoint[] {\n const fromDoc = a2aEndpoints(fafa);\n if (fromDoc.length > 0) {return fromDoc;}\n const door = opts.doorUrl?.trim();\n if (door) {\n return [{ protocol: 'a2a', location: door, version: A2A_PROTOCOL_VERSION }];\n }\n return [];\n}\n\nexport function generateA2ACard(\n fafa: FafaDoc,\n faf: FafData,\n opts: ProjectCardsOptions = {},\n): ProjectedA2A {\n const agent = fafa.agent ?? {};\n const doors = a2aDoors(fafa, opts);\n if (doors.length === 0) {\n throw new Error(\n \"No A2A endpoint in .fafa (need endpoints[].protocol: a2a + location). Will not invent a door.\",\n );\n }\n const name = String(agent.displayName ?? fafa.metadata?.persona ?? agent.name ?? '').trim();\n const description = String(agent.description ?? '').trim();\n const version = String(agent.version ?? '').trim();\n const organization = String(agent.vendor ?? '').trim();\n const homepage = String(agent.homepage ?? '').trim();\n if (!name || !description || !version || !organization || !homepage) {\n throw new Error(\n 'A2A card needs agent.displayName|name, description, version, vendor, homepage in .fafa',\n );\n }\n\n const block = fafContextBlock(faf, opts);\n const skills = (fafa.capabilities ?? []).map((c) => {\n const id = String(c.name ?? '').trim();\n if (!id) {throw new Error('A2A skill missing capabilities[].name');}\n const tags = Array.isArray(c.tags) ? c.tags.map(String) : [];\n return {\n id,\n name: id,\n description: String(c.description ?? '').trim() || id,\n tags,\n };\n });\n\n return {\n name,\n description,\n supportedInterfaces: doors.map((e) => ({\n url: String(e.location),\n protocolBinding: A2A_PROTOCOL_BINDING,\n protocolVersion: String(e.version ?? A2A_PROTOCOL_VERSION),\n })),\n provider: { organization, url: homepage },\n version,\n capabilities: {\n streaming: false,\n pushNotifications: false,\n extendedAgentCard: false,\n extensions: [\n {\n uri: A2A_CONTEXT_URI,\n description:\n 'FAF context provenance — the durable context block (one context, every door).',\n required: false,\n params: block,\n },\n ],\n },\n defaultInputModes: ['text/plain', 'application/json'],\n defaultOutputModes: ['text/plain', 'application/json'],\n skills,\n };\n}\n\nfunction catalogHost(fafa: FafaDoc): string {\n const homepage = fafa.agent?.homepage;\n if (!homepage) {return 'local';}\n try {\n return new URL(homepage).hostname.replace(/^www\\./, '');\n } catch {\n return 'local';\n }\n}\n\nfunction catalogA2AUrl(fafa: FafaDoc, opts: ProjectCardsOptions): string {\n if (opts.a2aCardUrl) {return opts.a2aCardUrl;}\n const homepage = fafa.agent?.homepage;\n if (homepage) {\n try {\n return new URL('/.well-known/agent-card.json', homepage).href;\n } catch { /* fall through */ }\n }\n return '/.well-known/agent-card.json';\n}\n\nexport function catalogEntriesFor(\n fafa: FafaDoc,\n faf: FafData,\n opts: ProjectCardsOptions = {},\n): CatalogEntry[] {\n const host = catalogHost(fafa);\n const agent = fafa.agent ?? {};\n const slug = String(agent.name ?? 'agent');\n const now = opts.now ?? (faf.generated as string | undefined) ?? new Date().toISOString();\n const entries: CatalogEntry[] = [];\n\n if (a2aDoors(fafa, opts).length > 0) {\n entries.push({\n identifier: `urn:air:${host}:a2a:${slug}`,\n displayName: String(agent.displayName ?? agent.name ?? 'A2A Agent Card'),\n type: 'application/json',\n description: 'A2A v1.0 Agent Card. Projected from .fafa.',\n url: catalogA2AUrl(fafa, opts),\n updatedAt: now,\n });\n }\n\n const fafaUrl = homepageWellKnown(fafa, 'fafa');\n if (fafaUrl) {\n entries.push({\n identifier: `urn:air:${host}:agent:${slug}`,\n displayName: String(agent.displayName ?? agent.name ?? '.fafa'),\n type: 'application/vnd.fafa+yaml',\n description: 'FAF agent passport (.fafa).',\n url: fafaUrl,\n updatedAt: now,\n });\n }\n\n return entries;\n}\n\nfunction homepageWellKnown(fafa: FafaDoc, name: string): string | undefined {\n const homepage = fafa.agent?.homepage;\n if (!homepage) {return undefined;}\n try {\n return new URL(`/.well-known/${name}`, homepage).href;\n } catch {\n return undefined;\n }\n}\n\nfunction catalogMatchIndex(entries: CatalogEntry[], row: CatalogEntry): number {\n const exact = entries.findIndex((e) => e.identifier === row.identifier);\n if (exact >= 0) {return exact;}\n if (row.type === 'application/json' || row.identifier.includes(':a2a:')) {\n return entries.findIndex(\n (e) =>\n e.identifier.includes(':a2a:') ||\n String(e.url ?? '').includes('agent-card.json'),\n );\n }\n if (row.type === 'application/vnd.fafa+yaml') {\n return entries.findIndex((e) => e.type === 'application/vnd.fafa+yaml');\n }\n return -1;\n}\n\n/** Upsert projector entries into an existing catalog. Leaves unknown rows alone.\n * On match, only url / type / updatedAt move — host copy (title, tags) stays. */\nexport function upsertCatalog(existing: AiCatalog | undefined, incoming: CatalogEntry[]): AiCatalog {\n const base: AiCatalog = existing\n ? { ...existing, entries: [...(existing.entries ?? [])] }\n : { specVersion: '1.0', entries: [] };\n for (const row of incoming) {\n const i = catalogMatchIndex(base.entries, row);\n if (i >= 0) {\n base.entries[i] = {\n ...base.entries[i],\n url: row.url,\n type: row.type,\n ...(row.updatedAt ? { updatedAt: row.updatedAt } : {}),\n };\n } else {\n base.entries.push(row);\n }\n }\n return base;\n}\n\nexport function projectCards(input: {\n faf: FafData;\n fafa?: FafaDoc;\n targets?: CardTarget[];\n opts?: ProjectCardsOptions;\n}): ProjectedCards {\n const opts = input.opts ?? {};\n const wanted = new Set(input.targets?.length ? input.targets : CARD_TARGETS);\n const block = fafContextBlock(input.faf, opts);\n const out: ProjectedCards = { block };\n\n if (wanted.has('mcp')) {\n out.mcp = generateServerCard(input.faf, opts);\n }\n if (wanted.has('registry')) {\n const title = registryTitle(input.faf);\n out.registry = {\n name: registryName(input.faf),\n ...(title ? { title } : {}),\n _meta: registryMeta(input.faf, opts),\n };\n }\n\n if (wanted.has('a2a') || wanted.has('catalog')) {\n if (!input.fafa) {\n if (input.targets?.includes('a2a') || input.targets?.includes('catalog')) {\n throw new Error('A2A/catalog require a .fafa (agent.fafa). Will not invent an agent.');\n }\n }\n }\n\n if (wanted.has('a2a') && input.fafa) {\n if (a2aDoors(input.fafa, opts).length === 0) {\n if (input.targets?.includes('a2a')) {\n throw new Error(\n \"No A2A endpoint in .fafa (need endpoints[].protocol: a2a + location). Will not invent a door.\",\n );\n }\n } else {\n out.a2a = generateA2ACard(input.fafa, input.faf, opts);\n }\n }\n\n if (wanted.has('catalog') && input.fafa) {\n out.catalog = catalogEntriesFor(input.fafa, input.faf, opts);\n }\n\n assertSameBlock(out);\n return out;\n}\n\n/** Byte-identical context block on every emitted door. */\nexport function assertSameBlock(cards: ProjectedCards): void {\n const want = JSON.stringify(cards.block);\n const got: string[] = [];\n if (cards.a2a) {\n got.push(JSON.stringify(cards.a2a.capabilities.extensions[0].params));\n }\n if (cards.mcp) {\n const meta = cards.mcp._meta as { 'one.faf/context': unknown };\n got.push(JSON.stringify(meta['one.faf/context']));\n }\n if (cards.registry) {\n const pp = cards.registry._meta['io.modelcontextprotocol.registry/publisher-provided'] as {\n 'one.faf/context': unknown;\n };\n got.push(JSON.stringify(pp['one.faf/context']));\n }\n for (const g of got) {\n if (g !== want) {\n throw new Error('context block drifted across card targets — one projector, one block');\n }\n }\n}\n\nexport function writeJson(path: string, value: unknown): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`, 'utf-8');\n}\n\nexport function parseTargets(raw?: string): CardTarget[] | undefined {\n if (!raw) {return undefined;}\n const parts = raw.split(',').map((s) => s.trim().toLowerCase()).filter(Boolean);\n const bad = parts.filter((p) => !CARD_TARGETS.includes(p as CardTarget));\n if (bad.length) {\n throw new Error(`unknown card target: ${bad.join(', ')} (use ${CARD_TARGETS.join(',')})`);\n }\n return parts as CardTarget[];\n}\n",
86
88
  "/**\n * .fafm types — INTEROP-aligned with claude-fafm-sdk 1.0.0\n * application/vnd.fafm+yaml v1.1\n */\n\nexport const PRIORITY_ORDER = ['ephemeral', 'standard', 'high', 'critical'] as const;\nexport type Priority = (typeof PRIORITY_ORDER)[number];\n\nexport const PRIORITY_RANK: Record<string, number> = Object.fromEntries(\n PRIORITY_ORDER.map((p, i) => [p, i]),\n);\n\nexport const KNOWLEDGE_TYPES = new Set(['user', 'feedback', 'project', 'reference']);\n\nexport const KNOWN_DOC_KEYS = new Set([\n 'version',\n 'profile',\n 'namepoint',\n 'created',\n 'last_etched',\n 'retention',\n 'index',\n 'memory',\n]);\n\nexport const KNOWN_MEMORY_KEYS = new Set(['facts', 'sessions', 'preferences', 'custom']);\n\nexport const LEGACY_PRIORITY: Record<string, Priority> = {\n low: 'ephemeral',\n medium: 'standard',\n};\n\nexport interface Fact {\n text: string;\n id?: string | null;\n type?: string | null;\n priority: Priority | string;\n tags: string[];\n links: string[];\n timestamp?: string | null;\n source?: string | null;\n /** Unknown fact fields (INTEROP §4) */\n extra: Record<string, unknown>;\n}\n\nexport type Profile = 'voice' | 'knowledge';\n\nexport interface SoulDoc {\n version: string;\n profile: string;\n namepoint: string;\n created: string;\n last_etched: string;\n retention: string;\n index: string[];\n memory: {\n facts: unknown[];\n sessions: unknown[];\n preferences: Record<string, unknown>;\n custom: Record<string, unknown>;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n",
87
89
  "/**\n * Soul — local .fafm model (TS mirror of claude-fafm-sdk 1.0 Soul).\n * INTEROP: load/save fidelity, residual preserve, recall SoT.\n */\n\nimport { readFileSync, writeFileSync, existsSync } from 'fs';\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml';\nimport {\n KNOWN_DOC_KEYS,\n KNOWN_MEMORY_KEYS,\n LEGACY_PRIORITY,\n PRIORITY_RANK,\n type Fact,\n type SoulDoc,\n} from './types.js';\n\nexport function utcNow(): string {\n return new Date().toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n}\n\nfunction isNil(v: unknown): v is null | undefined {\n return v === null || v === undefined;\n}\n\nexport function canonicalPriority(p: string | null | undefined): string {\n if (isNil(p)) {return 'standard';}\n if (LEGACY_PRIORITY[p]) {return LEGACY_PRIORITY[p];}\n if (p in PRIORITY_RANK) {return p;}\n return 'standard';\n}\n\nconst KNOWN_FACT = new Set([\n 'text',\n 'id',\n 'type',\n 'priority',\n 'tags',\n 'links',\n 'timestamp',\n 'source',\n]);\n\nexport function factFromObj(obj: unknown): Fact {\n if (typeof obj === 'string') {\n return {\n text: obj,\n id: null,\n type: null,\n priority: 'standard',\n tags: [],\n links: [],\n timestamp: null,\n source: null,\n extra: {},\n };\n }\n if (!obj || typeof obj !== 'object' || !('text' in obj)) {\n throw new Error(`fact must be a string or a mapping with 'text': ${JSON.stringify(obj)}`);\n }\n const o = obj as Record<string, unknown>;\n const extra: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(o)) {\n if (!KNOWN_FACT.has(k)) {extra[k] = v;}\n }\n return {\n text: String(o.text),\n id: (o.id as string) ?? null,\n type: (o.type as string) ?? null,\n priority: canonicalPriority(o.priority as string | undefined),\n tags: Array.isArray(o.tags) ? (o.tags as string[]).slice() : [],\n links: Array.isArray(o.links) ? (o.links as string[]).slice() : [],\n timestamp: (o.timestamp as string) ?? null,\n source: (o.source as string) ?? null,\n extra,\n };\n}\n\nexport function factToObj(f: Fact): unknown {\n const bare =\n isNil(f.id) &&\n isNil(f.type) &&\n f.tags.length === 0 &&\n f.links.length === 0 &&\n isNil(f.timestamp) &&\n isNil(f.source) &&\n Object.keys(f.extra).length === 0 &&\n f.priority === 'standard';\n if (bare) {return f.text;}\n const out: Record<string, unknown> = { text: f.text };\n if (!isNil(f.id)) {out.id = f.id;}\n if (!isNil(f.type)) {out.type = f.type;}\n out.priority = f.priority;\n if (f.tags.length) {out.tags = f.tags;}\n if (f.links.length) {out.links = f.links;}\n if (!isNil(f.timestamp)) {out.timestamp = f.timestamp;}\n if (!isNil(f.source)) {out.source = f.source;}\n Object.assign(out, f.extra);\n return out;\n}\n\nexport class Soul {\n namepoint: string;\n profile: string;\n retention: string;\n created: string;\n last_etched: string;\n private _facts: Fact[];\n private _byId: Map<string, number>;\n private _index: string[];\n private _sessions: unknown[];\n private _preferences: Record<string, unknown>;\n private _custom: Record<string, unknown>;\n private _extra: Record<string, unknown>;\n private _memoryExtra: Record<string, unknown>;\n\n constructor(\n namepoint: string,\n opts: {\n profile?: string;\n facts?: Fact[];\n retention?: string;\n created?: string | null;\n index?: string[];\n sessions?: unknown[];\n preferences?: Record<string, unknown>;\n custom?: Record<string, unknown>;\n extra?: Record<string, unknown>;\n memoryExtra?: Record<string, unknown>;\n } = {},\n ) {\n this.namepoint = namepoint;\n this.profile = opts.profile ?? 'knowledge';\n this.retention = opts.retention ?? 'forever';\n this.created = opts.created ?? utcNow();\n this.last_etched = this.created;\n this._facts = opts.facts ? opts.facts.slice() : [];\n this._byId = new Map();\n this._facts.forEach((f, i) => {\n if (!isNil(f.id)) {this._byId.set(f.id, i);}\n });\n this._index = opts.index ? opts.index.slice() : [];\n this._sessions = opts.sessions ? structuredClone(opts.sessions) : [];\n this._preferences = opts.preferences ? { ...opts.preferences } : {};\n this._custom = opts.custom ? { ...opts.custom } : {};\n this._extra = opts.extra ? { ...opts.extra } : {};\n this._memoryExtra = opts.memoryExtra ? { ...opts.memoryExtra } : {};\n }\n\n get facts(): Fact[] {\n return this._facts;\n }\n\n get index(): string[] {\n return this._index;\n }\n\n get sessions(): unknown[] {\n return this._sessions;\n }\n\n get preferences(): Record<string, unknown> {\n return this._preferences;\n }\n\n get custom(): Record<string, unknown> {\n return this._custom;\n }\n\n get extra(): Record<string, unknown> {\n return this._extra;\n }\n\n get memoryExtra(): Record<string, unknown> {\n return this._memoryExtra;\n }\n\n static load(path: string): Soul {\n if (!existsSync(path)) {\n throw new Error(`soul file not found: ${path}`);\n }\n const raw = readFileSync(path, 'utf-8');\n const doc = parseYaml(raw) as Record<string, unknown> | null;\n if (!doc || typeof doc !== 'object') {\n throw new Error('soul is not a YAML mapping');\n }\n const memory =\n doc.memory && typeof doc.memory === 'object'\n ? (doc.memory as Record<string, unknown>)\n : {};\n const factsRaw = Array.isArray(memory.facts) ? memory.facts : [];\n const docExtra: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(doc)) {\n if (!KNOWN_DOC_KEYS.has(k)) {docExtra[k] = structuredClone(v);}\n }\n const memoryExtra: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(memory)) {\n if (!KNOWN_MEMORY_KEYS.has(k)) {memoryExtra[k] = structuredClone(v);}\n }\n const soul = new Soul(String(doc.namepoint ?? path.replace(/.*\\//, '').replace(/\\.fafm$/, '')), {\n profile: String(doc.profile ?? 'voice'),\n facts: factsRaw.map(factFromObj),\n retention: String(doc.retention ?? 'forever'),\n created: (doc.created as string) ?? null,\n index: Array.isArray(doc.index) ? (doc.index as string[]).slice() : [],\n sessions: Array.isArray(memory.sessions) ? structuredClone(memory.sessions) : [],\n preferences:\n memory.preferences && typeof memory.preferences === 'object'\n ? structuredClone(memory.preferences as Record<string, unknown>)\n : {},\n custom:\n memory.custom && typeof memory.custom === 'object'\n ? structuredClone(memory.custom as Record<string, unknown>)\n : {},\n extra: docExtra,\n memoryExtra,\n });\n soul.last_etched = String(doc.last_etched ?? soul.created);\n return soul;\n }\n\n static fromFile(path: string): Soul {\n return Soul.load(path);\n }\n\n toDoc(): SoulDoc {\n const memory: SoulDoc['memory'] = {\n facts: this._facts.map(factToObj),\n sessions: structuredClone(this._sessions),\n preferences: structuredClone(this._preferences),\n custom: structuredClone(this._custom),\n };\n for (const [k, v] of Object.entries(this._memoryExtra)) {\n if (!KNOWN_MEMORY_KEYS.has(k)) {memory[k] = structuredClone(v);}\n }\n const doc: SoulDoc = {\n version: '1.1',\n profile: this.profile,\n namepoint: this.namepoint,\n created: this.created,\n last_etched: this.last_etched,\n retention: this.retention,\n index: this._index.slice(),\n memory,\n };\n for (const [k, v] of Object.entries(this._extra)) {\n if (!KNOWN_DOC_KEYS.has(k)) {doc[k] = structuredClone(v);}\n }\n return doc;\n }\n\n toYaml(): string {\n return stringifyYaml(this.toDoc(), { lineWidth: 100 });\n }\n\n rebuildIndex(width = 80): string[] {\n this._index = this._facts.map(\n (f) => `${f.id ?? '?'} — ${f.text.slice(0, width)}`,\n );\n return this._index;\n }\n\n save(path: string, opts: { reindex?: boolean } = {}): string {\n const reindex = opts.reindex !== false;\n if (reindex) {this.rebuildIndex();}\n writeFileSync(path, this.toYaml(), 'utf-8');\n return path;\n }\n\n toFile(path: string, opts: { reindex?: boolean } = {}): string {\n return this.save(path, opts);\n }\n\n add(fact: Fact): Fact {\n if (!isNil(fact.id) && this._byId.has(fact.id)) {\n const idx = this._byId.get(fact.id);\n if (idx !== undefined) {\n this._facts[idx] = fact;\n }\n } else {\n this._facts.push(fact);\n if (!isNil(fact.id)) {this._byId.set(fact.id, this._facts.length - 1);}\n }\n if (fact.timestamp && fact.timestamp > (this.last_etched || '')) {\n this.last_etched = fact.timestamp;\n }\n return fact;\n }\n\n etch(\n text: string,\n opts: {\n id?: string;\n type?: string;\n priority?: string;\n tags?: string[];\n links?: string[];\n source?: string;\n } = {},\n ): Fact {\n return this.add({\n text,\n id: opts.id ?? null,\n type: opts.type ?? null,\n priority: canonicalPriority(opts.priority),\n tags: opts.tags ? opts.tags.slice() : [],\n links: opts.links ? opts.links.slice() : [],\n timestamp: utcNow(),\n source: opts.source ?? null,\n extra: {},\n });\n }\n\n recall(\n query?: string | null,\n opts: {\n tags?: string[];\n type?: string;\n minPriority?: string;\n limit?: number | null;\n } = {},\n ): Fact[] {\n const floor = PRIORITY_RANK[canonicalPriority(opts.minPriority ?? 'ephemeral')] ?? 0;\n const q = (query ?? '').toLowerCase();\n const wantTags = new Set(opts.tags ?? []);\n const indexed: Array<[number, Fact]> = [];\n this._facts.forEach((f, i) => {\n if (q && !f.text.toLowerCase().includes(q)) {return;}\n if (wantTags.size > 0 && ![...wantTags].some((t) => f.tags.includes(t))) {return;}\n if (!isNil(opts.type) && f.type !== opts.type) {return;}\n if ((PRIORITY_RANK[f.priority] ?? 1) < floor) {return;}\n indexed.push([i, f]);\n });\n indexed.sort((a, b) => {\n const pa = PRIORITY_RANK[a[1].priority] ?? 1;\n const pb = PRIORITY_RANK[b[1].priority] ?? 1;\n if (pb !== pa) {return pb - pa;}\n const ta = a[1].timestamp ?? '';\n const tb = b[1].timestamp ?? '';\n if (tb !== ta) {return tb < ta ? -1 : tb > ta ? 1 : 0;}\n return b[0] - a[0]; // insertion index desc\n });\n const results = indexed.map(([, f]) => f);\n if (!isNil(opts.limit)) {return results.slice(0, opts.limit);}\n return results;\n }\n\n getFact(id: string): Fact | null {\n const i = this._byId.get(id);\n return i === undefined ? null : this._facts[i];\n }\n\n deleteFact(id: string): boolean {\n const i = this._byId.get(id);\n if (i === undefined) {return false;}\n this._facts.splice(i, 1);\n this._byId.clear();\n this._facts.forEach((f, j) => {\n if (!isNil(f.id)) {this._byId.set(f.id, j);}\n });\n return true;\n }\n}\n",
88
90
  "/**\n * fromClaudeDir — Claude Code memory store → knowledge Soul.\n * Cite: claude-fafm-sdk 1.0 / fafm-engine serialize_memory approach.\n * Not the proof convert_md_to_fafm (entries/v1.0 anti-pattern).\n */\n\nimport { readdirSync, readFileSync, statSync, existsSync } from 'fs';\nimport { join, basename, resolve } from 'path';\nimport { parse as parseYaml } from 'yaml';\nimport { Soul, utcNow } from './soul.js';\nimport { KNOWLEDGE_TYPES, type Fact } from './types.js';\n\nexport const DEFAULT_SKIP = new Set(['MEMORY.md', 'MEMORY-FULL.md', 'README.md']);\n\nconst LINK_RE = /\\[\\[([^\\]]+)\\]\\]/g;\n\nfunction isoMtime(path: string): string {\n const ms = statSync(path).mtimeMs;\n return new Date(ms).toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n}\n\nfunction parseFrontmatter(text: string): { fm: Record<string, unknown> | null; body: string } {\n if (!text.startsWith('---')) {return { fm: null, body: text };}\n const parts = text.split('---');\n if (parts.length < 3) {return { fm: null, body: text };}\n try {\n const fm = parseYaml(parts[1]);\n if (!fm || typeof fm !== 'object') {return { fm: null, body: parts.slice(2).join('---').trim() };}\n return { fm: fm as Record<string, unknown>, body: parts.slice(2).join('---').trim() };\n } catch {\n return { fm: null, body: text };\n }\n}\n\nfunction factFromTopic(path: string, body: string, fm: Record<string, unknown>): Fact | null {\n if (!fm.name) {return null;}\n const meta =\n fm.metadata && typeof fm.metadata === 'object'\n ? (fm.metadata as Record<string, unknown>)\n : {};\n const mtype = meta.type;\n if (typeof mtype !== 'string' || !KNOWLEDGE_TYPES.has(mtype)) {return null;}\n\n const name = String(fm.name).trim();\n const description =\n fm.description !== undefined && fm.description !== null && String(fm.description).trim()\n ? String(fm.description).trim()\n : '';\n const text = description || name;\n\n const extra: Record<string, unknown> = {};\n if (meta.originSessionId) {\n extra.provenance = [`session:${meta.originSessionId}`];\n }\n\n const links = [...new Set([...body.matchAll(LINK_RE)].map((m) => m[1]))].sort();\n\n return {\n text,\n id: name,\n type: mtype,\n priority: 'standard',\n tags: [],\n links,\n timestamp: isoMtime(path),\n source: `claude-code memory: ${basename(path)}`,\n extra,\n };\n}\n\n/**\n * Convert a Claude Code memory directory into a knowledge Soul.\n */\nexport function fromClaudeDir(\n path: string,\n opts: { namepoint?: string; skip?: Set<string> } = {},\n): Soul {\n const root = resolve(path);\n if (!existsSync(root)) {\n throw new Error(`Claude memory directory not found: ${root}`);\n }\n if (!statSync(root).isDirectory()) {\n throw new Error(`Claude memory path is not a directory: ${root}`);\n }\n\n const skip = opts.skip ?? DEFAULT_SKIP;\n const namepoint = opts.namepoint ?? `@claude-code:${basename(root)}`;\n\n const facts: Fact[] = [];\n const files = readdirSync(root)\n .filter((f) => f.endsWith('.md'))\n .sort();\n\n for (const file of files) {\n if (skip.has(file)) {continue;}\n const full = join(root, file);\n let text: string;\n try {\n text = readFileSync(full, 'utf-8');\n } catch {\n continue;\n }\n const { fm, body } = parseFrontmatter(text);\n if (!fm) {continue;}\n const fact = factFromTopic(full, body, fm);\n if (fact) {facts.push(fact);}\n }\n\n const stamps = facts.map((f) => f.timestamp).filter(Boolean) as string[];\n const created = stamps.length ? stamps.reduce((a, b) => (a < b ? a : b)) : utcNow();\n const last = stamps.length ? stamps.reduce((a, b) => (a > b ? a : b)) : created;\n\n const soul = new Soul(namepoint, {\n profile: 'knowledge',\n facts,\n created,\n });\n soul.last_etched = last;\n soul.rebuildIndex();\n return soul;\n}\n",
89
91
  "/**\n * The 6Ws Interview — SINGLE SOURCE.\n *\n * The canonical question registry for filling a .faf by asking a human (or an\n * agent asking a human). faf-cli OWNS it; consumers (claude-faf-mcp's faf_go,\n * siblings, UIs) IMPORT it — never reimplement, never copy. Decided\n * 2026-06-10: the CLI exports, CFM consumes, zero drift. (CFM's previous\n * hand-maintained registry had already drifted — e.g. its `how` asked \"How\n * should AI assist?\" while the canonical slot semantic is \"How is it built /\n * used?\". This file is the arbiter; slots.ts is its spine.)\n *\n * Shape carries what interactive consumers need: question text, a short\n * header chip, input type, required flag, select options where a closed-ish\n * vocabulary exists. Question SEMANTICS align to core/slots.ts descriptions —\n * the slot is the meaning, the question is just its interview voice.\n *\n * Authoring doctrine baked into the prompts: 6Ws answers are terse LABELS\n * (3-4 words, hard cap <6) — a scannable spec card, not prose.\n */\n\nimport { SLOTS, SLOT_BY_PATH, isPlaceholder } from './slots.js';\nimport type { SeededContextDetailed } from '../detect/relentless.js';\n\n/** Bump when questions/options change — consumers can pin or report it. */\nexport const INTERVIEW_VERSION = 'faf-interview/1';\n\nexport interface InterviewOption {\n label: string;\n value: string;\n description: string;\n}\n\nexport interface InterviewQuestion<P extends string = string> {\n /** Canonical slot path (core/slots.ts is the spine). */\n path: P;\n question: string;\n /** Short chip/header label (max ~12 chars) for option-UI consumers. */\n header: string;\n type: 'text' | 'select';\n required: boolean;\n options?: InterviewOption[];\n}\n\n/**\n * The human/sourced boundary, as TYPES — the load-bearing line in FAF.\n *\n * HumanSlotPath = the 8 things only a human knows (name + goal + the 6Ws).\n * SourcedSlotPath = the slots detection fills (language + the stack).\n *\n * They are DISJOINT by construction. Typing the two interviews against these\n * makes it a COMPILE error to put a sourced slot in the human interview (or\n * vice-versa) — the \"Interview-16\" drift becomes unrepresentable at the Truth,\n * not merely caught by a downstream test. \"I'll remember\" is not a fix; a type\n * is. (claude-faf-mcp's wjttc-faf-go-boundary test is the belt; this is the\n * braces — the source itself can no longer drift.)\n */\nexport type HumanSlotPath =\n | 'project.name'\n | 'project.goal'\n | 'human_context.who'\n | 'human_context.what'\n | 'human_context.why'\n | 'human_context.where'\n | 'human_context.when'\n | 'human_context.how';\n\nexport type SourcedSlotPath =\n | 'project.main_language'\n | 'stack.frontend'\n | 'stack.backend'\n | 'stack.database'\n | 'stack.runtime'\n | 'stack.hosting'\n | 'stack.build'\n | 'stack.cicd';\n\nconst TERSE = '(terse — 3-4 words)';\n\n/**\n * THE 8-Q 6Ws INTERVIEW — the core. Project identity (name + goal) plus the\n * six Ws. Language is deliberately NOT here: detection finds it; humans are\n * only asked what machines cannot derive. The 6Ws are the underivable half.\n */\nexport const SIX_WS_INTERVIEW: InterviewQuestion<HumanSlotPath>[] = [\n {\n path: 'project.name',\n question: 'What is the name of this project?',\n header: 'Name',\n type: 'text',\n required: true,\n },\n {\n path: 'project.goal',\n question: 'What does this project do? (one sentence)',\n header: 'Goal',\n type: 'text',\n required: true,\n },\n {\n path: 'human_context.who',\n question: `Who is this for? ${TERSE}`,\n header: 'Who',\n type: 'text',\n required: true,\n },\n {\n path: 'human_context.what',\n question: `What are they building? ${TERSE}`,\n header: 'What',\n type: 'text',\n required: true,\n },\n {\n path: 'human_context.why',\n question: `Why does it exist? ${TERSE}`,\n header: 'Why',\n type: 'text',\n required: true,\n },\n {\n path: 'human_context.where',\n question: `Where does it run or ship? ${TERSE}`,\n header: 'Where',\n type: 'text',\n required: true,\n },\n {\n path: 'human_context.when',\n question: `When — timeline or stage? ${TERSE}`,\n header: 'When',\n type: 'text',\n required: true,\n },\n {\n path: 'human_context.how',\n question: `How is it built or used? ${TERSE}`,\n header: 'How',\n type: 'text',\n required: true,\n },\n];\n\n/**\n * Stack interview — asked only for slots ACTIVE for the app_type and still\n * empty. Selects where a common vocabulary exists; every select includes\n * Other (specify) and None where absence is legitimate.\n */\nexport const STACK_INTERVIEW: InterviewQuestion<SourcedSlotPath>[] = [\n {\n path: 'project.main_language',\n question: 'What is the primary programming language?',\n header: 'Language',\n type: 'select',\n required: true,\n options: [\n { label: 'TypeScript', value: 'TypeScript', description: 'JavaScript with types' },\n { label: 'JavaScript', value: 'JavaScript', description: 'Vanilla JS or Node.js' },\n { label: 'Python', value: 'Python', description: 'Python 3.x' },\n { label: 'Rust', value: 'Rust', description: 'Systems programming' },\n { label: 'Go', value: 'Go', description: 'Golang' },\n { label: 'Other', value: 'Other', description: 'Specify manually' },\n ],\n },\n {\n path: 'stack.frontend',\n question: 'What frontend framework does it use?',\n header: 'Frontend',\n type: 'select',\n required: false,\n options: [\n { label: 'React', value: 'React', description: 'React.js' },\n { label: 'Vue', value: 'Vue', description: 'Vue.js' },\n { label: 'Svelte', value: 'Svelte', description: 'Svelte/SvelteKit' },\n { label: 'Next.js', value: 'Next.js', description: 'React framework' },\n { label: 'None', value: 'None', description: 'No frontend' },\n { label: 'Other', value: 'Other', description: 'Specify manually' },\n ],\n },\n {\n path: 'stack.backend',\n question: 'What backend framework does it use?',\n header: 'Backend',\n type: 'select',\n required: false,\n options: [\n { label: 'Express', value: 'Express', description: 'Node.js Express' },\n { label: 'Fastify', value: 'Fastify', description: 'Node.js Fastify' },\n { label: 'Django', value: 'Django', description: 'Python Django' },\n { label: 'FastAPI', value: 'FastAPI', description: 'Python FastAPI' },\n { label: 'None', value: 'None', description: 'No backend' },\n { label: 'Other', value: 'Other', description: 'Specify manually' },\n ],\n },\n {\n path: 'stack.database',\n question: 'What database does it use?',\n header: 'Database',\n type: 'select',\n required: false,\n options: [\n { label: 'PostgreSQL', value: 'PostgreSQL', description: 'Postgres' },\n { label: 'MySQL', value: 'MySQL', description: 'MySQL/MariaDB' },\n { label: 'SQLite', value: 'SQLite', description: 'Embedded SQL' },\n { label: 'MongoDB', value: 'MongoDB', description: 'Document store' },\n { label: 'None', value: 'None', description: 'No database' },\n { label: 'Other', value: 'Other', description: 'Specify manually' },\n ],\n },\n {\n path: 'stack.runtime',\n question: 'What runtime does it run on?',\n header: 'Runtime',\n type: 'text',\n required: false,\n },\n {\n path: 'stack.hosting',\n question: 'Where is it hosted or distributed?',\n header: 'Hosting',\n type: 'text',\n required: false,\n },\n {\n path: 'stack.build',\n question: 'What is the build tool?',\n header: 'Build',\n type: 'text',\n required: false,\n },\n {\n path: 'stack.cicd',\n question: 'What CI/CD does it use?',\n header: 'CI/CD',\n type: 'text',\n required: false,\n },\n];\n\n/** The full ordered registry: the 8-Q core first, then stack. */\nexport const INTERVIEW: InterviewQuestion[] = [...SIX_WS_INTERVIEW, ...STACK_INTERVIEW];\n\n/** Lookup by slot path. */\nexport const INTERVIEW_BY_PATH = new Map<string, InterviewQuestion>(\n INTERVIEW.map((q) => [q.path, q]),\n);\n\n/**\n * Plain-object companion to INTERVIEW_BY_PATH. A Map JSON-serializes to `{}`,\n * which reads as \"the export shipped empty\" to any consumer that crosses a\n * serialization boundary (caught by the CFM compose handoff, 2026-06-12).\n * Bridge consumers that serialize should use THIS; in-process consumers can\n * use either.\n */\nexport const INTERVIEW_PATHS: Record<string, InterviewQuestion> = Object.fromEntries(\n INTERVIEW.map((q) => [q.path, q]),\n);\n\n/**\n * Interview voice for ANY slot: the registry question when one exists,\n * otherwise derived from the slot's canonical description — so slot-driven\n * flows (faf go) and registry-driven flows (faf_go) speak the same language.\n */\nexport function questionForSlot(path: string): string {\n const q = INTERVIEW_BY_PATH.get(path);\n if (q) {return q.question;}\n const slot = SLOT_BY_PATH.get(path) ?? SLOTS.find((s) => s.canonical === path);\n return slot ? `${slot.description}?`.replace(/\\?\\?$/, '?') : `${path}?`;\n}\n\n/**\n * The questions still worth asking for a given .faf: registry order, empty\n * (or placeholder) slots only, slotignored skipped — the What-Not is never\n * interviewed. `data` is the parsed .faf object.\n */\nexport function interviewForMissing(\n data: Record<string, unknown>,\n isEmpty: (value: unknown) => boolean,\n): InterviewQuestion[] {\n return INTERVIEW.filter((q) => {\n const parts = q.path.split('.');\n let cur: unknown = data;\n for (const part of parts) {\n if (cur && typeof cur === 'object' && part in (cur as Record<string, unknown>)) {\n cur = (cur as Record<string, unknown>)[part];\n } else {\n cur = undefined;\n break;\n }\n }\n if (cur === 'slotignored') {return false;}\n return isEmpty(cur);\n });\n}\n\n// ── Goal-seed (the 8Qs flow) ─────────────────────────────────────────────────\n//\n// Box 2 (Goal, the one sentence) is the single generative input. seedSixWsFromGoal\n// extracts ONLY verbatim facts the goal LITERALLY contains — the project's own\n// words — never synthesis, inference, or defaults. What it can't pull from the\n// goal text, it leaves empty (the human fills it). Generic/template values are\n// banned even when matched. Output is a set of SUGGESTIONS for the Table-of-8;\n// the human approves before anything is built.\n//\n// Facts only · generic banned · empty beats wrong.\n//\n// Seeds WHAT (the leading noun phrase), WHERE (named platforms/registries), and\n// WHO (a `for <audience>` clause) — the three a goal reliably states. WHY, WHEN,\n// HOW are NOT seeded: a goal rarely states them verbatim (why/when are the\n// human's; how is sourced by Turbo-Cat). Empirically tuned against the FAF fleet.\n\n/** Template slop — banned as a seed value even if literally matched. */\nconst GENERIC_SEED_BAN = new Set([\n 'developers', 'development teams', 'development team', 'teams', 'development',\n 'cloud platform', 'web platform', 'platform', 'best practices',\n 'improve development efficiency', 'development efficiency',\n 'modern development practices', 'modern development', 'test-driven development',\n 'production/stable', 'production', 'stable', 'app', 'project', 'tool',\n]);\n\n/** Platforms / registries / runtimes — WHERE a project ships or runs. Canonical\n * label : the literal token that proves it (word-boundary, case-insensitive). */\nconst WHERE_SIGNALS: Array<[label: string, re: RegExp]> = [\n ['npm', /\\bnpm\\b/i],\n ['PyPI', /\\bpypi\\b/i],\n ['crates.io', /\\bcrates\\.io\\b/i],\n ['Homebrew', /\\bhomebrew\\b/i],\n ['Docker', /\\bdocker\\b/i],\n ['Cloudflare', /\\bcloudflare\\b/i],\n ['Vercel', /\\bvercel\\b/i],\n ['Netlify', /\\bnetlify\\b/i],\n ['AWS', /\\baws\\b/i],\n ['Cloud Run', /\\bcloud run\\b/i],\n ['edge', /\\bedge\\b/i],\n ['browser', /\\bbrowser\\b/i],\n ['WASM', /\\bwasm\\b/i],\n ['GitHub', /\\bgithub\\b/i],\n ['MCP Registry', /\\bmcp registry\\b/i],\n ['Chrome Web Store', /\\bchrome web store\\b/i],\n ['Smithery', /\\bsmithery\\b/i],\n];\n\nconst seedIsGeneric = (s: string): boolean => GENERIC_SEED_BAN.has(s.toLowerCase().trim());\n\n// The 6Ws terse rule: 3-4 words, HARD CAP <6 (max 5) — generous enough for a\n// double-barrel name / compound term, never a sentence. Seeds obey it: take the\n// first ≤5 words, then trim any trailing connective/preposition so a cap never\n// leaves a dangling \"with\"/\"and\"/\"the\".\nconst TERSE_TAIL = /^(?:with|and|or|using|for|to|that|who|whom|whose|the|a|an|in|on|of|via|by|&)$/i;\nfunction tersify(s: string, max = 5): string {\n const words = s.trim().split(/\\s+/).filter(Boolean).slice(0, max);\n while (words.length && TERSE_TAIL.test(words[words.length - 1].replace(/[.,;:]+$/, ''))) {\n words.pop();\n }\n return words.join(' ');\n}\n\nexport interface GoalSeed {\n what?: string;\n where?: string;\n who?: string;\n}\n\n/**\n * Seed the human-context slots from the Goal sentence — verbatim facts only.\n * Returns a partial { what?, where?, who? }; absent keys = \"no fact, ask the\n * human\". Never returns why/when/how (not verbatim-extractable from a goal).\n */\nexport function seedSixWsFromGoal(goal: string): GoalSeed {\n const seed: GoalSeed = {};\n if (!goal || typeof goal !== 'string') {return seed;}\n const g = goal.trim();\n\n // WHAT — the leading noun phrase: drop a leading emoji/symbol, cut at the first\n // structural delimiter, keep a clean 2-6 word verbatim phrase that isn't generic.\n const lead = g\n .replace(/^[^A-Za-z0-9]+/, '')\n .split(/\\s+(?:for|that|which|to)\\s+|\\s+[—–]\\s+|\\s-\\s|:\\s|\\.\\s|,\\s/)[0]\n .trim();\n const whatTerse = tersify(lead); // 3-4 words, cap <6\n if (whatTerse.split(/\\s+/).filter(Boolean).length >= 2 && !seedIsGeneric(whatTerse)) {\n seed.what = whatTerse;\n }\n\n // WHERE — every platform/registry/runtime literally named, deduped, terse.\n const wheres = WHERE_SIGNALS.filter(([, re]) => re.test(g)).map(([label]) => label);\n if (wheres.length) {seed.where = wheres.slice(0, 4).join(', ');}\n\n // WHO — ONLY an explicit audience ROLE: `for developers/teams/engineers/…`,\n // captured to the sentence boundary, qualifier kept. A bare `for <ProperNoun>`\n // is NOT seeded: in a goal that names the TARGET it serves (the AI/tool/format),\n // not the audience — too ambiguous to be a fact. Bare role-word (= generic)\n // dropped. Empty beats wrong; the human states the audience.\n const forAud = g.match(/\\bfor ((?:[A-Za-z][\\w./+-]* )?(?:any |all )?(?:developers?|teams?|engineers?|builders?|users?|integrators?)\\b[^.,;:—]*)/i);\n const whoTerse = tersify((forAud?.[1] || '').trim().replace(/\\s+/g, ' ')); // cap <6\n if (whoTerse && !seedIsGeneric(whoTerse)) {\n seed.who = whoTerse;\n }\n\n return seed;\n}\n\n// ── Table-of-8 (the 8Qs flow keystone) ───────────────────────────────────────\n//\n// The canonical approval table: the 8 questions in flow order, each with its\n// current value, a goal-seeded suggestion where a fact supports one, and a\n// status the consumer renders — filled (already in the .faf), seeded (proposed\n// from a fact, awaiting Tab/Enter approval), or empty (only the human knows).\n// Single-sources the seed→show→approve step so every surface shows the SAME\n// table. Nothing is committed here; the human approves, THEN the .faf is built.\n\nexport type BoxStatus = 'filled' | 'seeded' | 'empty';\n\nexport interface TableOf8Row {\n n: number; // 1-8, flow order\n path: string; // e.g. 'human_context.who'\n header: string; // e.g. 'Who'\n question: string; // the interview prompt\n value: string; // current value, or a seeded suggestion, or ''\n status: BoxStatus;\n seeded: boolean; // true when value is a goal-fact suggestion (not yet in the .faf)\n /** Provenance for a SEEDED row — where the suggestion was sourced from, so the\n * human confirms informed: 'project goal' or a README locus ('README:## Why').\n * Absent on filled/empty rows. */\n source?: string;\n /** 0..1 confidence for a seeded row, by source quality. Absent otherwise. */\n confidence?: number;\n}\n\nexport interface TableOf8 {\n version: string;\n rows: TableOf8Row[]; // exactly 8\n filledCount: number;\n seededCount: number;\n emptyCount: number;\n complete: boolean; // no empty rows\n}\n\nfunction valueAtPath(data: Record<string, unknown>, path: string): unknown {\n let cur: unknown = data;\n for (const part of path.split('.')) {\n if (cur && typeof cur === 'object' && part in (cur as Record<string, unknown>)) {\n cur = (cur as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return cur;\n}\n\n/** A slot is \"filled\" only with a real value — not empty, not slotignored, not a placeholder. */\nfunction tableValueFilled(v: unknown): v is string {\n if (typeof v !== 'string') {return false;}\n const t = v.trim();\n if (!t || t === 'slotignored') {return false;}\n return !isPlaceholder(t);\n}\n\n/**\n * Build the Table-of-8 from a .faf object (any/empty) + an optional goal and an\n * optional sourced README extraction (relentlessContextDetailed). The goal seeds\n * WHO/WHAT/WHERE via seedSixWsFromGoal (facts only, source 'project goal'); the\n * detailed README form covers WHY/WHEN/HOW and any slot the goal didn't reach,\n * each carrying its own provenance. Rows the .faf already fills are 'filled';\n * seeded ones carry `source`+`confidence` so the human confirms informed; the\n * rest are 'empty' (ask the human). Goal wins over README where both have a\n * fact (the deliberate sentence beats the extraction). Pure.\n */\nexport function buildTableOf8(\n faf: Record<string, unknown>,\n opts: { goal?: string; detailed?: SeededContextDetailed } = {},\n): TableOf8 {\n const data = faf && typeof faf === 'object' ? faf : {};\n const fafGoal = valueAtPath(data, 'project.goal');\n const goalVal = (tableValueFilled(fafGoal) ? String(fafGoal).trim() : '') || (opts.goal ?? '').trim();\n const seed = seedSixWsFromGoal(goalVal);\n const detailed = (opts.detailed ?? {}) as Record<string, { value: string; source: string; confidence: number } | undefined>;\n const goalSeed: Record<string, string | undefined> = {\n 'project.goal': goalVal || undefined,\n 'human_context.what': seed.what,\n 'human_context.where': seed.where,\n 'human_context.who': seed.who,\n };\n\n // A seed for a path: the goal-fact (deliberate, wins) else the sourced README\n // extraction (covers why/when/how + fallback). Each carries its provenance.\n const seedFor = (path: string): { value: string; source: string; confidence: number } | undefined => {\n const g = goalSeed[path];\n if (g) {return { value: g, source: 'project goal', confidence: 0.9 };}\n const w = path.startsWith('human_context.') ? path.slice('human_context.'.length) : '';\n const d = w ? detailed[w] : undefined;\n return d ? { value: d.value, source: d.source, confidence: d.confidence } : undefined;\n };\n\n const rows: TableOf8Row[] = SIX_WS_INTERVIEW.map((q, i) => {\n const base = { n: i + 1, path: q.path, header: q.header, question: q.question };\n const cur = valueAtPath(data, q.path);\n if (tableValueFilled(cur)) {\n return { ...base, value: String(cur).trim(), status: 'filled', seeded: false };\n }\n const s = seedFor(q.path);\n if (s) {\n return { ...base, value: s.value, status: 'seeded', seeded: true, source: s.source, confidence: s.confidence };\n }\n return { ...base, value: '', status: 'empty', seeded: false };\n });\n\n const filledCount = rows.filter((r) => r.status === 'filled').length;\n const seededCount = rows.filter((r) => r.status === 'seeded').length;\n const emptyCount = rows.filter((r) => r.status === 'empty').length;\n return { version: INTERVIEW_VERSION, rows, filledCount, seededCount, emptyCount, complete: emptyCount === 0 };\n}\n",
90
92
  "/**\n * The faf_loop decision core — the brain of \"100% or ask human\".\n *\n * A pure, snapshot decision: given a parsed .faf, classify its remaining gaps\n * as SOURCEABLE (detection can fill — language, stack: no human needed) or\n * HUMAN (only the human knows — the goal + the 6Ws), and return a verdict:\n *\n * done — nothing left (or already 100%). Stop, success.\n * can-source — sourceable gaps remain → the loop runs auto and re-scores.\n * needs-human — ONLY human gaps remain → the wall; ask (or seed-and-confirm).\n *\n * The classification IS the human/sourced boundary at runtime: a slot is human\n * iff its slot category is 'human' (the 6Ws) or it's the goal sentence. The\n * loop sources everything it can FIRST (minimise human asks); only when the\n * sourceable well is dry does it turn to the human. It never invents a human\n * slot to reach 100% — needs-human is a legitimate, honest terminal, not a\n * failure.\n *\n * This is the deterministic engine the CLI `faf loop` and the agentic\n * `/faf-loop` skill both decide from. Orchestration (run auto, re-score, the\n * no-progress + iteration-cap guards) lives in the command on top of this.\n */\n\nimport { INTERVIEW, questionForSlot } from './interview.js';\nimport { SLOT_BY_PATH, isPlaceholder } from './slots.js';\n\nexport type LoopStatus = 'done' | 'can-source' | 'needs-human';\n\nexport interface LoopGaps {\n /** Empty active slots only the human can give — the goal + the 6Ws. */\n human: string[];\n /** Empty active slots detection can fill — language + the stack. */\n sourceable: string[];\n}\n\nexport interface LoopVerdict {\n status: LoopStatus;\n score: number;\n gaps: LoopGaps;\n /** The questions to put to the human — populated only when status is\n * 'needs-human' (sourceable work is done; the human is all that's left). */\n ask: Array<{ path: string; question: string }>;\n}\n\n/** Default empty test: null/undefined, blank, or a placeholder token. The\n * What-Not (`slotignored`) is handled separately — it is never a gap. */\nexport function isEmptyValue(value: unknown): boolean {\n if (value === null || value === undefined) {return true;}\n if (typeof value === 'string') {\n const t = value.trim();\n return t === '' || isPlaceholder(t);\n }\n return false;\n}\n\nfunction valueAtPath(data: Record<string, unknown>, path: string): unknown {\n let cur: unknown = data;\n for (const part of path.split('.')) {\n if (cur && typeof cur === 'object' && part in (cur as Record<string, unknown>)) {\n cur = (cur as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return cur;\n}\n\n/** A path is HUMAN (only the human can give it) iff it is the goal sentence or\n * its slot category is 'human' (the 6Ws). Everything else — name, language,\n * the stack — is sourceable by detection. */\nexport function isHumanSlot(path: string): boolean {\n if (path === 'project.goal') {return true;}\n return SLOT_BY_PATH.get(path)?.category === 'human';\n}\n\n/**\n * Classify the empty, non-ignored interviewable slots of a .faf into human vs\n * sourceable. Scope = the interviewable slots (the 6Ws + name + goal + the core\n * stack); `slotignored` (the What-Not) is never a gap.\n */\nexport function classifyGaps(\n data: Record<string, unknown>,\n isEmpty: (value: unknown) => boolean = isEmptyValue,\n): LoopGaps {\n const human: string[] = [];\n const sourceable: string[] = [];\n for (const q of INTERVIEW) {\n const v = valueAtPath(data, q.path);\n if (v === 'slotignored') {continue;} // the What-Not is never interviewed\n if (!isEmpty(v)) {continue;} // already filled\n (isHumanSlot(q.path) ? human : sourceable).push(q.path);\n }\n return { human, sourceable };\n}\n\n/**\n * The loop verdict for a .faf snapshot. `score` is the current AI-readiness\n * score (the loop's termination test). Precedence is deliberate: source\n * everything possible BEFORE asking the human — so 'can-source' wins while any\n * sourceable gap remains, and 'needs-human' fires only once they're exhausted.\n */\nexport function loopVerdict(\n score: number,\n data: Record<string, unknown>,\n isEmpty: (value: unknown) => boolean = isEmptyValue,\n): LoopVerdict {\n const gaps = classifyGaps(data, isEmpty);\n let status: LoopStatus;\n if (score >= 100 || (gaps.human.length === 0 && gaps.sourceable.length === 0)) {\n status = 'done';\n } else if (gaps.sourceable.length > 0) {\n status = 'can-source';\n } else {\n status = 'needs-human';\n }\n const ask = status === 'needs-human' ? humanAsk(gaps) : [];\n return { status, score, gaps, ask };\n}\n\n/** The questions to put to the human for a set of gaps — its human slots,\n * paired with their interview prompt. The single source for the ask. */\nfunction humanAsk(gaps: LoopGaps): Array<{ path: string; question: string }> {\n return gaps.human.map((path) => ({ path, question: questionForSlot(path) }));\n}\n\n// ── Orchestration ────────────────────────────────────────────────────────────\n//\n// runLoop drives the snapshot verdict to a terminal: read → score → verdict →\n// (can-source) run auto → repeat. Dependencies are INJECTED so the driver is\n// pure and testable without real file IO; the CLI `faf loop` wires the real\n// read / score / auto. Two safety rails, because a loop that runs auto must\n// never spin: a hard round cap, and no-progress detection (if a round of auto\n// doesn't lift the score, the sourceable well is dry — stop, don't churn).\n\nexport type LoopRunStatus =\n | 'done' // reached 100% / no gaps — success\n | 'needs-human' // sourceable exhausted; only the human can finish (honest wall)\n | 'stuck' // sourceable gaps auto can't fill, and no human gaps to ask\n | 'capped' // hit the round cap still making progress\n | 'no-faf'; // nothing to read — caller must create one first\n\nexport interface LoopDeps {\n /** The current .faf as {data, yaml}, or null when none exists. */\n read(): { data: Record<string, unknown>; yaml: string } | null;\n /** Score raw .faf yaml → 0..100 (the termination test). */\n score(yaml: string): number;\n /** Source what detection can (auto): fill the stack and WRITE the .faf. */\n runAuto(): void;\n}\n\nexport interface LoopRunOptions {\n /** Hard cap on auto rounds (default 5). */\n maxRounds?: number;\n isEmpty?: (value: unknown) => boolean;\n}\n\nexport interface LoopRunResult {\n status: LoopRunStatus;\n score: number;\n /** Auto rounds actually run. */\n rounds: number;\n /** Score after each read — the climb, for narration. */\n history: number[];\n /** The human questions to put — populated only when status is 'needs-human'. */\n ask: Array<{ path: string; question: string }>;\n}\n\nexport function runLoop(deps: LoopDeps, opts: LoopRunOptions = {}): LoopRunResult {\n const maxRounds = Math.max(1, opts.maxRounds ?? 5);\n const isEmpty = opts.isEmpty ?? isEmptyValue;\n const history: number[] = [];\n let rounds = 0;\n\n // One iteration per read; at most maxRounds auto runs between them.\n for (let i = 0; i <= maxRounds; i++) {\n const snap = deps.read();\n if (!snap) {return { status: 'no-faf', score: 0, rounds, history, ask: [] };}\n\n const score = deps.score(snap.yaml);\n history.push(score);\n const verdict = loopVerdict(score, snap.data, isEmpty);\n\n if (verdict.status === 'done') {\n return { status: 'done', score, rounds, history, ask: [] };\n }\n if (verdict.status === 'needs-human') {\n return { status: 'needs-human', score, rounds, history, ask: verdict.ask };\n }\n\n // can-source — but did the LAST auto round actually move the score?\n if (history.length >= 2 && score <= history[history.length - 2]) {\n // No progress: the sourceable well is dry (auto can't fill what's left).\n // Defer to the human if there are human gaps; otherwise we're stuck.\n // Build the ask from gaps.human directly — `verdict.ask` is empty here\n // (the verdict is 'can-source', which never carries questions).\n return verdict.gaps.human.length\n ? { status: 'needs-human', score, rounds, history, ask: humanAsk(verdict.gaps) }\n : { status: 'stuck', score, rounds, history, ask: [] };\n }\n\n if (rounds >= maxRounds) {\n return { status: 'capped', score, rounds, history, ask: humanAsk(verdict.gaps) };\n }\n\n deps.runAuto();\n rounds++;\n }\n\n // Defined fallthrough (the cap check above returns first in practice).\n const last = history[history.length - 1] ?? 0;\n return { status: 'capped', score: last, rounds, history, ask: [] };\n}\n",
91
93
  "/**\n * faf bench — the AI-grounding benchmark (P1, agent-native).\n *\n * Measures the thing FAF sells, falsifiably: AI works better and faster WITH\n * structured context. Two numbers, one harness — grounding ACCURACY (N\n * project questions, cold vs with-faf) and grounding COST (tokens to get\n * grounded, as reported by the runner).\n *\n * The unfair advantage: the .faf IS the answer key. Questions derive from the\n * populated active slots; grading is mechanical (normalize + versioned alias\n * map + significant-token containment — no judge, no rubric drift). The\n * question-set hash rides a ✪ receipt, parity-hash discipline.\n *\n * DOCTRINE (wolfejam 2026-06-11):\n * - \"A low score is an ALARM BELL — you are hemorrhaging tokens and the AI\n * is pretty much clueless about what you are doing, even trying to do.\"\n * Headline: \"Trouble ahead, expensive trouble.\"\n * - NEVER render a low score alone — always the pair (cold → with-faf), or\n * the alarm framing with headroom. The delta is the product; the cold\n * number belongs to the ABSENCE of context (\"without context\"), never to\n * FAF. Output always ends in a prescription, never a verdict.\n * - The 6Ws are UNDERIVABLE from code: cold exploration can dig out a stack\n * (you pay for the dig); it can never find intent.\n */\n\nimport { createHash } from 'crypto';\nimport { readFileSync, writeFileSync, existsSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { findFafFile, readFafRaw } from '../interop/faf.js';\nimport { scoreFafYaml } from '../core/scorer.js';\nimport { SLOTS, readSlotValue, PLACEHOLDERS } from '../core/slots.js';\nimport { parse as parseYAML } from 'yaml';\nimport { bold, dim, fafCyan, orange } from '../ui/colors.js';\n\n/** Bump when phrasing, aliases, or grading rules change — part of the qset hash. */\nexport const BENCH_VERSION = 'faf-bench/1';\n\nexport interface BenchQuestion {\n n: number;\n path: string;\n question: string;\n}\n\n/** Stable question phrasing per slot path (fallback: templated from slot description). */\nconst PHRASINGS: Record<string, string> = {\n 'project.name': \"What is the project's name?\",\n 'project.goal': \"What is the project's goal — what is it for?\",\n 'project.main_language': 'What is the primary programming language?',\n 'human_context.who': 'Who is this project for?',\n 'human_context.what': 'What are they building?',\n 'human_context.why': 'Why does this project exist?',\n 'human_context.where': 'Where does it run or get distributed?',\n 'human_context.when': \"When — what is the project's timeline or stage?\",\n 'human_context.how': 'How is it built or used?',\n};\n\nfunction questionFor(path: string, description: string): string {\n return PHRASINGS[path] ?? `What is the project's ${description.replace(/\\s*\\(.*\\)$/, '').toLowerCase()}?`;\n}\n\n/**\n * Versioned alias groups — mechanical equivalences, no fuzzy scoring.\n * Members are compared post-normalization. Extend deliberately; every change\n * bumps the qset hash via BENCH_VERSION.\n */\nexport const ALIAS_GROUPS: string[][] = [\n ['typescript', 'ts'],\n ['javascript', 'js'],\n ['python', 'py', 'python3'],\n ['node', 'nodejs', 'node js', 'node.js'],\n ['github actions', 'gh actions', 'actions'],\n ['postgresql', 'postgres', 'pg'],\n ['kubernetes', 'k8s'],\n ['npm', 'npm registry'],\n ['cloudflare workers', 'cf workers', 'workers'],\n ['google cloud run', 'cloud run', 'gcp cloud run'],\n];\n\nconst ALIAS_LOOKUP = new Map<string, number>();\nALIAS_GROUPS.forEach((group, i) => group.forEach((m) => ALIAS_LOOKUP.set(m, i)));\n\nconst STOPWORDS = new Set([\n 'a', 'an', 'the', 'and', 'or', 'of', 'for', 'to', 'in', 'on', 'with', 'is',\n 'it', 'its', 'their', 'your', 'via', 'by', 'using', 'use', 'used',\n]);\n\nexport function normalizeAnswer(s: string): string {\n return s\n .toLowerCase()\n .replace(/[^a-z0-9\\s.+#-]/g, ' ') // keep tech-name chars (c++, c#, node.js, faf-cli)\n .replace(/\\.(?=\\s|$)/g, ' ') // trailing dots\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nfunction significantTokens(s: string): string[] {\n return normalizeAnswer(s).split(' ').filter((t) => t && !STOPWORDS.has(t));\n}\n\n/**\n * Mechanical match: exact normalized equality, alias-group equality, or\n * every significant token of the EXPECTED value present in the answer\n * (deterministic set containment — handles sentence-shaped 6W answers\n * without a judge). A miss is a miss.\n */\nexport function answersMatch(expected: string, given: string): boolean {\n const e = normalizeAnswer(expected);\n const g = normalizeAnswer(given);\n if (!e || !g) {return false;}\n if (e === g) {return true;}\n const ea = ALIAS_LOOKUP.get(e);\n if (ea !== undefined && ALIAS_LOOKUP.get(g) === ea) {return true;}\n const need = significantTokens(expected);\n if (need.length === 0) {return false;}\n const have = new Set(significantTokens(given));\n return need.every((t) => {\n if (have.has(t)) {return true;}\n const ta = ALIAS_LOOKUP.get(t);\n return ta !== undefined && [...have].some((h) => ALIAS_LOOKUP.get(h) === ta);\n });\n}\n\nexport interface QuestionSet {\n version: string;\n qsetHash: string;\n questions: BenchQuestion[];\n /** Internal answer key — NEVER printed by `questions`; used by `grade`. */\n answers: Record<number, string>;\n}\n\n/** Derive the question set + answer key from a project.faf (active populated slots only). */\nexport function deriveQuestionSet(yaml: string): QuestionSet {\n const result = scoreFafYaml(yaml);\n const data = parseYAML(yaml) as Record<string, unknown>;\n\n const questions: BenchQuestion[] = [];\n const answers: Record<number, string> = {};\n let n = 0;\n\n for (const slot of SLOTS) {\n // Active + populated only — slotignored is the What-Not, never a quiz topic.\n if (result.slots[slot.path] !== 'populated') {continue;}\n const value = readSlotValue(data, slot);\n if (typeof value !== 'string') {continue;}\n const v = value.trim();\n if (!v || PLACEHOLDERS.has(v.toLowerCase())) {continue;}\n n += 1;\n questions.push({ n, path: slot.path, question: questionFor(slot.path, slot.description) });\n answers[n] = v;\n }\n\n // Hash covers version + paths + phrasings (NOT answers — the key isn't the set).\n const projection = JSON.stringify({\n v: BENCH_VERSION,\n q: questions.map((q) => [q.path, q.question]),\n });\n const qsetHash = createHash('sha256').update(projection).digest('hex').slice(0, 12);\n\n return { version: BENCH_VERSION, qsetHash, questions, answers };\n}\n\n/**\n * The answer-key-safe projection of a QuestionSet — version + qsetHash +\n * questions, NEVER `answers`. Any \"give me the questions\" surface (MCP tools,\n * UIs) MUST hand out THIS, not the raw QuestionSet: a tool that prints the\n * answer key makes the benchmark a lie. The CLI's `bench questions` follows\n * the same rule.\n */\nexport function publicQuestions(qset: QuestionSet): {\n version: string;\n qsetHash: string;\n questions: BenchQuestion[];\n} {\n return { version: qset.version, qsetHash: qset.qsetHash, questions: qset.questions };\n}\n\nexport interface GradeResult {\n correct: number;\n total: number;\n misses: BenchQuestion[];\n perQuestion: { n: number; path: string; ok: boolean }[];\n}\n\nexport function gradeAnswers(qset: QuestionSet, given: Record<string, string>): GradeResult {\n const perQuestion = qset.questions.map((q) => {\n const ans = given[String(q.n)] ?? given[q.path] ?? '';\n return { n: q.n, path: q.path, ok: typeof ans === 'string' && ans.trim() !== '' && answersMatch(qset.answers[q.n], ans) };\n });\n const misses = qset.questions.filter((q) => !perQuestion[q.n - 1].ok);\n return { correct: perQuestion.filter((r) => r.ok).length, total: qset.questions.length, misses, perQuestion };\n}\n\nexport interface RunRecord {\n score: number;\n total: number;\n tokens?: number;\n model?: string;\n}\n\nexport interface BenchState {\n version: string;\n qsetHash: string;\n protocol: 'in-session';\n cold?: RunRecord;\n faf?: RunRecord;\n}\n\nconst STATE_FILE = '.faf-bench.json';\n\nfunction loadState(dir: string): BenchState | null {\n const p = join(dir, STATE_FILE);\n if (!existsSync(p)) {return null;}\n try {\n return JSON.parse(readFileSync(p, 'utf-8')) as BenchState;\n } catch {\n return null;\n }\n}\n\nfunction saveState(dir: string, state: BenchState): void {\n writeFileSync(join(dir, STATE_FILE), `${JSON.stringify(state, null, 2) }\\n`, 'utf-8');\n}\n\n/** ✪ receipt — sha256 over the canonical projection; third-party verifiable.\n * Includes `repo` so the receipt attests WHICH project was benched — two repos\n * that score identically on the same qset get distinct receipts (bench-only;\n * independent of the parity/trust score hash). */\nexport function buildReceipt(state: BenchState, repo?: string): { projection: string; hash: string } {\n const projection = JSON.stringify({\n v: state.version,\n repo: repo ?? null,\n qset: state.qsetHash,\n protocol: state.protocol,\n cold: state.cold ?? null,\n faf: state.faf ?? null,\n });\n return { projection, hash: createHash('sha256').update(projection).digest('hex') };\n}\n\nconst tok = (t?: number) => (t === undefined ? '—' : `~${t.toLocaleString()}`);\n\nfunction printPair(state: BenchState, project: string): void {\n const c = state.cold!;\n const f = state.faf!;\n console.log(`\\n${bold(`faf bench — ${project}`)}\\n`);\n console.log(` ${dim('without context')} ${fafCyan('with .faf')}`);\n console.log(`answers ${c.score}/${c.total} ${bold(`${f.score}/${f.total}`)}`);\n console.log(`tokens ${tok(c.tokens)} ${tok(f.tokens)}`);\n const gap = c.total - c.score;\n if (gap > 0) {\n console.log(`\\n${dim(`The ${gap} missing answer${gap === 1 ? '' : 's'} were already in your repo — unstructured.`)}`);\n console.log(dim('Structured context closes the gap.'));\n }\n const r = buildReceipt(state, project);\n console.log(`\\n${orange('✪ BENCH RECEIPT')}`);\n console.log(dim(` qset: ${state.qsetHash} protocol: ${state.protocol} model: ${f.model ?? c.model ?? 'unreported'}`));\n console.log(dim(` cold ${c.score}/${c.total} · faf ${f.score}/${f.total} · sha256: ${r.hash.slice(0, 16)}…`));\n}\n\nfunction printColdAlarm(state: BenchState, project: string): void {\n const c = state.cold!;\n const gap = c.total - c.score;\n console.log(`\\n${bold(`faf bench — ${project}`)} ${orange('Trouble ahead, expensive trouble.')}\\n`);\n console.log(` ${dim('without context')}`);\n console.log(`answers ${c.score}/${c.total} ${dim('— the AI is guessing at what you are building')}`);\n if (c.tokens !== undefined) {\n console.log(`tokens ${tok(c.tokens)} ${dim('— re-derivation burn, paid again EVERY session')}`);\n }\n if (gap > 0) {\n console.log(`\\n${gap} answer${gap === 1 ? '' : 's'} missing: the stack it can dig out (you pay for the dig);`);\n console.log('what you are trying to DO, it cannot derive at any price.');\n console.log('Both are already in your repo — unstructured.');\n }\n console.log(`\\n${fafCyan('→ faf init && faf bench')} ${dim('(close the gap, get the receipt)')}`);\n}\n\nexport interface BenchOptions {\n json?: boolean;\n cold?: boolean;\n faf?: boolean;\n tokens?: string;\n model?: string;\n file?: string;\n submit?: boolean;\n endpoint?: string;\n}\n\nconst DEFAULT_BENCH_ENDPOINT = 'https://mcpaas.live/bench/submit';\n\n/** Fire-and-forget POST of a receipt to the public bench ledger. Never throws. */\nasync function submitReceipt(receipt: Record<string, string>, endpoint: string): Promise<void> {\n try {\n const res = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(receipt),\n });\n console.log(dim(res.ok ? ` ✪ submitted to ${endpoint}` : ` submit failed (${res.status})`));\n } catch {\n console.log(dim(' submit skipped (endpoint unreachable)'));\n }\n}\n\nexport function benchCommand(action?: string, answersFile?: string, options: BenchOptions = {}): void {\n const fafPath = options.file ?? findFafFile();\n if (!fafPath) {\n console.error(\"Error: project.faf not found\\n\\n Run 'faf init' to create one — bench needs the answer key.\");\n process.exit(2);\n }\n const yaml = readFafRaw(fafPath);\n const qset = deriveQuestionSet(yaml);\n const dir = dirname(fafPath);\n const project = (parseYAML(yaml) as Record<string, any>)?.project?.name ?? dir.split('/').pop();\n\n if (qset.questions.length === 0) {\n console.error('Error: no populated slots to derive questions from.\\n\\n Run `faf go` to fill the .faf first.');\n process.exit(2);\n }\n\n // ── faf bench questions ─────────────────────────────────────────────\n if (action === 'questions') {\n if (options.json) {\n console.log(JSON.stringify({ version: qset.version, qsetHash: qset.qsetHash, questions: qset.questions.map(({ n, question }) => ({ n, question })) }, null, 2));\n return;\n }\n console.log(`\\n${bold(`faf bench — ${qset.questions.length} questions`)} ${dim(`qset ${qset.qsetHash}`)}\\n`);\n for (const q of qset.questions) {console.log(` ${String(q.n).padStart(2)}. ${q.question}`);}\n console.log(`\\n${dim('Answer terse — the value, not a sentence. Save as JSON: {\"1\": \"...\", \"2\": \"...\"}')}`);\n return;\n }\n\n // ── faf bench grade <answers.json> --cold | --faf ───────────────────\n if (action === 'grade') {\n if (!answersFile || !existsSync(answersFile)) {\n console.error('Error: faf bench grade <answers.json> — file not found.');\n process.exit(2);\n }\n const raw = JSON.parse(readFileSync(answersFile, 'utf-8'));\n const given: Record<string, string> = raw.answers ?? raw;\n const graded = gradeAnswers(qset, given);\n const run: RunRecord = {\n score: graded.correct,\n total: graded.total,\n ...(options.tokens ? { tokens: parseInt(options.tokens, 10) } : {}),\n ...(options.model ? { model: options.model } : {}),\n };\n\n const prior = loadState(dir);\n const state: BenchState =\n prior && prior.qsetHash === qset.qsetHash\n ? prior\n : { version: qset.version, qsetHash: qset.qsetHash, protocol: 'in-session' };\n\n if (options.cold) {state.cold = run;}\n else if (options.faf) {state.faf = run;}\n else {\n console.error('Error: specify the run mode — --cold (no context) or --faf (after reading project.faf).');\n process.exit(2);\n }\n saveState(dir, state);\n\n if (options.json) {\n const receipt = buildReceipt(state, project);\n console.log(JSON.stringify({ ...state, receipt: receipt.hash, perQuestion: graded.perQuestion }, null, 2));\n return;\n }\n\n // NEVER a lone low score: pair when both runs exist, alarm framing when cold-only.\n if (state.cold && state.faf) {printPair(state, project);}\n\n // --submit: post the full-pair receipt to the public bench ledger (fire-and-forget).\n if (options.submit && state.cold && state.faf) {\n const c = state.cold;\n const f = state.faf;\n const r = buildReceipt(state, project);\n void submitReceipt(\n {\n date: new Date().toISOString().slice(0, 10),\n model: f.model ?? c.model ?? options.model ?? 'unreported',\n repo: project,\n qset: state.qsetHash,\n cold: `${c.score}/${c.total}`,\n faf: `${f.score}/${f.total}`,\n sha256: r.hash.slice(0, 16),\n },\n options.endpoint ?? DEFAULT_BENCH_ENDPOINT\n );\n }\n else if (state.cold) {printColdAlarm(state, project);}\n else {\n // faf-run-only: fine to show alone (it's the with-context number).\n console.log(`\\n${bold(`faf bench — ${project}`)} ${fafCyan('with .faf')}: ${bold(`${run.score}/${run.total}`)} ${dim(`tokens ${tok(run.tokens)}`)}`);\n console.log(dim('Run the cold phase too for the full pair: faf bench (protocol).'));\n }\n return;\n }\n\n // ── faf bench (no action): the agent-native protocol ────────────────\n console.log(`\\n${bold('faf bench — agent-native protocol')} ${dim(`qset ${qset.qsetHash} · ${qset.questions.length} questions`)}\\n`);\n console.log(`${bold('COLD phase')} ${dim('(fresh AI session, repo access)')}`);\n console.log(` 1. Instruct: \"Answer these questions from the repository.`);\n console.log(` Do NOT read project.faf, CLAUDE.md, AGENTS.md, or any *.faf file.\"`);\n console.log(` 2. ${fafCyan('faf bench questions')} — hand them over; answers terse, saved as cold.json`);\n console.log(` 3. ${fafCyan('faf bench grade cold.json --cold --tokens <used> --model <name>')}\\n`);\n console.log(`${bold('FAF phase')} ${dim('(same questions, context first)')}`);\n console.log(` 4. Instruct: \"Read project.faf, then answer the same questions.\" → faf.json`);\n console.log(` 5. ${fafCyan('faf bench grade faf.json --faf --tokens <used> --model <name>')}\\n`);\n console.log(dim('Grading is mechanical against your own project.faf — the .faf IS the answer key.'));\n console.log(dim(`Receipts carry protocol: in-session (honor-system cold). qset ${qset.qsetHash}.`));\n}\n",
92
- "/**\n * Turbo-Cat™ (= Format-finder) — fills .faf slots from file-format evidence\n * across ~200 formats (the KNOWLEDGE_BASE). Restores the multi-ecosystem\n * manifest interrogation the v6.0 rewrite narrowed to README+Cargo+package.json.\n *\n * v6-native sync port (the v5 engine was async; sync integrates cleanly with\n * `auto`). Two-layer: (1A) config files walking up to the monorepo .git\n * boundary, (1B) source extensions; priority-wins slot recommendations.\n *\n * Used as the LOWEST-precedence filler in `auto`: v6's specific detection wins;\n * Turbo-Cat fills only the slots still empty (esp. non-npm stacks).\n */\n\nimport { existsSync, readdirSync, readFileSync } from 'fs';\nimport { join, dirname, extname, resolve } from 'path';\nimport { KNOWLEDGE_BASE } from './turbo-cat-knowledge.js';\nimport { detectDartProject } from './dart.js';\nimport { detectGoProject } from './go.js';\nimport { detectCsharpProject } from './csharp.js';\nimport { detectJvmProject } from './jvm.js';\nimport { detectRubyProject } from './ruby.js';\n\nconst IGNORE = new Set([\n 'node_modules', '.git', 'dist', 'build', 'venv', '.venv', '__pycache__',\n 'target', 'coverage', '.next', '.svelte-kit', 'vendor',\n]);\nconst SCAN_EXTS = new Set([\n '.py', '.ts', '.tsx', '.js', '.jsx', '.svelte', '.vue',\n '.rb', '.go', '.rs', '.php', '.java', '.kt', '.swift',\n]);\n\n/** ContextSlots (camelCase + snake_case) → v6 .faf slot path. */\nconst SLOT_MAP: Record<string, [section: string, field: string]> = {\n mainLanguage: ['project', 'main_language'], main_language: ['project', 'main_language'],\n framework: ['stack', 'frontend'],\n cssFramework: ['stack', 'css_framework'], css: ['stack', 'css_framework'],\n uiLibrary: ['stack', 'ui_library'], ui_library: ['stack', 'ui_library'],\n stateManagement: ['stack', 'state_management'], state: ['stack', 'state_management'],\n backend: ['stack', 'backend'],\n apiType: ['stack', 'api_type'], api: ['stack', 'api_type'],\n runtime: ['stack', 'runtime'],\n database: ['stack', 'database'], db: ['stack', 'database'],\n connection: ['stack', 'connection'],\n hosting: ['stack', 'hosting'],\n buildTool: ['stack', 'build'], build_tool: ['stack', 'build'], build: ['stack', 'build'],\n packageManager: ['stack', 'package_manager'], pkg_manager: ['stack', 'package_manager'],\n cicd: ['stack', 'cicd'],\n};\n\n/** A format actually discovered on disk (config-file layer; real files only). */\nexport interface DiscoveredFormat {\n fileName: string;\n /** Derived from the entry's primary slot family (deterministic — real\n * knowledge surfaced, not invented): package-manager, language, framework,\n * backend, database, ci-cd, hosting, build, … */\n category: string;\n priority: number;\n}\n\nexport interface TurboCatResult {\n slotFills: Record<string, string>; // ContextSlots key → value (priority-wins)\n frameworks: string[];\n confirmedCount: number;\n /** Option B (compose spec 2026-06-12): the per-format breakdown consumers\n * display — surfaced so MCPs can DELETE their local format maps entirely. */\n discoveredFormats: DiscoveredFormat[];\n /** Deterministic lowercase signature, e.g. \"typescript-react\" ('unknown-stack' when bare). */\n stackSignature: string;\n}\n\ninterface FoundFormat {\n slots: Record<string, string>;\n priority: number;\n frameworks: string[];\n fileName?: string; // set for the config-file layer (real files on disk)\n}\n\n/** slot-family → display category (first match wins; deterministic). */\nconst CATEGORY_BY_SLOT: Array<[slot: string, category: string]> = [\n ['packageManager', 'package-manager'],\n ['pkg_manager', 'package-manager'],\n ['mainLanguage', 'language'],\n ['main_language', 'language'],\n ['framework', 'framework'],\n ['backend', 'backend'],\n ['database', 'database'],\n ['db', 'database'],\n ['cicd', 'ci-cd'],\n ['hosting', 'hosting'],\n ['buildTool', 'build'],\n ['build_tool', 'build'],\n ['build', 'build'],\n ['runtime', 'runtime'],\n ['cssFramework', 'css'],\n ['css', 'css'],\n ['uiLibrary', 'ui-library'],\n ['stateManagement', 'state-management'],\n ['apiType', 'api'],\n ['api', 'api'],\n];\n\nfunction categoryFor(slots: Record<string, string>, frameworks: string[]): string {\n for (const [slot, category] of CATEGORY_BY_SLOT) {\n if (slot in slots) {return category;}\n }\n return frameworks.length > 0 ? 'framework' : 'config';\n}\n\n/**\n * `manifest.json` is one of the most overloaded filenames in software —\n * Chrome/browser extension, mcpb/MCP manifest, PWA manifest, or plain config.\n * Asserting a Chrome stack from the FILENAME is a guess, and sourced-only\n * forbids guessing (every FAF MCP ships an mcpb manifest.json and was\n * mis-detected as a JS Chrome Extension — the 2026-06-12 blocker).\n *\n * Disambiguate by CONTENT, or assert nothing:\n * chrome — manifest_version is a NUMBER (2/3) AND a chrome field present\n * → the KB's chrome entry applies (as before)\n * mcpb — manifest_version is a STRING (\"0.x\") or MCP fields present\n * → assert NOTHING (real evidence — .ts/tsconfig/deps — wins)\n * pwa — start_url/display/icons → assert nothing\n * unknown/unreadable → assert NOTHING. An honest empty beats a guessed stack.\n */\nfunction classifyManifestJson(filePath: string): 'chrome' | 'other' {\n try {\n const m = JSON.parse(readFileSync(filePath, 'utf-8')) as Record<string, unknown>;\n const chromeField = ['background', 'content_scripts', 'action', 'browser_action', 'permissions']\n .some((k) => k in m);\n if (typeof m.manifest_version === 'number' && chromeField) {return 'chrome';}\n return 'other'; // mcpb (string manifest_version / server / tools / display_name), PWA, or plain config\n } catch {\n return 'other'; // unreadable → assert nothing\n }\n}\n\n/** Layer 1A — config files, walking up to the monorepo .git boundary. */\nfunction scanConfigFiles(projectDir: string): FoundFormat[] {\n const found: FoundFormat[] = [];\n let cur = resolve(projectDir);\n const ownGit = existsSync(join(projectDir, '.git'));\n /** One JVM classification per directory (pom + gradle + settings would triple-fire). */\n const jvmDirsDone = new Set<string>();\n for (let i = 0; i < 10; i++) {\n let files: string[];\n try {\n files = readdirSync(cur);\n } catch {\n break;\n }\n for (const f of files) {\n // Content-aware: any *.csproj (names vary — not in KNOWLEDGE_BASE by basename).\n // .csproj alone ≠ type: Sdk + packages via detectCsharpProject.\n if (f.toLowerCase().endsWith('.csproj')) {\n const cp = detectCsharpProject(cur);\n if (cp) {\n const slots: Record<string, string> = {\n mainLanguage: 'C#',\n packageManager: 'NuGet',\n buildTool: 'dotnet',\n };\n if (cp.appType === 'backend' && cp.framework) {\n slots.backend = cp.framework;\n } else if (cp.appType === 'cli' && cp.framework) {\n slots.framework = cp.framework;\n } else if (cp.appType === 'mcp') {\n slots.apiType = 'MCP';\n } else if (cp.appType === 'mobile' && cp.framework) {\n slots.framework = cp.framework;\n }\n if (cp.targetFramework) {\n slots.runtime = cp.targetFramework;\n }\n const frameworks = cp.framework ? [cp.framework, 'C#', '.NET'] : ['C#', '.NET'];\n found.push({ slots, priority: 36, frameworks, fileName: f });\n }\n continue;\n }\n\n const k = KNOWLEDGE_BASE[f];\n if (!k) {continue;}\n // Sourced-only gate: manifest.json only asserts the chrome stack when\n // its CONTENT proves a chrome extension; mcpb/PWA/unknown assert nothing.\n if (f === 'manifest.json' && classifyManifestJson(join(cur, f)) !== 'chrome') {continue;}\n // Content-aware: pubspec.yaml backs Flutter apps, Dart CLIs/packages,\n // servers, and MCP servers — branch by deps instead of asserting Flutter\n // for everything (the filename-only flattening this engine used to do).\n if (f === 'pubspec.yaml') {\n const dp = detectDartProject(cur);\n if (dp) {\n const slots: Record<string, string> = { mainLanguage: 'Dart', packageManager: 'pub' };\n if (dp.isFlutter) {\n slots.framework = 'Flutter';\n if (dp.stateManagement) {slots.stateManagement = dp.stateManagement;}\n } else if (dp.appType === 'backend' && dp.framework) {\n slots.backend = dp.framework;\n } else if (dp.appType === 'mcp') {\n slots.apiType = 'MCP';\n }\n found.push({ slots, priority: k.priority, frameworks: dp.isFlutter ? ['Flutter', 'Dart'] : ['Dart'], fileName: f });\n continue;\n }\n }\n // Content-aware: go.mod backs libraries, backends, CLIs, MCP — not one bucket.\n if (f === 'go.mod') {\n const gp = detectGoProject(cur);\n if (gp) {\n const slots: Record<string, string> = {\n mainLanguage: 'Go',\n packageManager: 'go modules',\n buildTool: 'go build',\n };\n if (gp.appType === 'backend' && gp.framework) {\n slots.backend = gp.framework;\n } else if (gp.appType === 'cli' && gp.framework) {\n slots.framework = gp.framework;\n } else if (gp.appType === 'mcp') {\n slots.apiType = 'MCP';\n }\n const frameworks = gp.framework ? [gp.framework, 'Go'] : ['Go'];\n found.push({ slots, priority: k.priority, frameworks, fileName: f });\n continue;\n }\n }\n // Content-aware: Gemfile alone ≠ Rails (Ruby Edition).\n if (f === 'Gemfile' || f === 'Gemfile.lock' || f === 'gems.rb') {\n const rp = detectRubyProject(cur);\n if (rp) {\n const slots: Record<string, string> = {\n mainLanguage: 'Ruby',\n packageManager: rp.packageManager,\n };\n if (rp.appType === 'backend' && rp.framework) {\n slots.backend = rp.framework;\n } else if (rp.appType === 'cli' && rp.framework) {\n slots.framework = rp.framework;\n } else if (rp.appType === 'mcp') {\n slots.apiType = 'MCP';\n }\n const frameworks = rp.framework ? [rp.framework, 'Ruby'] : ['Ruby'];\n found.push({\n slots,\n priority: k.priority ?? 35,\n frameworks,\n fileName: f,\n });\n continue;\n }\n }\n // Content-aware: pom / gradle alone ≠ type (JVM Edition). One brand JVM;\n // Android/KMP are facets. Version catalogs + multi-module via detectJvmProject.\n if (\n f === 'pom.xml' ||\n f === 'build.gradle' ||\n f === 'build.gradle.kts' ||\n f === 'settings.gradle' ||\n f === 'settings.gradle.kts'\n ) {\n if (jvmDirsDone.has(cur)) {continue;}\n jvmDirsDone.add(cur);\n const jv = detectJvmProject(cur);\n if (jv) {\n const slots: Record<string, string> = {\n mainLanguage: jv.mainLanguage === 'Java/Kotlin' ? 'Kotlin' : jv.mainLanguage,\n packageManager: jv.buildTool === 'maven' ? 'maven' : 'gradle',\n buildTool: jv.buildTool,\n };\n if (jv.appType === 'backend' && jv.framework) {\n slots.backend = jv.framework;\n } else if (jv.appType === 'cli' && jv.framework) {\n slots.framework = jv.framework;\n } else if (jv.appType === 'mcp') {\n slots.apiType = 'MCP';\n } else if (jv.appType === 'mobile') {\n slots.framework = jv.framework || 'Android';\n }\n if (jv.facets.includes('multiplatform')) {\n slots.framework = jv.framework || 'Kotlin Multiplatform';\n }\n const frameworks = jv.framework\n ? [jv.framework, 'JVM', jv.mainLanguage === 'Kotlin' ? 'Kotlin' : 'Java']\n : ['JVM', jv.mainLanguage === 'Kotlin' ? 'Kotlin' : 'Java'];\n found.push({\n slots,\n priority: k.priority ?? 35,\n frameworks,\n fileName: f,\n });\n continue;\n }\n }\n found.push({ slots: (k.slots as Record<string, string>) || {}, priority: k.priority, frameworks: k.frameworks, fileName: f });\n }\n if (ownGit && i === 0) {break;}\n const parent = dirname(cur);\n if (parent === cur) {break;}\n cur = parent;\n }\n return found;\n}\n\n/** Layer 1B — source extensions present. Extensions assert LANGUAGE only: a .py\n * reliably means Python, but a stray .tsx must not assert \"React\" (frameworks\n * come from config files, Layer 1A). */\nfunction scanExtensions(projectDir: string): FoundFormat[] {\n const found: FoundFormat[] = [];\n for (const ext of collectExtensions(projectDir, 2, { count: 0 })) {\n const k = KNOWLEDGE_BASE[`*${ext}`];\n const lang = (k?.slots as Record<string, string> | undefined)?.mainLanguage;\n if (lang) {found.push({ slots: { mainLanguage: lang }, priority: k.priority, frameworks: k.frameworks });}\n }\n return found;\n}\n\n/** Scan formats → priority-wins slot recommendations. */\nexport function turboCatScan(projectDir: string): TurboCatResult {\n const found = [...scanConfigFiles(projectDir), ...scanExtensions(projectDir)];\n\n // Analyze — highest priority wins each slot (deterministic, order-independent).\n // Skip ambiguous multi-option hints (e.g. \"npm/yarn/pnpm\") — only confident\n // single values fill; v6's specific detection handles the rest.\n const slotFills: Record<string, string> = {};\n const slotPrio: Record<string, number> = {};\n const fw = new Set<string>();\n for (const item of found) {\n item.frameworks.forEach((f) => fw.add(f));\n for (const [slot, val] of Object.entries(item.slots)) {\n if (val && !val.includes('/') && (!(slot in slotFills) || item.priority > slotPrio[slot])) {\n slotFills[slot] = val;\n slotPrio[slot] = item.priority;\n }\n }\n }\n // Per-format breakdown — real files only, deduped, deterministic order\n // (priority desc, then name) regardless of filesystem enumeration order.\n const seen = new Map<string, DiscoveredFormat>();\n for (const item of found) {\n if (!item.fileName) {continue;}\n if (!seen.has(item.fileName)) {\n seen.set(item.fileName, {\n fileName: item.fileName,\n category: categoryFor(item.slots, item.frameworks),\n priority: item.priority,\n });\n }\n }\n const discoveredFormats = [...seen.values()].sort(\n (a, b) => b.priority - a.priority || a.fileName.localeCompare(b.fileName),\n );\n\n // Deterministic stack signature: language + framework, lowercased, dash-joined.\n const sigParts: string[] = [];\n if (slotFills.mainLanguage) {sigParts.push(slotFills.mainLanguage.toLowerCase());}\n if (slotFills.framework) {sigParts.push(slotFills.framework.toLowerCase());}\n const stackSignature = sigParts.length > 0 ? sigParts.join('-') : 'unknown-stack';\n\n return { slotFills, frameworks: [...fw], confirmedCount: found.length, discoveredFormats, stackSignature };\n}\n\n/** Turbo-Cat slot fills shaped as a v6 .faf partial ({ project, stack }) for fillEmpties. */\nexport function turboCatSlots(projectDir: string): { project?: Record<string, string>; stack?: Record<string, string> } {\n const { slotFills } = turboCatScan(projectDir);\n const out: { project?: Record<string, string>; stack?: Record<string, string> } = {};\n for (const [key, value] of Object.entries(slotFills)) {\n const target = SLOT_MAP[key];\n if (!target || !value) {continue;}\n const [section, field] = target;\n if (section === 'project') {(out.project ??= {})[field] = value;}\n else {(out.stack ??= {})[field] = value;}\n }\n return out;\n}\n\nfunction collectExtensions(dir: string, depth: number, budget: { count: number }): Set<string> {\n const exts = new Set<string>();\n if (depth < 0 || budget.count > 400) {return exts;}\n let entries: import('fs').Dirent[];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return exts;\n }\n for (const e of entries) {\n if (budget.count++ > 400) {break;}\n if (!e.isDirectory()) {\n const ext = extname(e.name);\n if (SCAN_EXTS.has(ext)) {exts.add(ext);}\n continue;\n }\n if (IGNORE.has(e.name) || e.name.startsWith('.')) {continue;}\n for (const x of collectExtensions(join(dir, e.name), depth - 1, budget)) {exts.add(x);}\n }\n return exts;\n}\n",
93
- "/**\n * 🔺 TURBO-CAT™ FORMAT PYRAMID v3.1.1\n *\n * ROW 20 IN PROGRESS - 199 FORMATS CATALOGUED!\n *\n * Like precious metals in a catalytic converter - each format triggers\n * a specific intelligence reaction. We CAN catalyze ANY format, but only\n * the WORTHY earn a pyramid stone!\n *\n * Pyramid Evolution:\n * ├── Row 17: Sum(1..17) + 1 = 154 (THE SACRED - ACHIEVED 2024)\n * ├── Row 18: Sum(1..18) + 1 = 172 (BEYOND SACRED - ACHIEVED)\n * ├── Row 19: Sum(1..19) + 1 = 190 (ACHIEVED 2025-12-17)\n * └── Row 20: Sum(1..20) + 1 = 211 (IN PROGRESS - 9/21 added)\n *\n * Row 20 Tier 1 Added (2025-12-17):\n * - build.zig.zon (Zig packages)\n * - gleam.toml (Gleam - 2nd most admired 2025)\n * - bunfig.toml (Bun config)\n * - mise.toml / .mise.toml (mise version manager)\n * - manifest.toml (Flox/Nix environments)\n * - justfile (Just command runner - 10k+ stars)\n * - .pre-commit-config.yaml (Git hooks framework)\n * - CLAUDE.md (Claude Code AI context)\n *\n * THE DOCTRINE: To add a new format, PROVE it's better than existing ones!\n *\n * 😽 We are the FORMAT FREAKS - Quality over Quantity!\n * 🏆 199 formats - CHAMPIONSHIP GRADE FORMAT DETECTION\n */\n\nexport interface FormatKnowledge {\n frameworks: string[]; // Possible frameworks this format indicates\n slots: Partial<ContextSlots>; // Direct Context-On-Demand slot mappings\n priority: number; // Intelligence score (0-35 points)\n intelligence: 'ultra-high' | 'high' | 'medium' | 'low';\n confirmWith?: string[]; // Additional files to check for confirmation\n}\n\nexport interface ContextSlots {\n // Technical slots (1-15) - camelCase versions\n framework: string;\n mainLanguage: string;\n buildTool: string;\n packageManager: string;\n hosting: string;\n backend: string;\n apiType: string;\n cicd: string;\n database: string;\n cssFramework: string;\n uiLibrary: string;\n stateManagement: string;\n server: string;\n connection: string;\n runtime: string;\n // Display slots (for stack display compatibility)\n build: string;\n\n // snake_case versions (for YAML compatibility)\n main_language: string;\n build_tool: string;\n pkg_manager: string;\n api: string;\n css: string;\n ui_library: string;\n state: string;\n db: string;\n\n // Human context slots (16-21)\n targetUser: string;\n coreProblem: string;\n missionPurpose: string;\n deploymentMarket: string;\n timeline: string;\n approach: string;\n}\n\n/**\n * THE KNOWLEDGE BASE\n * \n * Add any file format here and map it to:\n * 1. Frameworks it indicates\n * 2. Context slots it can fill\n * 3. Priority/intelligence score\n * \n * The fab-formats engine will automatically use this knowledge!\n */\nexport const KNOWLEDGE_BASE: Record<string, FormatKnowledge> = {\n // ============================================\n // ULTRA-HIGH VALUE (35 points) - Package Managers\n // ============================================\n \n 'package.json': {\n frameworks: ['Node.js', 'JavaScript', 'TypeScript'],\n slots: {\n packageManager: 'npm/yarn/pnpm',\n mainLanguage: 'JavaScript/TypeScript'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n 'README.md': {\n frameworks: [], // Can be any framework\n slots: {\n targetUser: 'developers', // Often contains who it's for\n coreProblem: 'understanding project', // Usually describes the problem\n missionPurpose: 'project documentation' // Contains the why\n },\n priority: 25, // HIGH: Human context goldmine\n intelligence: 'high'\n },\n\n 'requirements.txt': {\n frameworks: ['Python'],\n slots: { \n packageManager: 'pip',\n mainLanguage: 'Python'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n \n 'Pipfile': {\n frameworks: ['Python'],\n slots: { \n packageManager: 'pipenv',\n mainLanguage: 'Python'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n \n 'pyproject.toml': {\n frameworks: ['Python'],\n slots: {\n mainLanguage: 'Python',\n runtime: 'Python',\n backend: 'Python'\n },\n priority: 36,\n intelligence: 'ultra-high'\n },\n \n // Content-aware via detectRubyProject in turbo-cat.ts — Gemfile alone ≠ Rails.\n 'Gemfile': {\n frameworks: ['Ruby'],\n slots: {\n packageManager: 'bundler',\n mainLanguage: 'Ruby'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n 'Gemfile.lock': {\n frameworks: ['Ruby'],\n slots: {\n packageManager: 'bundler',\n mainLanguage: 'Ruby'\n },\n priority: 34,\n intelligence: 'high'\n },\n \n 'composer.json': {\n frameworks: ['PHP', 'Laravel', 'Symfony'],\n slots: { \n packageManager: 'composer',\n mainLanguage: 'PHP'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n \n 'Cargo.toml': {\n frameworks: ['Rust'],\n slots: {\n packageManager: 'cargo',\n mainLanguage: 'Rust',\n buildTool: 'cargo'\n },\n priority: 36,\n intelligence: 'ultra-high'\n },\n\n 'go.mod': {\n // Filename-only FALLBACK: assert Go + modules, NOT \"backend\" —\n // a go.mod backs libraries, Gin/Echo servers, Cobra CLIs, and MCP servers.\n // turbo-cat.ts reads CONTENT (detectGoProject) and fills framework/backend.\n frameworks: ['Go'],\n slots: {\n packageManager: 'go modules',\n mainLanguage: 'Go',\n buildTool: 'go build'\n },\n priority: 36,\n intelligence: 'ultra-high'\n },\n\n // Note: real projects use Named.csproj — turbo-cat.ts handles any *.csproj\n // via content-aware detectCsharpProject. This key is documentation-only\n // fallback if a literal file named \"*.csproj\" ever appears (it won't).\n '*.csproj': {\n frameworks: ['C#', '.NET'],\n slots: {\n packageManager: 'NuGet',\n mainLanguage: 'C#',\n buildTool: 'dotnet'\n },\n priority: 36,\n intelligence: 'ultra-high'\n },\n \n 'pubspec.yaml': {\n // Filename-only FALLBACK: assert Dart + pub, NOT Flutter — a pubspec backs\n // Flutter apps, pure-Dart CLIs/packages/servers, and MCP servers alike.\n // turbo-cat.ts reads the CONTENT (detectDartProject) and adds the framework\n // (Flutter / Dart Frog / …) when the deps actually prove it.\n frameworks: ['Dart'],\n slots: {\n packageManager: 'pub',\n mainLanguage: 'Dart'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n \n 'pom.xml': {\n // Filename-only FALLBACK: assert Java + Maven, NOT Spring —\n // a pom backs libraries, Boot apps, aggregators/BOMs, MCP servers.\n // turbo-cat.ts reads CONTENT (detectJvmProject) for appType/framework.\n frameworks: ['Java'],\n slots: {\n packageManager: 'maven',\n mainLanguage: 'Java',\n buildTool: 'maven'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n 'build.gradle': {\n // Filename-only FALLBACK: assert JVM + Gradle, NOT Spring/Android.\n // Content-aware detectJvmProject fills Spring / Android / KMP / MCP.\n frameworks: ['Java', 'Gradle'],\n slots: {\n packageManager: 'gradle',\n mainLanguage: 'Java',\n buildTool: 'gradle'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n 'settings.gradle': {\n frameworks: ['Java', 'Gradle'],\n slots: {\n packageManager: 'gradle',\n mainLanguage: 'Java',\n buildTool: 'gradle'\n },\n priority: 34,\n intelligence: 'high'\n },\n\n 'settings.gradle.kts': {\n frameworks: ['Kotlin', 'Gradle'],\n slots: {\n packageManager: 'gradle',\n mainLanguage: 'Kotlin',\n buildTool: 'gradle'\n },\n priority: 34,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - JavaScript Frameworks\n // ============================================\n \n 'next.config.js': {\n frameworks: ['Next.js'],\n slots: { \n framework: 'Next.js',\n runtime: 'Node.js',\n buildTool: 'Next.js',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'next.config.mjs': {\n frameworks: ['Next.js'],\n slots: { \n framework: 'Next.js',\n runtime: 'Node.js',\n buildTool: 'Next.js',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'next.config.ts': {\n frameworks: ['Next.js 13+'],\n slots: { \n framework: 'Next.js 13+',\n runtime: 'Node.js',\n buildTool: 'Next.js',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'nuxt.config.js': {\n frameworks: ['Nuxt 2'],\n slots: { \n framework: 'Nuxt 2',\n runtime: 'Node.js',\n buildTool: 'Nuxt',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'nuxt.config.ts': {\n frameworks: ['Nuxt 3'],\n slots: { \n framework: 'Nuxt 3',\n runtime: 'Node.js',\n buildTool: 'Nuxt',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'svelte.config.js': {\n frameworks: ['SvelteKit'],\n slots: { \n framework: 'SvelteKit',\n buildTool: 'Vite',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'angular.json': {\n frameworks: ['Angular'],\n slots: {\n framework: 'Angular',\n buildTool: 'Angular CLI',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // CHROME EXTENSION SUPPORT\n // ============================================\n\n 'manifest.json': {\n frameworks: ['Chrome Extension', 'Browser Extension'],\n slots: {\n framework: 'Chrome Extension',\n runtime: 'Chrome/Browser',\n mainLanguage: 'JavaScript',\n hosting: 'Chrome Web Store',\n apiType: 'Chrome APIs'\n },\n priority: 35,\n intelligence: 'ultra-high',\n confirmWith: ['popup.html', 'background.js', 'content.js']\n },\n \n 'vue.config.js': {\n frameworks: ['Vue'],\n slots: { \n framework: 'Vue',\n buildTool: 'Vue CLI',\n mainLanguage: 'JavaScript'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'remix.config.js': {\n frameworks: ['Remix'],\n slots: { \n framework: 'Remix',\n runtime: 'Node.js',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'gatsby-config.js': {\n frameworks: ['Gatsby'],\n slots: { \n framework: 'Gatsby',\n buildTool: 'Gatsby',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'gatsby-config.ts': {\n frameworks: ['Gatsby'],\n slots: { \n framework: 'Gatsby',\n buildTool: 'Gatsby',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'astro.config.mjs': {\n frameworks: ['Astro'],\n slots: { \n framework: 'Astro',\n buildTool: 'Vite',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'redwood.toml': {\n frameworks: ['RedwoodJS'],\n slots: { \n framework: 'RedwoodJS',\n buildTool: 'Webpack',\n mainLanguage: 'JavaScript/TypeScript',\n server: 'Node.js',\n database: 'Prisma'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'blitz.config.ts': {\n frameworks: ['Blitz.js'],\n slots: { \n framework: 'Blitz.js',\n buildTool: 'Next.js',\n mainLanguage: 'TypeScript',\n server: 'Node.js',\n database: 'Prisma'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'qwik.config.ts': {\n frameworks: ['Qwik'],\n slots: { \n framework: 'Qwik',\n buildTool: 'Vite',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Backend Frameworks\n // ============================================\n \n 'manage.py': {\n frameworks: ['Django'],\n slots: { \n framework: 'Django',\n backend: 'Django',\n mainLanguage: 'Python',\n server: 'Django',\n apiType: 'Django Views'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'artisan': {\n frameworks: ['Laravel'],\n slots: { \n framework: 'Laravel',\n backend: 'Laravel',\n mainLanguage: 'PHP',\n server: 'PHP',\n apiType: 'Laravel Routes'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'mix.exs': {\n frameworks: ['Phoenix', 'Elixir'],\n slots: { \n framework: 'Phoenix',\n backend: 'Phoenix',\n mainLanguage: 'Elixir',\n server: 'BEAM'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'nest-cli.json': {\n frameworks: ['NestJS'],\n slots: { \n framework: 'NestJS',\n backend: 'NestJS',\n mainLanguage: 'TypeScript',\n server: 'Node.js',\n apiType: 'REST API'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'strapi.config.js': {\n frameworks: ['Strapi'],\n slots: { \n backend: 'Strapi',\n apiType: 'REST API',\n database: 'Required',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Infrastructure\n // ============================================\n \n 'Dockerfile': {\n frameworks: ['Docker'],\n slots: { \n hosting: 'Docker',\n connection: 'Containerized'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'docker-compose.yml': {\n frameworks: ['Docker Compose'],\n slots: { \n hosting: 'Docker',\n connection: 'Multi-container'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'docker-compose.yaml': {\n frameworks: ['Docker Compose'],\n slots: { \n hosting: 'Docker',\n connection: 'Multi-container'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'kubernetes.yml': {\n frameworks: ['Kubernetes'],\n slots: { \n hosting: 'Kubernetes',\n connection: 'Orchestrated'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'k8s.yaml': {\n frameworks: ['Kubernetes'],\n slots: { \n hosting: 'Kubernetes',\n connection: 'Orchestrated'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Deployment\n // ============================================\n \n 'vercel.json': {\n frameworks: ['Vercel'],\n slots: { \n hosting: 'Vercel',\n cicd: 'Vercel'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'netlify.toml': {\n frameworks: ['Netlify'],\n slots: { \n hosting: 'Netlify',\n cicd: 'Netlify'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'render.yaml': {\n frameworks: ['Render'],\n slots: { \n hosting: 'Render',\n cicd: 'Render'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'fly.toml': {\n frameworks: ['Fly.io'],\n slots: { \n hosting: 'Fly.io',\n cicd: 'Fly.io'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'railway.json': {\n frameworks: ['Railway'],\n slots: { \n hosting: 'Railway',\n cicd: 'Railway'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'railway.toml': {\n frameworks: ['Railway'],\n slots: { \n hosting: 'Railway',\n cicd: 'Railway'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'app.yaml': {\n frameworks: ['Google App Engine'],\n slots: { \n hosting: 'Google Cloud',\n cicd: 'Google Cloud'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'Procfile': {\n frameworks: ['Heroku'],\n slots: { \n hosting: 'Heroku',\n cicd: 'Heroku'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Build Tools\n // ============================================\n \n 'vite.config.js': {\n frameworks: ['Vite'],\n slots: { \n buildTool: 'Vite'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'vite.config.ts': {\n frameworks: ['Vite'],\n slots: { \n buildTool: 'Vite',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'webpack.config.js': {\n frameworks: ['Webpack'],\n slots: { \n buildTool: 'Webpack'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'rollup.config.js': {\n frameworks: ['Rollup'],\n slots: { \n buildTool: 'Rollup'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'esbuild.config.js': {\n frameworks: ['esbuild'],\n slots: { \n buildTool: 'esbuild'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'parcel.config.js': {\n frameworks: ['Parcel'],\n slots: { \n buildTool: 'Parcel'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'snowpack.config.js': {\n frameworks: ['Snowpack'],\n slots: { \n buildTool: 'Snowpack'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Language Config\n // ============================================\n \n 'tsconfig.json': {\n frameworks: ['TypeScript'],\n slots: { \n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'jsconfig.json': {\n frameworks: ['JavaScript'],\n slots: { \n mainLanguage: 'JavaScript'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'babel.config.js': {\n frameworks: ['Babel'],\n slots: { \n buildTool: 'Babel'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n '.babelrc': {\n frameworks: ['Babel'],\n slots: { \n buildTool: 'Babel'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Testing\n // ============================================\n \n 'jest.config.js': {\n frameworks: ['Jest'],\n slots: { \n cicd: 'Jest'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'jest.config.ts': {\n frameworks: ['Jest'],\n slots: { \n cicd: 'Jest',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'vitest.config.ts': {\n frameworks: ['Vitest'],\n slots: { \n cicd: 'Vitest',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'cypress.config.js': {\n frameworks: ['Cypress'],\n slots: { \n cicd: 'Cypress'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'playwright.config.ts': {\n frameworks: ['Playwright'],\n slots: { \n cicd: 'Playwright',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'karma.conf.js': {\n frameworks: ['Karma'],\n slots: { \n cicd: 'Karma'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'mocha.opts': {\n frameworks: ['Mocha'],\n slots: { \n cicd: 'Mocha'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n '.rspec': {\n frameworks: ['RSpec'],\n slots: { \n cicd: 'RSpec',\n mainLanguage: 'Ruby'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'pytest.ini': {\n frameworks: ['Pytest'],\n slots: { \n cicd: 'Pytest',\n mainLanguage: 'Python'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'phpunit.xml': {\n frameworks: ['PHPUnit'],\n slots: { \n cicd: 'PHPUnit',\n mainLanguage: 'PHP'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Database/ORM\n // ============================================\n \n 'schema.prisma': {\n frameworks: ['Prisma'],\n slots: { \n database: 'Prisma ORM',\n connection: 'Prisma'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'drizzle.config.ts': {\n frameworks: ['Drizzle'],\n slots: { \n database: 'Drizzle ORM',\n connection: 'Drizzle',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'ormconfig.js': {\n frameworks: ['TypeORM'],\n slots: { \n database: 'TypeORM',\n connection: 'TypeORM'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'knexfile.js': {\n frameworks: ['Knex.js'],\n slots: { \n database: 'Knex.js',\n connection: 'Knex.js'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'sequelize.config.js': {\n frameworks: ['Sequelize'],\n slots: { \n database: 'Sequelize',\n connection: 'Sequelize'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'alembic.ini': {\n frameworks: ['Alembic'],\n slots: { \n database: 'Alembic',\n mainLanguage: 'Python'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - CI/CD\n // ============================================\n \n '.github/workflows': {\n frameworks: ['GitHub Actions'],\n slots: { \n cicd: 'GitHub Actions'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n '.gitlab-ci.yml': {\n frameworks: ['GitLab CI'],\n slots: { \n cicd: 'GitLab CI'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'Jenkinsfile': {\n frameworks: ['Jenkins'],\n slots: { \n cicd: 'Jenkins'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n '.circleci/config.yml': {\n frameworks: ['CircleCI'],\n slots: { \n cicd: 'CircleCI'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n '.travis.yml': {\n frameworks: ['Travis CI'],\n slots: { \n cicd: 'Travis CI'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'azure-pipelines.yml': {\n frameworks: ['Azure DevOps'],\n slots: { \n cicd: 'Azure DevOps'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'bitbucket-pipelines.yml': {\n frameworks: ['Bitbucket Pipelines'],\n slots: { \n cicd: 'Bitbucket Pipelines'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (20 points) - CSS/UI\n // ============================================\n \n 'tailwind.config.js': {\n frameworks: ['Tailwind CSS'],\n slots: { \n cssFramework: 'Tailwind CSS'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'tailwind.config.ts': {\n frameworks: ['Tailwind CSS'],\n slots: { \n cssFramework: 'Tailwind CSS',\n mainLanguage: 'TypeScript'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'postcss.config.js': {\n frameworks: ['PostCSS'],\n slots: { \n cssFramework: 'PostCSS'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'uno.config.ts': {\n frameworks: ['UnoCSS'],\n slots: { \n cssFramework: 'UnoCSS',\n mainLanguage: 'TypeScript'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'styled-components.config.js': {\n frameworks: ['styled-components'],\n slots: { \n cssFramework: 'styled-components',\n uiLibrary: 'styled-components'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'emotion.config.js': {\n frameworks: ['Emotion'],\n slots: { \n cssFramework: 'Emotion',\n uiLibrary: 'Emotion'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Mobile\n // ============================================\n \n 'metro.config.js': {\n frameworks: ['React Native'],\n slots: { \n framework: 'React Native',\n mainLanguage: 'JavaScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'expo.config.js': {\n frameworks: ['Expo'],\n slots: { \n framework: 'React Native',\n buildTool: 'Expo'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'app.json': {\n frameworks: ['React Native', 'Expo'],\n slots: { \n framework: 'React Native'\n },\n priority: 20,\n intelligence: 'medium',\n confirmWith: ['expo']\n },\n \n 'capacitor.config.ts': {\n frameworks: ['Capacitor'],\n slots: { \n framework: 'Capacitor',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'ionic.config.json': {\n frameworks: ['Ionic'],\n slots: { \n framework: 'Ionic',\n uiLibrary: 'Ionic'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Monorepo\n // ============================================\n \n 'nx.json': {\n frameworks: ['Nx'],\n slots: { \n buildTool: 'Nx'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'turbo.json': {\n frameworks: ['Turborepo'],\n slots: { \n buildTool: 'Turborepo'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'lerna.json': {\n frameworks: ['Lerna'],\n slots: { \n buildTool: 'Lerna'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'rush.json': {\n frameworks: ['Rush'],\n slots: { \n buildTool: 'Rush'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'pnpm-workspace.yaml': {\n frameworks: ['pnpm workspaces'],\n slots: { \n packageManager: 'pnpm',\n buildTool: 'pnpm workspaces'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // LOW VALUE (15 points) - File Extensions\n // These are pattern-based and less definitive\n // ============================================\n \n '*.svelte': {\n frameworks: ['Svelte', 'SvelteKit'],\n slots: { \n framework: 'Svelte'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.vue': {\n frameworks: ['Vue'],\n slots: { \n framework: 'Vue'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.jsx': {\n frameworks: ['React'],\n slots: { \n framework: 'React',\n mainLanguage: 'JavaScript'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.ts': {\n frameworks: ['TypeScript'],\n slots: {\n mainLanguage: 'TypeScript'\n },\n priority: 15,\n intelligence: 'low'\n },\n\n '*.tsx': {\n frameworks: ['React', 'TypeScript'],\n slots: {\n framework: 'React',\n mainLanguage: 'TypeScript'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.py': {\n frameworks: ['Python'],\n slots: { \n mainLanguage: 'Python'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.rb': {\n frameworks: ['Ruby'],\n slots: { \n mainLanguage: 'Ruby'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.php': {\n frameworks: ['PHP'],\n slots: { \n mainLanguage: 'PHP'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.java': {\n frameworks: ['Java'],\n slots: { \n mainLanguage: 'Java'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.kt': {\n frameworks: ['Kotlin'],\n slots: { \n mainLanguage: 'Kotlin'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.swift': {\n frameworks: ['Swift'],\n slots: { \n mainLanguage: 'Swift'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.go': {\n frameworks: ['Go'],\n slots: { \n mainLanguage: 'Go'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.rs': {\n frameworks: ['Rust'],\n slots: { \n mainLanguage: 'Rust'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.dart': {\n frameworks: ['Flutter', 'Dart'],\n slots: { \n mainLanguage: 'Dart'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.ex': {\n frameworks: ['Elixir'],\n slots: { \n mainLanguage: 'Elixir'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.exs': {\n frameworks: ['Elixir'],\n slots: { \n mainLanguage: 'Elixir'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.scala': {\n frameworks: ['Scala'],\n slots: { \n mainLanguage: 'Scala'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.clj': {\n frameworks: ['Clojure'],\n slots: { \n mainLanguage: 'Clojure'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.lua': {\n frameworks: ['Lua'],\n slots: { \n mainLanguage: 'Lua'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.r': {\n frameworks: ['R'],\n slots: { \n mainLanguage: 'R'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.R': {\n frameworks: ['R'],\n slots: { \n mainLanguage: 'R'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.jl': {\n frameworks: ['Julia'],\n slots: { \n mainLanguage: 'Julia'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.nim': {\n frameworks: ['Nim'],\n slots: { \n mainLanguage: 'Nim'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.zig': {\n frameworks: ['Zig'],\n slots: {\n mainLanguage: 'Zig'\n },\n priority: 15,\n intelligence: 'low'\n },\n\n 'build.zig': {\n frameworks: ['Zig'],\n slots: {\n // camelCase slots (standard TURBO-CAT)\n packageManager: 'Zig Package Manager',\n mainLanguage: 'Zig',\n buildTool: 'zig build',\n framework: 'Zig',\n // snake_case slots (template compatibility)\n build: 'zig build'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n // ============================================\n // SPECIAL VALUE (20 points) - API/Schema\n // ============================================\n \n 'openapi.json': {\n frameworks: ['OpenAPI'],\n slots: { \n apiType: 'REST API',\n backend: 'API Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'openapi.yaml': {\n frameworks: ['OpenAPI'],\n slots: { \n apiType: 'REST API',\n backend: 'API Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'swagger.json': {\n frameworks: ['Swagger'],\n slots: { \n apiType: 'REST API',\n backend: 'API Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'graphql.schema': {\n frameworks: ['GraphQL'],\n slots: { \n apiType: 'GraphQL',\n backend: 'GraphQL Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'schema.graphql': {\n frameworks: ['GraphQL'],\n slots: { \n apiType: 'GraphQL',\n backend: 'GraphQL Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n '.graphqlconfig': {\n frameworks: ['GraphQL'],\n slots: { \n apiType: 'GraphQL'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // SPECIAL VALUE (20 points) - State Management\n // ============================================\n \n 'redux.config.js': {\n frameworks: ['Redux'],\n slots: { \n stateManagement: 'Redux'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'mobx.config.js': {\n frameworks: ['MobX'],\n slots: { \n stateManagement: 'MobX'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'vuex.config.js': {\n frameworks: ['Vuex'],\n slots: { \n stateManagement: 'Vuex',\n framework: 'Vue'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'pinia.config.js': {\n frameworks: ['Pinia'],\n slots: { \n stateManagement: 'Pinia',\n framework: 'Vue'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'zustand.config.js': {\n frameworks: ['Zustand'],\n slots: { \n stateManagement: 'Zustand'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // SPECIAL VALUE (15 points) - Linting/Formatting\n // ============================================\n \n '.eslintrc.js': {\n frameworks: ['ESLint'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n '.eslintrc.json': {\n frameworks: ['ESLint'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n '.prettierrc': {\n frameworks: ['Prettier'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n '.prettierrc.json': {\n frameworks: ['Prettier'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n 'biome.json': {\n frameworks: ['Biome'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n '.editorconfig': {\n frameworks: ['EditorConfig'],\n slots: {},\n priority: 10,\n intelligence: 'low'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Serverless\n // ============================================\n\n 'serverless.yml': {\n frameworks: ['Serverless Framework'],\n slots: {\n hosting: 'AWS Lambda/Azure/GCP',\n backend: 'Serverless',\n apiType: 'API Gateway'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'serverless.yaml': {\n frameworks: ['Serverless Framework'],\n slots: {\n hosting: 'AWS Lambda/Azure/GCP',\n backend: 'Serverless',\n apiType: 'API Gateway'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'sam.yaml': {\n frameworks: ['AWS SAM'],\n slots: {\n hosting: 'AWS Lambda',\n backend: 'AWS SAM',\n cicd: 'AWS SAM CLI'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'template.yaml': {\n frameworks: ['AWS SAM', 'CloudFormation'],\n slots: {\n hosting: 'AWS',\n backend: 'AWS SAM/CloudFormation',\n cicd: 'AWS'\n },\n priority: 25,\n intelligence: 'medium',\n confirmWith: ['samconfig.toml']\n },\n\n 'amplify.yml': {\n frameworks: ['AWS Amplify'],\n slots: {\n hosting: 'AWS Amplify',\n backend: 'AWS Amplify',\n cicd: 'AWS Amplify'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Mobile Native\n // ============================================\n\n 'Podfile': {\n frameworks: ['CocoaPods', 'iOS'],\n slots: {\n packageManager: 'CocoaPods',\n mainLanguage: 'Swift/Objective-C',\n framework: 'iOS Native'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'build.gradle.kts': {\n // Filename-only FALLBACK: Kotlin DSL ≠ Android. Content-aware detectJvmProject.\n frameworks: ['Kotlin', 'Gradle'],\n slots: {\n packageManager: 'gradle',\n mainLanguage: 'Kotlin',\n buildTool: 'gradle'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - AI/ML\n // ============================================\n\n '*.ipynb': {\n frameworks: ['Jupyter', 'Python'],\n slots: {\n mainLanguage: 'Python',\n framework: 'Jupyter Notebook'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'MLproject': {\n frameworks: ['MLflow'],\n slots: {\n mainLanguage: 'Python',\n framework: 'MLflow',\n backend: 'MLflow',\n cicd: 'MLflow'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'dvc.yaml': {\n frameworks: ['DVC', 'Data Version Control'],\n slots: {\n mainLanguage: 'Python',\n framework: 'DVC',\n cicd: 'DVC Pipelines'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'dvc.lock': {\n frameworks: ['DVC'],\n slots: {\n framework: 'DVC'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // ROW 18 - BEYOND THE SACRED 154 (Target: 172)\n // ============================================\n\n // Edge Computing\n 'wrangler.toml': {\n frameworks: ['Cloudflare Workers', 'Cloudflare'],\n slots: {\n hosting: 'Cloudflare Workers',\n backend: 'Cloudflare Workers',\n runtime: 'V8 Isolates'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // Modern Runtimes\n 'deno.json': {\n frameworks: ['Deno'],\n slots: {\n runtime: 'Deno',\n mainLanguage: 'TypeScript',\n packageManager: 'Deno'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'bun.lockb': {\n frameworks: ['Bun'],\n slots: {\n runtime: 'Bun',\n packageManager: 'Bun',\n mainLanguage: 'TypeScript/JavaScript'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // CI/CD Ecosystem\n 'codecov.yml': {\n frameworks: ['Codecov'],\n slots: {\n cicd: 'Codecov'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n 'dependabot.yml': {\n frameworks: ['Dependabot', 'GitHub'],\n slots: {\n cicd: 'Dependabot'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n 'renovate.json': {\n frameworks: ['Renovate'],\n slots: {\n cicd: 'Renovate'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // Universal Build Tools\n 'Makefile': {\n frameworks: ['Make', 'GNU Make'],\n slots: {\n buildTool: 'Make'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'CMakeLists.txt': {\n frameworks: ['CMake', 'C', 'C++'],\n slots: {\n buildTool: 'CMake',\n mainLanguage: 'C/C++'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'meson.build': {\n frameworks: ['Meson', 'C', 'C++'],\n slots: {\n buildTool: 'Meson',\n mainLanguage: 'C/C++'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // C/C++ LANGUAGE FAMILY - SYSTEMS PROGRAMMING\n // ============================================\n\n '*.c': {\n frameworks: ['C'],\n slots: {\n mainLanguage: 'C'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n '*.cpp': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n '*.cc': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n '*.cxx': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '*.h': {\n frameworks: ['C', 'C++'],\n slots: {\n mainLanguage: 'C/C++'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '*.hpp': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '*.hxx': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // ENVIRONMENT FILES - CONFIGURATION\n // ============================================\n\n '.env': {\n frameworks: [],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n '.env.example': {\n frameworks: [],\n slots: {},\n priority: 25,\n intelligence: 'high'\n },\n\n '.env.local': {\n frameworks: [],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n '.env.development': {\n frameworks: [],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n '.env.production': {\n frameworks: [],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // DEVOPS YAML - KUBERNETES & IaC\n // ============================================\n\n 'skaffold.yaml': {\n frameworks: ['Skaffold', 'Kubernetes'],\n slots: {\n hosting: 'Kubernetes',\n cicd: 'Skaffold'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'Chart.yaml': {\n frameworks: ['Helm', 'Kubernetes'],\n slots: {\n hosting: 'Kubernetes',\n backend: 'Helm'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'values.yaml': {\n frameworks: ['Helm', 'Kubernetes'],\n slots: {\n hosting: 'Kubernetes'\n },\n priority: 25,\n intelligence: 'high',\n confirmWith: ['Chart.yaml']\n },\n\n 'pulumi.yaml': {\n frameworks: ['Pulumi'],\n slots: {\n hosting: 'Cloud',\n cicd: 'Pulumi'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'Pulumi.yaml': {\n frameworks: ['Pulumi'],\n slots: {\n hosting: 'Cloud',\n cicd: 'Pulumi'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'terragrunt.hcl': {\n frameworks: ['Terragrunt', 'Terraform'],\n slots: {\n hosting: 'Cloud',\n cicd: 'Terragrunt'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'ansible.yml': {\n frameworks: ['Ansible'],\n slots: {\n cicd: 'Ansible'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'playbook.yml': {\n frameworks: ['Ansible'],\n slots: {\n cicd: 'Ansible'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // ============================================\n // ROW 19 - LANGUAGES & VERSION MANAGERS\n // ============================================\n\n '*.cs': {\n frameworks: ['C#', '.NET', 'Unity'],\n slots: {\n mainLanguage: 'C#'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n '*.m': {\n frameworks: ['Objective-C', 'iOS'],\n slots: {\n mainLanguage: 'Objective-C'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '.nvmrc': {\n frameworks: ['Node.js', 'nvm'],\n slots: {\n runtime: 'Node.js'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '.tool-versions': {\n frameworks: ['asdf'],\n slots: {},\n priority: 25,\n intelligence: 'high'\n },\n\n '.ruby-version': {\n frameworks: ['Ruby', 'rbenv'],\n slots: {\n mainLanguage: 'Ruby',\n runtime: 'Ruby'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '.python-version': {\n frameworks: ['Python', 'pyenv'],\n slots: {\n mainLanguage: 'Python',\n runtime: 'Python'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '.dockerignore': {\n frameworks: ['Docker'],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n '.gitattributes': {\n frameworks: ['Git'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n\n '.npmrc': {\n frameworks: ['npm', 'Node.js'],\n slots: {\n packageManager: 'npm'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n 'sonar-project.properties': {\n frameworks: ['SonarQube', 'SonarCloud'],\n slots: {\n cicd: 'SonarQube'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // ROW 19 COMPLETION - FUNCTIONAL LANGUAGES\n\n '*.fs': {\n frameworks: ['F#', '.NET'],\n slots: {\n mainLanguage: 'F#'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '*.mm': {\n frameworks: ['Objective-C++', 'iOS', 'macOS'],\n slots: {\n mainLanguage: 'Objective-C++'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // ============================================\n // ROW 20 - TIER 1 EMERGING TECH (2025)\n // Target: 211 formats (Sum(1..20) + 1)\n // ============================================\n\n // Zig - The Next Systems Language\n 'build.zig.zon': {\n frameworks: ['Zig'],\n slots: {\n mainLanguage: 'Zig',\n packageManager: 'Zig Package Manager',\n buildTool: 'zig build'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n // Gleam - 2nd Most Admired Language 2025 (Stack Overflow)\n 'gleam.toml': {\n frameworks: ['Gleam', 'BEAM', 'Erlang'],\n slots: {\n mainLanguage: 'Gleam',\n runtime: 'BEAM',\n packageManager: 'Gleam'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // Bun - Ultra-fast JS Runtime Config\n 'bunfig.toml': {\n frameworks: ['Bun'],\n slots: {\n runtime: 'Bun',\n packageManager: 'Bun',\n buildTool: 'Bun'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // mise - Modern Version Manager (replaced asdf/rtx)\n 'mise.toml': {\n frameworks: ['mise'],\n slots: {},\n priority: 25,\n intelligence: 'high'\n },\n\n '.mise.toml': {\n frameworks: ['mise'],\n slots: {},\n priority: 25,\n intelligence: 'high'\n },\n\n // Flox - Nix-based Development Environments\n 'manifest.toml': {\n frameworks: ['Flox', 'Nix'],\n slots: {},\n priority: 25,\n intelligence: 'high',\n confirmWith: ['.flox']\n },\n\n // Just - Command Runner (10k+ GitHub stars, Rust ecosystem)\n 'justfile': {\n frameworks: ['Just'],\n slots: {\n buildTool: 'Just'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // Pre-commit - Git Hooks Framework (industry standard)\n '.pre-commit-config.yaml': {\n frameworks: ['pre-commit'],\n slots: {\n cicd: 'pre-commit'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // Claude Code - AI Context (Anthropic Claude Code projects)\n 'CLAUDE.md': {\n frameworks: ['Claude Code'],\n slots: {},\n priority: 30, // High priority - AI context is valuable\n intelligence: 'high',\n confirmWith: ['.claude']\n }\n};\n\n// ============================================\n// HELPER FUNCTIONS\n// ============================================\n\n/**\n * Get knowledge for a specific format\n */\nexport function getFormatKnowledge(format: string): FormatKnowledge | undefined {\n return KNOWLEDGE_BASE[format];\n}\n\n/**\n * Get all format keys\n */\nexport function getAllFormats(): string[] {\n return Object.keys(KNOWLEDGE_BASE);\n}\n\n/**\n * Get high-value formats (priority >= 30)\n */\nexport function getHighValueFormats(): string[] {\n return Object.entries(KNOWLEDGE_BASE)\n .filter(([, knowledge]) => knowledge.priority >= 30)\n .map(([format]) => format);\n}\n\n/**\n * Get formats by intelligence level\n */\nexport function getFormatsByIntelligence(level: FormatKnowledge['intelligence']): string[] {\n return Object.entries(KNOWLEDGE_BASE)\n .filter(([, knowledge]) => knowledge.intelligence === level)\n .map(([format]) => format);\n}\n\n/**\n * Get formats that can fill a specific slot\n */\nexport function getFormatsForSlot(slotName: keyof ContextSlots): string[] {\n return Object.entries(KNOWLEDGE_BASE)\n .filter(([, knowledge]) => slotName in knowledge.slots)\n .map(([format]) => format);\n}\n\n/**\n * Calculate total possible intelligence score\n */\nexport function getMaxIntelligenceScore(): number {\n return Object.values(KNOWLEDGE_BASE)\n .reduce((sum, knowledge) => sum + knowledge.priority, 0);\n}",
94
+ "/**\n * Turbo-Cat™ (= Format-finder) — fills .faf slots from file-format evidence\n * across ~200 formats (the KNOWLEDGE_BASE). Restores the multi-ecosystem\n * manifest interrogation the v6.0 rewrite narrowed to README+Cargo+package.json.\n *\n * v6-native sync port (the v5 engine was async; sync integrates cleanly with\n * `auto`). Two-layer: (1A) config files walking up to the monorepo .git\n * boundary, (1B) source extensions; priority-wins slot recommendations.\n *\n * Used as the LOWEST-precedence filler in `auto`: v6's specific detection wins;\n * Turbo-Cat fills only the slots still empty (esp. non-npm stacks).\n */\n\nimport { existsSync, readdirSync, readFileSync } from 'fs';\nimport { join, dirname, extname, resolve } from 'path';\nimport { KNOWLEDGE_BASE } from './turbo-cat-knowledge.js';\nimport { detectDartProject } from './dart.js';\nimport { detectGoProject } from './go.js';\nimport { detectCsharpProject } from './csharp.js';\nimport { detectJvmProject } from './jvm.js';\nimport { detectRubyProject } from './ruby.js';\nimport { detectSwiftProject } from './swift.js';\n\nconst IGNORE = new Set([\n 'node_modules', '.git', 'dist', 'build', 'venv', '.venv', '__pycache__',\n 'target', 'coverage', '.next', '.svelte-kit', 'vendor',\n]);\nconst SCAN_EXTS = new Set([\n '.py', '.ts', '.tsx', '.js', '.jsx', '.svelte', '.vue',\n '.rb', '.go', '.rs', '.php', '.java', '.kt', '.swift',\n]);\n\n/** ContextSlots (camelCase + snake_case) → v6 .faf slot path. */\nconst SLOT_MAP: Record<string, [section: string, field: string]> = {\n mainLanguage: ['project', 'main_language'], main_language: ['project', 'main_language'],\n framework: ['stack', 'frontend'],\n cssFramework: ['stack', 'css_framework'], css: ['stack', 'css_framework'],\n uiLibrary: ['stack', 'ui_library'], ui_library: ['stack', 'ui_library'],\n stateManagement: ['stack', 'state_management'], state: ['stack', 'state_management'],\n backend: ['stack', 'backend'],\n apiType: ['stack', 'api_type'], api: ['stack', 'api_type'],\n runtime: ['stack', 'runtime'],\n database: ['stack', 'database'], db: ['stack', 'database'],\n connection: ['stack', 'connection'],\n hosting: ['stack', 'hosting'],\n buildTool: ['stack', 'build'], build_tool: ['stack', 'build'], build: ['stack', 'build'],\n packageManager: ['stack', 'package_manager'], pkg_manager: ['stack', 'package_manager'],\n cicd: ['stack', 'cicd'],\n};\n\n/** A format actually discovered on disk (config-file layer; real files only). */\nexport interface DiscoveredFormat {\n fileName: string;\n /** Derived from the entry's primary slot family (deterministic — real\n * knowledge surfaced, not invented): package-manager, language, framework,\n * backend, database, ci-cd, hosting, build, … */\n category: string;\n priority: number;\n}\n\nexport interface TurboCatResult {\n slotFills: Record<string, string>; // ContextSlots key → value (priority-wins)\n frameworks: string[];\n confirmedCount: number;\n /** Option B (compose spec 2026-06-12): the per-format breakdown consumers\n * display — surfaced so MCPs can DELETE their local format maps entirely. */\n discoveredFormats: DiscoveredFormat[];\n /** Deterministic lowercase signature, e.g. \"typescript-react\" ('unknown-stack' when bare). */\n stackSignature: string;\n}\n\ninterface FoundFormat {\n slots: Record<string, string>;\n priority: number;\n frameworks: string[];\n fileName?: string; // set for the config-file layer (real files on disk)\n}\n\n/** slot-family → display category (first match wins; deterministic). */\nconst CATEGORY_BY_SLOT: Array<[slot: string, category: string]> = [\n ['packageManager', 'package-manager'],\n ['pkg_manager', 'package-manager'],\n ['mainLanguage', 'language'],\n ['main_language', 'language'],\n ['framework', 'framework'],\n ['backend', 'backend'],\n ['database', 'database'],\n ['db', 'database'],\n ['cicd', 'ci-cd'],\n ['hosting', 'hosting'],\n ['buildTool', 'build'],\n ['build_tool', 'build'],\n ['build', 'build'],\n ['runtime', 'runtime'],\n ['cssFramework', 'css'],\n ['css', 'css'],\n ['uiLibrary', 'ui-library'],\n ['stateManagement', 'state-management'],\n ['apiType', 'api'],\n ['api', 'api'],\n];\n\nfunction categoryFor(slots: Record<string, string>, frameworks: string[]): string {\n for (const [slot, category] of CATEGORY_BY_SLOT) {\n if (slot in slots) {return category;}\n }\n return frameworks.length > 0 ? 'framework' : 'config';\n}\n\n/**\n * `manifest.json` is one of the most overloaded filenames in software —\n * Chrome/browser extension, mcpb/MCP manifest, PWA manifest, or plain config.\n * Asserting a Chrome stack from the FILENAME is a guess, and sourced-only\n * forbids guessing (every FAF MCP ships an mcpb manifest.json and was\n * mis-detected as a JS Chrome Extension — the 2026-06-12 blocker).\n *\n * Disambiguate by CONTENT, or assert nothing:\n * chrome — manifest_version is a NUMBER (2/3) AND a chrome field present\n * → the KB's chrome entry applies (as before)\n * mcpb — manifest_version is a STRING (\"0.x\") or MCP fields present\n * → assert NOTHING (real evidence — .ts/tsconfig/deps — wins)\n * pwa — start_url/display/icons → assert nothing\n * unknown/unreadable → assert NOTHING. An honest empty beats a guessed stack.\n */\nfunction classifyManifestJson(filePath: string): 'chrome' | 'other' {\n try {\n const m = JSON.parse(readFileSync(filePath, 'utf-8')) as Record<string, unknown>;\n const chromeField = ['background', 'content_scripts', 'action', 'browser_action', 'permissions']\n .some((k) => k in m);\n if (typeof m.manifest_version === 'number' && chromeField) {return 'chrome';}\n return 'other'; // mcpb (string manifest_version / server / tools / display_name), PWA, or plain config\n } catch {\n return 'other'; // unreadable → assert nothing\n }\n}\n\n/** Layer 1A — config files, walking up to the monorepo .git boundary. */\nfunction scanConfigFiles(projectDir: string): FoundFormat[] {\n const found: FoundFormat[] = [];\n let cur = resolve(projectDir);\n const ownGit = existsSync(join(projectDir, '.git'));\n /** One JVM classification per directory (pom + gradle + settings would triple-fire). */\n const jvmDirsDone = new Set<string>();\n for (let i = 0; i < 10; i++) {\n let files: string[];\n try {\n files = readdirSync(cur);\n } catch {\n break;\n }\n for (const f of files) {\n // Content-aware: any *.csproj (names vary — not in KNOWLEDGE_BASE by basename).\n // .csproj alone ≠ type: Sdk + packages via detectCsharpProject.\n if (f.toLowerCase().endsWith('.csproj')) {\n const cp = detectCsharpProject(cur);\n if (cp) {\n const slots: Record<string, string> = {\n mainLanguage: 'C#',\n packageManager: 'NuGet',\n buildTool: 'dotnet',\n };\n if (cp.appType === 'backend' && cp.framework) {\n slots.backend = cp.framework;\n } else if (cp.appType === 'cli' && cp.framework) {\n slots.framework = cp.framework;\n } else if (cp.appType === 'mcp') {\n slots.apiType = 'MCP';\n } else if (cp.appType === 'mobile' && cp.framework) {\n slots.framework = cp.framework;\n }\n if (cp.targetFramework) {\n slots.runtime = cp.targetFramework;\n }\n const frameworks = cp.framework ? [cp.framework, 'C#', '.NET'] : ['C#', '.NET'];\n found.push({ slots, priority: 36, frameworks, fileName: f });\n }\n continue;\n }\n\n // Content-aware: *.xcodeproj (directory) — light productType via detectSwiftProject.\n // Prefer Package.swift when both exist (handled below); xcodeproj covers app-only trees.\n if (f.endsWith('.xcodeproj')) {\n const sp = detectSwiftProject(cur);\n if (sp) {\n const slots: Record<string, string> = {\n mainLanguage: 'Swift',\n packageManager: sp.packageManager === 'spm' ? 'spm' : 'Xcode',\n buildTool: sp.packageManager.includes('spm') ? 'swift build' : 'xcodebuild',\n };\n if (sp.appType === 'backend' && sp.framework) {\n slots.backend = sp.framework;\n } else if (sp.appType === 'cli' && sp.framework) {\n slots.framework = sp.framework;\n } else if (sp.appType === 'mcp') {\n slots.apiType = 'MCP';\n } else if (sp.appType === 'app') {\n slots.framework = sp.framework || 'Swift App';\n }\n const frameworks = sp.framework ? [sp.framework, 'Swift'] : ['Swift'];\n found.push({ slots, priority: 36, frameworks, fileName: f });\n }\n continue;\n }\n\n const k = KNOWLEDGE_BASE[f];\n if (!k) {continue;}\n // Sourced-only gate: manifest.json only asserts the chrome stack when\n // its CONTENT proves a chrome extension; mcpb/PWA/unknown assert nothing.\n if (f === 'manifest.json' && classifyManifestJson(join(cur, f)) !== 'chrome') {continue;}\n // Content-aware: pubspec.yaml backs Flutter apps, Dart CLIs/packages,\n // servers, and MCP servers — branch by deps instead of asserting Flutter\n // for everything (the filename-only flattening this engine used to do).\n if (f === 'pubspec.yaml') {\n const dp = detectDartProject(cur);\n if (dp) {\n const slots: Record<string, string> = { mainLanguage: 'Dart', packageManager: 'pub' };\n if (dp.isFlutter) {\n slots.framework = 'Flutter';\n if (dp.stateManagement) {slots.stateManagement = dp.stateManagement;}\n } else if (dp.appType === 'backend' && dp.framework) {\n slots.backend = dp.framework;\n } else if (dp.appType === 'mcp') {\n slots.apiType = 'MCP';\n }\n found.push({ slots, priority: k.priority, frameworks: dp.isFlutter ? ['Flutter', 'Dart'] : ['Dart'], fileName: f });\n continue;\n }\n }\n // Content-aware: go.mod backs libraries, backends, CLIs, MCP — not one bucket.\n if (f === 'go.mod') {\n const gp = detectGoProject(cur);\n if (gp) {\n const slots: Record<string, string> = {\n mainLanguage: 'Go',\n packageManager: 'go modules',\n buildTool: 'go build',\n };\n if (gp.appType === 'backend' && gp.framework) {\n slots.backend = gp.framework;\n } else if (gp.appType === 'cli' && gp.framework) {\n slots.framework = gp.framework;\n } else if (gp.appType === 'mcp') {\n slots.apiType = 'MCP';\n }\n const frameworks = gp.framework ? [gp.framework, 'Go'] : ['Go'];\n found.push({ slots, priority: k.priority, frameworks, fileName: f });\n continue;\n }\n }\n // Content-aware: Gemfile alone ≠ Rails (Ruby Edition).\n if (f === 'Gemfile' || f === 'Gemfile.lock' || f === 'gems.rb') {\n const rp = detectRubyProject(cur);\n if (rp) {\n const slots: Record<string, string> = {\n mainLanguage: 'Ruby',\n packageManager: rp.packageManager,\n };\n if (rp.appType === 'backend' && rp.framework) {\n slots.backend = rp.framework;\n } else if (rp.appType === 'cli' && rp.framework) {\n slots.framework = rp.framework;\n } else if (rp.appType === 'mcp') {\n slots.apiType = 'MCP';\n }\n const frameworks = rp.framework ? [rp.framework, 'Ruby'] : ['Ruby'];\n found.push({\n slots,\n priority: k.priority ?? 35,\n frameworks,\n fileName: f,\n });\n continue;\n }\n }\n // Content-aware: Package.swift alone ≠ app (Swift Edition).\n if (f === 'Package.swift') {\n const sp = detectSwiftProject(cur);\n if (sp) {\n const slots: Record<string, string> = {\n mainLanguage: 'Swift',\n packageManager: sp.packageManager === 'xcode' ? 'Xcode' : 'spm',\n buildTool: 'swift build',\n };\n if (sp.appType === 'backend' && sp.framework) {\n slots.backend = sp.framework;\n } else if (sp.appType === 'cli' && sp.framework) {\n slots.framework = sp.framework;\n } else if (sp.appType === 'mcp') {\n slots.apiType = 'MCP';\n } else if (sp.appType === 'app') {\n slots.framework = sp.framework || 'SwiftUI/App';\n }\n const frameworks = sp.framework ? [sp.framework, 'Swift'] : ['Swift'];\n found.push({\n slots,\n priority: k.priority ?? 36,\n frameworks,\n fileName: f,\n });\n continue;\n }\n }\n // Content-aware: pom / gradle alone ≠ type (JVM Edition). One brand JVM;\n // Android/KMP are facets. Version catalogs + multi-module via detectJvmProject.\n if (\n f === 'pom.xml' ||\n f === 'build.gradle' ||\n f === 'build.gradle.kts' ||\n f === 'settings.gradle' ||\n f === 'settings.gradle.kts'\n ) {\n if (jvmDirsDone.has(cur)) {continue;}\n jvmDirsDone.add(cur);\n const jv = detectJvmProject(cur);\n if (jv) {\n const slots: Record<string, string> = {\n mainLanguage: jv.mainLanguage === 'Java/Kotlin' ? 'Kotlin' : jv.mainLanguage,\n packageManager: jv.buildTool === 'maven' ? 'maven' : 'gradle',\n buildTool: jv.buildTool,\n };\n if (jv.appType === 'backend' && jv.framework) {\n slots.backend = jv.framework;\n } else if (jv.appType === 'cli' && jv.framework) {\n slots.framework = jv.framework;\n } else if (jv.appType === 'mcp') {\n slots.apiType = 'MCP';\n } else if (jv.appType === 'mobile') {\n slots.framework = jv.framework || 'Android';\n }\n if (jv.facets.includes('multiplatform')) {\n slots.framework = jv.framework || 'Kotlin Multiplatform';\n }\n const frameworks = jv.framework\n ? [jv.framework, 'JVM', jv.mainLanguage === 'Kotlin' ? 'Kotlin' : 'Java']\n : ['JVM', jv.mainLanguage === 'Kotlin' ? 'Kotlin' : 'Java'];\n found.push({\n slots,\n priority: k.priority ?? 35,\n frameworks,\n fileName: f,\n });\n continue;\n }\n }\n found.push({ slots: (k.slots as Record<string, string>) || {}, priority: k.priority, frameworks: k.frameworks, fileName: f });\n }\n if (ownGit && i === 0) {break;}\n const parent = dirname(cur);\n if (parent === cur) {break;}\n cur = parent;\n }\n return found;\n}\n\n/** Layer 1B — source extensions present. Extensions assert LANGUAGE only: a .py\n * reliably means Python, but a stray .tsx must not assert \"React\" (frameworks\n * come from config files, Layer 1A). */\nfunction scanExtensions(projectDir: string): FoundFormat[] {\n const found: FoundFormat[] = [];\n for (const ext of collectExtensions(projectDir, 2, { count: 0 })) {\n const k = KNOWLEDGE_BASE[`*${ext}`];\n const lang = (k?.slots as Record<string, string> | undefined)?.mainLanguage;\n if (lang) {found.push({ slots: { mainLanguage: lang }, priority: k.priority, frameworks: k.frameworks });}\n }\n return found;\n}\n\n/** Scan formats → priority-wins slot recommendations. */\nexport function turboCatScan(projectDir: string): TurboCatResult {\n const found = [...scanConfigFiles(projectDir), ...scanExtensions(projectDir)];\n\n // Analyze — highest priority wins each slot (deterministic, order-independent).\n // Skip ambiguous multi-option hints (e.g. \"npm/yarn/pnpm\") — only confident\n // single values fill; v6's specific detection handles the rest.\n const slotFills: Record<string, string> = {};\n const slotPrio: Record<string, number> = {};\n const fw = new Set<string>();\n for (const item of found) {\n item.frameworks.forEach((f) => fw.add(f));\n for (const [slot, val] of Object.entries(item.slots)) {\n if (val && !val.includes('/') && (!(slot in slotFills) || item.priority > slotPrio[slot])) {\n slotFills[slot] = val;\n slotPrio[slot] = item.priority;\n }\n }\n }\n // Per-format breakdown — real files only, deduped, deterministic order\n // (priority desc, then name) regardless of filesystem enumeration order.\n const seen = new Map<string, DiscoveredFormat>();\n for (const item of found) {\n if (!item.fileName) {continue;}\n if (!seen.has(item.fileName)) {\n seen.set(item.fileName, {\n fileName: item.fileName,\n category: categoryFor(item.slots, item.frameworks),\n priority: item.priority,\n });\n }\n }\n const discoveredFormats = [...seen.values()].sort(\n (a, b) => b.priority - a.priority || a.fileName.localeCompare(b.fileName),\n );\n\n // Deterministic stack signature: language + framework, lowercased, dash-joined.\n const sigParts: string[] = [];\n if (slotFills.mainLanguage) {sigParts.push(slotFills.mainLanguage.toLowerCase());}\n if (slotFills.framework) {sigParts.push(slotFills.framework.toLowerCase());}\n const stackSignature = sigParts.length > 0 ? sigParts.join('-') : 'unknown-stack';\n\n return { slotFills, frameworks: [...fw], confirmedCount: found.length, discoveredFormats, stackSignature };\n}\n\n/** Turbo-Cat slot fills shaped as a v6 .faf partial ({ project, stack }) for fillEmpties. */\nexport function turboCatSlots(projectDir: string): { project?: Record<string, string>; stack?: Record<string, string> } {\n const { slotFills } = turboCatScan(projectDir);\n const out: { project?: Record<string, string>; stack?: Record<string, string> } = {};\n for (const [key, value] of Object.entries(slotFills)) {\n const target = SLOT_MAP[key];\n if (!target || !value) {continue;}\n const [section, field] = target;\n if (section === 'project') {(out.project ??= {})[field] = value;}\n else {(out.stack ??= {})[field] = value;}\n }\n return out;\n}\n\nfunction collectExtensions(dir: string, depth: number, budget: { count: number }): Set<string> {\n const exts = new Set<string>();\n if (depth < 0 || budget.count > 400) {return exts;}\n let entries: import('fs').Dirent[];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return exts;\n }\n for (const e of entries) {\n if (budget.count++ > 400) {break;}\n if (!e.isDirectory()) {\n const ext = extname(e.name);\n if (SCAN_EXTS.has(ext)) {exts.add(ext);}\n continue;\n }\n if (IGNORE.has(e.name) || e.name.startsWith('.')) {continue;}\n for (const x of collectExtensions(join(dir, e.name), depth - 1, budget)) {exts.add(x);}\n }\n return exts;\n}\n",
95
+ "/**\n * 🔺 TURBO-CAT™ FORMAT PYRAMID v3.1.1\n *\n * ROW 20 IN PROGRESS - 199 FORMATS CATALOGUED!\n *\n * Like precious metals in a catalytic converter - each format triggers\n * a specific intelligence reaction. We CAN catalyze ANY format, but only\n * the WORTHY earn a pyramid stone!\n *\n * Pyramid Evolution:\n * ├── Row 17: Sum(1..17) + 1 = 154 (THE SACRED - ACHIEVED 2024)\n * ├── Row 18: Sum(1..18) + 1 = 172 (BEYOND SACRED - ACHIEVED)\n * ├── Row 19: Sum(1..19) + 1 = 190 (ACHIEVED 2025-12-17)\n * └── Row 20: Sum(1..20) + 1 = 211 (IN PROGRESS - 9/21 added)\n *\n * Row 20 Tier 1 Added (2025-12-17):\n * - build.zig.zon (Zig packages)\n * - gleam.toml (Gleam - 2nd most admired 2025)\n * - bunfig.toml (Bun config)\n * - mise.toml / .mise.toml (mise version manager)\n * - manifest.toml (Flox/Nix environments)\n * - justfile (Just command runner - 10k+ stars)\n * - .pre-commit-config.yaml (Git hooks framework)\n * - CLAUDE.md (Claude Code AI context)\n *\n * THE DOCTRINE: To add a new format, PROVE it's better than existing ones!\n *\n * 😽 We are the FORMAT FREAKS - Quality over Quantity!\n * 🏆 199 formats - CHAMPIONSHIP GRADE FORMAT DETECTION\n */\n\nexport interface FormatKnowledge {\n frameworks: string[]; // Possible frameworks this format indicates\n slots: Partial<ContextSlots>; // Direct Context-On-Demand slot mappings\n priority: number; // Intelligence score (0-35 points)\n intelligence: 'ultra-high' | 'high' | 'medium' | 'low';\n confirmWith?: string[]; // Additional files to check for confirmation\n}\n\nexport interface ContextSlots {\n // Technical slots (1-15) - camelCase versions\n framework: string;\n mainLanguage: string;\n buildTool: string;\n packageManager: string;\n hosting: string;\n backend: string;\n apiType: string;\n cicd: string;\n database: string;\n cssFramework: string;\n uiLibrary: string;\n stateManagement: string;\n server: string;\n connection: string;\n runtime: string;\n // Display slots (for stack display compatibility)\n build: string;\n\n // snake_case versions (for YAML compatibility)\n main_language: string;\n build_tool: string;\n pkg_manager: string;\n api: string;\n css: string;\n ui_library: string;\n state: string;\n db: string;\n\n // Human context slots (16-21)\n targetUser: string;\n coreProblem: string;\n missionPurpose: string;\n deploymentMarket: string;\n timeline: string;\n approach: string;\n}\n\n/**\n * THE KNOWLEDGE BASE\n * \n * Add any file format here and map it to:\n * 1. Frameworks it indicates\n * 2. Context slots it can fill\n * 3. Priority/intelligence score\n * \n * The fab-formats engine will automatically use this knowledge!\n */\nexport const KNOWLEDGE_BASE: Record<string, FormatKnowledge> = {\n // ============================================\n // ULTRA-HIGH VALUE (35 points) - Package Managers\n // ============================================\n \n 'package.json': {\n frameworks: ['Node.js', 'JavaScript', 'TypeScript'],\n slots: {\n packageManager: 'npm/yarn/pnpm',\n mainLanguage: 'JavaScript/TypeScript'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n 'README.md': {\n frameworks: [], // Can be any framework\n slots: {\n targetUser: 'developers', // Often contains who it's for\n coreProblem: 'understanding project', // Usually describes the problem\n missionPurpose: 'project documentation' // Contains the why\n },\n priority: 25, // HIGH: Human context goldmine\n intelligence: 'high'\n },\n\n 'requirements.txt': {\n frameworks: ['Python'],\n slots: { \n packageManager: 'pip',\n mainLanguage: 'Python'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n \n 'Pipfile': {\n frameworks: ['Python'],\n slots: { \n packageManager: 'pipenv',\n mainLanguage: 'Python'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n \n 'pyproject.toml': {\n frameworks: ['Python'],\n slots: {\n mainLanguage: 'Python',\n runtime: 'Python',\n backend: 'Python'\n },\n priority: 36,\n intelligence: 'ultra-high'\n },\n \n // Content-aware via detectRubyProject in turbo-cat.ts — Gemfile alone ≠ Rails.\n 'Gemfile': {\n frameworks: ['Ruby'],\n slots: {\n packageManager: 'bundler',\n mainLanguage: 'Ruby'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n 'Gemfile.lock': {\n frameworks: ['Ruby'],\n slots: {\n packageManager: 'bundler',\n mainLanguage: 'Ruby'\n },\n priority: 34,\n intelligence: 'high'\n },\n \n 'composer.json': {\n frameworks: ['PHP', 'Laravel', 'Symfony'],\n slots: { \n packageManager: 'composer',\n mainLanguage: 'PHP'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n \n 'Cargo.toml': {\n frameworks: ['Rust'],\n slots: {\n packageManager: 'cargo',\n mainLanguage: 'Rust',\n buildTool: 'cargo'\n },\n priority: 36,\n intelligence: 'ultra-high'\n },\n\n 'go.mod': {\n // Filename-only FALLBACK: assert Go + modules, NOT \"backend\" —\n // a go.mod backs libraries, Gin/Echo servers, Cobra CLIs, and MCP servers.\n // turbo-cat.ts reads CONTENT (detectGoProject) and fills framework/backend.\n frameworks: ['Go'],\n slots: {\n packageManager: 'go modules',\n mainLanguage: 'Go',\n buildTool: 'go build'\n },\n priority: 36,\n intelligence: 'ultra-high'\n },\n\n 'Package.swift': {\n // Filename-only FALLBACK: assert Swift + SPM, NOT app/iOS/Vapor —\n // Package.swift alone ≠ app (library · executable · plugin · server · MCP).\n // turbo-cat.ts reads CONTENT (detectSwiftProject) and fills appType signals.\n frameworks: ['Swift'],\n slots: {\n packageManager: 'spm',\n mainLanguage: 'Swift',\n buildTool: 'swift build'\n },\n priority: 36,\n intelligence: 'ultra-high'\n },\n\n // Note: real projects use Named.csproj — turbo-cat.ts handles any *.csproj\n // via content-aware detectCsharpProject. This key is documentation-only\n // fallback if a literal file named \"*.csproj\" ever appears (it won't).\n '*.csproj': {\n frameworks: ['C#', '.NET'],\n slots: {\n packageManager: 'NuGet',\n mainLanguage: 'C#',\n buildTool: 'dotnet'\n },\n priority: 36,\n intelligence: 'ultra-high'\n },\n \n 'pubspec.yaml': {\n // Filename-only FALLBACK: assert Dart + pub, NOT Flutter — a pubspec backs\n // Flutter apps, pure-Dart CLIs/packages/servers, and MCP servers alike.\n // turbo-cat.ts reads the CONTENT (detectDartProject) and adds the framework\n // (Flutter / Dart Frog / …) when the deps actually prove it.\n frameworks: ['Dart'],\n slots: {\n packageManager: 'pub',\n mainLanguage: 'Dart'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n \n 'pom.xml': {\n // Filename-only FALLBACK: assert Java + Maven, NOT Spring —\n // a pom backs libraries, Boot apps, aggregators/BOMs, MCP servers.\n // turbo-cat.ts reads CONTENT (detectJvmProject) for appType/framework.\n frameworks: ['Java'],\n slots: {\n packageManager: 'maven',\n mainLanguage: 'Java',\n buildTool: 'maven'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n 'build.gradle': {\n // Filename-only FALLBACK: assert JVM + Gradle, NOT Spring/Android.\n // Content-aware detectJvmProject fills Spring / Android / KMP / MCP.\n frameworks: ['Java', 'Gradle'],\n slots: {\n packageManager: 'gradle',\n mainLanguage: 'Java',\n buildTool: 'gradle'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n 'settings.gradle': {\n frameworks: ['Java', 'Gradle'],\n slots: {\n packageManager: 'gradle',\n mainLanguage: 'Java',\n buildTool: 'gradle'\n },\n priority: 34,\n intelligence: 'high'\n },\n\n 'settings.gradle.kts': {\n frameworks: ['Kotlin', 'Gradle'],\n slots: {\n packageManager: 'gradle',\n mainLanguage: 'Kotlin',\n buildTool: 'gradle'\n },\n priority: 34,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - JavaScript Frameworks\n // ============================================\n \n 'next.config.js': {\n frameworks: ['Next.js'],\n slots: { \n framework: 'Next.js',\n runtime: 'Node.js',\n buildTool: 'Next.js',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'next.config.mjs': {\n frameworks: ['Next.js'],\n slots: { \n framework: 'Next.js',\n runtime: 'Node.js',\n buildTool: 'Next.js',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'next.config.ts': {\n frameworks: ['Next.js 13+'],\n slots: { \n framework: 'Next.js 13+',\n runtime: 'Node.js',\n buildTool: 'Next.js',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'nuxt.config.js': {\n frameworks: ['Nuxt 2'],\n slots: { \n framework: 'Nuxt 2',\n runtime: 'Node.js',\n buildTool: 'Nuxt',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'nuxt.config.ts': {\n frameworks: ['Nuxt 3'],\n slots: { \n framework: 'Nuxt 3',\n runtime: 'Node.js',\n buildTool: 'Nuxt',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'svelte.config.js': {\n frameworks: ['SvelteKit'],\n slots: { \n framework: 'SvelteKit',\n buildTool: 'Vite',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'angular.json': {\n frameworks: ['Angular'],\n slots: {\n framework: 'Angular',\n buildTool: 'Angular CLI',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // CHROME EXTENSION SUPPORT\n // ============================================\n\n 'manifest.json': {\n frameworks: ['Chrome Extension', 'Browser Extension'],\n slots: {\n framework: 'Chrome Extension',\n runtime: 'Chrome/Browser',\n mainLanguage: 'JavaScript',\n hosting: 'Chrome Web Store',\n apiType: 'Chrome APIs'\n },\n priority: 35,\n intelligence: 'ultra-high',\n confirmWith: ['popup.html', 'background.js', 'content.js']\n },\n \n 'vue.config.js': {\n frameworks: ['Vue'],\n slots: { \n framework: 'Vue',\n buildTool: 'Vue CLI',\n mainLanguage: 'JavaScript'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'remix.config.js': {\n frameworks: ['Remix'],\n slots: { \n framework: 'Remix',\n runtime: 'Node.js',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'gatsby-config.js': {\n frameworks: ['Gatsby'],\n slots: { \n framework: 'Gatsby',\n buildTool: 'Gatsby',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'gatsby-config.ts': {\n frameworks: ['Gatsby'],\n slots: { \n framework: 'Gatsby',\n buildTool: 'Gatsby',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'astro.config.mjs': {\n frameworks: ['Astro'],\n slots: { \n framework: 'Astro',\n buildTool: 'Vite',\n mainLanguage: 'JavaScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'redwood.toml': {\n frameworks: ['RedwoodJS'],\n slots: { \n framework: 'RedwoodJS',\n buildTool: 'Webpack',\n mainLanguage: 'JavaScript/TypeScript',\n server: 'Node.js',\n database: 'Prisma'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'blitz.config.ts': {\n frameworks: ['Blitz.js'],\n slots: { \n framework: 'Blitz.js',\n buildTool: 'Next.js',\n mainLanguage: 'TypeScript',\n server: 'Node.js',\n database: 'Prisma'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'qwik.config.ts': {\n frameworks: ['Qwik'],\n slots: { \n framework: 'Qwik',\n buildTool: 'Vite',\n mainLanguage: 'TypeScript',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Backend Frameworks\n // ============================================\n \n 'manage.py': {\n frameworks: ['Django'],\n slots: { \n framework: 'Django',\n backend: 'Django',\n mainLanguage: 'Python',\n server: 'Django',\n apiType: 'Django Views'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'artisan': {\n frameworks: ['Laravel'],\n slots: { \n framework: 'Laravel',\n backend: 'Laravel',\n mainLanguage: 'PHP',\n server: 'PHP',\n apiType: 'Laravel Routes'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'mix.exs': {\n frameworks: ['Phoenix', 'Elixir'],\n slots: { \n framework: 'Phoenix',\n backend: 'Phoenix',\n mainLanguage: 'Elixir',\n server: 'BEAM'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'nest-cli.json': {\n frameworks: ['NestJS'],\n slots: { \n framework: 'NestJS',\n backend: 'NestJS',\n mainLanguage: 'TypeScript',\n server: 'Node.js',\n apiType: 'REST API'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'strapi.config.js': {\n frameworks: ['Strapi'],\n slots: { \n backend: 'Strapi',\n apiType: 'REST API',\n database: 'Required',\n server: 'Node.js'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Infrastructure\n // ============================================\n \n 'Dockerfile': {\n frameworks: ['Docker'],\n slots: { \n hosting: 'Docker',\n connection: 'Containerized'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'docker-compose.yml': {\n frameworks: ['Docker Compose'],\n slots: { \n hosting: 'Docker',\n connection: 'Multi-container'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'docker-compose.yaml': {\n frameworks: ['Docker Compose'],\n slots: { \n hosting: 'Docker',\n connection: 'Multi-container'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'kubernetes.yml': {\n frameworks: ['Kubernetes'],\n slots: { \n hosting: 'Kubernetes',\n connection: 'Orchestrated'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'k8s.yaml': {\n frameworks: ['Kubernetes'],\n slots: { \n hosting: 'Kubernetes',\n connection: 'Orchestrated'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Deployment\n // ============================================\n \n 'vercel.json': {\n frameworks: ['Vercel'],\n slots: { \n hosting: 'Vercel',\n cicd: 'Vercel'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'netlify.toml': {\n frameworks: ['Netlify'],\n slots: { \n hosting: 'Netlify',\n cicd: 'Netlify'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'render.yaml': {\n frameworks: ['Render'],\n slots: { \n hosting: 'Render',\n cicd: 'Render'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'fly.toml': {\n frameworks: ['Fly.io'],\n slots: { \n hosting: 'Fly.io',\n cicd: 'Fly.io'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'railway.json': {\n frameworks: ['Railway'],\n slots: { \n hosting: 'Railway',\n cicd: 'Railway'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'railway.toml': {\n frameworks: ['Railway'],\n slots: { \n hosting: 'Railway',\n cicd: 'Railway'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'app.yaml': {\n frameworks: ['Google App Engine'],\n slots: { \n hosting: 'Google Cloud',\n cicd: 'Google Cloud'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'Procfile': {\n frameworks: ['Heroku'],\n slots: { \n hosting: 'Heroku',\n cicd: 'Heroku'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Build Tools\n // ============================================\n \n 'vite.config.js': {\n frameworks: ['Vite'],\n slots: { \n buildTool: 'Vite'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'vite.config.ts': {\n frameworks: ['Vite'],\n slots: { \n buildTool: 'Vite',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'webpack.config.js': {\n frameworks: ['Webpack'],\n slots: { \n buildTool: 'Webpack'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'rollup.config.js': {\n frameworks: ['Rollup'],\n slots: { \n buildTool: 'Rollup'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'esbuild.config.js': {\n frameworks: ['esbuild'],\n slots: { \n buildTool: 'esbuild'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'parcel.config.js': {\n frameworks: ['Parcel'],\n slots: { \n buildTool: 'Parcel'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'snowpack.config.js': {\n frameworks: ['Snowpack'],\n slots: { \n buildTool: 'Snowpack'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Language Config\n // ============================================\n \n 'tsconfig.json': {\n frameworks: ['TypeScript'],\n slots: { \n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'jsconfig.json': {\n frameworks: ['JavaScript'],\n slots: { \n mainLanguage: 'JavaScript'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'babel.config.js': {\n frameworks: ['Babel'],\n slots: { \n buildTool: 'Babel'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n '.babelrc': {\n frameworks: ['Babel'],\n slots: { \n buildTool: 'Babel'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Testing\n // ============================================\n \n 'jest.config.js': {\n frameworks: ['Jest'],\n slots: { \n cicd: 'Jest'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'jest.config.ts': {\n frameworks: ['Jest'],\n slots: { \n cicd: 'Jest',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'vitest.config.ts': {\n frameworks: ['Vitest'],\n slots: { \n cicd: 'Vitest',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'cypress.config.js': {\n frameworks: ['Cypress'],\n slots: { \n cicd: 'Cypress'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'playwright.config.ts': {\n frameworks: ['Playwright'],\n slots: { \n cicd: 'Playwright',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'karma.conf.js': {\n frameworks: ['Karma'],\n slots: { \n cicd: 'Karma'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'mocha.opts': {\n frameworks: ['Mocha'],\n slots: { \n cicd: 'Mocha'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n '.rspec': {\n frameworks: ['RSpec'],\n slots: { \n cicd: 'RSpec',\n mainLanguage: 'Ruby'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'pytest.ini': {\n frameworks: ['Pytest'],\n slots: { \n cicd: 'Pytest',\n mainLanguage: 'Python'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'phpunit.xml': {\n frameworks: ['PHPUnit'],\n slots: { \n cicd: 'PHPUnit',\n mainLanguage: 'PHP'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Database/ORM\n // ============================================\n \n 'schema.prisma': {\n frameworks: ['Prisma'],\n slots: { \n database: 'Prisma ORM',\n connection: 'Prisma'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'drizzle.config.ts': {\n frameworks: ['Drizzle'],\n slots: { \n database: 'Drizzle ORM',\n connection: 'Drizzle',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'ormconfig.js': {\n frameworks: ['TypeORM'],\n slots: { \n database: 'TypeORM',\n connection: 'TypeORM'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'knexfile.js': {\n frameworks: ['Knex.js'],\n slots: { \n database: 'Knex.js',\n connection: 'Knex.js'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'sequelize.config.js': {\n frameworks: ['Sequelize'],\n slots: { \n database: 'Sequelize',\n connection: 'Sequelize'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'alembic.ini': {\n frameworks: ['Alembic'],\n slots: { \n database: 'Alembic',\n mainLanguage: 'Python'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - CI/CD\n // ============================================\n \n '.github/workflows': {\n frameworks: ['GitHub Actions'],\n slots: { \n cicd: 'GitHub Actions'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n '.gitlab-ci.yml': {\n frameworks: ['GitLab CI'],\n slots: { \n cicd: 'GitLab CI'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'Jenkinsfile': {\n frameworks: ['Jenkins'],\n slots: { \n cicd: 'Jenkins'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n '.circleci/config.yml': {\n frameworks: ['CircleCI'],\n slots: { \n cicd: 'CircleCI'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n '.travis.yml': {\n frameworks: ['Travis CI'],\n slots: { \n cicd: 'Travis CI'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'azure-pipelines.yml': {\n frameworks: ['Azure DevOps'],\n slots: { \n cicd: 'Azure DevOps'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'bitbucket-pipelines.yml': {\n frameworks: ['Bitbucket Pipelines'],\n slots: { \n cicd: 'Bitbucket Pipelines'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (20 points) - CSS/UI\n // ============================================\n \n 'tailwind.config.js': {\n frameworks: ['Tailwind CSS'],\n slots: { \n cssFramework: 'Tailwind CSS'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'tailwind.config.ts': {\n frameworks: ['Tailwind CSS'],\n slots: { \n cssFramework: 'Tailwind CSS',\n mainLanguage: 'TypeScript'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'postcss.config.js': {\n frameworks: ['PostCSS'],\n slots: { \n cssFramework: 'PostCSS'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'uno.config.ts': {\n frameworks: ['UnoCSS'],\n slots: { \n cssFramework: 'UnoCSS',\n mainLanguage: 'TypeScript'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'styled-components.config.js': {\n frameworks: ['styled-components'],\n slots: { \n cssFramework: 'styled-components',\n uiLibrary: 'styled-components'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'emotion.config.js': {\n frameworks: ['Emotion'],\n slots: { \n cssFramework: 'Emotion',\n uiLibrary: 'Emotion'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Mobile\n // ============================================\n \n 'metro.config.js': {\n frameworks: ['React Native'],\n slots: { \n framework: 'React Native',\n mainLanguage: 'JavaScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'expo.config.js': {\n frameworks: ['Expo'],\n slots: { \n framework: 'React Native',\n buildTool: 'Expo'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'app.json': {\n frameworks: ['React Native', 'Expo'],\n slots: { \n framework: 'React Native'\n },\n priority: 20,\n intelligence: 'medium',\n confirmWith: ['expo']\n },\n \n 'capacitor.config.ts': {\n frameworks: ['Capacitor'],\n slots: { \n framework: 'Capacitor',\n mainLanguage: 'TypeScript'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'ionic.config.json': {\n frameworks: ['Ionic'],\n slots: { \n framework: 'Ionic',\n uiLibrary: 'Ionic'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // MEDIUM VALUE (25 points) - Monorepo\n // ============================================\n \n 'nx.json': {\n frameworks: ['Nx'],\n slots: { \n buildTool: 'Nx'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'turbo.json': {\n frameworks: ['Turborepo'],\n slots: { \n buildTool: 'Turborepo'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'lerna.json': {\n frameworks: ['Lerna'],\n slots: { \n buildTool: 'Lerna'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'rush.json': {\n frameworks: ['Rush'],\n slots: { \n buildTool: 'Rush'\n },\n priority: 25,\n intelligence: 'medium'\n },\n \n 'pnpm-workspace.yaml': {\n frameworks: ['pnpm workspaces'],\n slots: { \n packageManager: 'pnpm',\n buildTool: 'pnpm workspaces'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // LOW VALUE (15 points) - File Extensions\n // These are pattern-based and less definitive\n // ============================================\n \n '*.svelte': {\n frameworks: ['Svelte', 'SvelteKit'],\n slots: { \n framework: 'Svelte'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.vue': {\n frameworks: ['Vue'],\n slots: { \n framework: 'Vue'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.jsx': {\n frameworks: ['React'],\n slots: { \n framework: 'React',\n mainLanguage: 'JavaScript'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.ts': {\n frameworks: ['TypeScript'],\n slots: {\n mainLanguage: 'TypeScript'\n },\n priority: 15,\n intelligence: 'low'\n },\n\n '*.tsx': {\n frameworks: ['React', 'TypeScript'],\n slots: {\n framework: 'React',\n mainLanguage: 'TypeScript'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.py': {\n frameworks: ['Python'],\n slots: { \n mainLanguage: 'Python'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.rb': {\n frameworks: ['Ruby'],\n slots: { \n mainLanguage: 'Ruby'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.php': {\n frameworks: ['PHP'],\n slots: { \n mainLanguage: 'PHP'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.java': {\n frameworks: ['Java'],\n slots: { \n mainLanguage: 'Java'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.kt': {\n frameworks: ['Kotlin'],\n slots: { \n mainLanguage: 'Kotlin'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.swift': {\n frameworks: ['Swift'],\n slots: { \n mainLanguage: 'Swift'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.go': {\n frameworks: ['Go'],\n slots: { \n mainLanguage: 'Go'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.rs': {\n frameworks: ['Rust'],\n slots: { \n mainLanguage: 'Rust'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.dart': {\n frameworks: ['Flutter', 'Dart'],\n slots: { \n mainLanguage: 'Dart'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.ex': {\n frameworks: ['Elixir'],\n slots: { \n mainLanguage: 'Elixir'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.exs': {\n frameworks: ['Elixir'],\n slots: { \n mainLanguage: 'Elixir'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.scala': {\n frameworks: ['Scala'],\n slots: { \n mainLanguage: 'Scala'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.clj': {\n frameworks: ['Clojure'],\n slots: { \n mainLanguage: 'Clojure'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.lua': {\n frameworks: ['Lua'],\n slots: { \n mainLanguage: 'Lua'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.r': {\n frameworks: ['R'],\n slots: { \n mainLanguage: 'R'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.R': {\n frameworks: ['R'],\n slots: { \n mainLanguage: 'R'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.jl': {\n frameworks: ['Julia'],\n slots: { \n mainLanguage: 'Julia'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.nim': {\n frameworks: ['Nim'],\n slots: { \n mainLanguage: 'Nim'\n },\n priority: 15,\n intelligence: 'low'\n },\n \n '*.zig': {\n frameworks: ['Zig'],\n slots: {\n mainLanguage: 'Zig'\n },\n priority: 15,\n intelligence: 'low'\n },\n\n 'build.zig': {\n frameworks: ['Zig'],\n slots: {\n // camelCase slots (standard TURBO-CAT)\n packageManager: 'Zig Package Manager',\n mainLanguage: 'Zig',\n buildTool: 'zig build',\n framework: 'Zig',\n // snake_case slots (template compatibility)\n build: 'zig build'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n // ============================================\n // SPECIAL VALUE (20 points) - API/Schema\n // ============================================\n \n 'openapi.json': {\n frameworks: ['OpenAPI'],\n slots: { \n apiType: 'REST API',\n backend: 'API Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'openapi.yaml': {\n frameworks: ['OpenAPI'],\n slots: { \n apiType: 'REST API',\n backend: 'API Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'swagger.json': {\n frameworks: ['Swagger'],\n slots: { \n apiType: 'REST API',\n backend: 'API Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'graphql.schema': {\n frameworks: ['GraphQL'],\n slots: { \n apiType: 'GraphQL',\n backend: 'GraphQL Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n 'schema.graphql': {\n frameworks: ['GraphQL'],\n slots: { \n apiType: 'GraphQL',\n backend: 'GraphQL Server'\n },\n priority: 30,\n intelligence: 'high'\n },\n \n '.graphqlconfig': {\n frameworks: ['GraphQL'],\n slots: { \n apiType: 'GraphQL'\n },\n priority: 25,\n intelligence: 'medium'\n },\n\n // ============================================\n // SPECIAL VALUE (20 points) - State Management\n // ============================================\n \n 'redux.config.js': {\n frameworks: ['Redux'],\n slots: { \n stateManagement: 'Redux'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'mobx.config.js': {\n frameworks: ['MobX'],\n slots: { \n stateManagement: 'MobX'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'vuex.config.js': {\n frameworks: ['Vuex'],\n slots: { \n stateManagement: 'Vuex',\n framework: 'Vue'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'pinia.config.js': {\n frameworks: ['Pinia'],\n slots: { \n stateManagement: 'Pinia',\n framework: 'Vue'\n },\n priority: 20,\n intelligence: 'medium'\n },\n \n 'zustand.config.js': {\n frameworks: ['Zustand'],\n slots: { \n stateManagement: 'Zustand'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // SPECIAL VALUE (15 points) - Linting/Formatting\n // ============================================\n \n '.eslintrc.js': {\n frameworks: ['ESLint'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n '.eslintrc.json': {\n frameworks: ['ESLint'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n '.prettierrc': {\n frameworks: ['Prettier'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n '.prettierrc.json': {\n frameworks: ['Prettier'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n 'biome.json': {\n frameworks: ['Biome'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n \n '.editorconfig': {\n frameworks: ['EditorConfig'],\n slots: {},\n priority: 10,\n intelligence: 'low'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Serverless\n // ============================================\n\n 'serverless.yml': {\n frameworks: ['Serverless Framework'],\n slots: {\n hosting: 'AWS Lambda/Azure/GCP',\n backend: 'Serverless',\n apiType: 'API Gateway'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'serverless.yaml': {\n frameworks: ['Serverless Framework'],\n slots: {\n hosting: 'AWS Lambda/Azure/GCP',\n backend: 'Serverless',\n apiType: 'API Gateway'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'sam.yaml': {\n frameworks: ['AWS SAM'],\n slots: {\n hosting: 'AWS Lambda',\n backend: 'AWS SAM',\n cicd: 'AWS SAM CLI'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'template.yaml': {\n frameworks: ['AWS SAM', 'CloudFormation'],\n slots: {\n hosting: 'AWS',\n backend: 'AWS SAM/CloudFormation',\n cicd: 'AWS'\n },\n priority: 25,\n intelligence: 'medium',\n confirmWith: ['samconfig.toml']\n },\n\n 'amplify.yml': {\n frameworks: ['AWS Amplify'],\n slots: {\n hosting: 'AWS Amplify',\n backend: 'AWS Amplify',\n cicd: 'AWS Amplify'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - Mobile Native\n // ============================================\n\n 'Podfile': {\n // Softened 2026-08-03 (Swift Edition honesty): CocoaPods is multi-platform\n // (iOS / macOS / tvOS / watchOS) — not iOS-only. Do not stamp appType here.\n frameworks: ['CocoaPods', 'Swift'],\n slots: {\n packageManager: 'CocoaPods',\n mainLanguage: 'Swift/Objective-C'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'build.gradle.kts': {\n // Filename-only FALLBACK: Kotlin DSL ≠ Android. Content-aware detectJvmProject.\n frameworks: ['Kotlin', 'Gradle'],\n slots: {\n packageManager: 'gradle',\n mainLanguage: 'Kotlin',\n buildTool: 'gradle'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n // ============================================\n // HIGH VALUE (30 points) - AI/ML\n // ============================================\n\n '*.ipynb': {\n frameworks: ['Jupyter', 'Python'],\n slots: {\n mainLanguage: 'Python',\n framework: 'Jupyter Notebook'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'MLproject': {\n frameworks: ['MLflow'],\n slots: {\n mainLanguage: 'Python',\n framework: 'MLflow',\n backend: 'MLflow',\n cicd: 'MLflow'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'dvc.yaml': {\n frameworks: ['DVC', 'Data Version Control'],\n slots: {\n mainLanguage: 'Python',\n framework: 'DVC',\n cicd: 'DVC Pipelines'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'dvc.lock': {\n frameworks: ['DVC'],\n slots: {\n framework: 'DVC'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // ROW 18 - BEYOND THE SACRED 154 (Target: 172)\n // ============================================\n\n // Edge Computing\n 'wrangler.toml': {\n frameworks: ['Cloudflare Workers', 'Cloudflare'],\n slots: {\n hosting: 'Cloudflare Workers',\n backend: 'Cloudflare Workers',\n runtime: 'V8 Isolates'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // Modern Runtimes\n 'deno.json': {\n frameworks: ['Deno'],\n slots: {\n runtime: 'Deno',\n mainLanguage: 'TypeScript',\n packageManager: 'Deno'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'bun.lockb': {\n frameworks: ['Bun'],\n slots: {\n runtime: 'Bun',\n packageManager: 'Bun',\n mainLanguage: 'TypeScript/JavaScript'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // CI/CD Ecosystem\n 'codecov.yml': {\n frameworks: ['Codecov'],\n slots: {\n cicd: 'Codecov'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n 'dependabot.yml': {\n frameworks: ['Dependabot', 'GitHub'],\n slots: {\n cicd: 'Dependabot'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n 'renovate.json': {\n frameworks: ['Renovate'],\n slots: {\n cicd: 'Renovate'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // Universal Build Tools\n 'Makefile': {\n frameworks: ['Make', 'GNU Make'],\n slots: {\n buildTool: 'Make'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'CMakeLists.txt': {\n frameworks: ['CMake', 'C', 'C++'],\n slots: {\n buildTool: 'CMake',\n mainLanguage: 'C/C++'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'meson.build': {\n frameworks: ['Meson', 'C', 'C++'],\n slots: {\n buildTool: 'Meson',\n mainLanguage: 'C/C++'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // ============================================\n // C/C++ LANGUAGE FAMILY - SYSTEMS PROGRAMMING\n // ============================================\n\n '*.c': {\n frameworks: ['C'],\n slots: {\n mainLanguage: 'C'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n '*.cpp': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n '*.cc': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n '*.cxx': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '*.h': {\n frameworks: ['C', 'C++'],\n slots: {\n mainLanguage: 'C/C++'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '*.hpp': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '*.hxx': {\n frameworks: ['C++'],\n slots: {\n mainLanguage: 'C++'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // ENVIRONMENT FILES - CONFIGURATION\n // ============================================\n\n '.env': {\n frameworks: [],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n '.env.example': {\n frameworks: [],\n slots: {},\n priority: 25,\n intelligence: 'high'\n },\n\n '.env.local': {\n frameworks: [],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n '.env.development': {\n frameworks: [],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n '.env.production': {\n frameworks: [],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n // ============================================\n // DEVOPS YAML - KUBERNETES & IaC\n // ============================================\n\n 'skaffold.yaml': {\n frameworks: ['Skaffold', 'Kubernetes'],\n slots: {\n hosting: 'Kubernetes',\n cicd: 'Skaffold'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'Chart.yaml': {\n frameworks: ['Helm', 'Kubernetes'],\n slots: {\n hosting: 'Kubernetes',\n backend: 'Helm'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'values.yaml': {\n frameworks: ['Helm', 'Kubernetes'],\n slots: {\n hosting: 'Kubernetes'\n },\n priority: 25,\n intelligence: 'high',\n confirmWith: ['Chart.yaml']\n },\n\n 'pulumi.yaml': {\n frameworks: ['Pulumi'],\n slots: {\n hosting: 'Cloud',\n cicd: 'Pulumi'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'Pulumi.yaml': {\n frameworks: ['Pulumi'],\n slots: {\n hosting: 'Cloud',\n cicd: 'Pulumi'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'terragrunt.hcl': {\n frameworks: ['Terragrunt', 'Terraform'],\n slots: {\n hosting: 'Cloud',\n cicd: 'Terragrunt'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'ansible.yml': {\n frameworks: ['Ansible'],\n slots: {\n cicd: 'Ansible'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n 'playbook.yml': {\n frameworks: ['Ansible'],\n slots: {\n cicd: 'Ansible'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // ============================================\n // ROW 19 - LANGUAGES & VERSION MANAGERS\n // ============================================\n\n '*.cs': {\n frameworks: ['C#', '.NET', 'Unity'],\n slots: {\n mainLanguage: 'C#'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n '*.m': {\n frameworks: ['Objective-C', 'iOS'],\n slots: {\n mainLanguage: 'Objective-C'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '.nvmrc': {\n frameworks: ['Node.js', 'nvm'],\n slots: {\n runtime: 'Node.js'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '.tool-versions': {\n frameworks: ['asdf'],\n slots: {},\n priority: 25,\n intelligence: 'high'\n },\n\n '.ruby-version': {\n frameworks: ['Ruby', 'rbenv'],\n slots: {\n mainLanguage: 'Ruby',\n runtime: 'Ruby'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '.python-version': {\n frameworks: ['Python', 'pyenv'],\n slots: {\n mainLanguage: 'Python',\n runtime: 'Python'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '.dockerignore': {\n frameworks: ['Docker'],\n slots: {},\n priority: 20,\n intelligence: 'medium'\n },\n\n '.gitattributes': {\n frameworks: ['Git'],\n slots: {},\n priority: 15,\n intelligence: 'low'\n },\n\n '.npmrc': {\n frameworks: ['npm', 'Node.js'],\n slots: {\n packageManager: 'npm'\n },\n priority: 20,\n intelligence: 'medium'\n },\n\n 'sonar-project.properties': {\n frameworks: ['SonarQube', 'SonarCloud'],\n slots: {\n cicd: 'SonarQube'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // ROW 19 COMPLETION - FUNCTIONAL LANGUAGES\n\n '*.fs': {\n frameworks: ['F#', '.NET'],\n slots: {\n mainLanguage: 'F#'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n '*.mm': {\n frameworks: ['Objective-C++', 'iOS', 'macOS'],\n slots: {\n mainLanguage: 'Objective-C++'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // ============================================\n // ROW 20 - TIER 1 EMERGING TECH (2025)\n // Target: 211 formats (Sum(1..20) + 1)\n // ============================================\n\n // Zig - The Next Systems Language\n 'build.zig.zon': {\n frameworks: ['Zig'],\n slots: {\n mainLanguage: 'Zig',\n packageManager: 'Zig Package Manager',\n buildTool: 'zig build'\n },\n priority: 35,\n intelligence: 'ultra-high'\n },\n\n // Gleam - 2nd Most Admired Language 2025 (Stack Overflow)\n 'gleam.toml': {\n frameworks: ['Gleam', 'BEAM', 'Erlang'],\n slots: {\n mainLanguage: 'Gleam',\n runtime: 'BEAM',\n packageManager: 'Gleam'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // Bun - Ultra-fast JS Runtime Config\n 'bunfig.toml': {\n frameworks: ['Bun'],\n slots: {\n runtime: 'Bun',\n packageManager: 'Bun',\n buildTool: 'Bun'\n },\n priority: 30,\n intelligence: 'high'\n },\n\n // mise - Modern Version Manager (replaced asdf/rtx)\n 'mise.toml': {\n frameworks: ['mise'],\n slots: {},\n priority: 25,\n intelligence: 'high'\n },\n\n '.mise.toml': {\n frameworks: ['mise'],\n slots: {},\n priority: 25,\n intelligence: 'high'\n },\n\n // Flox - Nix-based Development Environments\n 'manifest.toml': {\n frameworks: ['Flox', 'Nix'],\n slots: {},\n priority: 25,\n intelligence: 'high',\n confirmWith: ['.flox']\n },\n\n // Just - Command Runner (10k+ GitHub stars, Rust ecosystem)\n 'justfile': {\n frameworks: ['Just'],\n slots: {\n buildTool: 'Just'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // Pre-commit - Git Hooks Framework (industry standard)\n '.pre-commit-config.yaml': {\n frameworks: ['pre-commit'],\n slots: {\n cicd: 'pre-commit'\n },\n priority: 25,\n intelligence: 'high'\n },\n\n // Claude Code - AI Context (Anthropic Claude Code projects)\n 'CLAUDE.md': {\n frameworks: ['Claude Code'],\n slots: {},\n priority: 30, // High priority - AI context is valuable\n intelligence: 'high',\n confirmWith: ['.claude']\n }\n};\n\n// ============================================\n// HELPER FUNCTIONS\n// ============================================\n\n/**\n * Get knowledge for a specific format\n */\nexport function getFormatKnowledge(format: string): FormatKnowledge | undefined {\n return KNOWLEDGE_BASE[format];\n}\n\n/**\n * Get all format keys\n */\nexport function getAllFormats(): string[] {\n return Object.keys(KNOWLEDGE_BASE);\n}\n\n/**\n * Get high-value formats (priority >= 30)\n */\nexport function getHighValueFormats(): string[] {\n return Object.entries(KNOWLEDGE_BASE)\n .filter(([, knowledge]) => knowledge.priority >= 30)\n .map(([format]) => format);\n}\n\n/**\n * Get formats by intelligence level\n */\nexport function getFormatsByIntelligence(level: FormatKnowledge['intelligence']): string[] {\n return Object.entries(KNOWLEDGE_BASE)\n .filter(([, knowledge]) => knowledge.intelligence === level)\n .map(([format]) => format);\n}\n\n/**\n * Get formats that can fill a specific slot\n */\nexport function getFormatsForSlot(slotName: keyof ContextSlots): string[] {\n return Object.entries(KNOWLEDGE_BASE)\n .filter(([, knowledge]) => slotName in knowledge.slots)\n .map(([format]) => format);\n}\n\n/**\n * Calculate total possible intelligence score\n */\nexport function getMaxIntelligenceScore(): number {\n return Object.values(KNOWLEDGE_BASE)\n .reduce((sum, knowledge) => sum + knowledge.priority, 0);\n}",
94
96
  "import { existsSync, readFileSync, readdirSync } from 'fs';\nimport { join } from 'path';\nimport spec from './dart-detection.json';\n\n/**\n * Dart/Flutter detection — CONTENT-AWARE pubspec classification.\n *\n * A pubspec.yaml alone does NOT mean Flutter. The same manifest backs Flutter\n * apps, pure-Dart CLIs, packages, servers (Dart Frog / Shelf / Serverpod), and\n * MCP servers (dart_mcp / mcp_server). We read the dependencies and branch —\n * collapsing everything to \"Flutter\" is the bug this module fixes.\n *\n * Single source of truth for Dart: imported by both the v6 scanner (app-type +\n * language) and Turbo-Cat (stack fills), so the two engines agree by construction.\n */\n\nexport type DartAppType = 'mobile' | 'mcp' | 'backend' | 'cli' | 'library';\n\nexport interface DartProject {\n /** faf app_type — Flutter→mobile, Dart MCP→mcp, Dart server→backend, CLI→cli, else library. */\n appType: DartAppType;\n isFlutter: boolean;\n /** Primary framework for the stack (Flutter / Dart Frog / Serverpod / Shelf / …) or ''. */\n framework: string;\n /** Flutter state management (Riverpod / Bloc / Provider / GetX / MobX / Signals) or ''. */\n stateManagement: string;\n /** Routing (go_router / auto_route) or ''. */\n routing: string;\n /** Test framework (flutter_test / test) or ''. */\n testing: string;\n /** Human-readable rationale for the .faf `# found:` comment (Glass Hood). */\n found: string;\n}\n\n// Detection KNOWLEDGE is sourced from dart-detection.json — the single,\n// language-neutral spec faf-cli imports and faf-python-sdk vendors (A+B hybrid).\n// Bolster Dart/Flutter by editing that JSON; every engine inherits it.\nconst FLUTTER_DEPS = spec.flutterDeps as string[];\nconst MCP_DEPS = spec.mcpDeps as string[];\nconst SERVER_FRAMEWORKS = spec.serverFrameworks as Array<[string, string]>;\nconst STATE_MGMT = spec.stateManagement as Array<[string, string]>;\nconst ROUTING = spec.routing as Array<[string, string]>;\n\n/** Collect dependency names from a pubspec's dependencies / dev_dependencies sections. */\nfunction pubspecDeps(content: string): Set<string> {\n const deps = new Set<string>();\n let inDeps = false;\n for (const line of content.split('\\n')) {\n if (/^(dependencies|dev_dependencies|dependency_overrides):\\s*$/.test(line)) {\n inDeps = true;\n continue;\n }\n // A new top-level key (no leading whitespace) ends the dependency section.\n if (/^\\S/.test(line)) {inDeps = false;}\n if (inDeps) {\n const m = line.match(/^\\s{2}([a-zA-Z0-9_]+):/);\n if (m) {deps.add(m[1].toLowerCase());}\n }\n }\n return deps;\n}\n\n/** Classify a Dart/Flutter project from its pubspec.yaml. Returns null if not Dart. */\nexport function detectDartProject(dir: string): DartProject | null {\n const path = join(dir, 'pubspec.yaml');\n if (!existsSync(path)) {return null;}\n let content: string;\n try {\n content = readFileSync(path, 'utf-8');\n } catch {\n return null;\n }\n\n const deps = pubspecDeps(content);\n const has = (d: string) => deps.has(d.toLowerCase());\n\n // Flutter: the `flutter` SDK dep, a top-level `flutter:` section, or `sdk: flutter`.\n const isFlutter = FLUTTER_DEPS.some(has) || /^flutter:\\s*$/m.test(content) || /\\bsdk:\\s*flutter\\b/.test(content);\n\n const mcpDep = MCP_DEPS.find(has);\n const server = SERVER_FRAMEWORKS.find(([d]) => has(d));\n const stateEntry = STATE_MGMT.find(([d]) => has(d));\n const stateManagement = stateEntry ? stateEntry[1] : '';\n const routeEntry = ROUTING.find(([d]) => has(d));\n const routing = routeEntry ? routeEntry[1] : '';\n const testing = has('flutter_test') ? 'flutter_test' : has('test') ? 'test' : '';\n\n // CLI: a top-level `executables:` section, or bin/*.dart entry points.\n const hasExecutables = /^executables:\\s*$/m.test(content);\n let hasBinDart = false;\n try {\n hasBinDart = readdirSync(join(dir, 'bin')).some(f => f.endsWith('.dart'));\n } catch { /* no bin/ */ }\n const isCli = hasExecutables || hasBinDart;\n\n let appType: DartAppType;\n let framework = '';\n let found: string;\n\n if (isFlutter) {\n framework = 'Flutter';\n // App vs package: an app has lib/main.dart (the entry) or `publish_to: none`;\n // a reusable Flutter package has neither — it's publishable, lib/ exports only.\n const isApp = existsSync(join(dir, 'lib', 'main.dart')) || /^publish_to:\\s*['\"]?none\\b/m.test(content);\n if (isApp) {\n appType = 'mobile';\n found = 'pubspec.yaml (Flutter app)';\n } else {\n appType = 'library';\n found = 'pubspec.yaml (Flutter package)';\n }\n } else if (mcpDep) {\n appType = 'mcp';\n found = `pubspec.yaml + ${mcpDep} (Dart MCP server)`;\n } else if (server) {\n appType = 'backend';\n framework = server[1];\n found = `pubspec.yaml + ${server[0]} (Dart backend)`;\n } else if (isCli) {\n appType = 'cli';\n found = hasExecutables ? 'pubspec.yaml executables: (Dart CLI)' : 'pubspec.yaml + bin/*.dart (Dart CLI)';\n } else {\n appType = 'library';\n found = 'pubspec.yaml (Dart package)';\n }\n\n return { appType, isFlutter, framework, stateManagement, routing, testing, found };\n}\n",
95
97
  "import { existsSync, readFileSync, readdirSync, statSync } from 'fs';\nimport { join } from 'path';\nimport spec from './go-detection.json';\n\n/**\n * Go detection — CONTENT-AWARE go.mod classification.\n *\n * A go.mod alone does NOT mean \"backend\" or \"CLI\". The same module file backs\n * libraries, HTTP servers (Gin / Echo / Fiber / Chi), CLIs (Cobra), and MCP\n * servers (mcp-go). We read require paths and light layout signals, then branch.\n *\n * Same composition pattern as dart.ts: knowledge in go-detection.json, logic here.\n * Turbo-Cat + scanner both call detectGoProject so they agree by construction.\n */\n\nexport type GoAppType = 'mcp' | 'backend' | 'cli' | 'library';\n\nexport interface GoProject {\n /** faf app_type — MCP→mcp, server→backend, CLI→cli, else library. */\n appType: GoAppType;\n /** Module path from `module` line, or ''. */\n modulePath: string;\n /** Primary framework (Gin / Cobra / …) or ''. */\n framework: string;\n /** Human-readable rationale for the .faf `# found:` comment (Glass Hood). */\n found: string;\n}\n\nconst MCP_MODULES = spec.mcpModules as string[];\nconst SERVER_FRAMEWORKS = spec.serverFrameworks as Array<[string, string]>;\nconst CLI_FRAMEWORKS = spec.cliFrameworks as Array<[string, string]>;\n\n/** Collect require module paths from go.mod (require X and require ( … ) blocks). */\nexport function goModRequires(content: string): Set<string> {\n const reqs = new Set<string>();\n let inBlock = false;\n for (const raw of content.split('\\n')) {\n const line = raw.replace(/\\/\\/.*$/, '').trim();\n if (!line) {continue;}\n if (/^require\\s*\\(\\s*$/.test(line)) {\n inBlock = true;\n continue;\n }\n if (inBlock) {\n if (line === ')') {\n inBlock = false;\n continue;\n }\n const m = line.match(/^(\\S+)/);\n if (m) {reqs.add(m[1].toLowerCase());}\n continue;\n }\n // Single-line: require github.com/foo/bar v1.2.3\n const single = line.match(/^require\\s+(\\S+)/);\n if (single && single[1] !== '(') {reqs.add(single[1].toLowerCase());}\n }\n return reqs;\n}\n\n/** True if any require equals or is a subpath of the module path. */\nfunction hasModule(reqs: Set<string>, mod: string): boolean {\n const m = mod.toLowerCase();\n for (const r of reqs) {\n if (r === m || r.startsWith(`${m}/`)) {return true;}\n }\n return false;\n}\n\n/**\n * Longest knowledge-path match wins (echo/v4 over echo), so found strings cite\n * the most specific module entry and versioned paths don't collapse to the base.\n */\nfunction findLongest(\n reqs: Set<string>,\n entries: Array<[string, string]>,\n): [string, string] | undefined {\n let best: [string, string] | undefined;\n for (const e of entries) {\n if (!hasModule(reqs, e[0])) {continue;}\n if (!best || e[0].length > best[0].length) {best = e;}\n }\n return best;\n}\n\nfunction findLongestPath(reqs: Set<string>, paths: string[]): string | undefined {\n let best: string | undefined;\n for (const p of paths) {\n if (!hasModule(reqs, p)) {continue;}\n if (!best || p.length > best.length) {best = p;}\n }\n return best;\n}\n\nfunction extractModulePath(content: string): string {\n const m = content.match(/^module\\s+(\\S+)/m);\n return m ? m[1] : '';\n}\n\n/** Layout signal: cmd/ with Go files → common CLI / multi-main layout. */\nfunction hasCmdDir(dir: string): boolean {\n const cmd = join(dir, 'cmd');\n if (!existsSync(cmd)) {return false;}\n try {\n for (const name of readdirSync(cmd)) {\n const p = join(cmd, name);\n try {\n if (statSync(p).isDirectory()) {\n const files = readdirSync(p);\n if (files.some(f => f.endsWith('.go'))) {return true;}\n } else if (name.endsWith('.go')) {\n return true;\n }\n } catch { /* skip */ }\n }\n } catch { /* no cmd */ }\n return false;\n}\n\n/** Root main.go that declares package main. */\nfunction hasRootMainPackage(dir: string): boolean {\n const p = join(dir, 'main.go');\n if (!existsSync(p)) {return false;}\n try {\n const body = readFileSync(p, 'utf-8');\n return /^package\\s+main\\b/m.test(body);\n } catch {\n return false;\n }\n}\n\n/** Classify a Go project from go.mod (+ light layout). Returns null if not Go. */\nexport function detectGoProject(dir: string): GoProject | null {\n const path = join(dir, 'go.mod');\n if (!existsSync(path)) {return null;}\n let content: string;\n try {\n content = readFileSync(path, 'utf-8');\n } catch {\n return null;\n }\n\n const modulePath = extractModulePath(content);\n const reqs = goModRequires(content);\n\n const mcpMod = findLongestPath(reqs, MCP_MODULES);\n const server = findLongest(reqs, SERVER_FRAMEWORKS);\n const cliFw = findLongest(reqs, CLI_FRAMEWORKS);\n const cmdLayout = hasCmdDir(dir);\n const rootMain = hasRootMainPackage(dir);\n\n let appType: GoAppType;\n let framework = '';\n let found: string;\n\n // Priority: MCP → server → CLI (deps or layout) → library.\n // go.mod alone is never \"backend\" — pure library modules stay library.\n if (mcpMod) {\n appType = 'mcp';\n found = `go.mod + ${mcpMod} (Go MCP server)`;\n } else if (server) {\n appType = 'backend';\n framework = server[1];\n found = `go.mod + ${server[0]} (Go backend)`;\n } else if (cliFw) {\n appType = 'cli';\n framework = cliFw[1];\n found = `go.mod + ${cliFw[0]} (Go CLI)`;\n } else if (cmdLayout) {\n appType = 'cli';\n found = 'go.mod + cmd/ (Go CLI layout)';\n } else if (rootMain && !server) {\n // package main at root without a known server framework → treat as CLI/tool.\n // (Servers almost always pull gin/echo/fiber; bare main is often a tool.)\n appType = 'cli';\n found = 'go.mod + main.go package main (Go CLI)';\n } else {\n appType = 'library';\n found = 'go.mod (Go module)';\n }\n\n return { appType, modulePath, framework, found };\n}\n",
96
98
  "import { existsSync, readFileSync, readdirSync } from 'fs';\nimport { join } from 'path';\nimport spec from './csharp-detection.json';\n\n/**\n * C# /.NET detection — CONTENT-AWARE .csproj classification.\n *\n * A .csproj alone does NOT mean Web API / ASP.NET. Microsoft encodes kind in\n * Project Sdk, then OutputType / Use* props / PackageReference / FrameworkReference.\n * Kill line: .csproj alone ≠ type.\n *\n * Same composition pattern as go.ts / dart.ts: knowledge in csharp-detection.json,\n * logic here. Turbo-Cat + scanner both call detectCsharpProject so they agree.\n */\n\n/** FAF project types we emit (aligned with Go + mobile for MAUI). */\nexport type CsharpAppType = 'mcp' | 'backend' | 'cli' | 'library' | 'mobile';\n\nexport interface CsharpProject {\n appType: CsharpAppType;\n /** Assembly / project name from filename, or ''. */\n projectName: string;\n /** TargetFramework(s) raw string if present. */\n targetFramework: string;\n /** Sdk attribute (e.g. Microsoft.NET.Sdk.Web). */\n sdk: string;\n /** Primary framework label (ASP.NET Core / Worker / Cobra-equivalent / …). */\n framework: string;\n /** Human-readable rationale for the .faf `# found:` comment (Glass Hood). */\n found: string;\n}\n\nconst MCP_PACKAGES = (spec.mcpPackages as string[]).map(p => p.toLowerCase());\nconst CLI_PACKAGES = (spec.cliPackages as Array<[string, string]>).map(\n ([id, label]) => [id.toLowerCase(), label] as [string, string],\n);\nconst TEST_PACKAGES = (spec.testPackages as Array<[string, string]>).map(\n ([id, label]) => [id.toLowerCase(), label] as [string, string],\n);\nconst GRPC_SERVER = (spec.grpcServerPackages as string[]).map(p => p.toLowerCase());\nconst SPECIALIZED = spec.specializedSdks as Array<[string, string, string]>;\nconst BASE_SDK = (spec.baseSdk as string).toLowerCase();\n\nexport interface ParsedCsproj {\n sdk: string;\n outputType: string;\n targetFramework: string;\n isTestProject: boolean;\n useMaui: boolean;\n useWpf: boolean;\n useWindowsForms: boolean;\n packages: Set<string>;\n frameworkRefs: Set<string>;\n}\n\n/** Parse the load-bearing fields of an SDK-style .csproj (regex — adequate for detection). */\nexport function parseCsproj(content: string): ParsedCsproj {\n // Sdk=\"Name\" or Sdk=\"Name/1.2.3\"\n const sdkAttr = content.match(/<Project\\b[^>]*\\bSdk\\s*=\\s*\"([^\"/]+)(?:\\/[^\"]*)?\"/i);\n // Additive <Sdk Name=\"...\" />\n const sdkElem = content.match(/<Sdk\\b[^>]*\\bName\\s*=\\s*\"([^\"]+)\"/i);\n const sdk = (sdkAttr?.[1] || sdkElem?.[1] || '').trim();\n\n const outputType = (content.match(/<OutputType>\\s*([^<]+?)\\s*<\\/OutputType>/i)?.[1] || '').trim();\n const tfSingle = content.match(/<TargetFramework>\\s*([^<]+?)\\s*<\\/TargetFramework>/i)?.[1];\n const tfMulti = content.match(/<TargetFrameworks>\\s*([^<]+?)\\s*<\\/TargetFrameworks>/i)?.[1];\n const targetFramework = (tfMulti || tfSingle || '').trim();\n\n const isTestProject = /<IsTestProject>\\s*true\\s*<\\/IsTestProject>/i.test(content);\n const useMaui = /<UseMaui>\\s*true\\s*<\\/UseMaui>/i.test(content);\n const useWpf = /<UseWPF>\\s*true\\s*<\\/UseWPF>/i.test(content);\n const useWindowsForms = /<UseWindowsForms>\\s*true\\s*<\\/UseWindowsForms>/i.test(content);\n\n const packages = new Set<string>();\n for (const m of content.matchAll(/<PackageReference\\b[^>]*\\bInclude\\s*=\\s*\"([^\"]+)\"/gi)) {\n packages.add(m[1].toLowerCase());\n }\n // Versionless CPM still uses Include=\n for (const m of content.matchAll(/<PackageReference\\s+Include\\s*=\\s*\"([^\"]+)\"/gi)) {\n packages.add(m[1].toLowerCase());\n }\n\n const frameworkRefs = new Set<string>();\n for (const m of content.matchAll(/<FrameworkReference\\b[^>]*\\bInclude\\s*=\\s*\"([^\"]+)\"/gi)) {\n frameworkRefs.add(m[1].toLowerCase());\n }\n\n return {\n sdk,\n outputType,\n targetFramework,\n isTestProject,\n useMaui,\n useWpf,\n useWindowsForms,\n packages,\n frameworkRefs,\n };\n}\n\nfunction hasPackage(pkgs: Set<string>, id: string): boolean {\n const n = id.toLowerCase();\n if (pkgs.has(n)) {return true;}\n // Subpath-ish: ModelContextProtocol.AspNetCore when looking for ModelContextProtocol\n for (const p of pkgs) {\n if (p === n || p.startsWith(`${n}.`)) {return true;}\n }\n return false;\n}\n\nfunction findPackageLabel(pkgs: Set<string>, entries: Array<[string, string]>): [string, string] | undefined {\n let best: [string, string] | undefined;\n for (const [id, label] of entries) {\n if (!hasPackage(pkgs, id)) {continue;}\n if (!best || id.length > best[0].length) {best = [id, label];}\n }\n return best;\n}\n\nfunction findMcpPackage(pkgs: Set<string>): string | undefined {\n let best: string | undefined;\n for (const id of MCP_PACKAGES) {\n if (!hasPackage(pkgs, id)) {continue;}\n if (!best || id.length > best.length) {best = id;}\n }\n // Also: any package starting with modelcontextprotocol\n for (const p of pkgs) {\n if (p === 'modelcontextprotocol' || p.startsWith('modelcontextprotocol.')) {\n if (!best || p.length > best.length) {best = p;}\n }\n }\n return best;\n}\n\nfunction matchSpecializedSdk(sdk: string): [string, string, string] | undefined {\n const s = sdk.toLowerCase();\n if (!s) {return undefined;}\n // Longest specialized match (Web before bare if ever needed)\n let best: [string, string, string] | undefined;\n for (const row of SPECIALIZED) {\n const name = row[0].toLowerCase();\n if (s === name || s.startsWith(`${name}/`)) {\n if (!best || name.length > best[0].length) {best = row;}\n }\n }\n return best;\n}\n\nfunction isExe(outputType: string): boolean {\n const o = outputType.toLowerCase();\n return o === 'exe' || o === 'winexe';\n}\n\n/** Priority rank for multi-csproj roots — lower wins. */\nfunction rank(appType: CsharpAppType, framework: string): number {\n if (appType === 'mcp') {return 0;}\n if (appType === 'mobile') {return 1;}\n if (appType === 'backend') {return 2;}\n if (appType === 'cli') {return 3;}\n if (framework && framework !== '') {return 4;} // test-labelled library etc.\n return 5;\n}\n\n/** Classify a single parsed csproj. */\nexport function classifyCsproj(\n parsed: ParsedCsproj,\n projectFileName: string,\n): Omit<CsharpProject, 'projectName'> & { projectName: string } {\n const name = projectFileName.replace(/\\.csproj$/i, '');\n const { sdk, packages, frameworkRefs, outputType } = parsed;\n\n let appType: CsharpAppType;\n let framework = '';\n let found: string;\n\n const mcpPkg = findMcpPackage(packages);\n const specialized = matchSpecializedSdk(sdk);\n const testPkg = findPackageLabel(packages, TEST_PACKAGES);\n const cliPkg = findPackageLabel(packages, CLI_PACKAGES);\n const hasGrpcServer = GRPC_SERVER.some(g => hasPackage(packages, g));\n const hasAspNetRef = frameworkRefs.has('microsoft.aspnetcore.app');\n\n // Priority: MCP → test → maui/desktop → specialized Sdk → AspNet FrameworkRef host → CLI → console Exe → library\n // .csproj alone (base Sdk, no signals) is never web/backend.\n if (mcpPkg) {\n appType = 'mcp';\n framework = 'MCP';\n found = `${projectFileName} + ${mcpPkg} (C# MCP server)`;\n } else if (parsed.isTestProject || specialized?.[1] === 'test' || testPkg) {\n appType = 'library';\n framework = testPkg?.[1] || (specialized?.[1] === 'test' ? specialized[2] : 'Test');\n found = `${projectFileName} + test (${framework})`;\n } else if (parsed.useMaui) {\n appType = 'mobile';\n framework = 'MAUI';\n found = `${projectFileName} + UseMaui (MAUI)`;\n } else if (parsed.useWpf || parsed.useWindowsForms) {\n appType = 'backend'; // desktop host — nearest durable type for agents\n framework = parsed.useWpf && parsed.useWindowsForms\n ? 'WPF+WinForms'\n : parsed.useWpf\n ? 'WPF'\n : 'Windows Forms';\n found = `${projectFileName} + ${framework}`;\n } else if (specialized?.[1] === 'web') {\n appType = 'backend';\n framework = hasGrpcServer ? 'gRPC' : specialized[2];\n found = `${projectFileName} + Sdk=${specialized[0]}${hasGrpcServer ? ' + Grpc.AspNetCore' : ''} (ASP.NET Core)`;\n } else if (specialized?.[1] === 'worker') {\n appType = 'backend';\n framework = specialized[2];\n found = `${projectFileName} + Sdk=${specialized[0]} (Worker)`;\n } else if (specialized?.[1] === 'blazor-wasm') {\n appType = 'backend';\n framework = specialized[2];\n found = `${projectFileName} + Sdk=${specialized[0]} (Blazor WASM)`;\n } else if (specialized?.[1] === 'aspire') {\n appType = 'backend';\n framework = specialized[2];\n found = `${projectFileName} + Sdk=${specialized[0]} (Aspire)`;\n } else if (specialized?.[1] === 'razor-lib') {\n appType = 'library';\n framework = specialized[2];\n found = `${projectFileName} + Sdk=${specialized[0]} (Razor class library)`;\n } else if (hasAspNetRef && isExe(outputType)) {\n // Non-Web Sdk host that still pulls ASP.NET shared framework\n appType = 'backend';\n framework = 'ASP.NET Core';\n found = `${projectFileName} + FrameworkReference Microsoft.AspNetCore.App (host)`;\n } else if (hasAspNetRef && !isExe(outputType)) {\n appType = 'library';\n framework = 'ASP.NET Core';\n found = `${projectFileName} + FrameworkReference Microsoft.AspNetCore.App (web library)`;\n } else if (cliPkg && (isExe(outputType) || !outputType)) {\n // CLI packages often on Exe; if OutputType omitted but CLI pkg present, still CLI\n appType = 'cli';\n framework = cliPkg[1];\n found = `${projectFileName} + ${cliPkg[0]} (C# CLI)`;\n } else if (isExe(outputType)) {\n appType = 'cli';\n found = `${projectFileName} + OutputType=Exe (C# console)`;\n } else {\n appType = 'library';\n const sdkNote = sdk ? ` Sdk=${sdk}` : '';\n found = `${projectFileName}${sdkNote} (C# class library)`.replace(' Sdk=Microsoft.NET.Sdk', '');\n if (!sdk || sdk.toLowerCase() === BASE_SDK || sdk.toLowerCase().startsWith(`${BASE_SDK}/`)) {\n found = `${projectFileName} (C# class library)`;\n }\n }\n\n return {\n appType,\n projectName: name,\n targetFramework: parsed.targetFramework,\n sdk: sdk || 'Microsoft.NET.Sdk',\n framework,\n found,\n };\n}\n\n/** List root-level .csproj filenames in a directory. */\nexport function listRootCsprojs(dir: string): string[] {\n if (!existsSync(dir)) {return [];}\n try {\n return readdirSync(dir).filter(f => f.toLowerCase().endsWith('.csproj')).sort();\n } catch {\n return [];\n }\n}\n\n/**\n * Classify a C# project directory from root-level .csproj file(s).\n * Multiple projects: pick highest-priority classification (MCP > mobile > backend > cli > library).\n * Returns null if no .csproj at this directory level.\n */\nexport function detectCsharpProject(dir: string): CsharpProject | null {\n const files = listRootCsprojs(dir);\n if (files.length === 0) {return null;}\n\n let best: CsharpProject | null = null;\n let bestRank = 999;\n\n for (const file of files) {\n const path = join(dir, file);\n let content: string;\n try {\n content = readFileSync(path, 'utf-8');\n } catch {\n continue;\n }\n const parsed = parseCsproj(content);\n const classified = classifyCsproj(parsed, file);\n const r = rank(classified.appType, classified.framework);\n if (!best || r < bestRank) {\n best = classified;\n bestRank = r;\n }\n }\n\n return best;\n}\n",
97
99
  "import { existsSync, readFileSync, readdirSync, statSync } from 'fs';\nimport { join } from 'path';\nimport spec from './jvm-detection.json';\n\n/**\n * JVM (Java / Kotlin) detection — CONTENT-AWARE pom / gradle classification.\n *\n * Kill line: pom / gradle alone ≠ type.\n * One brand: JVM. Android + KMP are facets, not a second \"Kotlin Edition\".\n *\n * Signal graph: settings → modules → plugins/parents/packaging →\n * version catalogs (libs.versions.toml) → deps/starters.\n *\n * Same composition as go.ts / csharp.ts: knowledge in jvm-detection.json.\n */\n\nexport type JvmAppType = 'mcp' | 'backend' | 'cli' | 'library' | 'mobile';\n\nexport interface JvmProject {\n appType: JvmAppType;\n /** Primary framework label (Spring Boot / Quarkus / …) or ''. */\n framework: string;\n buildTool: 'maven' | 'gradle';\n /** Best-effort language signal for slots. */\n mainLanguage: 'Java' | 'Kotlin' | 'Java/Kotlin';\n /** Facets: android · multiplatform (not product brands). */\n facets: string[];\n /** Glass Hood rationale for .faf `# found:`. */\n found: string;\n}\n\ninterface Catalog {\n plugins: Map<string, string>; // alias → plugin id\n libraries: Map<string, string>; // alias → group:artifact\n}\n\ninterface ModuleSignals {\n path: string;\n plugins: Set<string>;\n artifacts: Set<string>; // group:artifact lowercase\n packaging: string;\n parents: Set<string>; // group:artifact\n hasMainClass: boolean;\n hasApplicationPlugin: boolean;\n sourceHints: Set<string>; // androidMain, commonMain, jvmMain, …\n kotlinSources: boolean;\n javaSources: boolean;\n buildTool: 'maven' | 'gradle';\n}\n\nconst MCP_ARTIFACTS = (spec.mcpArtifacts as string[]).map(a => a.toLowerCase());\nconst WEB_PLUGINS = (spec.webPlugins as Array<[string, string]>).map(\n ([id, label]) => [id.toLowerCase(), label] as [string, string],\n);\nconst WEB_PARENTS = (spec.webParents as Array<[string, string]>).map(\n ([id, label]) => [id.toLowerCase(), label] as [string, string],\n);\nconst WEB_ARTIFACTS = (spec.webArtifacts as Array<[string, string]>).map(\n ([id, label]) => [id.toLowerCase(), label] as [string, string],\n);\nconst ANDROID_PLUGINS = (spec.androidPlugins as string[]).map(p => p.toLowerCase());\nconst KMP_PLUGINS = (spec.kmpPlugins as string[]).map(p => p.toLowerCase());\nconst JVM_KOTLIN_PLUGINS = (spec.jvmKotlinPlugins as string[]).map(p => p.toLowerCase());\nconst CLI_PLUGINS = (spec.cliPlugins as Array<[string, string]>).map(\n ([id, label]) => [id.toLowerCase(), label] as [string, string],\n);\nconst CLI_ARTIFACTS = (spec.cliArtifacts as Array<[string, string]>).map(\n ([id, label]) => [id.toLowerCase(), label] as [string, string],\n);\nconst LIBRARY_PLUGINS = (spec.libraryPlugins as string[]).map(p => p.toLowerCase());\n\nconst JVM_ROOT_MARKERS = [\n 'pom.xml',\n 'build.gradle',\n 'build.gradle.kts',\n 'settings.gradle',\n 'settings.gradle.kts',\n];\n\n/** True if directory looks like a JVM project root (or multi-module root). */\nexport function isJvmRoot(dir: string): boolean {\n return JVM_ROOT_MARKERS.some(f => existsSync(join(dir, f)));\n}\n\nfunction readText(path: string): string | null {\n try {\n return readFileSync(path, 'utf-8');\n } catch {\n return null;\n }\n}\n\n/** Minimal TOML-ish parse for gradle/libs.versions.toml plugins + libraries. */\nexport function parseVersionCatalog(content: string): Catalog {\n const plugins = new Map<string, string>();\n const libraries = new Map<string, string>();\n let section = '';\n\n for (const raw of content.split('\\n')) {\n const line = raw.replace(/#.*$/, '').trim();\n if (!line) {continue;}\n const sec = line.match(/^\\[([^\\]]+)\\]$/);\n if (sec) {\n section = sec[1].trim().toLowerCase();\n continue;\n }\n\n // alias = { id = \"org.springframework.boot\", ... }\n const objId = line.match(/^([A-Za-z0-9_.-]+)\\s*=\\s*\\{[^}]*\\bid\\s*=\\s*\"([^\"]+)\"/);\n if (objId && (section === 'plugins' || section.endsWith('.plugins'))) {\n plugins.set(objId[1].replace(/-/g, '.').toLowerCase(), objId[2].toLowerCase());\n plugins.set(objId[1].toLowerCase(), objId[2].toLowerCase());\n continue;\n }\n // alias = { module = \"g:a\", ... } or group + name\n const objMod = line.match(/^([A-Za-z0-9_.-]+)\\s*=\\s*\\{[^}]*\\bmodule\\s*=\\s*\"([^\"]+)\"/);\n if (objMod && (section === 'libraries' || section.endsWith('.libraries'))) {\n const key = objMod[1].toLowerCase();\n libraries.set(key, objMod[2].toLowerCase());\n libraries.set(key.replace(/-/g, '.'), objMod[2].toLowerCase());\n continue;\n }\n const objGroup = line.match(\n /^([A-Za-z0-9_.-]+)\\s*=\\s*\\{[^}]*\\bgroup\\s*=\\s*\"([^\"]+)\"[^}]*\\bname\\s*=\\s*\"([^\"]+)\"/,\n );\n if (objGroup && (section === 'libraries' || section.endsWith('.libraries'))) {\n const ga = `${objGroup[2]}:${objGroup[3]}`.toLowerCase();\n const key = objGroup[1].toLowerCase();\n libraries.set(key, ga);\n libraries.set(key.replace(/-/g, '.'), ga);\n continue;\n }\n // alias = \"g:a:v\" or \"plugin.id:version\"\n const plain = line.match(/^([A-Za-z0-9_.-]+)\\s*=\\s*\"([^\"]+)\"/);\n if (plain) {\n const key = plain[1].toLowerCase();\n const val = plain[2];\n if (section === 'plugins' || section.endsWith('.plugins')) {\n const id = val.split(':')[0].toLowerCase();\n plugins.set(key, id);\n plugins.set(key.replace(/-/g, '.'), id);\n } else if (section === 'libraries' || section.endsWith('.libraries')) {\n const parts = val.split(':');\n if (parts.length >= 2) {\n const ga = `${parts[0]}:${parts[1]}`.toLowerCase();\n libraries.set(key, ga);\n libraries.set(key.replace(/-/g, '.'), ga);\n }\n }\n }\n }\n return { plugins, libraries };\n}\n\nfunction loadCatalog(root: string): Catalog {\n const path = join(root, 'gradle', 'libs.versions.toml');\n if (!existsSync(path)) {return { plugins: new Map(), libraries: new Map() };}\n const body = readText(path);\n if (!body) {return { plugins: new Map(), libraries: new Map() };}\n return parseVersionCatalog(body);\n}\n\n/** Parse settings.gradle(.kts) include lines → relative module paths. */\nexport function parseSettingsIncludes(content: string): string[] {\n const mods: string[] = [];\n // include(\"app\", \"lib\") or include 'app', 'lib' or include(\":app\")\n for (const m of content.matchAll(/include\\s*\\(\\s*([^)]+)\\)/g)) {\n for (const part of m[1].split(',')) {\n const name = part.replace(/['\":\\s]/g, '').replace(/^:/, '');\n if (name) {mods.push(name.replace(/:/g, '/'));}\n }\n }\n for (const m of content.matchAll(/include\\s+((?:['\"][^'\"]+['\"]\\s*,?\\s*)+)/g)) {\n for (const part of m[1].split(',')) {\n const name = part.replace(/['\":\\s]/g, '').replace(/^:/, '');\n if (name) {mods.push(name.replace(/:/g, '/'));}\n }\n }\n // project(\":app\").projectDir = file(\"applications/app\")\n for (const m of content.matchAll(\n /project\\s*\\(\\s*[\"']:([^\"']+)[\"']\\s*\\)\\s*\\.projectDir\\s*=\\s*file\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g,\n )) {\n mods.push(m[2].replace(/^\\.\\//, ''));\n }\n return [...new Set(mods)];\n}\n\nfunction extractGradlePlugins(content: string, catalog: Catalog): Set<string> {\n const plugins = new Set<string>();\n // id(\"org.springframework.boot\") version \"…\"\n for (const m of content.matchAll(/\\bid\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g)) {\n plugins.add(m[1].toLowerCase());\n }\n // id 'org.springframework.boot'\n for (const m of content.matchAll(/\\bid\\s+['\"]([^'\"]+)['\"]/g)) {\n plugins.add(m[1].toLowerCase());\n }\n // plugins { application · java · `java-library` } bare / backtick ids\n for (const block of content.matchAll(/plugins\\s*\\{([\\s\\S]*?)\\}/g)) {\n for (const raw of block[1].split(/[\\n;]/)) {\n const line = raw.replace(/\\/\\/.*$/, '').trim();\n if (!line || line.startsWith('id') || line.startsWith('kotlin') || line.startsWith('alias')) {\n continue;\n }\n const bare = line.match(/^`([a-zA-Z0-9.-]+)`$/) || line.match(/^([a-zA-Z][a-zA-Z0-9.-]*)$/);\n if (bare) {plugins.add(bare[1].toLowerCase());}\n }\n }\n // kotlin(\"jvm\") / kotlin(\"multiplatform\")\n for (const m of content.matchAll(/\\bkotlin\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g)) {\n const k = m[1].toLowerCase();\n if (k === 'jvm') {plugins.add('org.jetbrains.kotlin.jvm');}\n else if (k === 'multiplatform') {plugins.add('org.jetbrains.kotlin.multiplatform');}\n else if (k === 'android') {plugins.add('org.jetbrains.kotlin.android');}\n else {plugins.add(`org.jetbrains.kotlin.${k}`);}\n }\n // alias(libs.plugins.spring.boot) or libs.plugins.spring.boot\n for (const m of content.matchAll(/libs\\.plugins\\.([A-Za-z0-9_.]+)/g)) {\n const alias = m[1].toLowerCase();\n const resolved =\n catalog.plugins.get(alias) ||\n catalog.plugins.get(alias.replace(/\\./g, '-')) ||\n catalog.plugins.get(alias.replace(/-/g, '.'));\n if (resolved) {plugins.add(resolved);}\n else {\n // Heuristic: spring.boot → often org.springframework.boot\n if (alias.includes('spring') && alias.includes('boot')) {\n plugins.add('org.springframework.boot');\n }\n }\n }\n // apply plugin: 'java'\n for (const m of content.matchAll(/apply\\s+plugin\\s*:\\s*['\"]([^'\"]+)['\"]/g)) {\n plugins.add(m[1].toLowerCase());\n }\n return plugins;\n}\n\nfunction extractGradleArtifacts(content: string, catalog: Catalog): Set<string> {\n const arts = new Set<string>();\n // \"g:a:v\" or 'g:a:v'\n for (const m of content.matchAll(/[\"']([A-Za-z0-9_.-]+:[A-Za-z0-9_.-]+)(?::[^\"']+)?[\"']/g)) {\n arts.add(m[1].toLowerCase());\n }\n // libs.spring.boot.starter.web → alias spring-boot-starter-web / spring.boot.starter.web\n for (const m of content.matchAll(/libs\\.([A-Za-z0-9_.]+)/g)) {\n const alias = m[1].toLowerCase();\n if (alias.startsWith('plugins.')) {continue;}\n const keys = [\n alias,\n alias.replace(/\\./g, '-'),\n alias.replace(/-/g, '.'),\n ];\n for (const k of keys) {\n const ga = catalog.libraries.get(k);\n if (ga) {\n arts.add(ga.includes(':') ? ga.split(':').slice(0, 2).join(':') : ga);\n break;\n }\n }\n }\n return arts;\n}\n\nfunction extractMavenSignals(content: string): {\n packaging: string;\n parents: Set<string>;\n artifacts: Set<string>;\n modules: string[];\n} {\n const packaging =\n (content.match(/<packaging>\\s*([^<]+?)\\s*<\\/packaging>/i)?.[1] || 'jar').trim().toLowerCase();\n const parents = new Set<string>();\n const parentBlock = content.match(/<parent>([\\s\\S]*?)<\\/parent>/i);\n if (parentBlock) {\n const g = parentBlock[1].match(/<groupId>\\s*([^<]+?)\\s*<\\/groupId>/i)?.[1]?.trim();\n const a = parentBlock[1].match(/<artifactId>\\s*([^<]+?)\\s*<\\/artifactId>/i)?.[1]?.trim();\n if (g && a) {parents.add(`${g}:${a}`.toLowerCase());}\n }\n const artifacts = new Set<string>();\n for (const m of content.matchAll(/<dependency>([\\s\\S]*?)<\\/dependency>/gi)) {\n const g = m[1].match(/<groupId>\\s*([^<]+?)\\s*<\\/groupId>/i)?.[1]?.trim();\n const a = m[1].match(/<artifactId>\\s*([^<]+?)\\s*<\\/artifactId>/i)?.[1]?.trim();\n if (g && a) {artifacts.add(`${g}:${a}`.toLowerCase());}\n }\n const modules: string[] = [];\n for (const m of content.matchAll(/<module>\\s*([^<]+?)\\s*<\\/module>/gi)) {\n modules.push(m[1].trim());\n }\n return { packaging, parents, artifacts, modules };\n}\n\nfunction hasPlugin(plugins: Set<string>, id: string): boolean {\n const n = id.toLowerCase();\n if (plugins.has(n)) {return true;}\n for (const p of plugins) {\n if (p === n || p.endsWith(`.${n}`) || p === n.replace(/^org\\.gradle\\./, '')) {return true;}\n }\n return false;\n}\n\nfunction findLabeled(\n set: Set<string>,\n entries: Array<[string, string]>,\n mode: 'plugin' | 'artifact' | 'parent',\n): [string, string] | undefined {\n let best: [string, string] | undefined;\n for (const [id, label] of entries) {\n let hit = false;\n if (mode === 'plugin') {hit = hasPlugin(set, id);}\n else {\n hit = set.has(id) || [...set].some(a => a === id || a.startsWith(`${id}:`) || a.startsWith(`${id}.`));\n // artifact prefix match group:artifact\n if (!hit && mode === 'artifact') {\n hit = [...set].some(a => a === id || a.startsWith(`${id}`));\n }\n }\n if (!hit) {continue;}\n if (!best || id.length > best[0].length) {best = [id, label];}\n }\n return best;\n}\n\nfunction hasMcp(artifacts: Set<string>): string | undefined {\n let best: string | undefined;\n for (const id of MCP_ARTIFACTS) {\n for (const a of artifacts) {\n if (a === id || a.startsWith(`${id}:`) || a.startsWith(id.replace(/:mcp$/, ':'))) {\n if (!best || id.length > best.length) {best = id;}\n }\n // any io.modelcontextprotocol\n if (a.startsWith('io.modelcontextprotocol') || a.includes('spring-ai-starter-mcp') || a.includes('spring-ai-mcp')) {\n if (!best || a.length > best.length) {best = a;}\n }\n }\n }\n return best;\n}\n\nfunction probeSources(dir: string): { kotlin: boolean; java: boolean; hints: Set<string> } {\n const hints = new Set<string>();\n let kotlin = false;\n let java = false;\n const roots = [\n join(dir, 'src'),\n join(dir, 'src', 'main'),\n ];\n const walk = (p: string, depth: number): void => {\n if (depth > 4 || !existsSync(p)) {return;}\n let entries: string[];\n try {\n entries = readdirSync(p);\n } catch {\n return;\n }\n for (const name of entries) {\n if (name === 'androidMain' || name === 'commonMain' || name === 'jvmMain' || name === 'iosMain') {\n hints.add(name);\n }\n const full = join(p, name);\n try {\n const st = statSync(full);\n if (st.isDirectory()) {walk(full, depth + 1);}\n else if (name.endsWith('.kt') || name.endsWith('.kts')) {kotlin = true;}\n else if (name.endsWith('.java')) {java = true;}\n } catch { /* skip */ }\n }\n };\n for (const r of roots) {walk(r, 0);}\n // also check kotlin dsl only at module root as language signal is weak — skip\n return { kotlin, java, hints };\n}\n\nfunction classifyModule(sig: ModuleSignals): Omit<JvmProject, 'buildTool' | 'mainLanguage'> & {\n buildTool: 'maven' | 'gradle';\n mainLanguage: 'Java' | 'Kotlin' | 'Java/Kotlin';\n} {\n const facets: string[] = [];\n const plugins = sig.plugins;\n const arts = sig.artifacts;\n\n const isKmp = KMP_PLUGINS.some(p => hasPlugin(plugins, p)) || sig.sourceHints.has('commonMain');\n const isAndroidApp = hasPlugin(plugins, 'com.android.application');\n const isAndroidLib =\n hasPlugin(plugins, 'com.android.library') ||\n hasPlugin(plugins, 'com.android.kotlin.multiplatform.library');\n if (isAndroidApp || isAndroidLib) {facets.push('android');}\n if (isKmp) {facets.push('multiplatform');}\n\n const mcp = hasMcp(arts);\n const webPlug = findLabeled(plugins, WEB_PLUGINS, 'plugin');\n const webParent = findLabeled(sig.parents, WEB_PARENTS, 'parent');\n const webArt = findLabeled(arts, WEB_ARTIFACTS, 'artifact');\n const cliPlug = findLabeled(plugins, CLI_PLUGINS, 'plugin');\n const cliArt = findLabeled(arts, CLI_ARTIFACTS, 'artifact');\n const isLibPlugin = LIBRARY_PLUGINS.some(p => hasPlugin(plugins, p));\n const isAggregator = sig.packaging === 'pom';\n\n let appType: JvmAppType;\n let framework = '';\n let found: string;\n\n // Priority: KMP facet noted always; Android app → mobile; MCP → mcp; web → backend; CLI → cli; else library\n if (isAndroidApp) {\n appType = 'mobile';\n framework = isKmp ? 'Android+KMP' : 'Android';\n found = `${sig.path || 'root'} + com.android.application (${framework})`;\n } else if (mcp) {\n appType = 'mcp';\n framework = 'MCP';\n facets.push('mcp');\n found = `${sig.path || 'root'} + ${mcp} (JVM MCP server)`;\n } else if (webPlug || webParent || webArt) {\n appType = 'backend';\n framework = webPlug?.[1] || webParent?.[1] || webArt?.[1] || 'JVM';\n const via = webPlug?.[0] || webParent?.[0] || webArt?.[0] || 'web';\n found = `${sig.path || 'root'} + ${via} (JVM backend)`;\n } else if (isKmp && !isAndroidLib) {\n // Shared KMP without android application — library with multiplatform facet\n appType = 'library';\n framework = 'Kotlin Multiplatform';\n found = `${sig.path || 'root'} + kotlin multiplatform (KMP library)`;\n } else if (isAndroidLib) {\n appType = 'library';\n framework = isKmp ? 'Android+KMP' : 'Android';\n found = `${sig.path || 'root'} + android library (${framework})`;\n } else if (cliArt || (sig.hasApplicationPlugin && (sig.hasMainClass || cliPlug)) || (cliPlug && sig.hasMainClass)) {\n appType = 'cli';\n framework = cliArt?.[1] || 'application';\n found = cliArt\n ? `${sig.path || 'root'} + ${cliArt[0]} (JVM CLI)`\n : `${sig.path || 'root'} + application plugin (JVM CLI)`;\n } else if (sig.hasApplicationPlugin && !isLibPlugin) {\n appType = 'cli';\n framework = 'application';\n found = `${sig.path || 'root'} + application plugin (JVM CLI)`;\n } else if (isAggregator) {\n appType = 'library';\n found = `${sig.path || 'root'} + packaging=pom (Maven aggregator/BOM)`;\n } else {\n appType = 'library';\n const lang = sig.kotlinSources && !sig.javaSources ? 'Kotlin' : 'JVM';\n found = `${sig.path || 'root'} (${lang} library)`;\n if (isLibPlugin) {found = `${sig.path || 'root'} + java-library (JVM library)`;}\n }\n\n let mainLanguage: 'Java' | 'Kotlin' | 'Java/Kotlin' = 'Java';\n if (sig.kotlinSources && sig.javaSources) {mainLanguage = 'Java/Kotlin';}\n else if (sig.kotlinSources || JVM_KOTLIN_PLUGINS.some(p => hasPlugin(plugins, p)) || isKmp) {\n mainLanguage = 'Kotlin';\n }\n\n // Dedupe facets\n const uniqFacets = [...new Set(facets)];\n\n return {\n appType,\n framework,\n facets: uniqFacets,\n found,\n buildTool: sig.buildTool,\n mainLanguage,\n };\n}\n\nfunction rank(appType: JvmAppType, facets: string[]): number {\n if (appType === 'mcp') {return 0;}\n if (appType === 'mobile') {return 1;}\n if (facets.includes('multiplatform') && appType === 'backend') {return 2;}\n if (appType === 'backend') {return 3;}\n if (appType === 'cli') {return 4;}\n if (facets.includes('multiplatform')) {return 5;}\n if (facets.includes('android')) {return 6;}\n return 7;\n}\n\nfunction collectGradleModule(root: string, rel: string, catalog: Catalog): ModuleSignals | null {\n const dir = rel ? join(root, rel) : root;\n const kts = join(dir, 'build.gradle.kts');\n const groovy = join(dir, 'build.gradle');\n const path = existsSync(kts) ? kts : existsSync(groovy) ? groovy : null;\n if (!path) {return null;}\n const content = readText(path);\n if (!content) {return null;}\n const plugins = extractGradlePlugins(content, catalog);\n const artifacts = extractGradleArtifacts(content, catalog);\n const sources = probeSources(dir);\n const hasMainClass =\n /mainClass\\s*[.=]/.test(content) ||\n /mainClassName\\s*=/.test(content) ||\n /Main-Class/.test(content);\n const hasApplicationPlugin =\n hasPlugin(plugins, 'application') ||\n hasPlugin(plugins, 'org.gradle.application');\n\n return {\n path: rel || 'build.gradle',\n plugins,\n artifacts,\n packaging: 'jar',\n parents: new Set(),\n hasMainClass,\n hasApplicationPlugin,\n sourceHints: sources.hints,\n kotlinSources: sources.kotlin || path.endsWith('.kts'),\n javaSources: sources.java,\n buildTool: 'gradle',\n };\n}\n\nfunction collectMavenModule(root: string, rel: string): ModuleSignals | null {\n const dir = rel ? join(root, rel) : root;\n const pomPath = join(dir, 'pom.xml');\n if (!existsSync(pomPath)) {return null;}\n const content = readText(pomPath);\n if (!content) {return null;}\n const { packaging, parents, artifacts } = extractMavenSignals(content);\n const sources = probeSources(dir);\n return {\n path: rel ? `${rel}/pom.xml` : 'pom.xml',\n plugins: new Set(),\n artifacts,\n packaging,\n parents,\n hasMainClass: /<mainClass>/.test(content),\n hasApplicationPlugin: false,\n sourceHints: sources.hints,\n kotlinSources: sources.kotlin,\n javaSources: sources.java,\n buildTool: 'maven',\n };\n}\n\n/**\n * Classify a JVM project directory (Maven and/or Gradle, multi-module aware).\n * Returns null if no JVM markers at this directory.\n */\nexport function detectJvmProject(dir: string): JvmProject | null {\n if (!isJvmRoot(dir)) {return null;}\n\n const catalog = loadCatalog(dir);\n const modules: ModuleSignals[] = [];\n\n // Gradle settings → includes\n let settingsBody: string | null = null;\n for (const s of ['settings.gradle.kts', 'settings.gradle']) {\n const p = join(dir, s);\n if (existsSync(p)) {\n settingsBody = readText(p);\n break;\n }\n }\n const includes = settingsBody ? parseSettingsIncludes(settingsBody) : [];\n\n // Root gradle module\n const rootGradle = collectGradleModule(dir, '', catalog);\n if (rootGradle) {modules.push(rootGradle);}\n\n for (const inc of includes) {\n const m = collectGradleModule(dir, inc, catalog);\n if (m) {modules.push(m);}\n }\n\n // Maven root + modules\n const rootPom = collectMavenModule(dir, '');\n if (rootPom) {\n modules.push(rootPom);\n const pomContent = readText(join(dir, 'pom.xml'));\n if (pomContent) {\n const { modules: mavMods } = extractMavenSignals(pomContent);\n for (const mm of mavMods) {\n const m = collectMavenModule(dir, mm);\n if (m) {modules.push(m);}\n }\n }\n }\n\n // Settings-only / empty root: still JVM if settings exist\n if (modules.length === 0 && settingsBody) {\n return {\n appType: 'library',\n framework: '',\n buildTool: 'gradle',\n mainLanguage: 'Java/Kotlin',\n facets: [],\n found: 'settings.gradle (Gradle multi-project root)',\n };\n }\n\n if (modules.length === 0) {return null;}\n\n let best: JvmProject | null = null;\n let bestRank = 999;\n for (const mod of modules) {\n const c = classifyModule(mod);\n const r = rank(c.appType, c.facets);\n if (!best || r < bestRank) {\n best = {\n appType: c.appType,\n framework: c.framework,\n buildTool: c.buildTool,\n mainLanguage: c.mainLanguage,\n facets: c.facets,\n found: c.found,\n };\n bestRank = r;\n }\n }\n\n // Multi-module: if root is aggregator library but a child is better, we already picked child.\n // Enrich found with multi-module note when includes > 0 and best is not root-only\n if (best && includes.length > 0 && !best.found.includes('multi-project')) {\n // leave found as module-specific signal — Glass Hood prefers the decisive signal\n }\n\n return best;\n}\n",
98
100
  "import { existsSync, readFileSync, readdirSync, statSync } from 'fs';\nimport { join } from 'path';\nimport spec from './ruby-detection.json';\n\n/**\n * Ruby detection — CONTENT-AWARE Gemfile / gemspec classification.\n *\n * Kill line: Gemfile alone ≠ Rails.\n * Bundler backs libraries, Rails apps, Sinatra/Roda/Grape/Hanami, CLIs, and MCP\n * servers. We read gem names (+ light layout), then branch.\n *\n * Same composition as go.ts / jvm.ts: knowledge in ruby-detection.json.\n */\n\nexport type RubyAppType = 'mcp' | 'backend' | 'cli' | 'library';\n\nexport interface RubyProject {\n appType: RubyAppType;\n /** Primary framework label (Rails / Sinatra / …) or ''. */\n framework: string;\n /** package manager signal */\n packageManager: 'bundler' | 'rubygems';\n /** Glass Hood rationale for .faf `# found:`. */\n found: string;\n}\n\nconst MCP_GEMS = (spec.mcpGems as string[]).map(g => g.toLowerCase());\nconst WEB_GEMS = (spec.webGems as Array<[string, string]>).map(\n ([g, label]) => [g.toLowerCase(), label] as [string, string],\n);\nconst CLI_GEMS = (spec.cliGems as Array<[string, string]>).map(\n ([g, label]) => [g.toLowerCase(), label] as [string, string],\n);\nconst RAILS_LAYOUT = spec.railsLayoutFiles as string[];\n\n/** True if directory looks like a Ruby project root. */\nexport function isRubyRoot(dir: string): boolean {\n return (\n existsSync(join(dir, 'Gemfile')) ||\n existsSync(join(dir, 'gems.rb')) ||\n hasGemspec(dir)\n );\n}\n\nfunction hasGemspec(dir: string): boolean {\n try {\n return readdirSync(dir).some(f => f.endsWith('.gemspec'));\n } catch {\n return false;\n }\n}\n\nfunction readText(path: string): string | null {\n try {\n return readFileSync(path, 'utf-8');\n } catch {\n return null;\n }\n}\n\n/**\n * Extract gem names from a Gemfile / gems.rb (static — does NOT execute Ruby).\n * Handles: gem 'x', gem \"x\", gem :x (rare), gem \"x\", \"1.0\"\n */\nexport function parseGemfileGems(content: string): Set<string> {\n const gems = new Set<string>();\n for (const raw of content.split('\\n')) {\n // Strip comments\n const line = raw.replace(/#.*$/, '').trim();\n if (!line) {continue;}\n // gem 'name' or gem \"name\" optionally followed by comma/version\n const m = line.match(/^\\s*gem\\s+['\"]([^'\"]+)['\"]/i)\n || line.match(/^\\s*gem\\s+:([A-Za-z0-9_.-]+)/i);\n if (m) {gems.add(m[1].toLowerCase());}\n }\n return gems;\n}\n\n/**\n * Extract gem names from Gemfile.lock SPECS sections (static).\n * Lines like \" rails (7.1.0)\" under GEM specs.\n */\nexport function parseGemfileLockGems(content: string): Set<string> {\n const gems = new Set<string>();\n let inSpecs = false;\n for (const raw of content.split('\\n')) {\n const line = raw.replace(/\\r$/, '');\n if (/^\\s*specs:\\s*$/.test(line)) {\n inSpecs = true;\n continue;\n }\n // Leave specs on blank line at column 0 or new top-level section (no indent)\n if (inSpecs) {\n if (/^[A-Z]/.test(line) || line.startsWith('PLATFORMS') || line.startsWith('DEPENDENCIES')\n || line.startsWith('BUNDLED') || line.startsWith('RUBY VERSION') || line.startsWith('CHECKSUMS')) {\n inSpecs = false;\n continue;\n }\n // \" gemname (1.2.3)\" — 4 spaces typical\n const m = line.match(/^\\s{2,}([a-zA-Z0-9_.-]+)\\s*\\(/);\n if (m) {gems.add(m[1].toLowerCase());}\n }\n }\n return gems;\n}\n\n/** Gem names from *.gemspec dependency lines (static). */\nexport function parseGemspecGems(content: string): Set<string> {\n const gems = new Set<string>();\n for (const raw of content.split('\\n')) {\n const line = raw.replace(/#.*$/, '');\n // add_dependency \"x\" / add_runtime_dependency 'x' / add_development_dependency\n const m = line.match(/add_(?:runtime_|development_)?dependency\\s*\\(?\\s*['\"]([^'\"]+)['\"]/i);\n if (m) {gems.add(m[1].toLowerCase());}\n }\n return gems;\n}\n\nfunction collectGems(dir: string): { gems: Set<string>; sources: string[] } {\n const gems = new Set<string>();\n const sources: string[] = [];\n\n for (const name of ['Gemfile', 'gems.rb']) {\n const p = join(dir, name);\n const body = readText(p);\n if (body) {\n for (const g of parseGemfileGems(body)) {gems.add(g);}\n sources.push(name);\n }\n }\n\n const lock = readText(join(dir, 'Gemfile.lock')) || readText(join(dir, 'gems.locked'));\n if (lock) {\n for (const g of parseGemfileLockGems(lock)) {gems.add(g);}\n sources.push('Gemfile.lock');\n }\n\n try {\n for (const f of readdirSync(dir)) {\n if (!f.endsWith('.gemspec')) {continue;}\n const body = readText(join(dir, f));\n if (body) {\n for (const g of parseGemspecGems(body)) {gems.add(g);}\n sources.push(f);\n }\n }\n } catch { /* skip */ }\n\n return { gems, sources };\n}\n\nfunction hasGem(gems: Set<string>, name: string): boolean {\n const n = name.toLowerCase();\n if (gems.has(n)) {return true;}\n // rails engines sometimes appear as path gems still named rails\n return false;\n}\n\nfunction findLabeled(\n gems: Set<string>,\n entries: Array<[string, string]>,\n): [string, string] | undefined {\n let best: [string, string] | undefined;\n for (const [id, label] of entries) {\n if (!hasGem(gems, id)) {continue;}\n // Prefer longer / more specific gem names\n if (!best || id.length > best[0].length) {best = [id, label];}\n }\n return best;\n}\n\nfunction findMcp(gems: Set<string>): string | undefined {\n let best: string | undefined;\n for (const id of MCP_GEMS) {\n if (hasGem(gems, id) && (!best || id.length > best.length)) {best = id;}\n }\n return best;\n}\n\nfunction railsLayoutHit(dir: string): string | undefined {\n for (const rel of RAILS_LAYOUT) {\n if (existsSync(join(dir, rel))) {return rel;}\n }\n return undefined;\n}\n\n/** True if gemspec or package marks executables / bin tools. */\nfunction hasCliShape(dir: string, gems: Set<string>): { hit: boolean; why: string } {\n const cli = findLabeled(gems, CLI_GEMS);\n if (cli) {return { hit: true, why: cli[0] };}\n\n try {\n for (const f of readdirSync(dir)) {\n if (!f.endsWith('.gemspec')) {continue;}\n const body = readText(join(dir, f));\n if (body && /executables\\s*=/.test(body) && !/executables\\s*=\\s*\\[\\s*\\]/.test(body)) {\n return { hit: true, why: `${f} executables` };\n }\n }\n } catch { /* skip */ }\n\n const binDir = join(dir, 'bin');\n if (existsSync(binDir)) {\n try {\n const bins = readdirSync(binDir).filter(b => {\n if (b === 'setup' || b === 'console' || b === 'rake') {return false;}\n try {\n return statSync(join(binDir, b)).isFile();\n } catch {\n return false;\n }\n });\n // bin/rails alone is Rails, not CLI product\n const nonRails = bins.filter(b => b !== 'rails');\n if (nonRails.length > 0 && !hasGem(gems, 'rails') && !railsLayoutHit(dir)) {\n return { hit: true, why: `bin/${nonRails[0]}` };\n }\n } catch { /* skip */ }\n }\n\n return { hit: false, why: '' };\n}\n\n/**\n * Classify a Ruby project from Gemfile / lock / gemspec (+ light layout).\n * Returns null if not a Ruby root.\n */\nexport function detectRubyProject(dir: string): RubyProject | null {\n if (!isRubyRoot(dir)) {return null;}\n\n const { gems, sources } = collectGems(dir);\n const srcLabel = sources[0] || 'Gemfile';\n const packageManager: 'bundler' | 'rubygems' =\n sources.some(s => s === 'Gemfile' || s === 'gems.rb' || s.includes('lock'))\n ? 'bundler'\n : 'rubygems';\n\n const mcp = findMcp(gems);\n const web = findLabeled(gems, WEB_GEMS);\n const railsLayout = railsLayoutHit(dir);\n const hasRailsGem = hasGem(gems, 'rails') || hasGem(gems, 'railties');\n const cliShape = hasCliShape(dir, gems);\n const hasConfigRu = existsSync(join(dir, 'config.ru'));\n\n // Rails is NEVER inferred from Gemfile existence alone.\n // rails gem and/or classic layout required.\n const isRails = hasRailsGem || !!railsLayout;\n\n // Strong web gems (not bare rack without config.ru)\n const strongWeb =\n web &&\n web[1] !== 'Rails' &&\n !(web[0] === 'rack' && !hasConfigRu)\n ? web\n : undefined;\n\n let appType: RubyAppType;\n let framework = '';\n let found: string;\n\n // Priority: MCP → Rails → other web → CLI → library\n // Gemfile alone is never backend.\n if (mcp) {\n appType = 'mcp';\n framework = 'MCP';\n found = `${srcLabel} + gem ${mcp} (Ruby MCP)`;\n } else if (isRails) {\n appType = 'backend';\n framework = 'Rails';\n if (hasRailsGem && railsLayout) {\n found = `${srcLabel} + rails + ${railsLayout} (Rails)`;\n } else if (hasRailsGem) {\n found = `${srcLabel} + gem rails (Rails)`;\n } else {\n found = `${railsLayout} (Rails layout)`;\n }\n } else if (strongWeb) {\n appType = 'backend';\n framework = strongWeb[1];\n found = `${srcLabel} + gem ${strongWeb[0]} (Ruby backend)`;\n } else if (cliShape.hit) {\n appType = 'cli';\n framework = findLabeled(gems, CLI_GEMS)?.[1] || '';\n found = `${srcLabel} + ${cliShape.why} (Ruby CLI)`;\n } else {\n appType = 'library';\n found = `${srcLabel} (Ruby library)`;\n }\n\n return { appType, framework, packageManager, found };\n}\n",
101
+ "import { existsSync, readFileSync, readdirSync, statSync } from 'fs';\nimport { join } from 'path';\nimport spec from './swift-detection.json';\n\n/**\n * Swift detection — CONTENT-AWARE Package.swift / Xcode classification.\n *\n * Kill line: Package.swift alone ≠ app.\n * SPM backs libraries, executables (CLI), server apps (Vapor / Hummingbird),\n * MCP servers (official swift-sdk product MCP), and Xcode client apps.\n * Static token scan only — never execute Package.swift / swift build.\n *\n * Same composition as go.ts / ruby.ts: knowledge in swift-detection.json.\n */\n\nexport type SwiftAppType = 'mcp' | 'backend' | 'cli' | 'app' | 'library';\n\nexport interface SwiftProject {\n appType: SwiftAppType;\n /** Primary framework label (Vapor / Hummingbird / MCP / ArgumentParser / …) or ''. */\n framework: string;\n /** spm when Package.swift; xcode when only xcodeproj; both when combined. */\n packageManager: 'spm' | 'xcode' | 'spm+xcode';\n /** Glass Hood rationale for .faf `# found:`. */\n found: string;\n}\n\nconst MCP_URLS = (spec.mcpPackageUrls as string[]).map(u => u.toLowerCase());\nconst MCP_PRODUCTS = (spec.mcpProducts as string[]).map(p => p.toLowerCase());\nconst SERVER_URLS = (spec.serverPackageUrls as Array<[string, string]>).map(\n ([u, label]) => [u.toLowerCase(), label] as [string, string],\n);\nconst SERVER_PRODUCTS = (spec.serverProducts as Array<[string, string]>).map(\n ([p, label]) => [p.toLowerCase(), label] as [string, string],\n);\nconst CLI_URLS = (spec.cliPackageUrls as Array<[string, string]>).map(\n ([u, label]) => [u.toLowerCase(), label] as [string, string],\n);\nconst CLI_PRODUCTS = (spec.cliProducts as Array<[string, string]>).map(\n ([p, label]) => [p.toLowerCase(), label] as [string, string],\n);\nconst APP_PRODUCT_TYPES = spec.appProductTypes as string[];\nconst CLI_PRODUCT_TYPES = spec.cliProductTypes as string[];\nconst VAPOR_LAYOUT = spec.vaporLayoutFiles as string[];\n\nexport interface PackageSwiftSignals {\n packageUrls: string[];\n productNames: string[]; // .product(name: \"X\")\n hasLibraryProduct: boolean;\n hasExecutableProduct: boolean;\n hasPluginProduct: boolean;\n hasExecutableTarget: boolean;\n hasLibraryTarget: boolean;\n}\n\n/** True if directory looks like a Swift project root. */\nexport function isSwiftRoot(dir: string): boolean {\n return existsSync(join(dir, 'Package.swift')) || listXcodeprojs(dir).length > 0;\n}\n\n/** Root-level *.xcodeproj directory names. */\nexport function listXcodeprojs(dir: string): string[] {\n try {\n return readdirSync(dir).filter(f => {\n if (!f.endsWith('.xcodeproj')) {return false;}\n try {\n return statSync(join(dir, f)).isDirectory();\n } catch {\n return false;\n }\n });\n } catch {\n return [];\n }\n}\n\nfunction readText(path: string): string | null {\n try {\n return readFileSync(path, 'utf-8');\n } catch {\n return null;\n }\n}\n\n/**\n * Static scan of Package.swift — does NOT compile or evaluate Swift.\n * Strips line and block comments best-effort before token extraction.\n */\nexport function parsePackageSwift(content: string): PackageSwiftSignals {\n const stripped = stripSwiftComments(content);\n const lower = stripped.toLowerCase();\n\n const packageUrls: string[] = [];\n // .package(url: \"…\") or .package(url: \"…\", from: …)\n const urlRe = /\\.package\\s*\\(\\s*url\\s*:\\s*\"([^\"]+)\"/gi;\n let m: RegExpExecArray | null;\n while ((m = urlRe.exec(stripped)) !== null) {\n packageUrls.push(m[1]);\n }\n // Alternate: .package(url: \"…\") with single quotes (rare)\n const urlRe2 = /\\.package\\s*\\(\\s*url\\s*:\\s*'([^']+)'/gi;\n while ((m = urlRe2.exec(stripped)) !== null) {\n packageUrls.push(m[1]);\n }\n\n const productNames: string[] = [];\n // .product(name: \"Vapor\", package: \"vapor\")\n const prodRe = /\\.product\\s*\\(\\s*name\\s*:\\s*\"([^\"]+)\"/gi;\n while ((m = prodRe.exec(stripped)) !== null) {\n productNames.push(m[1]);\n }\n const prodRe2 = /\\.product\\s*\\(\\s*name\\s*:\\s*'([^']+)'/gi;\n while ((m = prodRe2.exec(stripped)) !== null) {\n productNames.push(m[1]);\n }\n\n // Product kinds in products: [ … ]\n // .library(name: …) .executable(name: …) .plugin(\n const hasLibraryProduct = /\\.library\\s*\\(/.test(lower);\n const hasExecutableProduct = /\\.executable\\s*\\(/.test(lower);\n // Avoid matching .plugin( on targets if we can — products use Product.plugin / .plugin(\n // Both product and target use .plugin( — still a useful signal when no library/exe.\n const hasPluginProduct = /\\.plugin\\s*\\(/.test(lower) && !hasLibraryProduct && !hasExecutableProduct\n ? true\n : /\\bproducts\\s*:\\s*\\[[\\s\\S]*?\\.plugin\\s*\\(/.test(lower);\n\n const hasExecutableTarget = /\\.executabletarget\\s*\\(/.test(lower);\n // Plain .target( — executableTarget/testTarget use different selectors\n const hasLibraryTarget = /\\.target\\s*\\(/.test(lower) && !hasExecutableTarget\n ? true\n : (lower.match(/\\.target\\s*\\(/g) || []).length >\n (lower.match(/\\.executabletarget\\s*\\(/g) || []).length +\n (lower.match(/\\.testtarget\\s*\\(/g) || []).length;\n return {\n packageUrls,\n productNames,\n hasLibraryProduct,\n hasExecutableProduct,\n hasPluginProduct: !!hasPluginProduct,\n hasExecutableTarget,\n hasLibraryTarget,\n };\n}\n\n/** Best-effort strip of line (//) and block comments for static scan. */\nexport function stripSwiftComments(src: string): string {\n let out = '';\n let i = 0;\n while (i < src.length) {\n // string literal — preserve contents so URLs inside stay intact\n if (src[i] === '\"' || src[i] === \"'\") {\n const q = src[i];\n out += q;\n i++;\n while (i < src.length) {\n if (src[i] === '\\\\' && i + 1 < src.length) {\n out += src[i] + src[i + 1];\n i += 2;\n continue;\n }\n out += src[i];\n if (src[i] === q) {\n i++;\n break;\n }\n i++;\n }\n continue;\n }\n if (src[i] === '/' && src[i + 1] === '/') {\n i += 2;\n while (i < src.length && src[i] !== '\\n') {i++;}\n continue;\n }\n if (src[i] === '/' && src[i + 1] === '*') {\n i += 2;\n while (i < src.length && !(src[i] === '*' && src[i + 1] === '/')) {i++;}\n i += 2;\n continue;\n }\n out += src[i];\n i++;\n }\n return out;\n}\n\nfunction urlHits(urls: string[], needles: string[]): string | undefined {\n const lowerUrls = urls.map(u => u.toLowerCase());\n let best: string | undefined;\n for (const n of needles) {\n for (const u of lowerUrls) {\n if (u.includes(n) && (!best || n.length > best.length)) {best = n;}\n }\n }\n return best;\n}\n\nfunction urlHitsLabeled(\n urls: string[],\n entries: Array<[string, string]>,\n): [string, string] | undefined {\n const lowerUrls = urls.map(u => u.toLowerCase());\n let best: [string, string] | undefined;\n for (const [needle, label] of entries) {\n for (const u of lowerUrls) {\n if (u.includes(needle) && (!best || needle.length > best[0].length)) {\n best = [needle, label];\n }\n }\n }\n return best;\n}\n\nfunction productHitsLabeled(\n products: string[],\n entries: Array<[string, string]>,\n): [string, string] | undefined {\n const lower = products.map(p => p.toLowerCase());\n let best: [string, string] | undefined;\n for (const [name, label] of entries) {\n if (lower.includes(name) && (!best || name.length > best[0].length)) {\n best = [name, label];\n }\n }\n return best;\n}\n\nfunction mcpProductHit(products: string[]): boolean {\n const lower = products.map(p => p.toLowerCase());\n return MCP_PRODUCTS.some(p => lower.includes(p));\n}\n\n/**\n * Light pbxproj grep — no AST. Reads project.pbxproj under each .xcodeproj.\n */\nexport function scanXcodeProductTypes(dir: string): {\n hasApplication: boolean;\n hasTool: boolean;\n hit?: string;\n} {\n let hasApplication = false;\n let hasTool = false;\n let hit: string | undefined;\n for (const xp of listXcodeprojs(dir)) {\n const pbx = join(dir, xp, 'project.pbxproj');\n const body = readText(pbx);\n if (!body) {continue;}\n for (const t of APP_PRODUCT_TYPES) {\n if (body.includes(t)) {\n hasApplication = true;\n hit = t;\n }\n }\n for (const t of CLI_PRODUCT_TYPES) {\n if (body.includes(t)) {\n hasTool = true;\n if (!hit) {hit = t;}\n }\n }\n }\n return { hasApplication, hasTool, hit };\n}\n\nfunction vaporLayoutHit(dir: string): string | undefined {\n for (const rel of VAPOR_LAYOUT) {\n if (existsSync(join(dir, rel))) {return rel;}\n }\n return undefined;\n}\n\n/**\n * Classify a Swift project from Package.swift (+ light Xcode).\n * Returns null if not a Swift root.\n */\nexport function detectSwiftProject(dir: string): SwiftProject | null {\n if (!isSwiftRoot(dir)) {return null;}\n\n const pkgPath = join(dir, 'Package.swift');\n const hasPkg = existsSync(pkgPath);\n const xcodeprojs = listXcodeprojs(dir);\n const hasXcode = xcodeprojs.length > 0;\n\n let signals: PackageSwiftSignals | null = null;\n if (hasPkg) {\n const body = readText(pkgPath);\n if (body) {signals = parsePackageSwift(body);}\n }\n\n const xcode = hasXcode ? scanXcodeProductTypes(dir) : { hasApplication: false, hasTool: false };\n const layout = vaporLayoutHit(dir);\n\n const urls = signals?.packageUrls ?? [];\n const products = signals?.productNames ?? [];\n\n const mcpUrl = urlHits(urls, MCP_URLS);\n const mcpProd = mcpProductHit(products);\n const serverUrl = urlHitsLabeled(urls, SERVER_URLS);\n const serverProd = productHitsLabeled(products, SERVER_PRODUCTS);\n const cliUrl = urlHitsLabeled(urls, CLI_URLS);\n const cliProd = productHitsLabeled(products, CLI_PRODUCTS);\n\n const isMcp = !!(mcpUrl || mcpProd);\n const isServer = !!(serverUrl || serverProd || layout);\n const isExecutable =\n !!(signals?.hasExecutableProduct || signals?.hasExecutableTarget);\n const isCliStack = !!(cliUrl || cliProd);\n const isApp = xcode.hasApplication;\n\n const packageManager: SwiftProject['packageManager'] =\n hasPkg && hasXcode ? 'spm+xcode' : hasPkg ? 'spm' : 'xcode';\n\n let appType: SwiftAppType;\n let framework = '';\n let found: string;\n\n // Priority: mcp > backend > app > cli > library\n if (isMcp) {\n appType = 'mcp';\n framework = 'MCP';\n if (mcpProd) {\n found = 'Package.swift + product MCP (Swift MCP)';\n } else {\n found = `Package.swift + ${mcpUrl} (Swift MCP)`;\n }\n } else if (isServer) {\n appType = 'backend';\n framework = serverProd?.[1] || serverUrl?.[1] || (layout ? 'Vapor' : '');\n if (serverProd) {\n found = `Package.swift + product ${serverProd[1]} (Swift backend)`;\n } else if (serverUrl) {\n found = `Package.swift + ${serverUrl[1]} (Swift backend)`;\n } else {\n found = `${layout} (Swift backend layout)`;\n }\n } else if (isApp) {\n appType = 'app';\n framework = '';\n found = `${xcodeprojs[0]} + ${xcode.hit || 'application'} (Swift app)`;\n } else if (isCliStack || (isExecutable && !isServer && !isMcp)) {\n appType = 'cli';\n framework = cliProd?.[1] || cliUrl?.[1] || '';\n if (cliProd) {\n found = `Package.swift + product ${cliProd[1]} (Swift CLI)`;\n } else if (cliUrl) {\n found = `Package.swift + ${cliUrl[1]} (Swift CLI)`;\n } else if (signals?.hasExecutableProduct) {\n found = 'Package.swift + .executable product (Swift CLI)';\n } else {\n found = 'Package.swift + .executableTarget (Swift CLI)';\n }\n } else if (xcode.hasTool && !hasPkg) {\n appType = 'cli';\n found = `${xcodeprojs[0]} + tool productType (Swift CLI)`;\n } else if (hasPkg) {\n appType = 'library';\n if (signals?.hasLibraryProduct) {\n found = 'Package.swift + .library product (Swift library)';\n } else {\n found = 'Package.swift (Swift library)';\n }\n } else {\n // xcodeproj without application/tool productType — weak library/app unknown\n appType = 'library';\n found = `${xcodeprojs[0] || 'xcodeproj'} (Swift — no classifying productType)`;\n }\n\n return { appType, framework, packageManager, found };\n}\n",
99
102
  "/**\n * Relentless — the 6-W human-context extractor. \"Never gives up on finding\n * context\" (the v5 RelentlessContextExtractor), rewritten v6-native + sync and\n * realigned to FAF's no-guess doctrine: it reads EVERY source (manifest +\n * README, tiered) but FILLS ONLY from sourced evidence. The v5 INFERRED tiers\n * (guess from project name / tech stack) are deliberately dropped —\n * sourced-or-empty; `faf go` is where the human confirms.\n *\n * Pairs with Turbo-Cat: Turbo-Cat fills STACK slots from file formats;\n * Relentless fills the 6 HUMAN-CONTEXT slots (who/what/why/where/when/how) by\n * reading. WHO is the target AUDIENCE (not the package author — a v5 conflation\n * this rewrite corrects).\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\ninterface PkgJson {\n description?: string;\n repository?: string | { url?: string };\n homepage?: string;\n scripts?: Record<string, string>;\n keywords?: string[];\n}\n\nexport interface SeededContext {\n who?: string;\n what?: string;\n why?: string;\n where?: string;\n when?: string;\n how?: string;\n}\n\n/**\n * A sourced 6-W value WITH its provenance — where it came from and how much to\n * trust it. The honesty gate: a fill the human can audit before confirming.\n * - `source`: the artifact + locus it was relocated from, e.g.\n * 'package.json:description' or 'README:## Why'. If we can't name a source,\n * we don't emit a value — sourced-or-empty, never invented.\n * - `confidence`: 0..1 by source quality (structured field > named section >\n * heuristic match). A signal for the seeded/confirm UI, not a score.\n */\nexport interface SourcedValue {\n value: string;\n source: string;\n confidence: number;\n}\n\nexport interface SeededContextDetailed {\n who?: SourcedValue;\n what?: SourcedValue;\n why?: SourcedValue;\n where?: SourcedValue;\n when?: SourcedValue;\n how?: SourcedValue;\n}\n\nconst sv = (value: string, source: string, confidence: number): SourcedValue => ({ value, source, confidence });\n\n/**\n * The 6-W extractor WITH provenance — each slot carries {value, source,\n * confidence}. This is the auditable form: the seeded/confirm UI can show the\n * human WHERE a value was relocated from before they accept it.\n */\nexport function relentlessContextDetailed(dir: string): SeededContextDetailed {\n const pkg = readPkg(dir);\n const readme = cleanReadme(dir);\n const out: SeededContextDetailed = {};\n const set = (k: keyof SeededContextDetailed, v: SourcedValue | null): void => {\n if (v) {out[k] = v;}\n };\n\n set('what', extractWhat(pkg, readme));\n set('who', extractWho(readme));\n set('why', extractWhy(readme));\n set('where', extractWhere(pkg, readme));\n set('when', extractWhen(readme));\n set('how', extractHow(pkg, readme));\n\n return out;\n}\n\n/**\n * The bare 6-W extractor — values only, backward-compatible. A pure projection\n * of `relentlessContextDetailed` (single internal source; identical output to\n * the pre-provenance version). Existing consumers (claude-faf-mcp's faf_auto)\n * keep working unchanged; opt into provenance via the Detailed form.\n */\nexport function relentlessContext(dir: string): SeededContext {\n const detailed = relentlessContextDetailed(dir);\n const seed: SeededContext = {};\n (Object.keys(detailed) as (keyof SeededContextDetailed)[]).forEach((k) => {\n const sourced = detailed[k];\n if (sourced) {seed[k] = sourced.value;}\n });\n return seed;\n}\n\nfunction readPkg(dir: string): PkgJson | null {\n const p = join(dir, 'package.json');\n if (!existsSync(p)) {return null;}\n try {\n return JSON.parse(readFileSync(p, 'utf-8')) as PkgJson;\n } catch {\n return null;\n }\n}\n\n/** README with HTML tags + badge lines stripped (so we don't seed shields.io noise). */\nfunction cleanReadme(dir: string): string {\n const p = join(dir, 'README.md');\n if (!existsSync(p)) {return '';}\n let txt: string;\n try {\n txt = readFileSync(p, 'utf-8');\n } catch {\n return '';\n }\n return txt\n .split('\\n')\n .filter((l) => !/^\\s*\\[!\\[/.test(l) && !/^\\s*!\\[/.test(l)) // badge lines\n .join('\\n')\n .replace(/<[^>]+>/g, '') // HTML tags\n .replace(/!\\[[^\\]]*\\]\\([^)]*\\)/g, '') // inline images/badges\n .trim();\n}\n\nfunction clean(text: string): string {\n return text.replace(/\\s+/g, ' ').replace(/[#*`>]/g, '').trim().slice(0, 280);\n}\n\n/** First `## Section` body matching any of the pipe-listed names (min 20 chars).\n * Returns the cleaned body AND the matched heading (for provenance labels). */\nfunction section(readme: string, names: string): { body: string; heading: string } | null {\n const re = new RegExp(`##?\\\\s+(${names})\\\\s*\\\\n+([\\\\s\\\\S]+?)(?:\\\\n\\\\n|\\\\n##?|$)`, 'i');\n const m = readme.match(re);\n return m && m[2] && m[2].trim().length > 20 ? { body: clean(m[2]), heading: m[1].trim() } : null;\n}\n\n/** First capturing-group match across patterns whose capture meets minLen. */\nfunction firstMatch(text: string, patterns: RegExp[], minLen = 30): string | null {\n for (const re of patterns) {\n const m = text.match(re);\n if (m && m[1] && m[1].trim().length >= minLen) {return clean(m[1]);}\n }\n return null;\n}\n\nfunction extractWhat(pkg: PkgJson | null, readme: string): SourcedValue | null {\n if (pkg?.description && pkg.description.length > 20) {return sv(clean(pkg.description), 'package.json:description', 0.95);}\n const sec = section(readme, 'Purpose|What|About|Overview|Description');\n if (sec) {return sv(sec.body, `README:## ${sec.heading}`, 0.8);}\n const firstReal = readme\n .split(/\\n\\s*\\n/)\n .map((p) => p.trim())\n .find((p) => p.length > 30 && !p.startsWith('#'));\n if (firstReal) {return sv(clean(firstReal), 'README:first-paragraph', 0.5);}\n const fm = firstMatch(readme, [\n /(?:core|main|primary)\\s+(?:problem|challenge)(?:\\s+is)?\\s*:?\\s*([^.\\n]{30,})/i,\n /solves?\\s+(?:the\\s+)?(?:problem\\s+of\\s+)?([^.\\n]{30,})/i,\n ]);\n return fm ? sv(fm, 'README:problem-heuristic', 0.6) : null;\n}\n\nfunction extractWho(readme: string): SourcedValue | null {\n const sec = section(readme, 'Audience|Who|Who is this for|Who it.s for');\n if (sec) {return sv(sec.body, `README:## ${sec.heading}`, 0.8);}\n const fm = firstMatch(\n readme,\n [\n // optional qualifier before the role word, so \"for backend teams\" /\n // \"for indie developers\" match — not just a bare role. Dogfood-caught.\n /\\b(?:designed|built|made)\\s+for\\s+((?:[a-z][a-z-]*\\s+)?(?:developers?|teams?|engineers?|builders?|founders?)[^.\\n]{0,80})/i,\n /\\bfor\\s+((?:[a-z][a-z-]*\\s+)?(?:developers?|teams?|engineers?|builders?|founders?)[^.\\n]{0,80})/i,\n ],\n 8,\n );\n return fm ? sv(fm, 'README:audience-heuristic', 0.6) : null;\n}\n\nfunction extractWhy(readme: string): SourcedValue | null {\n const sec = section(readme, 'Why|Mission|Motivation|Rationale|Vision');\n if (sec) {return sv(sec.body, `README:## ${sec.heading}`, 0.8);}\n // DECLARATIVE only — \"our mission is X\", \"the goal is X\", \"Mission: X\". The\n // bare noun is NOT enough: \"(name + goal + the six Ws)\" must not match (it did,\n // and grabbed the rest of the line — a real bug the provenance dogfood caught).\n const fm = firstMatch(readme, [\n /(?:our\\s+|the\\s+)?(?:mission|purpose|goal)\\s+is\\s+([^.\\n]{30,})/i,\n /\\b(?:mission|purpose|goal)\\s*:\\s*([^.\\n]{30,})/i,\n /(?:built|created|designed)\\s+(?:because|to)\\s+([^.\\n]{30,})/i,\n ]);\n return fm ? sv(fm, 'README:mission-heuristic', 0.6) : null;\n}\n\nfunction extractWhere(pkg: PkgJson | null, readme: string): SourcedValue | null {\n const repo = typeof pkg?.repository === 'string' ? pkg.repository : pkg?.repository?.url;\n if (repo) {return sv(clean(repo.replace(/^git\\+/, '').replace(/\\.git$/, '')), 'package.json:repository', 0.95);}\n if (pkg?.homepage) {return sv(clean(pkg.homepage), 'package.json:homepage', 0.9);}\n const fm = firstMatch(\n readme,\n // {3,80} + minLen 3 so short platform names (\"npm\", \"AWS\") match —\n // \"Published on npm.\" used to slip past the 4-char floor. Dogfood-caught.\n [/\\b(?:deployed|hosted|available|published)\\s+(?:on|at|via)\\s+([^.\\n]{3,80})/i],\n 3,\n );\n return fm ? sv(fm, 'README:deploy-heuristic', 0.6) : null;\n}\n\nfunction extractWhen(readme: string): SourcedValue | null {\n const sec = section(readme, 'Timeline|Status|Release|Roadmap');\n if (sec) {return sv(sec.body, `README:## ${sec.heading}`, 0.8);}\n const fm = firstMatch(\n readme,\n [\n /\\b(production\\s+since\\s+[^.\\n]{4,60})/i,\n /\\b((?:in\\s+)?(?:production|beta|alpha|development)\\s+since\\s+[^.\\n]{4,60})/i,\n /\\bsince\\s+((?:[A-Z][a-z]+\\s+)?\\d{4}[^.\\n]{0,40})/,\n ],\n 4,\n );\n return fm ? sv(fm, 'README:since-heuristic', 0.6) : null;\n}\n\nfunction extractHow(pkg: PkgJson | null, readme: string): SourcedValue | null {\n const scripts = pkg?.scripts ? Object.keys(pkg.scripts) : [];\n const run = ['start', 'dev', 'build'].filter((s) => scripts.includes(s));\n if (run.length) {return sv(clean(run.map((s) => `npm run ${s}`).join(', ')), 'package.json:scripts', 0.9);}\n const usage = section(readme, 'Usage|Getting Started|Install|Installation|Quick Start');\n if (usage) {return sv(usage.body, `README:## ${usage.heading}`, 0.8);}\n const arch = section(readme, 'Architecture|Approach|How it works|Methodology|How');\n return arch ? sv(arch.body, `README:## ${arch.heading}`, 0.7) : null;\n}\n",
100
103
  "/**\n * The `.faf` format series a freshly written file is stamped with — the single\n * source of truth for `faf_version`.\n *\n * Everything that authors a new `.faf` (detect, recover, conductor) and the\n * `migrate` target reads it from here, so the version can never drift file-to-\n * file again. (That drift is exactly what left those paths stranded on the old\n * `2.5.0` while the ecosystem moved to the `3.0` series.)\n */\nexport const FAF_VERSION = '3.0';\n",
101
- "import { existsSync, readFileSync, readdirSync } from 'fs';\nimport { join } from 'path';\nimport type { DetectedFramework, Signal } from '../core/types.js';\nimport { FRAMEWORKS } from './frameworks.js';\nimport { detectDartProject } from './dart.js';\nimport { detectGoProject } from './go.js';\nimport { detectCsharpProject, listRootCsprojs } from './csharp.js';\nimport { detectJvmProject, isJvmRoot } from './jvm.js';\nimport { detectRubyProject } from './ruby.js';\n\ninterface PackageJson {\n name?: string;\n version?: string;\n description?: string;\n keywords?: string[];\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n type?: string;\n main?: string;\n types?: string;\n exports?: unknown;\n bin?: string | Record<string, string>;\n private?: boolean;\n workspaces?: string[] | { packages?: string[] };\n files?: string[];\n}\n\n/** Read [package].name field from Cargo.toml — naive but adequate. */\nfunction readCargoName(dir: string): string | null {\n const path = join(dir, 'Cargo.toml');\n if (!existsSync(path)) {return null;}\n try {\n const content = readFileSync(path, 'utf-8');\n const m = content.match(/^\\s*\\[package\\][\\s\\S]*?^\\s*name\\s*=\\s*\"([^\"]+)\"/m);\n return m ? m[1] : null;\n } catch {\n return null;\n }\n}\n\n/** True if Cargo.toml declares one or more `[[bin]]` sections — Rust cli marker. */\nfunction hasCargoBin(dir: string): boolean {\n const path = join(dir, 'Cargo.toml');\n if (!existsSync(path)) {return false;}\n try {\n const content = readFileSync(path, 'utf-8');\n return /^\\s*\\[\\[bin\\]\\]/m.test(content);\n } catch {\n return false;\n }\n}\n\n/** Detect SDK signals — keyword-based per the SDK-priority doctrine.\n * Returns the matched evidence string, or null if no SDK signal. */\nfunction detectSdkSignal(dir: string, pkg: PackageJson | null): string | null {\n // pkg.keywords contains 'sdk'\n if (pkg?.keywords?.some(k => /^sdk(?:\\s|-|$)|-sdk$/i.test(k))) {\n return 'package.json keywords contains \"sdk\"';\n }\n // pkg.name contains 'sdk' or '-sdk' suffix\n if (pkg?.name && /(?:^|[-_/])sdk(?:[-_/]|$)/i.test(pkg.name)) {\n return `package.json name \"${pkg.name}\" → sdk`;\n }\n // Cargo.toml [package].name contains 'sdk'\n const cargoName = readCargoName(dir);\n if (cargoName && /(?:^|[-_])sdk(?:[-_]|$)/i.test(cargoName)) {\n return `Cargo.toml name \"${cargoName}\" → sdk`;\n }\n return null;\n}\n\n/** Browser / Chrome extension signal — a manifest.json that declares\n * `manifest_version` (the defining MV2/MV3 trait, absent from PWA web-app\n * manifests). Checked at the repo root and common source/build locations,\n * since extensions often keep the manifest under public/ or src/. */\nfunction detectExtensionSignal(dir: string): string | null {\n const candidates = [\n 'manifest.json',\n 'public/manifest.json',\n 'src/manifest.json',\n 'app/manifest.json',\n 'extension/manifest.json',\n 'dist/manifest.json',\n ];\n for (const rel of candidates) {\n const path = join(dir, rel);\n if (!existsSync(path)) {continue;}\n try {\n const parsed = JSON.parse(readFileSync(path, 'utf-8')) as { manifest_version?: unknown };\n if (typeof parsed.manifest_version === 'number') {\n return `${rel} manifest_version ${parsed.manifest_version} (browser extension)`;\n }\n } catch { /* not valid JSON / unreadable — keep scanning */ }\n }\n return null;\n}\n\n/** Python data-science dependency detection (pyproject.toml + requirements.txt). */\nfunction detectDataScienceSignal(dir: string): string | null {\n const dsPatterns = /(numpy|pandas|jupyter|scikit-learn|sklearn|pytorch|tensorflow|matplotlib|scipy)/i;\n const pyproject = join(dir, 'pyproject.toml');\n if (existsSync(pyproject)) {\n try {\n const content = readFileSync(pyproject, 'utf-8');\n const match = content.match(dsPatterns);\n if (match) {return `pyproject.toml depends on ${match[1]}`;}\n } catch { /* fall through */ }\n }\n const reqs = join(dir, 'requirements.txt');\n if (existsSync(reqs)) {\n try {\n const content = readFileSync(reqs, 'utf-8');\n const match = content.match(dsPatterns);\n if (match) {return `requirements.txt contains ${match[1]}`;}\n } catch { /* fall through */ }\n }\n return null;\n}\n\n/** Mobile platform signal — JS mobile (React Native / Expo / Capacitor / Ionic)\n * + native ios/android dirs. Flutter/Dart is handled by detectDartProject. */\nfunction detectMobileSignal(dir: string, pkg: PackageJson | null): string | null {\n const mobileDeps = ['react-native', 'expo', '@capacitor/core', '@ionic/core'];\n if (pkg) {\n for (const dep of mobileDeps) {\n if (pkg.dependencies?.[dep] || pkg.devDependencies?.[dep]) {\n return `${dep} dependency`;\n }\n }\n }\n if (existsSync(join(dir, 'ios')) && existsSync(join(dir, 'android'))) {\n return 'ios/ + android/ dirs';\n }\n return null;\n}\n\n/** WASM target detection (Cargo cdylib + wasm32 OR build.zig wasm OR pkg WASM build scripts). */\nfunction detectWasmSignal(dir: string, pkg: PackageJson | null): string | null {\n const cargoPath = join(dir, 'Cargo.toml');\n if (existsSync(cargoPath)) {\n try {\n const content = readFileSync(cargoPath, 'utf-8');\n // crate-type = [\"cdylib\"] is the canonical wasm-output marker\n if (/crate-type\\s*=\\s*\\[[^\\]]*\"cdylib\"/.test(content)) {\n return 'Cargo.toml crate-type = [\"cdylib\"]';\n }\n // wasm-bindgen / wasm-pack as deps\n if (/wasm-bindgen|wasm-pack/i.test(content)) {\n return 'Cargo.toml wasm-bindgen/wasm-pack';\n }\n } catch { /* fall through */ }\n }\n // Zig WASM target — build.zig with .wasm or wasm in script\n const buildZig = join(dir, 'build.zig');\n if (existsSync(buildZig)) {\n try {\n const content = readFileSync(buildZig, 'utf-8');\n if (/\\.wasm\\b|wasm32|setOutputFormat\\(\\.wasm/i.test(content)) {\n return 'build.zig wasm target';\n }\n } catch { /* fall through */ }\n }\n // pkg keywords contains 'wasm' AND no app frameworks\n if (pkg?.keywords?.some(k => /^wasm(?:-|$)|webassembly/i.test(k))) {\n return 'package.json keywords contains \"wasm\"';\n }\n return null;\n}\n\n/** Bare HTML / vanilla site detection. */\nfunction detectHtmlSignal(dir: string, pkg: PackageJson | null): string | null {\n // Must have index.html at root\n if (!existsSync(join(dir, 'index.html'))) {return null;}\n // Must NOT have any frontend deps (those would classify as frontend/website/etc)\n if (pkg?.dependencies || pkg?.devDependencies) {\n const allDeps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };\n const frontendDeps = ['react', 'vue', 'svelte', '@sveltejs/kit', 'next', 'nuxt', 'astro', 'gatsby', 'solid-js', 'qwik'];\n if (frontendDeps.some(d => allDeps[d])) {return null;}\n }\n return 'index.html (vanilla, no frontend framework)';\n}\n\n/** Documentation / spec-only repo signal. */\nfunction detectDocumentationSignal(dir: string, pkg: PackageJson | null): string | null {\n // Strong signal: name or keywords contains 'specification'\n if (pkg?.name && /specification|^@.*\\/spec/i.test(pkg.name)) {\n return `package name \"${pkg.name}\" → documentation`;\n }\n if (pkg?.keywords?.some(k => /^(specification|format-spec|standard)$/i.test(k))) {\n return 'package keywords contains \"specification\"';\n }\n // A publishable CLI/bin package is never \"docs-only\" — even if `files` is\n // npm-publish-narrow (e.g. [\"dist\", \"README.md\"]). Bare `dist`/`src`/`bin`\n // without a trailing slash is still source, not documentation.\n // (agents-md-facts false positive: bin present + files:[\"dist\",\"README.md\",\"LICENSE\"]\n // classified as documentation before the cli check could run.)\n if (pkg?.bin) {\n return null;\n }\n // pkg.files contains only md / examples / assets (no dist/, no src/)\n if (pkg?.files && pkg.files.length > 0) {\n // Match \"dist\", \"dist/\", \"src/cli.ts\", \"*.js\", etc. — bare publish dirs count as source\n const sourcePatterns =\n /^(dist|src|lib|build|bin)(\\/|$)|\\/(dist|src|lib|build|bin)(\\/|$)|(\\.|\\/)(js|ts|tsx|jsx|mjs|cjs|py|rs|go)$/;\n const hasSource = pkg.files.some(f => sourcePatterns.test(f));\n const hasDocs = pkg.files.some(f => /\\.(md|MD)$|examples?\\//.test(f) || f === 'README.md' || f === 'docs' || f === 'docs/');\n if (!hasSource && hasDocs) {\n return 'package.json files = docs/examples only (no source)';\n }\n }\n return null;\n}\n\n/** Marketing / website signal — Astro/Gatsby static OR pkg keywords. */\nfunction detectWebsiteSignal(dir: string, pkg: PackageJson | null, frameworks: DetectedFramework[]): string | null {\n // Astro/Gatsby are typically used for content/marketing sites\n const astroOrGatsby = frameworks.find(f => f.slug === 'astro' || f.slug === 'gatsby');\n if (astroOrGatsby) {return `${astroOrGatsby.name} (static-site framework)`;}\n // pkg.keywords explicitly marketing\n if (pkg?.keywords?.some(k => /^(website|marketing|landing|brochure|portfolio)$/i.test(k))) {\n return 'package keywords contains \"website\"/\"marketing\"/\"landing\"';\n }\n return null;\n}\n\n/** SAAS shape — auth + payments + database + dashboard. */\nfunction detectSaasSignal(dir: string, pkg: PackageJson | null): string | null {\n if (!pkg) {return null;}\n const allDeps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };\n const authDeps = ['@clerk/nextjs', '@clerk/clerk-react', 'next-auth', '@auth/core', 'auth0', '@auth0/nextjs-auth0'];\n const paymentDeps = ['stripe', '@stripe/stripe-js', 'lemonsqueezy'];\n const hasAuth = authDeps.some(d => allDeps[d]);\n const hasPayment = paymentDeps.some(d => allDeps[d]);\n if (hasAuth && hasPayment) {\n return 'auth + payment dependencies';\n }\n return null;\n}\n\n/** MCPaaS (post-MCP platform) shape — multiple MCP signals + hosting + DB. */\nfunction detectMcpaasSignal(dir: string, pkg: PackageJson | null, frameworks: DetectedFramework[]): string | null {\n // pkg.keywords contains 'mcpaas' is the strongest signal\n if (pkg?.keywords?.some(k => /mcpaas/i.test(k))) {\n return 'package keywords contains \"mcpaas\"';\n }\n // pkg.name contains 'mcpaas'\n if (pkg?.name && /mcpaas/i.test(pkg.name)) {\n return `package name \"${pkg.name}\" → mcpaas`;\n }\n // Multi-signal: MCP framework + database + hosting (a platform, not a single server)\n const hasMcp = frameworks.some(f => f.slug === 'mcp');\n const hasDb = frameworks.some(f => f.category === 'database');\n if (hasMcp && hasDb && pkg?.dependencies && Object.keys(pkg.dependencies).length > 10) {\n return 'MCP + database + complex deps (platform shape)';\n }\n return null;\n}\n\n/** Monorepo-root — private workspace with multiple packages, no single dominant FW. */\nfunction detectMonorepoRootSignal(dir: string, pkg: PackageJson | null): string | null {\n if (!pkg?.private) {return null;}\n const hasWorkspaces = !!pkg.workspaces || existsSync(join(dir, 'pnpm-workspace.yaml'));\n if (!hasWorkspaces) {return null;}\n return 'private workspace + multi-package';\n}\n\n/** Read and parse package.json from a directory */\nexport function readPackageJson(dir: string): PackageJson | null {\n const pkgPath = join(dir, 'package.json');\n if (!existsSync(pkgPath)) {return null;}\n try {\n return JSON.parse(readFileSync(pkgPath, 'utf-8'));\n } catch {\n return null;\n }\n}\n\n/** Scan a directory for files matching patterns */\nfunction fileExists(dir: string, pattern: string): boolean {\n // Handle simple file checks\n if (!pattern.includes('*')) {\n return existsSync(join(dir, pattern));\n }\n\n // Handle glob patterns like \"next.config.*\" or \".github/workflows/*.yml\"\n const parts = pattern.split('/');\n if (parts.length === 1) {\n // Simple wildcard: \"next.config.*\"\n const prefix = pattern.split('*')[0];\n try {\n return readdirSync(dir).some(f => f.startsWith(prefix));\n } catch {\n return false;\n }\n }\n\n // Multi-level: \".github/workflows/*.yml\"\n const subdir = join(dir, ...parts.slice(0, -1));\n const filePattern = parts[parts.length - 1];\n const prefix = filePattern.split('*')[0];\n const suffix = filePattern.split('*')[1] || '';\n try {\n return readdirSync(subdir).some(f => f.startsWith(prefix) && f.endsWith(suffix));\n } catch {\n return false;\n }\n}\n\n/** Match a single signal against project data */\nfunction matchSignal(signal: Signal, pkg: PackageJson | null, dir: string): boolean {\n switch (signal.type) {\n case 'dependency':\n return !!(pkg?.dependencies?.[signal.key!]);\n case 'devDependency':\n return !!(pkg?.devDependencies?.[signal.key!]);\n case 'file':\n return fileExists(dir, signal.pattern!);\n case 'content': {\n // File must exist AND contain key (case-insensitive). Used so pom/gradle\n // alone never claim Spring Boot — JVM Edition kill line for tech_stack.\n if (!signal.pattern || !signal.key) {return false;}\n if (!fileExists(dir, signal.pattern)) {return false;}\n try {\n // Resolve first match for globs like next.config.* via existing helper path\n const path = join(dir, signal.pattern);\n if (!existsSync(path)) {\n // pattern may be a simple relative path that fileExists handled via glob\n return false;\n }\n const body = readFileSync(path, 'utf-8').toLowerCase();\n return body.includes(signal.key.toLowerCase());\n } catch {\n return false;\n }\n }\n default:\n return false;\n }\n}\n\n/** Detect frameworks in a directory */\nexport function detectFrameworks(dir: string): DetectedFramework[] {\n const pkg = readPackageJson(dir);\n\n return FRAMEWORKS\n .map(fw => {\n const matched = fw.signals.filter(s => matchSignal(s, pkg, dir));\n const confidence = matched.length / fw.signals.length;\n return { name: fw.name, slug: fw.slug, category: fw.category, confidence };\n })\n .filter(fw => fw.confidence > 0)\n .sort((a, b) => b.confidence - a.confidence);\n}\n\n/** Detect the primary language of a project */\nexport function detectLanguage(dir: string): string {\n const pkg = readPackageJson(dir);\n\n // Check for TypeScript\n if (pkg?.devDependencies?.typescript || pkg?.dependencies?.typescript) {return 'TypeScript';}\n if (existsSync(join(dir, 'tsconfig.json'))) {return 'TypeScript';}\n\n // Check for common language indicators\n if (existsSync(join(dir, 'Cargo.toml'))) {return 'Rust';}\n if (existsSync(join(dir, 'go.mod'))) {return 'Go';}\n if (listRootCsprojs(dir).length > 0) {return 'C#';}\n if (existsSync(join(dir, 'pyproject.toml')) || existsSync(join(dir, 'setup.py'))) {return 'Python';}\n if (existsSync(join(dir, 'Gemfile'))) {return 'Ruby';}\n if (isJvmRoot(dir)) {\n const jvm = detectJvmProject(dir);\n if (jvm) {return jvm.mainLanguage === 'Java/Kotlin' ? 'Kotlin' : jvm.mainLanguage;}\n return 'Java';\n }\n if (existsSync(join(dir, 'Package.swift'))) {return 'Swift';}\n if (existsSync(join(dir, 'build.zig'))) {return 'Zig';}\n if (existsSync(join(dir, 'pubspec.yaml'))) {return 'Dart';}\n\n // Fallback to JS if package.json exists\n if (pkg) {return 'JavaScript';}\n\n return 'Unknown';\n}\n\n/** Project-type detection result + rationale (the #found list).\n * Each `found` entry is a human-readable signal that contributed to the\n * classification — emitted as a YAML comment by `writeFaf` for transparency\n * (\"Glass Hood\" doctrine: the user sees WHY the cli classified as it did). */\nexport interface ProjectTypeDetection {\n type: string;\n /** Signals that matched, in order observed. */\n found: string[];\n}\n\n/** Detect the project type with rationale. The `found` list captures every\n * positive signal that contributed to the classification — used downstream\n * by `writeFaf` to render `# found: <list>` next to `type:` in the .faf.\n *\n * Priority order per v6.6.md doctrine (most-specific first). `about` is\n * owner-declared, not auto-detected — never matches in this function.\n * Rule: SDK keyword takes priority (sdk wins over library/cli/wasm). */\nexport function detectProjectTypeWithRationale(dir: string): ProjectTypeDetection {\n const pkg = readPackageJson(dir);\n const frameworks = detectFrameworks(dir);\n const found: string[] = [];\n\n // ─── 1. documentation — spec-only / docs-only repos ─────────────────────\n const docSignal = detectDocumentationSignal(dir, pkg);\n if (docSignal) {\n found.push(docSignal);\n return { type: 'documentation', found };\n }\n\n // ─── 2. sdk — SDK keyword/structure WINS over mcpaas/saas/wasm/cli/library ─\n // wolfejam doctrine: if a repo signals SDK (name contains \"-sdk\", keywords\n // contains \"sdk\"), it's an SDK regardless of what platform/wasm/cli signals\n // would also fire. Confirmed for mcpaas-sdk (SDK FOR the platform, not the\n // platform itself).\n const sdkSignal = detectSdkSignal(dir, pkg);\n if (sdkSignal) {\n found.push(sdkSignal);\n return { type: 'sdk', found };\n }\n\n // ─── 3. extension — browser/chrome extension (manifest_version) ─────────\n // manifest_version is the unambiguous MV2/MV3 trait — must beat the framework\n // heuristics below (a framework-built extension would otherwise classify as\n // svelte/frontend/fullstack — confirmed on Stack⚡️Grabber).\n const extensionSignal = detectExtensionSignal(dir);\n if (extensionSignal) {\n found.push(extensionSignal);\n return { type: 'extension', found };\n }\n\n // ─── 4. mcpaas — post-MCP platforms (multiple MCP signals + auth + DB) ──\n const mcpaasSignal = detectMcpaasSignal(dir, pkg, frameworks);\n if (mcpaasSignal) {\n found.push(mcpaasSignal);\n return { type: 'mcpaas', found };\n }\n\n // ─── 5. saas — subscription products (auth + payment) ───────────────────\n const saasSignal = detectSaasSignal(dir, pkg);\n if (saasSignal) {\n found.push(saasSignal);\n return { type: 'saas', found };\n }\n\n // ─── 6. wasm — WASM target in build config ──────────────────────────────\n const wasmSignal = detectWasmSignal(dir, pkg);\n if (wasmSignal) {\n found.push(wasmSignal);\n return { type: 'wasm', found };\n }\n\n // ─── 7. dart/flutter — content-aware pubspec classification. The same\n // manifest backs Flutter apps, Dart CLIs, packages, servers, and MCP\n // servers — branch by deps (Flutter→mobile, Dart MCP→mcp, Dart\n // server→backend, CLI→cli, package→library). Unambiguous Dart. ──────\n const dart = detectDartProject(dir);\n if (dart) {\n found.push(dart.found);\n return { type: dart.appType, found };\n }\n\n // ─── 7a. go — content-aware go.mod classification (same composition as Dart).\n // go.mod alone ≠ backend: MCP · Gin/Echo/… · Cobra/cmd · library. ───\n const go = detectGoProject(dir);\n if (go) {\n found.push(go.found);\n return { type: go.appType, found };\n }\n\n // ─── 7a2. csharp — content-aware .csproj classification.\n // .csproj alone ≠ type: Sdk first · MCP · web/worker · CLI · library. ─\n const csharp = detectCsharpProject(dir);\n if (csharp) {\n found.push(csharp.found);\n return { type: csharp.appType, found };\n }\n\n // ─── 7a3. jvm — content-aware pom/gradle classification.\n // pom/gradle alone ≠ type: plugins · parents · catalogs · MCP · Android/KMP. ─\n const jvm = detectJvmProject(dir);\n if (jvm) {\n found.push(jvm.found);\n return { type: jvm.appType, found };\n }\n\n // ─── 7a4. ruby — content-aware Gemfile classification.\n // Gemfile alone ≠ Rails: gem names · layout · MCP · CLI · library. ─\n const ruby = detectRubyProject(dir);\n if (ruby) {\n found.push(ruby.found);\n return { type: ruby.appType, found };\n }\n\n // ─── 7b. mobile — JS mobile platform deps / native dirs ─────────────────\n const mobileSignal = detectMobileSignal(dir, pkg);\n if (mobileSignal) {\n found.push(mobileSignal);\n return { type: 'mobile', found };\n }\n\n // ─── 8. mcp — single MCP server ─────────────────────────────────────────\n const hasMcp = frameworks.some(f => f.slug === 'mcp');\n if (hasMcp) {\n found.push('MCP SDK signal');\n return { type: 'mcp', found };\n }\n\n // ─── 9. cli — Node bin / Cargo [[bin]] / Zig main.zig ───────────────────\n if (pkg?.bin) {\n found.push('package.json bin');\n return { type: 'cli', found };\n }\n if (hasCargoBin(dir)) {\n found.push('Cargo.toml [[bin]]');\n return { type: 'cli', found };\n }\n\n // Zig project-type detection — build.zig + entry-file convention.\n // src/main.zig → cli (executable); src/root.zig → library.\n // main.zig wins when both exist (typical: cli with internal lib exports).\n if (existsSync(join(dir, 'build.zig'))) {\n found.push('build.zig');\n if (existsSync(join(dir, 'src/main.zig'))) {\n found.push('src/main.zig');\n return { type: 'cli', found };\n }\n if (existsSync(join(dir, 'src/root.zig'))) {\n found.push('src/root.zig');\n return { type: 'library', found };\n }\n }\n\n // ─── 10. framework — private workspace + Svelte ──────────────────────────\n const hasSvelte = frameworks.some(f => f.slug === 'svelte' || f.slug === 'sveltekit');\n const isPrivateWorkspace = pkg?.private === true && (\n existsSync(join(dir, 'pnpm-workspace.yaml')) ||\n pkg?.workspaces !== undefined\n );\n if (isPrivateWorkspace && hasSvelte) {\n found.push('private workspace', 'Svelte');\n return { type: 'framework', found };\n }\n\n // ─── 11. svelte — Svelte/SvelteKit app (fullstack by nature) ────────────\n if (hasSvelte) {\n found.push('Svelte/SvelteKit');\n return { type: 'svelte', found };\n }\n\n // ─── 12. enterprise — private workspace + multi-FW (more specific than monorepo-root) ──\n // Must be checked BEFORE monorepo-root (which is private workspace fallback).\n const hasFrontendFw = frameworks.some(f => f.category === 'frontend');\n const hasBackendFw = frameworks.some(f => f.category === 'backend');\n if (\n pkg?.private &&\n (pkg.workspaces || existsSync(join(dir, 'pnpm-workspace.yaml'))) &&\n hasFrontendFw && hasBackendFw\n ) {\n found.push('private workspace + frontend + backend frameworks');\n return { type: 'enterprise', found };\n }\n\n // ─── 13. monorepo-root — private workspace, multi-package, no specific FW story ──\n const monoSignal = detectMonorepoRootSignal(dir, pkg);\n if (monoSignal) {\n found.push(monoSignal);\n return { type: 'monorepo-root', found };\n }\n\n // ─── 14. website — marketing-shape (Astro/Gatsby OR keywords) ───────────\n const websiteSignal = detectWebsiteSignal(dir, pkg, frameworks);\n if (websiteSignal) {\n found.push(websiteSignal);\n return { type: 'website', found };\n }\n\n // ─── 15. fullstack — Next/Nuxt OR (frontend + backend) ──────────────────\n const hasNextOrNuxt = frameworks.some(f => f.slug === 'nextjs' || f.slug === 'nuxt');\n if (hasNextOrNuxt) {\n found.push(frameworks.find(f => f.slug === 'nextjs') ? 'Next.js' : 'Nuxt');\n return { type: 'fullstack', found };\n }\n\n const hasFrontend = frameworks.some(f => f.category === 'frontend');\n const hasBackend = frameworks.some(f => f.category === 'backend');\n if (hasFrontend && hasBackend) {\n found.push('frontend framework', 'backend framework');\n return { type: 'fullstack', found };\n }\n\n // ─── 16. frontend — frontend framework only ─────────────────────────────\n if (hasFrontend) {\n found.push('frontend framework');\n return { type: 'frontend', found };\n }\n\n // ─── 17. backend — backend framework only ───────────────────────────────\n if (hasBackend) {\n found.push('backend framework');\n return { type: 'backend', found };\n }\n\n // ─── 18. data-science — Python DS deps (numpy/pandas/jupyter/sklearn) ───\n const dsSignal = detectDataScienceSignal(dir);\n if (dsSignal) {\n found.push(dsSignal);\n return { type: 'data-science', found };\n }\n\n // ─── 19. html — bare index.html, no framework ──────────────────────────\n const htmlSignal = detectHtmlSignal(dir, pkg);\n if (htmlSignal) {\n found.push(htmlSignal);\n return { type: 'html', found };\n }\n\n // ─── 20. library — fallback (has main/exports but no bin) ──────────────\n if (pkg?.main && !pkg?.bin) {\n found.push('package.json main (no bin)');\n return { type: 'library', found };\n }\n\n // Default — bare repo with no classifying signals\n found.push('no classifying signals — fallback');\n return { type: 'library', found };\n}\n\n/** Detect the project type for slot mapping. Backward-compatible wrapper —\n * returns just the type string. New code should prefer\n * `detectProjectTypeWithRationale` to access the `#found` rationale. */\nexport function detectProjectType(dir: string): string {\n return detectProjectTypeWithRationale(dir).type;\n}\n\n/** Detect the runtime */\nexport function detectRuntime(dir: string): string {\n if (existsSync(join(dir, 'bunfig.toml'))) {return 'Bun';}\n if (existsSync(join(dir, 'deno.json')) || existsSync(join(dir, 'deno.jsonc'))) {return 'Deno';}\n if (readPackageJson(dir)) {return 'Node.js';}\n if (existsSync(join(dir, 'Cargo.toml'))) {return 'Rust';}\n if (existsSync(join(dir, 'go.mod'))) {return 'Go';}\n if (listRootCsprojs(dir).length > 0) {return '.NET';}\n if (existsSync(join(dir, 'pubspec.yaml'))) {return 'Dart';}\n return 'Unknown';\n}\n\n/** Detect package manager */\nexport function detectPackageManager(dir: string): string {\n if (existsSync(join(dir, 'pubspec.yaml'))) {return 'pub';}\n if (existsSync(join(dir, 'go.mod'))) {return 'go modules';}\n if (listRootCsprojs(dir).length > 0) {return 'NuGet';}\n if (existsSync(join(dir, 'pom.xml'))) {return 'maven';}\n if (\n existsSync(join(dir, 'build.gradle')) ||\n existsSync(join(dir, 'build.gradle.kts')) ||\n existsSync(join(dir, 'settings.gradle')) ||\n existsSync(join(dir, 'settings.gradle.kts'))\n ) {return 'gradle';}\n if (existsSync(join(dir, 'bun.lockb')) || existsSync(join(dir, 'bun.lock'))) {return 'bun';}\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) {return 'pnpm';}\n if (existsSync(join(dir, 'yarn.lock'))) {return 'yarn';}\n if (existsSync(join(dir, 'package-lock.json'))) {return 'npm';}\n return 'npm';\n}\n\n/** Detect CI/CD */\nexport function detectCicd(dir: string): string | null {\n if (existsSync(join(dir, '.github/workflows'))) {return 'GitHub Actions';}\n if (existsSync(join(dir, '.gitlab-ci.yml'))) {return 'GitLab CI';}\n if (existsSync(join(dir, '.circleci'))) {return 'CircleCI';}\n if (existsSync(join(dir, 'Jenkinsfile'))) {return 'Jenkins';}\n return null;\n}\n\n/** Detect hosting platform */\nexport function detectHosting(dir: string): string | null {\n if (existsSync(join(dir, 'vercel.json'))) {return 'Vercel';}\n if (existsSync(join(dir, 'netlify.toml'))) {return 'Netlify';}\n if (existsSync(join(dir, 'wrangler.toml'))) {return 'Cloudflare';}\n if (existsSync(join(dir, 'Dockerfile'))) {return 'Docker';}\n if (existsSync(join(dir, 'fly.toml'))) {return 'Fly.io';}\n if (existsSync(join(dir, 'render.yaml'))) {return 'Render';}\n return null;\n}\n\n/** Detect SvelteKit adapter from svelte.config.js */\nexport function detectSvelteAdapter(dir: string): string | null {\n const configPath = join(dir, 'svelte.config.js');\n if (!existsSync(configPath)) {return null;}\n try {\n const content = readFileSync(configPath, 'utf-8');\n // Match adapter imports: import adapter from '@sveltejs/adapter-vercel'\n // Or: import { adapter } from '@sveltejs/adapter-node'\n // Or: const adapter = require('@sveltejs/adapter-static')\n const adapterMatch = content.match(/@sveltejs\\/adapter-(\\w+)/);\n if (adapterMatch) {\n const adapter = adapterMatch[1];\n switch (adapter) {\n case 'vercel': return 'Vercel';\n case 'node': return 'Node';\n case 'static': return 'Static';\n case 'cloudflare': return 'Cloudflare';\n case 'netlify': return 'Netlify';\n case 'auto': return 'Auto';\n default: return adapter;\n }\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/** Detect build tool */\nexport function detectBuildTool(dir: string): string | null {\n const pkg = readPackageJson(dir);\n if (pkg?.devDependencies?.vite || pkg?.dependencies?.vite) {return 'Vite';}\n if (pkg?.devDependencies?.webpack || pkg?.dependencies?.webpack) {return 'webpack';}\n if (pkg?.devDependencies?.esbuild || pkg?.dependencies?.esbuild) {return 'esbuild';}\n if (existsSync(join(dir, 'tsconfig.json')) && pkg?.devDependencies?.typescript) {return 'TypeScript (tsc)';}\n return null;\n}\n\n/* ─── FAFB section helpers (top-level YAML keys read by compile_fafb) ───────\n *\n * These detect content for the FAFB binary's TECH_STACK, KEY_FILES, and\n * COMMANDS sections. ARCHITECTURE and CONTEXT are deliberately left empty\n * for user fill (architecture overlaps with human_context.how; context is\n * deliberately free-form additional signal beyond the 6Ws).\n */\n\n/** Detect a list of important file paths for the KEY_FILES FAFB section.\n * Returns up to ~10 entries, ordered by canonical importance. */\nexport function detectKeyFiles(dir: string): string[] {\n const candidates = [\n // Manifests\n 'package.json', 'Cargo.toml', 'pyproject.toml', 'go.mod',\n 'build.zig', 'build.zig.zon',\n // Entry points (TS/JS)\n 'src/index.ts', 'src/index.js', 'src/main.ts', 'src/cli.ts',\n // Entry points (Rust)\n 'src/main.rs', 'src/lib.rs',\n // Entry points (Zig)\n 'src/main.zig', 'src/root.zig',\n // Entry points (Python)\n 'src/__init__.py', 'main.py', '__main__.py',\n // Entry points (Go)\n 'main.go', 'cmd/main.go',\n // Specs / docs\n 'README.md', 'SPECIFICATION.md', 'BINARY-FORMAT.md',\n // Config\n 'tsconfig.json', 'wrangler.toml', 'vercel.json',\n ];\n return candidates.filter(f => existsSync(join(dir, f)));\n}\n\n/** Detect build/test/lint commands for the COMMANDS FAFB section.\n * Returns a Record<string, string> mapping command name → shell command. */\nexport function detectCommands(dir: string, pkg: PackageJson | null): Record<string, string> {\n const commands: Record<string, string> = {};\n\n // From package.json scripts (most reliable)\n if (pkg?.scripts) {\n for (const key of ['build', 'test', 'lint', 'dev', 'start']) {\n if (pkg.scripts[key]) {\n // Determine the runner — prefer bun if available, else npm\n const runner = existsSync(join(dir, 'bun.lock')) || existsSync(join(dir, 'bun.lockb'))\n ? 'bun run'\n : 'npm run';\n commands[key] = `${runner} ${key}`;\n }\n }\n }\n\n // Cargo defaults (Rust)\n if (existsSync(join(dir, 'Cargo.toml'))) {\n if (!commands.build) {commands.build = 'cargo build --release';}\n if (!commands.test) {commands.test = 'cargo test';}\n if (!commands.lint) {commands.lint = 'cargo clippy';}\n }\n\n // Zig defaults\n if (existsSync(join(dir, 'build.zig'))) {\n if (!commands.build) {commands.build = 'zig build';}\n if (!commands.test) {commands.test = 'zig build test';}\n }\n\n // Go defaults\n if (existsSync(join(dir, 'go.mod'))) {\n if (!commands.build) {commands.build = 'go build ./...';}\n if (!commands.test) {commands.test = 'go test ./...';}\n }\n\n // Python defaults (if pytest is detectable)\n if (existsSync(join(dir, 'pyproject.toml')) || existsSync(join(dir, 'pytest.ini'))) {\n if (!commands.test) {commands.test = 'pytest';}\n }\n\n return commands;\n}\n\n/** Detect a tech-stack list for the TECH_STACK FAFB section.\n * Combines language + frameworks + runtime into a flat list of strings\n * (matching the canonical xai-faf-rust project.faf shape). */\nexport function detectTechStack(\n dir: string,\n pkg: PackageJson | null,\n frameworks: DetectedFramework[],\n language: string,\n): string[] {\n const stack: string[] = [];\n\n // Language goes first\n if (language && language !== 'Unknown') {stack.push(language);}\n\n // Notable frameworks (frontend / backend / database / build)\n const notableCategories = new Set(['frontend', 'backend', 'database', 'build', 'css', 'state', 'monorepo']);\n for (const fw of frameworks) {\n if (notableCategories.has(fw.category)) {\n stack.push(fw.name);\n }\n }\n\n // Runtime if non-trivial (Node.js by default for JS — only call out Bun/Deno/etc.)\n if (existsSync(join(dir, 'bunfig.toml'))) {stack.push('Bun');}\n else if (existsSync(join(dir, 'deno.json')) || existsSync(join(dir, 'deno.jsonc'))) {stack.push('Deno');}\n\n // Top deps from package.json/Cargo.toml — only if stack is still sparse\n if (stack.length < 3 && pkg?.dependencies) {\n const topDeps = Object.keys(pkg.dependencies).slice(0, 5);\n for (const dep of topDeps) {\n if (!stack.some(s => s.toLowerCase().includes(dep.toLowerCase()))) {\n stack.push(dep);\n }\n }\n }\n\n return stack;\n}\n",
102
- "import type { FrameworkSignature } from '../core/types.js';\n\n/** Data-driven framework signatures — one scanner evaluates all */\nexport const FRAMEWORKS: FrameworkSignature[] = [\n // Frontend Frameworks\n { name: 'Next.js', slug: 'nextjs', category: 'frontend', signals: [\n { type: 'dependency', key: 'next' },\n { type: 'file', pattern: 'next.config.*' },\n ]},\n { name: 'React', slug: 'react', category: 'frontend', signals: [\n { type: 'dependency', key: 'react' },\n ]},\n { name: 'SvelteKit', slug: 'sveltekit', category: 'frontend', signals: [\n { type: 'dependency', key: '@sveltejs/kit' },\n { type: 'file', pattern: 'svelte.config.*' },\n ]},\n { name: 'Svelte', slug: 'svelte', category: 'frontend', signals: [\n { type: 'dependency', key: 'svelte' },\n { type: 'devDependency', key: 'svelte' },\n ]},\n { name: 'Vue.js', slug: 'vue', category: 'frontend', signals: [\n { type: 'dependency', key: 'vue' },\n ]},\n { name: 'Nuxt', slug: 'nuxt', category: 'frontend', signals: [\n { type: 'dependency', key: 'nuxt' },\n { type: 'file', pattern: 'nuxt.config.*' },\n ]},\n { name: 'Angular', slug: 'angular', category: 'frontend', signals: [\n { type: 'dependency', key: '@angular/core' },\n { type: 'file', pattern: 'angular.json' },\n ]},\n { name: 'Astro', slug: 'astro', category: 'frontend', signals: [\n { type: 'dependency', key: 'astro' },\n { type: 'file', pattern: 'astro.config.*' },\n ]},\n { name: 'Solid', slug: 'solid', category: 'frontend', signals: [\n { type: 'dependency', key: 'solid-js' },\n ]},\n { name: 'Remix', slug: 'remix', category: 'frontend', signals: [\n { type: 'dependency', key: '@remix-run/react' },\n ]},\n { name: 'Gatsby', slug: 'gatsby', category: 'frontend', signals: [\n { type: 'dependency', key: 'gatsby' },\n { type: 'file', pattern: 'gatsby-config.*' },\n ]},\n { name: 'Qwik', slug: 'qwik', category: 'frontend', signals: [\n { type: 'dependency', key: '@builder.io/qwik' },\n ]},\n\n // SvelteKit Adapters (hosting signal)\n { name: 'Vercel (SvelteKit)', slug: 'adapter-vercel', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-vercel' },\n { type: 'devDependency', key: '@sveltejs/adapter-vercel' },\n ]},\n { name: 'Node (SvelteKit)', slug: 'adapter-node', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-node' },\n { type: 'devDependency', key: '@sveltejs/adapter-node' },\n ]},\n { name: 'Static (SvelteKit)', slug: 'adapter-static', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-static' },\n { type: 'devDependency', key: '@sveltejs/adapter-static' },\n ]},\n { name: 'Cloudflare (SvelteKit)', slug: 'adapter-cloudflare', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-cloudflare' },\n { type: 'devDependency', key: '@sveltejs/adapter-cloudflare' },\n ]},\n { name: 'Netlify (SvelteKit)', slug: 'adapter-netlify', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-netlify' },\n { type: 'devDependency', key: '@sveltejs/adapter-netlify' },\n ]},\n\n // CSS Frameworks\n { name: 'Tailwind CSS', slug: 'tailwind', category: 'css', signals: [\n { type: 'dependency', key: 'tailwindcss' },\n { type: 'devDependency', key: 'tailwindcss' },\n { type: 'file', pattern: 'tailwind.config.*' },\n ]},\n { name: 'Bootstrap', slug: 'bootstrap', category: 'css', signals: [\n { type: 'dependency', key: 'bootstrap' },\n ]},\n { name: 'Styled Components', slug: 'styled-components', category: 'css', signals: [\n { type: 'dependency', key: 'styled-components' },\n ]},\n\n // UI Libraries\n { name: 'shadcn/ui', slug: 'shadcn', category: 'ui', signals: [\n { type: 'file', pattern: 'components.json' },\n { type: 'dependency', key: '@radix-ui/react-dialog' },\n ]},\n { name: 'Material UI', slug: 'mui', category: 'ui', signals: [\n { type: 'dependency', key: '@mui/material' },\n ]},\n { name: 'Chakra UI', slug: 'chakra', category: 'ui', signals: [\n { type: 'dependency', key: '@chakra-ui/react' },\n ]},\n { name: 'Ant Design', slug: 'antd', category: 'ui', signals: [\n { type: 'dependency', key: 'antd' },\n ]},\n\n // State Management\n { name: 'Redux', slug: 'redux', category: 'state', signals: [\n { type: 'dependency', key: '@reduxjs/toolkit' },\n ]},\n { name: 'Zustand', slug: 'zustand', category: 'state', signals: [\n { type: 'dependency', key: 'zustand' },\n ]},\n { name: 'Jotai', slug: 'jotai', category: 'state', signals: [\n { type: 'dependency', key: 'jotai' },\n ]},\n { name: 'Pinia', slug: 'pinia', category: 'state', signals: [\n { type: 'dependency', key: 'pinia' },\n ]},\n\n // Backend Frameworks\n { name: 'Express', slug: 'express', category: 'backend', signals: [\n { type: 'dependency', key: 'express' },\n ]},\n { name: 'Fastify', slug: 'fastify', category: 'backend', signals: [\n { type: 'dependency', key: 'fastify' },\n ]},\n { name: 'Hono', slug: 'hono', category: 'backend', signals: [\n { type: 'dependency', key: 'hono' },\n ]},\n { name: 'Elysia', slug: 'elysia', category: 'backend', signals: [\n { type: 'dependency', key: 'elysia' },\n ]},\n { name: 'NestJS', slug: 'nestjs', category: 'backend', signals: [\n { type: 'dependency', key: '@nestjs/core' },\n ]},\n { name: 'Koa', slug: 'koa', category: 'backend', signals: [\n { type: 'dependency', key: 'koa' },\n ]},\n { name: 'Django', slug: 'django', category: 'backend', signals: [\n { type: 'file', pattern: 'manage.py' },\n { type: 'file', pattern: 'settings.py' },\n ]},\n { name: 'Flask', slug: 'flask', category: 'backend', signals: [\n { type: 'file', pattern: 'app.py' },\n ]},\n { name: 'FastAPI', slug: 'fastapi', category: 'backend', signals: [\n { type: 'file', pattern: 'main.py' },\n ]},\n // Content-aware — Gemfile alone ≠ Rails (Ruby Edition kill line).\n { name: 'Rails', slug: 'rails', category: 'backend', signals: [\n { type: 'content', pattern: 'Gemfile', key: 'rails' },\n { type: 'content', pattern: 'Gemfile.lock', key: 'rails (' },\n { type: 'file', pattern: 'config/application.rb' },\n { type: 'file', pattern: 'config/routes.rb' },\n ]},\n // Content-aware — pom.xml / build.gradle alone ≠ Spring Boot (JVM Edition kill line).\n // `content` signals require the needle in the file body (see matchSignal).\n { name: 'Spring Boot', slug: 'spring', category: 'backend', signals: [\n { type: 'content', pattern: 'pom.xml', key: 'spring-boot' },\n { type: 'content', pattern: 'build.gradle', key: 'springframework.boot' },\n { type: 'content', pattern: 'build.gradle.kts', key: 'springframework.boot' },\n { type: 'content', pattern: 'gradle/libs.versions.toml', key: 'springframework.boot' },\n ]},\n\n // Databases\n { name: 'Prisma', slug: 'prisma', category: 'database', signals: [\n { type: 'dependency', key: 'prisma' },\n { type: 'devDependency', key: 'prisma' },\n { type: 'file', pattern: 'prisma/schema.prisma' },\n ]},\n { name: 'Drizzle', slug: 'drizzle', category: 'database', signals: [\n { type: 'dependency', key: 'drizzle-orm' },\n { type: 'file', pattern: 'drizzle.config.*' },\n ]},\n { name: 'TypeORM', slug: 'typeorm', category: 'database', signals: [\n { type: 'dependency', key: 'typeorm' },\n ]},\n { name: 'Mongoose', slug: 'mongoose', category: 'database', signals: [\n { type: 'dependency', key: 'mongoose' },\n ]},\n\n // Build Tools\n { name: 'Vite', slug: 'vite', category: 'build', signals: [\n { type: 'dependency', key: 'vite' },\n { type: 'devDependency', key: 'vite' },\n { type: 'file', pattern: 'vite.config.*' },\n ]},\n { name: 'webpack', slug: 'webpack', category: 'build', signals: [\n { type: 'dependency', key: 'webpack' },\n { type: 'devDependency', key: 'webpack' },\n { type: 'file', pattern: 'webpack.config.*' },\n ]},\n { name: 'esbuild', slug: 'esbuild', category: 'build', signals: [\n { type: 'dependency', key: 'esbuild' },\n { type: 'devDependency', key: 'esbuild' },\n ]},\n { name: 'Turbopack', slug: 'turbopack', category: 'build', signals: [\n { type: 'file', pattern: 'turbo.json' },\n ]},\n\n // Testing\n { name: 'Jest', slug: 'jest', category: 'testing', signals: [\n { type: 'devDependency', key: 'jest' },\n { type: 'file', pattern: 'jest.config.*' },\n ]},\n { name: 'Vitest', slug: 'vitest', category: 'testing', signals: [\n { type: 'devDependency', key: 'vitest' },\n ]},\n { name: 'Playwright', slug: 'playwright', category: 'testing', signals: [\n { type: 'devDependency', key: '@playwright/test' },\n { type: 'file', pattern: 'playwright.config.*' },\n ]},\n { name: 'Cypress', slug: 'cypress', category: 'testing', signals: [\n { type: 'devDependency', key: 'cypress' },\n { type: 'file', pattern: 'cypress.config.*' },\n ]},\n\n // Monorepo Tools\n { name: 'Turborepo', slug: 'turborepo', category: 'monorepo', signals: [\n { type: 'devDependency', key: 'turbo' },\n { type: 'file', pattern: 'turbo.json' },\n ]},\n { name: 'Nx', slug: 'nx', category: 'monorepo', signals: [\n { type: 'devDependency', key: 'nx' },\n { type: 'file', pattern: 'nx.json' },\n ]},\n { name: 'Lerna', slug: 'lerna', category: 'monorepo', signals: [\n { type: 'devDependency', key: 'lerna' },\n { type: 'file', pattern: 'lerna.json' },\n ]},\n\n // MCP / AI\n { name: 'MCP SDK', slug: 'mcp', category: 'ai', signals: [\n { type: 'dependency', key: '@modelcontextprotocol/sdk' },\n ]},\n { name: 'Anthropic SDK', slug: 'anthropic', category: 'ai', signals: [\n { type: 'dependency', key: '@anthropic-ai/sdk' },\n ]},\n { name: 'OpenAI SDK', slug: 'openai', category: 'ai', signals: [\n { type: 'dependency', key: 'openai' },\n ]},\n { name: 'LangChain', slug: 'langchain', category: 'ai', signals: [\n { type: 'dependency', key: 'langchain' },\n ]},\n\n // Hosting / Deploy\n { name: 'Vercel', slug: 'vercel', category: 'hosting', signals: [\n { type: 'file', pattern: 'vercel.json' },\n ]},\n { name: 'Netlify', slug: 'netlify', category: 'hosting', signals: [\n { type: 'file', pattern: 'netlify.toml' },\n ]},\n { name: 'Docker', slug: 'docker', category: 'hosting', signals: [\n { type: 'file', pattern: 'Dockerfile' },\n { type: 'file', pattern: 'docker-compose.yml' },\n ]},\n { name: 'Cloudflare Workers', slug: 'cloudflare', category: 'hosting', signals: [\n { type: 'file', pattern: 'wrangler.toml' },\n { type: 'dependency', key: 'wrangler' },\n ]},\n\n // CI/CD\n { name: 'GitHub Actions', slug: 'github-actions', category: 'cicd', signals: [\n { type: 'file', pattern: '.github/workflows/*.yml' },\n ]},\n\n // Commander (CLI indicator)\n { name: 'Commander.js', slug: 'commander', category: 'cli', signals: [\n { type: 'dependency', key: 'commander' },\n ]},\n];\n",
104
+ "import { existsSync, readFileSync, readdirSync } from 'fs';\nimport { join } from 'path';\nimport type { DetectedFramework, Signal } from '../core/types.js';\nimport { FRAMEWORKS } from './frameworks.js';\nimport { detectDartProject } from './dart.js';\nimport { detectGoProject } from './go.js';\nimport { detectCsharpProject, listRootCsprojs } from './csharp.js';\nimport { detectJvmProject, isJvmRoot } from './jvm.js';\nimport { detectRubyProject } from './ruby.js';\nimport { detectSwiftProject } from './swift.js';\n\ninterface PackageJson {\n name?: string;\n version?: string;\n description?: string;\n keywords?: string[];\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n type?: string;\n main?: string;\n types?: string;\n exports?: unknown;\n bin?: string | Record<string, string>;\n private?: boolean;\n workspaces?: string[] | { packages?: string[] };\n files?: string[];\n}\n\n/** Read [package].name field from Cargo.toml — naive but adequate. */\nfunction readCargoName(dir: string): string | null {\n const path = join(dir, 'Cargo.toml');\n if (!existsSync(path)) {return null;}\n try {\n const content = readFileSync(path, 'utf-8');\n const m = content.match(/^\\s*\\[package\\][\\s\\S]*?^\\s*name\\s*=\\s*\"([^\"]+)\"/m);\n return m ? m[1] : null;\n } catch {\n return null;\n }\n}\n\n/** True if Cargo.toml declares one or more `[[bin]]` sections — Rust cli marker. */\nfunction hasCargoBin(dir: string): boolean {\n const path = join(dir, 'Cargo.toml');\n if (!existsSync(path)) {return false;}\n try {\n const content = readFileSync(path, 'utf-8');\n return /^\\s*\\[\\[bin\\]\\]/m.test(content);\n } catch {\n return false;\n }\n}\n\n/** Detect SDK signals — keyword-based per the SDK-priority doctrine.\n * Returns the matched evidence string, or null if no SDK signal. */\nfunction detectSdkSignal(dir: string, pkg: PackageJson | null): string | null {\n // pkg.keywords contains 'sdk'\n if (pkg?.keywords?.some(k => /^sdk(?:\\s|-|$)|-sdk$/i.test(k))) {\n return 'package.json keywords contains \"sdk\"';\n }\n // pkg.name contains 'sdk' or '-sdk' suffix\n if (pkg?.name && /(?:^|[-_/])sdk(?:[-_/]|$)/i.test(pkg.name)) {\n return `package.json name \"${pkg.name}\" → sdk`;\n }\n // Cargo.toml [package].name contains 'sdk'\n const cargoName = readCargoName(dir);\n if (cargoName && /(?:^|[-_])sdk(?:[-_]|$)/i.test(cargoName)) {\n return `Cargo.toml name \"${cargoName}\" → sdk`;\n }\n return null;\n}\n\n/** Browser / Chrome extension signal — a manifest.json that declares\n * `manifest_version` (the defining MV2/MV3 trait, absent from PWA web-app\n * manifests). Checked at the repo root and common source/build locations,\n * since extensions often keep the manifest under public/ or src/. */\nfunction detectExtensionSignal(dir: string): string | null {\n const candidates = [\n 'manifest.json',\n 'public/manifest.json',\n 'src/manifest.json',\n 'app/manifest.json',\n 'extension/manifest.json',\n 'dist/manifest.json',\n ];\n for (const rel of candidates) {\n const path = join(dir, rel);\n if (!existsSync(path)) {continue;}\n try {\n const parsed = JSON.parse(readFileSync(path, 'utf-8')) as { manifest_version?: unknown };\n if (typeof parsed.manifest_version === 'number') {\n return `${rel} manifest_version ${parsed.manifest_version} (browser extension)`;\n }\n } catch { /* not valid JSON / unreadable — keep scanning */ }\n }\n return null;\n}\n\n/** Python data-science dependency detection (pyproject.toml + requirements.txt). */\nfunction detectDataScienceSignal(dir: string): string | null {\n const dsPatterns = /(numpy|pandas|jupyter|scikit-learn|sklearn|pytorch|tensorflow|matplotlib|scipy)/i;\n const pyproject = join(dir, 'pyproject.toml');\n if (existsSync(pyproject)) {\n try {\n const content = readFileSync(pyproject, 'utf-8');\n const match = content.match(dsPatterns);\n if (match) {return `pyproject.toml depends on ${match[1]}`;}\n } catch { /* fall through */ }\n }\n const reqs = join(dir, 'requirements.txt');\n if (existsSync(reqs)) {\n try {\n const content = readFileSync(reqs, 'utf-8');\n const match = content.match(dsPatterns);\n if (match) {return `requirements.txt contains ${match[1]}`;}\n } catch { /* fall through */ }\n }\n return null;\n}\n\n/** Mobile platform signal — JS mobile (React Native / Expo / Capacitor / Ionic)\n * + native ios/android dirs. Flutter/Dart is handled by detectDartProject. */\nfunction detectMobileSignal(dir: string, pkg: PackageJson | null): string | null {\n const mobileDeps = ['react-native', 'expo', '@capacitor/core', '@ionic/core'];\n if (pkg) {\n for (const dep of mobileDeps) {\n if (pkg.dependencies?.[dep] || pkg.devDependencies?.[dep]) {\n return `${dep} dependency`;\n }\n }\n }\n if (existsSync(join(dir, 'ios')) && existsSync(join(dir, 'android'))) {\n return 'ios/ + android/ dirs';\n }\n return null;\n}\n\n/** WASM target detection (Cargo cdylib + wasm32 OR build.zig wasm OR pkg WASM build scripts). */\nfunction detectWasmSignal(dir: string, pkg: PackageJson | null): string | null {\n const cargoPath = join(dir, 'Cargo.toml');\n if (existsSync(cargoPath)) {\n try {\n const content = readFileSync(cargoPath, 'utf-8');\n // crate-type = [\"cdylib\"] is the canonical wasm-output marker\n if (/crate-type\\s*=\\s*\\[[^\\]]*\"cdylib\"/.test(content)) {\n return 'Cargo.toml crate-type = [\"cdylib\"]';\n }\n // wasm-bindgen / wasm-pack as deps\n if (/wasm-bindgen|wasm-pack/i.test(content)) {\n return 'Cargo.toml wasm-bindgen/wasm-pack';\n }\n } catch { /* fall through */ }\n }\n // Zig WASM target — build.zig with .wasm or wasm in script\n const buildZig = join(dir, 'build.zig');\n if (existsSync(buildZig)) {\n try {\n const content = readFileSync(buildZig, 'utf-8');\n if (/\\.wasm\\b|wasm32|setOutputFormat\\(\\.wasm/i.test(content)) {\n return 'build.zig wasm target';\n }\n } catch { /* fall through */ }\n }\n // pkg keywords contains 'wasm' AND no app frameworks\n if (pkg?.keywords?.some(k => /^wasm(?:-|$)|webassembly/i.test(k))) {\n return 'package.json keywords contains \"wasm\"';\n }\n return null;\n}\n\n/** Bare HTML / vanilla site detection. */\nfunction detectHtmlSignal(dir: string, pkg: PackageJson | null): string | null {\n // Must have index.html at root\n if (!existsSync(join(dir, 'index.html'))) {return null;}\n // Must NOT have any frontend deps (those would classify as frontend/website/etc)\n if (pkg?.dependencies || pkg?.devDependencies) {\n const allDeps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };\n const frontendDeps = ['react', 'vue', 'svelte', '@sveltejs/kit', 'next', 'nuxt', 'astro', 'gatsby', 'solid-js', 'qwik'];\n if (frontendDeps.some(d => allDeps[d])) {return null;}\n }\n return 'index.html (vanilla, no frontend framework)';\n}\n\n/** Documentation / spec-only repo signal. */\nfunction detectDocumentationSignal(dir: string, pkg: PackageJson | null): string | null {\n // Strong signal: name or keywords contains 'specification'\n if (pkg?.name && /specification|^@.*\\/spec/i.test(pkg.name)) {\n return `package name \"${pkg.name}\" → documentation`;\n }\n if (pkg?.keywords?.some(k => /^(specification|format-spec|standard)$/i.test(k))) {\n return 'package keywords contains \"specification\"';\n }\n // A publishable CLI/bin package is never \"docs-only\" — even if `files` is\n // npm-publish-narrow (e.g. [\"dist\", \"README.md\"]). Bare `dist`/`src`/`bin`\n // without a trailing slash is still source, not documentation.\n // (agents-md-facts false positive: bin present + files:[\"dist\",\"README.md\",\"LICENSE\"]\n // classified as documentation before the cli check could run.)\n if (pkg?.bin) {\n return null;\n }\n // pkg.files contains only md / examples / assets (no dist/, no src/)\n if (pkg?.files && pkg.files.length > 0) {\n // Match \"dist\", \"dist/\", \"src/cli.ts\", \"*.js\", etc. — bare publish dirs count as source\n const sourcePatterns =\n /^(dist|src|lib|build|bin)(\\/|$)|\\/(dist|src|lib|build|bin)(\\/|$)|(\\.|\\/)(js|ts|tsx|jsx|mjs|cjs|py|rs|go)$/;\n const hasSource = pkg.files.some(f => sourcePatterns.test(f));\n const hasDocs = pkg.files.some(f => /\\.(md|MD)$|examples?\\//.test(f) || f === 'README.md' || f === 'docs' || f === 'docs/');\n if (!hasSource && hasDocs) {\n return 'package.json files = docs/examples only (no source)';\n }\n }\n return null;\n}\n\n/** Marketing / website signal — Astro/Gatsby static OR pkg keywords. */\nfunction detectWebsiteSignal(dir: string, pkg: PackageJson | null, frameworks: DetectedFramework[]): string | null {\n // Astro/Gatsby are typically used for content/marketing sites\n const astroOrGatsby = frameworks.find(f => f.slug === 'astro' || f.slug === 'gatsby');\n if (astroOrGatsby) {return `${astroOrGatsby.name} (static-site framework)`;}\n // pkg.keywords explicitly marketing\n if (pkg?.keywords?.some(k => /^(website|marketing|landing|brochure|portfolio)$/i.test(k))) {\n return 'package keywords contains \"website\"/\"marketing\"/\"landing\"';\n }\n return null;\n}\n\n/** SAAS shape — auth + payments + database + dashboard. */\nfunction detectSaasSignal(dir: string, pkg: PackageJson | null): string | null {\n if (!pkg) {return null;}\n const allDeps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };\n const authDeps = ['@clerk/nextjs', '@clerk/clerk-react', 'next-auth', '@auth/core', 'auth0', '@auth0/nextjs-auth0'];\n const paymentDeps = ['stripe', '@stripe/stripe-js', 'lemonsqueezy'];\n const hasAuth = authDeps.some(d => allDeps[d]);\n const hasPayment = paymentDeps.some(d => allDeps[d]);\n if (hasAuth && hasPayment) {\n return 'auth + payment dependencies';\n }\n return null;\n}\n\n/** MCPaaS (post-MCP platform) shape — multiple MCP signals + hosting + DB. */\nfunction detectMcpaasSignal(dir: string, pkg: PackageJson | null, frameworks: DetectedFramework[]): string | null {\n // pkg.keywords contains 'mcpaas' is the strongest signal\n if (pkg?.keywords?.some(k => /mcpaas/i.test(k))) {\n return 'package keywords contains \"mcpaas\"';\n }\n // pkg.name contains 'mcpaas'\n if (pkg?.name && /mcpaas/i.test(pkg.name)) {\n return `package name \"${pkg.name}\" → mcpaas`;\n }\n // Multi-signal: MCP framework + database + hosting (a platform, not a single server)\n const hasMcp = frameworks.some(f => f.slug === 'mcp');\n const hasDb = frameworks.some(f => f.category === 'database');\n if (hasMcp && hasDb && pkg?.dependencies && Object.keys(pkg.dependencies).length > 10) {\n return 'MCP + database + complex deps (platform shape)';\n }\n return null;\n}\n\n/** Monorepo-root — private workspace with multiple packages, no single dominant FW. */\nfunction detectMonorepoRootSignal(dir: string, pkg: PackageJson | null): string | null {\n if (!pkg?.private) {return null;}\n const hasWorkspaces = !!pkg.workspaces || existsSync(join(dir, 'pnpm-workspace.yaml'));\n if (!hasWorkspaces) {return null;}\n return 'private workspace + multi-package';\n}\n\n/** Read and parse package.json from a directory */\nexport function readPackageJson(dir: string): PackageJson | null {\n const pkgPath = join(dir, 'package.json');\n if (!existsSync(pkgPath)) {return null;}\n try {\n return JSON.parse(readFileSync(pkgPath, 'utf-8'));\n } catch {\n return null;\n }\n}\n\n/** Scan a directory for files matching patterns */\nfunction fileExists(dir: string, pattern: string): boolean {\n // Handle simple file checks\n if (!pattern.includes('*')) {\n return existsSync(join(dir, pattern));\n }\n\n // Handle glob patterns like \"next.config.*\" or \".github/workflows/*.yml\"\n const parts = pattern.split('/');\n if (parts.length === 1) {\n // Simple wildcard: \"next.config.*\"\n const prefix = pattern.split('*')[0];\n try {\n return readdirSync(dir).some(f => f.startsWith(prefix));\n } catch {\n return false;\n }\n }\n\n // Multi-level: \".github/workflows/*.yml\"\n const subdir = join(dir, ...parts.slice(0, -1));\n const filePattern = parts[parts.length - 1];\n const prefix = filePattern.split('*')[0];\n const suffix = filePattern.split('*')[1] || '';\n try {\n return readdirSync(subdir).some(f => f.startsWith(prefix) && f.endsWith(suffix));\n } catch {\n return false;\n }\n}\n\n/** Match a single signal against project data */\nfunction matchSignal(signal: Signal, pkg: PackageJson | null, dir: string): boolean {\n switch (signal.type) {\n case 'dependency':\n return !!(pkg?.dependencies?.[signal.key!]);\n case 'devDependency':\n return !!(pkg?.devDependencies?.[signal.key!]);\n case 'file':\n return fileExists(dir, signal.pattern!);\n case 'content': {\n // File must exist AND contain key (case-insensitive). Used so pom/gradle\n // alone never claim Spring Boot — JVM Edition kill line for tech_stack.\n if (!signal.pattern || !signal.key) {return false;}\n if (!fileExists(dir, signal.pattern)) {return false;}\n try {\n // Resolve first match for globs like next.config.* via existing helper path\n const path = join(dir, signal.pattern);\n if (!existsSync(path)) {\n // pattern may be a simple relative path that fileExists handled via glob\n return false;\n }\n const body = readFileSync(path, 'utf-8').toLowerCase();\n return body.includes(signal.key.toLowerCase());\n } catch {\n return false;\n }\n }\n default:\n return false;\n }\n}\n\n/** Detect frameworks in a directory */\nexport function detectFrameworks(dir: string): DetectedFramework[] {\n const pkg = readPackageJson(dir);\n\n return FRAMEWORKS\n .map(fw => {\n const matched = fw.signals.filter(s => matchSignal(s, pkg, dir));\n const confidence = matched.length / fw.signals.length;\n return { name: fw.name, slug: fw.slug, category: fw.category, confidence };\n })\n .filter(fw => fw.confidence > 0)\n .sort((a, b) => b.confidence - a.confidence);\n}\n\n/** Detect the primary language of a project */\nexport function detectLanguage(dir: string): string {\n const pkg = readPackageJson(dir);\n\n // Check for TypeScript\n if (pkg?.devDependencies?.typescript || pkg?.dependencies?.typescript) {return 'TypeScript';}\n if (existsSync(join(dir, 'tsconfig.json'))) {return 'TypeScript';}\n\n // Check for common language indicators\n if (existsSync(join(dir, 'Cargo.toml'))) {return 'Rust';}\n if (existsSync(join(dir, 'go.mod'))) {return 'Go';}\n if (listRootCsprojs(dir).length > 0) {return 'C#';}\n if (existsSync(join(dir, 'pyproject.toml')) || existsSync(join(dir, 'setup.py'))) {return 'Python';}\n if (existsSync(join(dir, 'Gemfile'))) {return 'Ruby';}\n if (isJvmRoot(dir)) {\n const jvm = detectJvmProject(dir);\n if (jvm) {return jvm.mainLanguage === 'Java/Kotlin' ? 'Kotlin' : jvm.mainLanguage;}\n return 'Java';\n }\n if (existsSync(join(dir, 'Package.swift'))) {return 'Swift';}\n if (existsSync(join(dir, 'build.zig'))) {return 'Zig';}\n if (existsSync(join(dir, 'pubspec.yaml'))) {return 'Dart';}\n\n // Fallback to JS if package.json exists\n if (pkg) {return 'JavaScript';}\n\n return 'Unknown';\n}\n\n/** Project-type detection result + rationale (the #found list).\n * Each `found` entry is a human-readable signal that contributed to the\n * classification — emitted as a YAML comment by `writeFaf` for transparency\n * (\"Glass Hood\" doctrine: the user sees WHY the cli classified as it did). */\nexport interface ProjectTypeDetection {\n type: string;\n /** Signals that matched, in order observed. */\n found: string[];\n}\n\n/** Detect the project type with rationale. The `found` list captures every\n * positive signal that contributed to the classification — used downstream\n * by `writeFaf` to render `# found: <list>` next to `type:` in the .faf.\n *\n * Priority order per v6.6.md doctrine (most-specific first). About is a\n * repo role (`about.represents`), not an app_type — never matches here.\n * Rule: SDK keyword takes priority (sdk wins over library/cli/wasm). */\nexport function detectProjectTypeWithRationale(dir: string): ProjectTypeDetection {\n const pkg = readPackageJson(dir);\n const frameworks = detectFrameworks(dir);\n const found: string[] = [];\n\n // ─── 1. documentation — spec-only / docs-only repos ─────────────────────\n const docSignal = detectDocumentationSignal(dir, pkg);\n if (docSignal) {\n found.push(docSignal);\n return { type: 'documentation', found };\n }\n\n // ─── 2. sdk — SDK keyword/structure WINS over mcpaas/saas/wasm/cli/library ─\n // wolfejam doctrine: if a repo signals SDK (name contains \"-sdk\", keywords\n // contains \"sdk\"), it's an SDK regardless of what platform/wasm/cli signals\n // would also fire. Confirmed for mcpaas-sdk (SDK FOR the platform, not the\n // platform itself).\n const sdkSignal = detectSdkSignal(dir, pkg);\n if (sdkSignal) {\n found.push(sdkSignal);\n return { type: 'sdk', found };\n }\n\n // ─── 3. extension — browser/chrome extension (manifest_version) ─────────\n // manifest_version is the unambiguous MV2/MV3 trait — must beat the framework\n // heuristics below (a framework-built extension would otherwise classify as\n // svelte/frontend/fullstack — confirmed on Stack⚡️Grabber).\n const extensionSignal = detectExtensionSignal(dir);\n if (extensionSignal) {\n found.push(extensionSignal);\n return { type: 'extension', found };\n }\n\n // ─── 4. mcpaas — post-MCP platforms (multiple MCP signals + auth + DB) ──\n const mcpaasSignal = detectMcpaasSignal(dir, pkg, frameworks);\n if (mcpaasSignal) {\n found.push(mcpaasSignal);\n return { type: 'mcpaas', found };\n }\n\n // ─── 5. saas — subscription products (auth + payment) ───────────────────\n const saasSignal = detectSaasSignal(dir, pkg);\n if (saasSignal) {\n found.push(saasSignal);\n return { type: 'saas', found };\n }\n\n // ─── 6. wasm — WASM target in build config ──────────────────────────────\n const wasmSignal = detectWasmSignal(dir, pkg);\n if (wasmSignal) {\n found.push(wasmSignal);\n return { type: 'wasm', found };\n }\n\n // ─── 7. dart/flutter — content-aware pubspec classification. The same\n // manifest backs Flutter apps, Dart CLIs, packages, servers, and MCP\n // servers — branch by deps (Flutter→mobile, Dart MCP→mcp, Dart\n // server→backend, CLI→cli, package→library). Unambiguous Dart. ──────\n const dart = detectDartProject(dir);\n if (dart) {\n found.push(dart.found);\n return { type: dart.appType, found };\n }\n\n // ─── 7a. go — content-aware go.mod classification (same composition as Dart).\n // go.mod alone ≠ backend: MCP · Gin/Echo/… · Cobra/cmd · library. ───\n const go = detectGoProject(dir);\n if (go) {\n found.push(go.found);\n return { type: go.appType, found };\n }\n\n // ─── 7a2. csharp — content-aware .csproj classification.\n // .csproj alone ≠ type: Sdk first · MCP · web/worker · CLI · library. ─\n const csharp = detectCsharpProject(dir);\n if (csharp) {\n found.push(csharp.found);\n return { type: csharp.appType, found };\n }\n\n // ─── 7a3. jvm — content-aware pom/gradle classification.\n // pom/gradle alone ≠ type: plugins · parents · catalogs · MCP · Android/KMP. ─\n const jvm = detectJvmProject(dir);\n if (jvm) {\n found.push(jvm.found);\n return { type: jvm.appType, found };\n }\n\n // ─── 7a4. ruby — content-aware Gemfile classification.\n // Gemfile alone ≠ Rails: gem names · layout · MCP · CLI · library. ─\n const ruby = detectRubyProject(dir);\n if (ruby) {\n found.push(ruby.found);\n return { type: ruby.appType, found };\n }\n\n // ─── 7a5. swift — content-aware Package.swift / Xcode classification.\n // Package.swift alone ≠ app: products · deps · MCP · Vapor · CLI · library. ─\n const swift = detectSwiftProject(dir);\n if (swift) {\n found.push(swift.found);\n return { type: swift.appType, found };\n }\n\n // ─── 7b. mobile — JS mobile platform deps / native dirs ─────────────────\n const mobileSignal = detectMobileSignal(dir, pkg);\n if (mobileSignal) {\n found.push(mobileSignal);\n return { type: 'mobile', found };\n }\n\n // ─── 8. mcp — single MCP server ─────────────────────────────────────────\n const hasMcp = frameworks.some(f => f.slug === 'mcp');\n if (hasMcp) {\n found.push('MCP SDK signal');\n return { type: 'mcp', found };\n }\n\n // ─── 9. cli — Node bin / Cargo [[bin]] / Zig main.zig ───────────────────\n if (pkg?.bin) {\n found.push('package.json bin');\n return { type: 'cli', found };\n }\n if (hasCargoBin(dir)) {\n found.push('Cargo.toml [[bin]]');\n return { type: 'cli', found };\n }\n\n // Zig project-type detection — build.zig + entry-file convention.\n // src/main.zig → cli (executable); src/root.zig → library.\n // main.zig wins when both exist (typical: cli with internal lib exports).\n if (existsSync(join(dir, 'build.zig'))) {\n found.push('build.zig');\n if (existsSync(join(dir, 'src/main.zig'))) {\n found.push('src/main.zig');\n return { type: 'cli', found };\n }\n if (existsSync(join(dir, 'src/root.zig'))) {\n found.push('src/root.zig');\n return { type: 'library', found };\n }\n }\n\n // ─── 10. framework — private workspace + Svelte ──────────────────────────\n const hasSvelte = frameworks.some(f => f.slug === 'svelte' || f.slug === 'sveltekit');\n const isPrivateWorkspace = pkg?.private === true && (\n existsSync(join(dir, 'pnpm-workspace.yaml')) ||\n pkg?.workspaces !== undefined\n );\n if (isPrivateWorkspace && hasSvelte) {\n found.push('private workspace', 'Svelte');\n return { type: 'framework', found };\n }\n\n // ─── 11. svelte — Svelte/SvelteKit app (fullstack by nature) ────────────\n if (hasSvelte) {\n found.push('Svelte/SvelteKit');\n return { type: 'svelte', found };\n }\n\n // ─── 12. enterprise — private workspace + multi-FW (more specific than monorepo-root) ──\n // Must be checked BEFORE monorepo-root (which is private workspace fallback).\n const hasFrontendFw = frameworks.some(f => f.category === 'frontend');\n const hasBackendFw = frameworks.some(f => f.category === 'backend');\n if (\n pkg?.private &&\n (pkg.workspaces || existsSync(join(dir, 'pnpm-workspace.yaml'))) &&\n hasFrontendFw && hasBackendFw\n ) {\n found.push('private workspace + frontend + backend frameworks');\n return { type: 'enterprise', found };\n }\n\n // ─── 13. monorepo-root — private workspace, multi-package, no specific FW story ──\n const monoSignal = detectMonorepoRootSignal(dir, pkg);\n if (monoSignal) {\n found.push(monoSignal);\n return { type: 'monorepo-root', found };\n }\n\n // ─── 14. website — marketing-shape (Astro/Gatsby OR keywords) ───────────\n const websiteSignal = detectWebsiteSignal(dir, pkg, frameworks);\n if (websiteSignal) {\n found.push(websiteSignal);\n return { type: 'website', found };\n }\n\n // ─── 15. fullstack — Next/Nuxt OR (frontend + backend) ──────────────────\n const hasNextOrNuxt = frameworks.some(f => f.slug === 'nextjs' || f.slug === 'nuxt');\n if (hasNextOrNuxt) {\n found.push(frameworks.find(f => f.slug === 'nextjs') ? 'Next.js' : 'Nuxt');\n return { type: 'fullstack', found };\n }\n\n const hasFrontend = frameworks.some(f => f.category === 'frontend');\n const hasBackend = frameworks.some(f => f.category === 'backend');\n if (hasFrontend && hasBackend) {\n found.push('frontend framework', 'backend framework');\n return { type: 'fullstack', found };\n }\n\n // ─── 16. frontend — frontend framework only ─────────────────────────────\n if (hasFrontend) {\n found.push('frontend framework');\n return { type: 'frontend', found };\n }\n\n // ─── 17. backend — backend framework only ───────────────────────────────\n if (hasBackend) {\n found.push('backend framework');\n return { type: 'backend', found };\n }\n\n // ─── 18. data-science — Python DS deps (numpy/pandas/jupyter/sklearn) ───\n const dsSignal = detectDataScienceSignal(dir);\n if (dsSignal) {\n found.push(dsSignal);\n return { type: 'data-science', found };\n }\n\n // ─── 19. html — bare index.html, no framework ──────────────────────────\n const htmlSignal = detectHtmlSignal(dir, pkg);\n if (htmlSignal) {\n found.push(htmlSignal);\n return { type: 'html', found };\n }\n\n // ─── 20. library — fallback (has main/exports but no bin) ──────────────\n if (pkg?.main && !pkg?.bin) {\n found.push('package.json main (no bin)');\n return { type: 'library', found };\n }\n\n // Default — bare repo with no classifying signals\n found.push('no classifying signals — fallback');\n return { type: 'library', found };\n}\n\n/** Detect the project type for slot mapping. Backward-compatible wrapper —\n * returns just the type string. New code should prefer\n * `detectProjectTypeWithRationale` to access the `#found` rationale. */\nexport function detectProjectType(dir: string): string {\n return detectProjectTypeWithRationale(dir).type;\n}\n\n/** Detect the runtime */\nexport function detectRuntime(dir: string): string {\n if (existsSync(join(dir, 'bunfig.toml'))) {return 'Bun';}\n if (existsSync(join(dir, 'deno.json')) || existsSync(join(dir, 'deno.jsonc'))) {return 'Deno';}\n if (readPackageJson(dir)) {return 'Node.js';}\n if (existsSync(join(dir, 'Cargo.toml'))) {return 'Rust';}\n if (existsSync(join(dir, 'go.mod'))) {return 'Go';}\n if (listRootCsprojs(dir).length > 0) {return '.NET';}\n if (existsSync(join(dir, 'pubspec.yaml'))) {return 'Dart';}\n return 'Unknown';\n}\n\n/** Detect package manager */\nexport function detectPackageManager(dir: string): string {\n if (existsSync(join(dir, 'pubspec.yaml'))) {return 'pub';}\n if (existsSync(join(dir, 'go.mod'))) {return 'go modules';}\n if (listRootCsprojs(dir).length > 0) {return 'NuGet';}\n if (existsSync(join(dir, 'pom.xml'))) {return 'maven';}\n if (\n existsSync(join(dir, 'build.gradle')) ||\n existsSync(join(dir, 'build.gradle.kts')) ||\n existsSync(join(dir, 'settings.gradle')) ||\n existsSync(join(dir, 'settings.gradle.kts'))\n ) {return 'gradle';}\n if (existsSync(join(dir, 'bun.lockb')) || existsSync(join(dir, 'bun.lock'))) {return 'bun';}\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) {return 'pnpm';}\n if (existsSync(join(dir, 'yarn.lock'))) {return 'yarn';}\n if (existsSync(join(dir, 'package-lock.json'))) {return 'npm';}\n return 'npm';\n}\n\n/** Detect CI/CD */\nexport function detectCicd(dir: string): string | null {\n if (existsSync(join(dir, '.github/workflows'))) {return 'GitHub Actions';}\n if (existsSync(join(dir, '.gitlab-ci.yml'))) {return 'GitLab CI';}\n if (existsSync(join(dir, '.circleci'))) {return 'CircleCI';}\n if (existsSync(join(dir, 'Jenkinsfile'))) {return 'Jenkins';}\n return null;\n}\n\n/** Detect hosting platform */\nexport function detectHosting(dir: string): string | null {\n if (existsSync(join(dir, 'vercel.json'))) {return 'Vercel';}\n if (existsSync(join(dir, 'netlify.toml'))) {return 'Netlify';}\n if (existsSync(join(dir, 'wrangler.toml'))) {return 'Cloudflare';}\n if (existsSync(join(dir, 'Dockerfile'))) {return 'Docker';}\n if (existsSync(join(dir, 'fly.toml'))) {return 'Fly.io';}\n if (existsSync(join(dir, 'render.yaml'))) {return 'Render';}\n return null;\n}\n\n/** Detect SvelteKit adapter from svelte.config.js */\nexport function detectSvelteAdapter(dir: string): string | null {\n const configPath = join(dir, 'svelte.config.js');\n if (!existsSync(configPath)) {return null;}\n try {\n const content = readFileSync(configPath, 'utf-8');\n // Match adapter imports: import adapter from '@sveltejs/adapter-vercel'\n // Or: import { adapter } from '@sveltejs/adapter-node'\n // Or: const adapter = require('@sveltejs/adapter-static')\n const adapterMatch = content.match(/@sveltejs\\/adapter-(\\w+)/);\n if (adapterMatch) {\n const adapter = adapterMatch[1];\n switch (adapter) {\n case 'vercel': return 'Vercel';\n case 'node': return 'Node';\n case 'static': return 'Static';\n case 'cloudflare': return 'Cloudflare';\n case 'netlify': return 'Netlify';\n case 'auto': return 'Auto';\n default: return adapter;\n }\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/** Detect build tool */\nexport function detectBuildTool(dir: string): string | null {\n const pkg = readPackageJson(dir);\n if (pkg?.devDependencies?.vite || pkg?.dependencies?.vite) {return 'Vite';}\n if (pkg?.devDependencies?.webpack || pkg?.dependencies?.webpack) {return 'webpack';}\n if (pkg?.devDependencies?.esbuild || pkg?.dependencies?.esbuild) {return 'esbuild';}\n if (existsSync(join(dir, 'tsconfig.json')) && pkg?.devDependencies?.typescript) {return 'TypeScript (tsc)';}\n return null;\n}\n\n/* ─── FAFB section helpers (top-level YAML keys read by compile_fafb) ───────\n *\n * These detect content for the FAFB binary's TECH_STACK, KEY_FILES, and\n * COMMANDS sections. ARCHITECTURE and CONTEXT are deliberately left empty\n * for user fill (architecture overlaps with human_context.how; context is\n * deliberately free-form additional signal beyond the 6Ws).\n */\n\n/** Detect a list of important file paths for the KEY_FILES FAFB section.\n * Returns up to ~10 entries, ordered by canonical importance. */\nexport function detectKeyFiles(dir: string): string[] {\n const candidates = [\n // Manifests\n 'package.json', 'Cargo.toml', 'pyproject.toml', 'go.mod',\n 'build.zig', 'build.zig.zon',\n // Entry points (TS/JS)\n 'src/index.ts', 'src/index.js', 'src/main.ts', 'src/cli.ts',\n // Entry points (Rust)\n 'src/main.rs', 'src/lib.rs',\n // Entry points (Zig)\n 'src/main.zig', 'src/root.zig',\n // Entry points (Python)\n 'src/__init__.py', 'main.py', '__main__.py',\n // Entry points (Go)\n 'main.go', 'cmd/main.go',\n // Specs / docs\n 'README.md', 'SPECIFICATION.md', 'BINARY-FORMAT.md',\n // Config\n 'tsconfig.json', 'wrangler.toml', 'vercel.json',\n ];\n return candidates.filter(f => existsSync(join(dir, f)));\n}\n\n/** Detect build/test/lint commands for the COMMANDS FAFB section.\n * Returns a Record<string, string> mapping command name → shell command. */\nexport function detectCommands(dir: string, pkg: PackageJson | null): Record<string, string> {\n const commands: Record<string, string> = {};\n\n // From package.json scripts (most reliable)\n if (pkg?.scripts) {\n for (const key of ['build', 'test', 'lint', 'dev', 'start']) {\n if (pkg.scripts[key]) {\n // Determine the runner — prefer bun if available, else npm\n const runner = existsSync(join(dir, 'bun.lock')) || existsSync(join(dir, 'bun.lockb'))\n ? 'bun run'\n : 'npm run';\n commands[key] = `${runner} ${key}`;\n }\n }\n }\n\n // Cargo defaults (Rust)\n if (existsSync(join(dir, 'Cargo.toml'))) {\n if (!commands.build) {commands.build = 'cargo build --release';}\n if (!commands.test) {commands.test = 'cargo test';}\n if (!commands.lint) {commands.lint = 'cargo clippy';}\n }\n\n // Zig defaults\n if (existsSync(join(dir, 'build.zig'))) {\n if (!commands.build) {commands.build = 'zig build';}\n if (!commands.test) {commands.test = 'zig build test';}\n }\n\n // Go defaults\n if (existsSync(join(dir, 'go.mod'))) {\n if (!commands.build) {commands.build = 'go build ./...';}\n if (!commands.test) {commands.test = 'go test ./...';}\n }\n\n // Python defaults (if pytest is detectable)\n if (existsSync(join(dir, 'pyproject.toml')) || existsSync(join(dir, 'pytest.ini'))) {\n if (!commands.test) {commands.test = 'pytest';}\n }\n\n return commands;\n}\n\n/** Detect a tech-stack list for the TECH_STACK FAFB section.\n * Combines language + frameworks + runtime into a flat list of strings\n * (matching the canonical xai-faf-rust project.faf shape). */\nexport function detectTechStack(\n dir: string,\n pkg: PackageJson | null,\n frameworks: DetectedFramework[],\n language: string,\n): string[] {\n const stack: string[] = [];\n\n // Language goes first\n if (language && language !== 'Unknown') {stack.push(language);}\n\n // Notable frameworks (frontend / backend / database / build)\n const notableCategories = new Set(['frontend', 'backend', 'database', 'build', 'css', 'state', 'monorepo']);\n for (const fw of frameworks) {\n if (notableCategories.has(fw.category)) {\n stack.push(fw.name);\n }\n }\n\n // Runtime if non-trivial (Node.js by default for JS — only call out Bun/Deno/etc.)\n if (existsSync(join(dir, 'bunfig.toml'))) {stack.push('Bun');}\n else if (existsSync(join(dir, 'deno.json')) || existsSync(join(dir, 'deno.jsonc'))) {stack.push('Deno');}\n\n // Top deps from package.json/Cargo.toml — only if stack is still sparse\n if (stack.length < 3 && pkg?.dependencies) {\n const topDeps = Object.keys(pkg.dependencies).slice(0, 5);\n for (const dep of topDeps) {\n if (!stack.some(s => s.toLowerCase().includes(dep.toLowerCase()))) {\n stack.push(dep);\n }\n }\n }\n\n return stack;\n}\n",
105
+ "import type { FrameworkSignature } from '../core/types.js';\n\n/** Data-driven framework signatures — one scanner evaluates all */\nexport const FRAMEWORKS: FrameworkSignature[] = [\n // Frontend Frameworks\n { name: 'Next.js', slug: 'nextjs', category: 'frontend', signals: [\n { type: 'dependency', key: 'next' },\n { type: 'file', pattern: 'next.config.*' },\n ]},\n { name: 'React', slug: 'react', category: 'frontend', signals: [\n { type: 'dependency', key: 'react' },\n ]},\n { name: 'SvelteKit', slug: 'sveltekit', category: 'frontend', signals: [\n { type: 'dependency', key: '@sveltejs/kit' },\n { type: 'file', pattern: 'svelte.config.*' },\n ]},\n { name: 'Svelte', slug: 'svelte', category: 'frontend', signals: [\n { type: 'dependency', key: 'svelte' },\n { type: 'devDependency', key: 'svelte' },\n ]},\n { name: 'Vue.js', slug: 'vue', category: 'frontend', signals: [\n { type: 'dependency', key: 'vue' },\n ]},\n { name: 'Nuxt', slug: 'nuxt', category: 'frontend', signals: [\n { type: 'dependency', key: 'nuxt' },\n { type: 'file', pattern: 'nuxt.config.*' },\n ]},\n { name: 'Angular', slug: 'angular', category: 'frontend', signals: [\n { type: 'dependency', key: '@angular/core' },\n { type: 'file', pattern: 'angular.json' },\n ]},\n { name: 'Astro', slug: 'astro', category: 'frontend', signals: [\n { type: 'dependency', key: 'astro' },\n { type: 'file', pattern: 'astro.config.*' },\n ]},\n { name: 'Solid', slug: 'solid', category: 'frontend', signals: [\n { type: 'dependency', key: 'solid-js' },\n ]},\n { name: 'Remix', slug: 'remix', category: 'frontend', signals: [\n { type: 'dependency', key: '@remix-run/react' },\n ]},\n { name: 'Gatsby', slug: 'gatsby', category: 'frontend', signals: [\n { type: 'dependency', key: 'gatsby' },\n { type: 'file', pattern: 'gatsby-config.*' },\n ]},\n { name: 'Qwik', slug: 'qwik', category: 'frontend', signals: [\n { type: 'dependency', key: '@builder.io/qwik' },\n ]},\n\n // SvelteKit Adapters (hosting signal)\n { name: 'Vercel (SvelteKit)', slug: 'adapter-vercel', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-vercel' },\n { type: 'devDependency', key: '@sveltejs/adapter-vercel' },\n ]},\n { name: 'Node (SvelteKit)', slug: 'adapter-node', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-node' },\n { type: 'devDependency', key: '@sveltejs/adapter-node' },\n ]},\n { name: 'Static (SvelteKit)', slug: 'adapter-static', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-static' },\n { type: 'devDependency', key: '@sveltejs/adapter-static' },\n ]},\n { name: 'Cloudflare (SvelteKit)', slug: 'adapter-cloudflare', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-cloudflare' },\n { type: 'devDependency', key: '@sveltejs/adapter-cloudflare' },\n ]},\n { name: 'Netlify (SvelteKit)', slug: 'adapter-netlify', category: 'hosting', signals: [\n { type: 'dependency', key: '@sveltejs/adapter-netlify' },\n { type: 'devDependency', key: '@sveltejs/adapter-netlify' },\n ]},\n\n // CSS Frameworks\n { name: 'Tailwind CSS', slug: 'tailwind', category: 'css', signals: [\n { type: 'dependency', key: 'tailwindcss' },\n { type: 'devDependency', key: 'tailwindcss' },\n { type: 'file', pattern: 'tailwind.config.*' },\n ]},\n { name: 'Bootstrap', slug: 'bootstrap', category: 'css', signals: [\n { type: 'dependency', key: 'bootstrap' },\n ]},\n { name: 'Styled Components', slug: 'styled-components', category: 'css', signals: [\n { type: 'dependency', key: 'styled-components' },\n ]},\n\n // UI Libraries\n { name: 'shadcn/ui', slug: 'shadcn', category: 'ui', signals: [\n { type: 'file', pattern: 'components.json' },\n { type: 'dependency', key: '@radix-ui/react-dialog' },\n ]},\n { name: 'Material UI', slug: 'mui', category: 'ui', signals: [\n { type: 'dependency', key: '@mui/material' },\n ]},\n { name: 'Chakra UI', slug: 'chakra', category: 'ui', signals: [\n { type: 'dependency', key: '@chakra-ui/react' },\n ]},\n { name: 'Ant Design', slug: 'antd', category: 'ui', signals: [\n { type: 'dependency', key: 'antd' },\n ]},\n\n // State Management\n { name: 'Redux', slug: 'redux', category: 'state', signals: [\n { type: 'dependency', key: '@reduxjs/toolkit' },\n ]},\n { name: 'Zustand', slug: 'zustand', category: 'state', signals: [\n { type: 'dependency', key: 'zustand' },\n ]},\n { name: 'Jotai', slug: 'jotai', category: 'state', signals: [\n { type: 'dependency', key: 'jotai' },\n ]},\n { name: 'Pinia', slug: 'pinia', category: 'state', signals: [\n { type: 'dependency', key: 'pinia' },\n ]},\n\n // Backend Frameworks\n { name: 'Express', slug: 'express', category: 'backend', signals: [\n { type: 'dependency', key: 'express' },\n ]},\n { name: 'Fastify', slug: 'fastify', category: 'backend', signals: [\n { type: 'dependency', key: 'fastify' },\n ]},\n { name: 'Hono', slug: 'hono', category: 'backend', signals: [\n { type: 'dependency', key: 'hono' },\n ]},\n { name: 'Elysia', slug: 'elysia', category: 'backend', signals: [\n { type: 'dependency', key: 'elysia' },\n ]},\n { name: 'NestJS', slug: 'nestjs', category: 'backend', signals: [\n { type: 'dependency', key: '@nestjs/core' },\n ]},\n { name: 'Koa', slug: 'koa', category: 'backend', signals: [\n { type: 'dependency', key: 'koa' },\n ]},\n { name: 'Django', slug: 'django', category: 'backend', signals: [\n { type: 'file', pattern: 'manage.py' },\n { type: 'file', pattern: 'settings.py' },\n ]},\n { name: 'Flask', slug: 'flask', category: 'backend', signals: [\n { type: 'file', pattern: 'app.py' },\n ]},\n { name: 'FastAPI', slug: 'fastapi', category: 'backend', signals: [\n { type: 'file', pattern: 'main.py' },\n ]},\n // Content-aware — Gemfile alone ≠ Rails (Ruby Edition kill line).\n { name: 'Rails', slug: 'rails', category: 'backend', signals: [\n { type: 'content', pattern: 'Gemfile', key: 'rails' },\n { type: 'content', pattern: 'Gemfile.lock', key: 'rails (' },\n { type: 'file', pattern: 'config/application.rb' },\n { type: 'file', pattern: 'config/routes.rb' },\n ]},\n // Content-aware — pom.xml / build.gradle alone ≠ Spring Boot (JVM Edition kill line).\n // `content` signals require the needle in the file body (see matchSignal).\n { name: 'Spring Boot', slug: 'spring', category: 'backend', signals: [\n { type: 'content', pattern: 'pom.xml', key: 'spring-boot' },\n { type: 'content', pattern: 'build.gradle', key: 'springframework.boot' },\n { type: 'content', pattern: 'build.gradle.kts', key: 'springframework.boot' },\n { type: 'content', pattern: 'gradle/libs.versions.toml', key: 'springframework.boot' },\n ]},\n // Content-aware — Package.swift alone ≠ app / Vapor (Swift Edition kill line).\n { name: 'Vapor', slug: 'vapor', category: 'backend', signals: [\n { type: 'content', pattern: 'Package.swift', key: 'vapor/vapor' },\n { type: 'content', pattern: 'Package.swift', key: 'product(name: \"Vapor\"' },\n { type: 'content', pattern: 'Package.swift', key: \"product(name: 'Vapor'\" },\n { type: 'file', pattern: 'Sources/App/configure.swift' },\n ]},\n { name: 'Hummingbird', slug: 'hummingbird', category: 'backend', signals: [\n { type: 'content', pattern: 'Package.swift', key: 'hummingbird-project/hummingbird' },\n { type: 'content', pattern: 'Package.swift', key: 'product(name: \"Hummingbird\"' },\n { type: 'content', pattern: 'Package.swift', key: \"product(name: 'Hummingbird'\" },\n ]},\n\n // Databases\n { name: 'Prisma', slug: 'prisma', category: 'database', signals: [\n { type: 'dependency', key: 'prisma' },\n { type: 'devDependency', key: 'prisma' },\n { type: 'file', pattern: 'prisma/schema.prisma' },\n ]},\n { name: 'Drizzle', slug: 'drizzle', category: 'database', signals: [\n { type: 'dependency', key: 'drizzle-orm' },\n { type: 'file', pattern: 'drizzle.config.*' },\n ]},\n { name: 'TypeORM', slug: 'typeorm', category: 'database', signals: [\n { type: 'dependency', key: 'typeorm' },\n ]},\n { name: 'Mongoose', slug: 'mongoose', category: 'database', signals: [\n { type: 'dependency', key: 'mongoose' },\n ]},\n\n // Build Tools\n { name: 'Vite', slug: 'vite', category: 'build', signals: [\n { type: 'dependency', key: 'vite' },\n { type: 'devDependency', key: 'vite' },\n { type: 'file', pattern: 'vite.config.*' },\n ]},\n { name: 'webpack', slug: 'webpack', category: 'build', signals: [\n { type: 'dependency', key: 'webpack' },\n { type: 'devDependency', key: 'webpack' },\n { type: 'file', pattern: 'webpack.config.*' },\n ]},\n { name: 'esbuild', slug: 'esbuild', category: 'build', signals: [\n { type: 'dependency', key: 'esbuild' },\n { type: 'devDependency', key: 'esbuild' },\n ]},\n { name: 'Turbopack', slug: 'turbopack', category: 'build', signals: [\n { type: 'file', pattern: 'turbo.json' },\n ]},\n\n // Testing\n { name: 'Jest', slug: 'jest', category: 'testing', signals: [\n { type: 'devDependency', key: 'jest' },\n { type: 'file', pattern: 'jest.config.*' },\n ]},\n { name: 'Vitest', slug: 'vitest', category: 'testing', signals: [\n { type: 'devDependency', key: 'vitest' },\n ]},\n { name: 'Playwright', slug: 'playwright', category: 'testing', signals: [\n { type: 'devDependency', key: '@playwright/test' },\n { type: 'file', pattern: 'playwright.config.*' },\n ]},\n { name: 'Cypress', slug: 'cypress', category: 'testing', signals: [\n { type: 'devDependency', key: 'cypress' },\n { type: 'file', pattern: 'cypress.config.*' },\n ]},\n\n // Monorepo Tools\n { name: 'Turborepo', slug: 'turborepo', category: 'monorepo', signals: [\n { type: 'devDependency', key: 'turbo' },\n { type: 'file', pattern: 'turbo.json' },\n ]},\n { name: 'Nx', slug: 'nx', category: 'monorepo', signals: [\n { type: 'devDependency', key: 'nx' },\n { type: 'file', pattern: 'nx.json' },\n ]},\n { name: 'Lerna', slug: 'lerna', category: 'monorepo', signals: [\n { type: 'devDependency', key: 'lerna' },\n { type: 'file', pattern: 'lerna.json' },\n ]},\n\n // MCP / AI\n { name: 'MCP SDK', slug: 'mcp', category: 'ai', signals: [\n { type: 'dependency', key: '@modelcontextprotocol/sdk' },\n ]},\n { name: 'Anthropic SDK', slug: 'anthropic', category: 'ai', signals: [\n { type: 'dependency', key: '@anthropic-ai/sdk' },\n ]},\n { name: 'OpenAI SDK', slug: 'openai', category: 'ai', signals: [\n { type: 'dependency', key: 'openai' },\n ]},\n { name: 'LangChain', slug: 'langchain', category: 'ai', signals: [\n { type: 'dependency', key: 'langchain' },\n ]},\n\n // Hosting / Deploy\n { name: 'Vercel', slug: 'vercel', category: 'hosting', signals: [\n { type: 'file', pattern: 'vercel.json' },\n ]},\n { name: 'Netlify', slug: 'netlify', category: 'hosting', signals: [\n { type: 'file', pattern: 'netlify.toml' },\n ]},\n { name: 'Docker', slug: 'docker', category: 'hosting', signals: [\n { type: 'file', pattern: 'Dockerfile' },\n { type: 'file', pattern: 'docker-compose.yml' },\n ]},\n { name: 'Cloudflare Workers', slug: 'cloudflare', category: 'hosting', signals: [\n { type: 'file', pattern: 'wrangler.toml' },\n { type: 'dependency', key: 'wrangler' },\n ]},\n\n // CI/CD\n { name: 'GitHub Actions', slug: 'github-actions', category: 'cicd', signals: [\n { type: 'file', pattern: '.github/workflows/*.yml' },\n ]},\n\n // Commander (CLI indicator)\n { name: 'Commander.js', slug: 'commander', category: 'cli', signals: [\n { type: 'dependency', key: 'commander' },\n ]},\n];\n",
103
106
  "import type { FafData } from '../core/types.js';\nimport { APP_TYPE_CATEGORIES, SLOTS } from '../core/slots.js';\nimport { FAF_VERSION } from '../core/version.js';\nimport {\n detectFrameworks,\n detectLanguage,\n detectProjectTypeWithRationale,\n detectRuntime,\n detectPackageManager,\n detectCicd,\n detectHosting,\n detectBuildTool,\n detectSvelteAdapter,\n readPackageJson,\n detectKeyFiles,\n detectCommands,\n detectTechStack,\n} from './scanner.js';\n\n/** Auto-detect project stack and generate .faf data */\nexport function detectStack(dir: string): FafData {\n const pkg = readPackageJson(dir);\n const frameworks = detectFrameworks(dir);\n const language = detectLanguage(dir);\n const detection = detectProjectTypeWithRationale(dir);\n const projectType = detection.type;\n const runtime = detectRuntime(dir);\n const pkgManager = detectPackageManager(dir);\n const cicd = detectCicd(dir);\n const hosting = detectHosting(dir);\n const buildTool = detectBuildTool(dir);\n\n // Find specific frameworks by category\n const frontendFw = frameworks.find(f => f.category === 'frontend');\n const cssFw = frameworks.find(f => f.category === 'css');\n const uiFw = frameworks.find(f => f.category === 'ui');\n const stateFw = frameworks.find(f => f.category === 'state');\n const backendFw = frameworks.find(f => f.category === 'backend');\n const dbFw = frameworks.find(f => f.category === 'database');\n\n // Determine which categories are active\n const activeCategories = APP_TYPE_CATEGORIES[projectType] || APP_TYPE_CATEGORIES.library;\n\n // Framework sub-type detection (framework → svelte, framework → nextjs, etc.)\n const isFramework = projectType === 'framework';\n const hasSvelteSignal = frameworks.some(f => f.slug === 'svelte' || f.slug === 'sveltekit');\n const frameworkSubType = isFramework && hasSvelteSignal ? 'svelte' : (isFramework ? null : null);\n\n // Svelte-aware: fires for svelte apps AND framework→svelte repos\n const isSvelte = projectType === 'svelte' || frameworkSubType === 'svelte';\n const svelteAdapter = isSvelte ? detectSvelteAdapter(dir) : null;\n const hasSvelteKit = isSvelte && frameworks.some(f => f.slug === 'sveltekit');\n\n // Framework repos: slots that never apply to framework source code\n const frameworkIgnoredSlots = new Set(['css_framework', 'ui_library', 'database', 'connection', 'hosting']);\n\n // Build stack with slotignored for inactive categories\n const stack: Record<string, string> = {};\n const stackSlots = SLOTS.filter(s => s.path.startsWith('stack.'));\n\n for (const slot of stackSlots) {\n const field = slot.path.replace('stack.', '');\n if (!activeCategories.includes(slot.category)) {\n stack[field] = 'slotignored';\n continue;\n }\n\n // Framework repos: slotignore slots that never apply to framework source code\n if (isFramework && frameworkIgnoredSlots.has(field)) {\n stack[field] = 'slotignored';\n continue;\n }\n\n // Auto-fill detected values (Svelte-aware overrides applied inline)\n switch (field) {\n case 'frontend': stack[field] = frontendFw?.name ?? (projectType === 'cli' ? 'CLI' : ''); break;\n case 'css_framework': stack[field] = cssFw?.name ?? ''; break;\n case 'ui_library': stack[field] = uiFw?.name ?? ''; break;\n case 'state_management':\n // Svelte 5 uses Runes — no external state library needed\n stack[field] = isSvelte ? (stateFw?.name ?? 'Runes') : (stateFw?.name ?? '');\n break;\n case 'backend':\n // SvelteKit IS the backend (server routes, form actions, hooks)\n stack[field] = isSvelte ? (hasSvelteKit ? 'SvelteKit' : (backendFw?.name ?? '')) : (backendFw?.name ?? '');\n break;\n case 'api_type':\n // SvelteKit uses form actions + server routes\n stack[field] = hasSvelteKit ? 'Server Routes' : '';\n break;\n case 'runtime': stack[field] = runtime !== 'Unknown' ? runtime : ''; break;\n case 'database':\n // Only populate if ORM actually detected\n stack[field] = dbFw?.name ?? '';\n break;\n case 'connection':\n stack[field] = dbFw?.name ?? '';\n break;\n case 'hosting':\n // Svelte adapter → hosting platform (adapter-vercel = Vercel, etc.)\n if (isSvelte && svelteAdapter) {\n stack[field] = svelteAdapter;\n } else {\n stack[field] = hosting ?? '';\n }\n break;\n case 'build':\n // SvelteKit always uses Vite\n stack[field] = isSvelte ? 'Vite' : (buildTool ?? '');\n break;\n case 'cicd': stack[field] = cicd ?? ''; break;\n case 'package_manager': stack[field] = pkgManager; break;\n default: stack[field] = ''; break;\n }\n }\n\n // Build monorepo section\n const monorepo: Record<string, string> = {};\n const monorepoSlots = SLOTS.filter(s => s.path.startsWith('monorepo.'));\n for (const slot of monorepoSlots) {\n const field = slot.path.replace('monorepo.', '');\n if (!activeCategories.includes(slot.category)) {\n monorepo[field] = 'slotignored';\n } else {\n monorepo[field] = '';\n }\n }\n\n // Build project section\n const project: Record<string, string> = {\n name: pkg?.name ?? dir.split('/').pop() ?? 'project',\n goal: pkg?.description ?? '',\n main_language: language,\n type: projectType,\n };\n if (isFramework && frameworkSubType) {\n project.framework = frameworkSubType;\n }\n\n // FAFB top-level sections (read by faf-rust-sdk's compile_fafb).\n // Without these, every cli-generated .fafb is META-only.\n // Per v6.6.md + faf-auto-no-guess-no-slop:\n // tech_stack/key_files/commands auto-populate from observable signals;\n // architecture/context stay empty (user fill — architecture overlaps with\n // human_context.how, context is free-form additional signal).\n const techStack = detectTechStack(dir, pkg, frameworks, language);\n const keyFiles = detectKeyFiles(dir);\n const commands = detectCommands(dir, pkg);\n\n const result: FafData = {\n faf_version: FAF_VERSION,\n project,\n stack,\n human_context: {\n who: '',\n what: pkg?.description ?? '',\n why: '',\n where: '',\n when: '',\n how: '',\n },\n monorepo,\n // Runtime-only meta. Stripped before YAML serialization by writeFaf,\n // which uses _meta.found to inject `# found: <list>` next to `type:`.\n // Glass Hood doctrine — the user sees WHY the cli classified as it did.\n _meta: { found: detection.found },\n };\n\n // Only emit FAFB top-level keys if non-empty (no slop / empty-list pollution)\n if (techStack.length > 0) {result.tech_stack = techStack;}\n if (keyFiles.length > 0) {result.key_files = keyFiles;}\n if (Object.keys(commands).length > 0) {result.commands = commands;}\n\n return result;\n}\n",
104
107
  "/**\n * README.md interrogation — extract slot content from semantic markdown anchors.\n *\n * Per faf-auto-no-guess-no-slop:\n * Each extractor looks for a specific anchor (heading, structural pattern).\n * If the anchor is missing or the content fails validation → return undefined.\n * No slot is synthesized from another slot's content.\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport { type ExtractedContext, isValidExtraction } from './types.js';\n\n/** Strip badge / image lines + blank lines from the top of a README */\nfunction stripPreamble(content: string): string {\n const lines = content.split('\\n');\n let i = 0;\n // Skip the title line (first H1) and any blank/badge lines after it\n while (i < lines.length && /^(#\\s|$)/.test(lines[i].trim())) {i++;}\n while (i < lines.length) {\n const line = lines[i].trim();\n // Badge lines: [![alt](url)](url) — image links inside markdown links\n if (/^\\[!\\[/.test(line)) { i++; continue; }\n // Standalone images: ![alt](url)\n if (/^!\\[/.test(line)) { i++; continue; }\n // HTML img tags\n if (/^<img\\s/i.test(line)) { i++; continue; }\n // Blank lines\n if (line === '') { i++; continue; }\n break;\n }\n return lines.slice(i).join('\\n');\n}\n\n/** Get the first prose paragraph (single block, no headings/lists/code) */\nfunction firstProseParagraph(content: string): string | null {\n const stripped = stripPreamble(content);\n const lines = stripped.split('\\n');\n const buf: string[] = [];\n for (const raw of lines) {\n const line = raw.trim();\n if (line === '') {\n if (buf.length > 0) {break;}\n continue;\n }\n // Stop at next heading / list / code / quote / table\n if (/^(#|>|```|---|\\||\\s*[-*+]\\s|\\d+\\.\\s)/.test(line)) {break;}\n // Skip pure-bold-tagline lines like \"**For Grok. For the rockets.**\"\n // (these are punchy spirit lines, not informative goal content)\n if (/^\\*\\*[^*]+\\*\\*\\s*$/.test(line) && buf.length === 0) {continue;}\n buf.push(line);\n }\n if (buf.length === 0) {return null;}\n return buf.join(' ').trim();\n}\n\n/** Extract content following a heading whose text matches `pattern` */\nfunction sectionContent(content: string, pattern: RegExp): string | null {\n const lines = content.split('\\n');\n let i = 0;\n while (i < lines.length) {\n const line = lines[i].trim();\n const m = line.match(/^(#{1,6})\\s+(.+)$/);\n if (m && pattern.test(m[2])) {\n const headingLevel = m[1].length;\n // Read prose lines until next heading of same-or-higher level\n const buf: string[] = [];\n i++;\n while (i < lines.length) {\n const next = lines[i].trim();\n const nextHeading = next.match(/^(#{1,6})\\s+/);\n if (nextHeading && nextHeading[1].length <= headingLevel) {break;}\n if (next === '') { if (buf.length > 0) {break;} i++; continue; }\n // Stop at structural elements (code blocks, lists, tables)\n if (/^(>|```|---|\\||\\s*[-*+]\\s|\\d+\\.\\s)/.test(next)) {break;}\n buf.push(next);\n i++;\n }\n if (buf.length === 0) {return null;}\n return buf.join(' ').trim();\n }\n i++;\n }\n return null;\n}\n\n/** Extract `project.goal` — first prose paragraph or ## Use Case / ## Goal */\nexport function extractGoal(content: string): string | undefined {\n // Anchor 1: explicit \"## Use Case\" / \"## Use Cases\" / \"## Goal\" section\n const explicit = sectionContent(content, /^(use\\s+cases?|goal)\\b/i);\n if (explicit && isValidExtraction(explicit)) {return explicit;}\n\n // Anchor 2: first prose paragraph after title/badges\n const tagline = firstProseParagraph(content);\n if (tagline && isValidExtraction(tagline)) {return tagline;}\n\n return undefined;\n}\n\n/** Extract `human_context.what` — ## About / ## Description / ## Overview */\nexport function extractWhat(content: string): string | undefined {\n const text = sectionContent(content, /^(about|description|overview|what(\\s+is\\s+this)?)\\b/i);\n if (text && isValidExtraction(text)) {return text;}\n return undefined;\n}\n\n/** Extract `human_context.who` — ## Audience / ## For Whom / ## Users */\nexport function extractWho(content: string): string | undefined {\n const text = sectionContent(content, /^(audience|users?|for\\s+whom|who(\\s+is\\s+this\\s+for)?)\\b/i);\n if (text && isValidExtraction(text)) {return text;}\n return undefined;\n}\n\n/** Extract `human_context.why` — ## Why / ## Motivation / ## Problem */\nexport function extractWhy(content: string): string | undefined {\n const text = sectionContent(content, /^(why|motivation|problem|rationale)\\b/i);\n if (text && isValidExtraction(text)) {return text;}\n return undefined;\n}\n\n/** Extract `human_context.where` — ## Deployment / ## Where it runs / ## Install */\nexport function extractWhere(content: string): string | undefined {\n // Prefer specific \"where it runs\" / \"deployment\" over generic \"install\"\n const specific = sectionContent(content, /^(deployment|where(\\s+it\\s+runs)?|hosting)\\b/i);\n if (specific && isValidExtraction(specific)) {return specific;}\n return undefined;\n}\n\n/** Extract `human_context.when` — ## Status / ## History / \"Production since\" */\nexport function extractWhen(content: string): string | undefined {\n const text = sectionContent(content, /^(status|history|timeline|since|launched)\\b/i);\n if (text && isValidExtraction(text)) {return text;}\n return undefined;\n}\n\n/** Extract `human_context.how` — ## Architecture / ## How it works / ## Approach */\nexport function extractHow(content: string): string | undefined {\n const text = sectionContent(content, /^(architecture|how(\\s+it\\s+works)?|approach|design)\\b/i);\n if (text && isValidExtraction(text)) {return text;}\n return undefined;\n}\n\n/** Read README.md and extract per-slot content. Returns {} if no README. */\nexport function interrogateReadme(dir: string): ExtractedContext {\n const candidates = ['README.md', 'README.MD', 'Readme.md', 'readme.md'];\n let path: string | null = null;\n for (const name of candidates) {\n const full = join(dir, name);\n if (existsSync(full)) { path = full; break; }\n }\n if (!path) {return {};}\n\n let content: string;\n try {\n content = readFileSync(path, 'utf-8');\n } catch {\n return {};\n }\n\n const result: ExtractedContext = {};\n\n const goal = extractGoal(content);\n if (goal) {result.project = { goal };}\n\n const human: NonNullable<ExtractedContext['human_context']> = {};\n const what = extractWhat(content); if (what) {human.what = what;}\n const who = extractWho(content); if (who) {human.who = who;}\n const why = extractWhy(content); if (why) {human.why = why;}\n const where = extractWhere(content); if (where) {human.where = where;}\n const when = extractWhen(content); if (when) {human.when = when;}\n const how = extractHow(content); if (how) {human.how = how;}\n\n if (Object.keys(human).length > 0) {result.human_context = human;}\n\n return result;\n}\n",
105
108
  "/**\n * Repo interrogation — extract slot content from README, Cargo.toml,\n * package.json, etc., without guessing or substituting generic slop.\n *\n * Contract (per faf-auto-no-guess-no-slop doctrine):\n * - Each slot has a per-slot evidence anchor\n * - If the anchor is missing → leave empty (do NOT synthesize from other slots)\n * - If the anchor is present but content is generic / too long / structural →\n * leave empty (do NOT settle for slop)\n * - Empty is honest; wrong is a lie\n *\n * Per goal-is-not-a-6w doctrine:\n * - `project.goal` is the elevator pitch / use case — its own anchor\n * - Each `human_context.*` 6W has its own anchor\n * - No slot inherits from / is split-extracted from another\n */\n\n/** Content extracted from a single source file (README, Cargo.toml, etc.) */\nexport interface ExtractedContext {\n project?: {\n /** One-line elevator pitch / use case. README first prose paragraph,\n * ## Use Case section, or Cargo.toml description. */\n goal?: string;\n };\n human_context?: {\n /** Audience — \"## Audience\" / \"for {audience}\" patterns */\n who?: string;\n /** What's being built — \"## About\" / \"## Description\" / \"X is...\" */\n what?: string;\n /** Motivation — \"## Why\" / \"## Motivation\" / \"Problem:\" */\n why?: string;\n /** Where it runs — \"## Deployment\" / \"## Where\" / install-target */\n where?: string;\n /** Status / timeline — \"## Status\" / \"Production since\" / version line */\n when?: string;\n /** Approach — \"## Architecture\" / \"## How it works\" */\n how?: string;\n };\n}\n\n/** Confidence threshold rules for extracted text — empty if violated */\nexport const EXTRACTION_LIMITS = {\n /** Minimum length for a slot to be considered worth filling (in chars) */\n MIN_LENGTH: 8,\n /** Maximum length — anything longer is documentation, not a slot fill */\n MAX_LENGTH: 280,\n} as const;\n\n/** Generic slop patterns — extracted text matching these is rejected */\nexport const SLOP_PATTERNS: readonly RegExp[] = [\n /^(see|see\\s+the?)\\s+readme/i,\n /^(tbd|todo|fixme|coming\\s+soon)\\b/i,\n /^(software|application|app|project|tool|library|framework)\\.?$/i,\n /^(for\\s+users|for\\s+developers)\\.?$/i,\n /^(description|goal|name|title)\\.?$/i,\n /^lorem\\s+ipsum/i,\n /^example(\\s+\\w+)?\\.?$/i,\n];\n\n/** Validate extracted text against the no-guess/no-slop doctrine */\nexport function isValidExtraction(text: string): boolean {\n const trimmed = text.trim();\n if (trimmed.length < EXTRACTION_LIMITS.MIN_LENGTH) {return false;}\n if (trimmed.length > EXTRACTION_LIMITS.MAX_LENGTH) {return false;}\n if (SLOP_PATTERNS.some((re) => re.test(trimmed))) {return false;}\n // Reject if text is mostly markdown structure (links, lists, tables)\n if (/^[\\s|\\-*+]/.test(trimmed)) {return false;}\n if (trimmed.split('\\n').length > 4) {return false;} // multi-paragraph blob\n return true;\n}\n",
@@ -107,7 +110,7 @@
107
110
  "/**\n * Repo interrogation orchestrator — runs all extractors and merges results.\n *\n * Order of precedence: extractors that run first WIN (their non-empty values\n * are kept; later extractors fill only empties). README is highest-precedence\n * because its prose is most likely to be hand-curated; manifest fields\n * (Cargo.toml description, package.json description) are fallbacks.\n *\n * The orchestrator never overwrites with empty — only fills empties.\n */\n\nimport type { ExtractedContext } from './types.js';\nimport { interrogateReadme } from './readme.js';\nimport { interrogateCargo } from './cargo.js';\n\nexport type { ExtractedContext } from './types.js';\nexport { interrogateReadme } from './readme.js';\nexport { interrogateCargo } from './cargo.js';\n\n/** Merge `b` into `a` — only fill empties in `a`, never overwrite. */\nfunction mergeFillEmpty(a: ExtractedContext, b: ExtractedContext): ExtractedContext {\n const out: ExtractedContext = {\n project: { ...(b.project ?? {}), ...(a.project ?? {}) },\n human_context: { ...(b.human_context ?? {}), ...(a.human_context ?? {}) },\n };\n // Strip empties for clean equality semantics\n if (out.project && Object.keys(out.project).length === 0) {delete out.project;}\n if (out.human_context && Object.keys(out.human_context).length === 0) {delete out.human_context;}\n return out;\n}\n\n/** Run all repo interrogators and return merged context. */\nexport function interrogateRepo(dir: string): ExtractedContext {\n // README wins on overlapping slots; Cargo.toml fills any remaining empties.\n return mergeFillEmpty(interrogateReadme(dir), interrogateCargo(dir));\n}\n",
108
111
  "/**\n * Shared .faf assembly pipeline. The full slot-filling flow used to build a\n * FRESH .faf for a directory:\n * detect → interrogate → slotignore inactive categories → Turbo-Cat → Relentless\n *\n * Used by BOTH `faf auto` (new-file path) and `faf git` (cloned repo) so they\n * can't drift — `faf git` previously ran detectStack alone (~33% vs ~75%).\n */\n\nimport { detectStack } from './stack.js';\nimport { interrogateRepo } from '../interrogate/index.js';\nimport { turboCatSlots } from './turbo-cat.js';\nimport { relentlessContext } from './relentless.js';\nimport { APP_TYPE_CATEGORIES, SLOTS, isPlaceholder } from '../core/slots.js';\n\n/** Build a fresh .faf for `dir` using the full slot-filling pipeline. */\nexport function assembleFreshFaf(dir: string): Record<string, unknown> {\n const detected = detectStack(dir) as Record<string, unknown>;\n const interrogated = interrogateRepo(dir) as Record<string, unknown>;\n\n const seeded = fillEmpties(detected, interrogated);\n applySlotIgnore(seeded);\n const withFormats = fillEmpties(seeded, turboCatSlots(dir) as Record<string, unknown>);\n return fillEmpties(withFormats, { human_context: relentlessContext(dir) } as Record<string, unknown>);\n}\n\n/** Mark slots outside the app-type's active categories as `slotignored`. */\nfunction applySlotIgnore(seeded: Record<string, unknown>): void {\n const projectType = (seeded.project as { type?: string } | undefined)?.type ?? 'library';\n const activeCategories = APP_TYPE_CATEGORIES[projectType] || APP_TYPE_CATEGORIES.library;\n for (const slot of SLOTS) {\n if (activeCategories.includes(slot.category)) {continue;}\n const [section, field] = slot.path.split('.');\n if (section === 'stack' && seeded.stack) {\n (seeded.stack as Record<string, string>)[field] = 'slotignored';\n }\n if (section === 'monorepo' && seeded.monorepo) {\n (seeded.monorepo as Record<string, string>)[field] = 'slotignored';\n }\n }\n}\n\n/** Fill empty/placeholder slots in `target` with values from `source`.\n * `target` wins when its slot is non-empty. Empty here is per `isPlaceholder`\n * (covers '', null, undefined, and known placeholder strings) — this is what\n * lets interrogated/detected values overwrite the empty-string defaults that\n * detectStack writes to human_context. */\nexport function fillEmpties(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...target };\n for (const [key, value] of Object.entries(source)) {\n const existing = result[key];\n if (isPlaceholder(existing)) {\n result[key] = value;\n } else if (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n typeof existing === 'object' &&\n existing !== null &&\n !Array.isArray(existing)\n ) {\n result[key] = fillEmpties(\n existing as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n }\n }\n return result;\n}\n"
109
112
  ],
110
- "mappings": "0UAEA,IAAM,GAAQ,OAAO,IAAI,YAAY,EAC/B,GAAM,OAAO,IAAI,eAAe,EAChC,GAAM,OAAO,IAAI,UAAU,EAC3B,GAAO,OAAO,IAAI,WAAW,EAC7B,GAAS,OAAO,IAAI,aAAa,EACjC,GAAM,OAAO,IAAI,UAAU,EAC3B,EAAY,OAAO,IAAI,gBAAgB,EACvC,GAAU,CAAC,IAAS,CAAC,CAAC,GAAQ,OAAO,IAAS,UAAY,EAAK,KAAe,GAC9E,GAAa,CAAC,IAAS,CAAC,CAAC,GAAQ,OAAO,IAAS,UAAY,EAAK,KAAe,GACjF,GAAQ,CAAC,IAAS,CAAC,CAAC,GAAQ,OAAO,IAAS,UAAY,EAAK,KAAe,GAC5E,GAAS,CAAC,IAAS,CAAC,CAAC,GAAQ,OAAO,IAAS,UAAY,EAAK,KAAe,GAC7E,GAAW,CAAC,IAAS,CAAC,CAAC,GAAQ,OAAO,IAAS,UAAY,EAAK,KAAe,GAC/E,GAAQ,CAAC,IAAS,CAAC,CAAC,GAAQ,OAAO,IAAS,UAAY,EAAK,KAAe,GAClF,SAAS,EAAY,CAAC,EAAM,CACxB,GAAI,GAAQ,OAAO,IAAS,SACxB,OAAQ,EAAK,SACJ,QACA,GACD,MAAO,GAEnB,MAAO,GAEX,SAAS,EAAM,CAAC,EAAM,CAClB,GAAI,GAAQ,OAAO,IAAS,SACxB,OAAQ,EAAK,SACJ,QACA,QACA,QACA,GACD,MAAO,GAEnB,MAAO,GAEX,IAAM,GAAY,CAAC,KAAU,GAAS,CAAI,GAAK,GAAa,CAAI,IAAM,CAAC,CAAC,EAAK,OAErE,SAAQ,GACR,OAAM,GACN,OAAM,GACN,aAAY,EACZ,QAAO,GACP,UAAS,GACT,OAAM,GACN,aAAY,GACZ,WAAU,GACV,gBAAe,GACf,cAAa,GACb,SAAQ,GACR,UAAS,GACT,UAAS,GACT,YAAW,GACX,SAAQ,qBClDhB,IAAI,MAEE,EAAQ,OAAO,aAAa,EAC5B,GAAO,OAAO,eAAe,EAC7B,EAAS,OAAO,aAAa,EA+BnC,SAAS,EAAK,CAAC,EAAM,EAAS,CAC1B,IAAM,EAAW,GAAY,CAAO,EACpC,GAAI,EAAS,WAAW,CAAI,GAExB,GADW,GAAO,KAAM,EAAK,SAAU,EAAU,OAAO,OAAO,CAAC,CAAI,CAAC,CAAC,IAC3D,EACP,EAAK,SAAW,KAGpB,QAAO,KAAM,EAAM,EAAU,OAAO,OAAO,CAAC,CAAC,CAAC,EAMtD,GAAM,MAAQ,EAEd,GAAM,KAAO,GAEb,GAAM,OAAS,EACf,SAAS,EAAM,CAAC,EAAK,EAAM,EAAS,EAAM,CACtC,IAAM,EAAO,GAAY,EAAK,EAAM,EAAS,CAAI,EACjD,GAAI,EAAS,OAAO,CAAI,GAAK,EAAS,OAAO,CAAI,EAE7C,OADA,GAAY,EAAK,EAAM,CAAI,EACpB,GAAO,EAAK,EAAM,EAAS,CAAI,EAE1C,GAAI,OAAO,IAAS,UAChB,GAAI,EAAS,aAAa,CAAI,EAAG,CAC7B,EAAO,OAAO,OAAO,EAAK,OAAO,CAAI,CAAC,EACtC,QAAS,EAAI,EAAG,EAAI,EAAK,MAAM,OAAQ,EAAE,EAAG,CACxC,IAAM,EAAK,GAAO,EAAG,EAAK,MAAM,GAAI,EAAS,CAAI,EACjD,GAAI,OAAO,IAAO,SACd,EAAI,EAAK,EACR,QAAI,IAAO,EACZ,OAAO,EACN,QAAI,IAAO,EACZ,EAAK,MAAM,OAAO,EAAG,CAAC,EACtB,GAAK,GAIZ,QAAI,EAAS,OAAO,CAAI,EAAG,CAC5B,EAAO,OAAO,OAAO,EAAK,OAAO,CAAI,CAAC,EACtC,IAAM,EAAK,GAAO,MAAO,EAAK,IAAK,EAAS,CAAI,EAChD,GAAI,IAAO,EACP,OAAO,EACN,QAAI,IAAO,EACZ,EAAK,IAAM,KACf,IAAM,EAAK,GAAO,QAAS,EAAK,MAAO,EAAS,CAAI,EACpD,GAAI,IAAO,EACP,OAAO,EACN,QAAI,IAAO,EACZ,EAAK,MAAQ,MAGzB,OAAO,EAiCX,eAAe,EAAU,CAAC,EAAM,EAAS,CACrC,IAAM,EAAW,GAAY,CAAO,EACpC,GAAI,EAAS,WAAW,CAAI,GAExB,GADW,MAAM,GAAY,KAAM,EAAK,SAAU,EAAU,OAAO,OAAO,CAAC,CAAI,CAAC,CAAC,IACtE,EACP,EAAK,SAAW,KAGpB,WAAM,GAAY,KAAM,EAAM,EAAU,OAAO,OAAO,CAAC,CAAC,CAAC,EAMjE,GAAW,MAAQ,EAEnB,GAAW,KAAO,GAElB,GAAW,OAAS,EACpB,eAAe,EAAW,CAAC,EAAK,EAAM,EAAS,EAAM,CACjD,IAAM,EAAO,MAAM,GAAY,EAAK,EAAM,EAAS,CAAI,EACvD,GAAI,EAAS,OAAO,CAAI,GAAK,EAAS,OAAO,CAAI,EAE7C,OADA,GAAY,EAAK,EAAM,CAAI,EACpB,GAAY,EAAK,EAAM,EAAS,CAAI,EAE/C,GAAI,OAAO,IAAS,UAChB,GAAI,EAAS,aAAa,CAAI,EAAG,CAC7B,EAAO,OAAO,OAAO,EAAK,OAAO,CAAI,CAAC,EACtC,QAAS,EAAI,EAAG,EAAI,EAAK,MAAM,OAAQ,EAAE,EAAG,CACxC,IAAM,EAAK,MAAM,GAAY,EAAG,EAAK,MAAM,GAAI,EAAS,CAAI,EAC5D,GAAI,OAAO,IAAO,SACd,EAAI,EAAK,EACR,QAAI,IAAO,EACZ,OAAO,EACN,QAAI,IAAO,EACZ,EAAK,MAAM,OAAO,EAAG,CAAC,EACtB,GAAK,GAIZ,QAAI,EAAS,OAAO,CAAI,EAAG,CAC5B,EAAO,OAAO,OAAO,EAAK,OAAO,CAAI,CAAC,EACtC,IAAM,EAAK,MAAM,GAAY,MAAO,EAAK,IAAK,EAAS,CAAI,EAC3D,GAAI,IAAO,EACP,OAAO,EACN,QAAI,IAAO,EACZ,EAAK,IAAM,KACf,IAAM,EAAK,MAAM,GAAY,QAAS,EAAK,MAAO,EAAS,CAAI,EAC/D,GAAI,IAAO,EACP,OAAO,EACN,QAAI,IAAO,EACZ,EAAK,MAAQ,MAGzB,OAAO,EAEX,SAAS,EAAW,CAAC,EAAS,CAC1B,GAAI,OAAO,IAAY,WAClB,EAAQ,YAAc,EAAQ,MAAQ,EAAQ,OAC/C,OAAO,OAAO,OAAO,CACjB,MAAO,EAAQ,KACf,IAAK,EAAQ,KACb,OAAQ,EAAQ,KAChB,IAAK,EAAQ,IACjB,EAAG,EAAQ,OAAS,CAChB,IAAK,EAAQ,MACb,OAAQ,EAAQ,MAChB,IAAK,EAAQ,KACjB,EAAG,EAAQ,YAAc,CACrB,IAAK,EAAQ,WACb,IAAK,EAAQ,UACjB,EAAG,CAAO,EAEd,OAAO,EAEX,SAAS,EAAW,CAAC,EAAK,EAAM,EAAS,EAAM,CAC3C,GAAI,OAAO,IAAY,WACnB,OAAO,EAAQ,EAAK,EAAM,CAAI,EAClC,GAAI,EAAS,MAAM,CAAI,EACnB,OAAO,EAAQ,MAAM,EAAK,EAAM,CAAI,EACxC,GAAI,EAAS,MAAM,CAAI,EACnB,OAAO,EAAQ,MAAM,EAAK,EAAM,CAAI,EACxC,GAAI,EAAS,OAAO,CAAI,EACpB,OAAO,EAAQ,OAAO,EAAK,EAAM,CAAI,EACzC,GAAI,EAAS,SAAS,CAAI,EACtB,OAAO,EAAQ,SAAS,EAAK,EAAM,CAAI,EAC3C,GAAI,EAAS,QAAQ,CAAI,EACrB,OAAO,EAAQ,QAAQ,EAAK,EAAM,CAAI,EAC1C,OAEJ,SAAS,EAAW,CAAC,EAAK,EAAM,EAAM,CAClC,IAAM,EAAS,EAAK,EAAK,OAAS,GAClC,GAAI,EAAS,aAAa,CAAM,EAC5B,EAAO,MAAM,GAAO,EAEnB,QAAI,EAAS,OAAO,CAAM,EAC3B,GAAI,IAAQ,MACR,EAAO,IAAM,EAEb,OAAO,MAAQ,EAElB,QAAI,EAAS,WAAW,CAAM,EAC/B,EAAO,SAAW,EAEjB,KACD,IAAM,EAAK,EAAS,QAAQ,CAAM,EAAI,QAAU,SAChD,MAAU,MAAM,4BAA4B,UAAW,GAIvD,SAAQ,GACR,cAAa,qBCzOrB,IAAI,OACA,QAEE,GAAc,CAChB,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,KACT,EACM,GAAgB,CAAC,IAAO,EAAG,QAAQ,aAAc,KAAM,GAAY,EAAG,EAC5E,MAAM,CAAW,CACb,WAAW,CAAC,EAAM,EAAM,CAKpB,KAAK,SAAW,KAEhB,KAAK,OAAS,GACd,KAAK,KAAO,OAAO,OAAO,CAAC,EAAG,EAAW,YAAa,CAAI,EAC1D,KAAK,KAAO,OAAO,OAAO,CAAC,EAAG,EAAW,YAAa,CAAI,EAE9D,KAAK,EAAG,CACJ,IAAM,EAAO,IAAI,EAAW,KAAK,KAAM,KAAK,IAAI,EAEhD,OADA,EAAK,SAAW,KAAK,SACd,EAMX,UAAU,EAAG,CACT,IAAM,EAAM,IAAI,EAAW,KAAK,KAAM,KAAK,IAAI,EAC/C,OAAQ,KAAK,KAAK,aACT,MACD,KAAK,eAAiB,GACtB,UACC,MACD,KAAK,eAAiB,GACtB,KAAK,KAAO,CACR,SAAU,EAAW,YAAY,SACjC,QAAS,KACb,EACA,KAAK,KAAO,OAAO,OAAO,CAAC,EAAG,EAAW,WAAW,EACpD,MAER,OAAO,EAMX,GAAG,CAAC,EAAM,EAAS,CACf,GAAI,KAAK,eACL,KAAK,KAAO,CAAE,SAAU,EAAW,YAAY,SAAU,QAAS,KAAM,EACxE,KAAK,KAAO,OAAO,OAAO,CAAC,EAAG,EAAW,WAAW,EACpD,KAAK,eAAiB,GAE1B,IAAM,EAAQ,EAAK,KAAK,EAAE,MAAM,QAAQ,EAClC,EAAO,EAAM,MAAM,EACzB,OAAQ,OACC,OAAQ,CACT,GAAI,EAAM,SAAW,GAEjB,GADA,EAAQ,EAAG,iDAAiD,EACxD,EAAM,OAAS,EACf,MAAO,GAEf,IAAO,EAAQ,GAAU,EAEzB,OADA,KAAK,KAAK,GAAU,EACb,EACX,KACK,QAAS,CAEV,GADA,KAAK,KAAK,SAAW,GACjB,EAAM,SAAW,EAEjB,OADA,EAAQ,EAAG,iDAAiD,EACrD,GAEX,IAAO,GAAW,EAClB,GAAI,IAAY,OAAS,IAAY,MAEjC,OADA,KAAK,KAAK,QAAU,EACb,GAEN,KACD,IAAM,EAAU,aAAa,KAAK,CAAO,EAEzC,OADA,EAAQ,EAAG,4BAA4B,IAAW,CAAO,EAClD,GAEf,SAGI,OADA,EAAQ,EAAG,qBAAqB,IAAQ,EAAI,EACrC,IASnB,OAAO,CAAC,EAAQ,EAAS,CACrB,GAAI,IAAW,IACX,MAAO,IACX,GAAI,EAAO,KAAO,IAEd,OADA,EAAQ,oBAAoB,GAAQ,EAC7B,KAEX,GAAI,EAAO,KAAO,IAAK,CACnB,IAAM,EAAW,EAAO,MAAM,EAAG,EAAE,EACnC,GAAI,IAAa,KAAO,IAAa,KAEjC,OADA,EAAQ,qCAAqC,eAAoB,EAC1D,KAEX,GAAI,EAAO,EAAO,OAAS,KAAO,IAC9B,EAAQ,iCAAiC,EAC7C,OAAO,EAEX,KAAS,EAAQ,GAAU,EAAO,MAAM,iBAAiB,EACzD,GAAI,CAAC,EACD,EAAQ,OAAO,qBAA0B,EAC7C,IAAM,EAAS,KAAK,KAAK,GACzB,GAAI,EACA,GAAI,CACA,OAAO,EAAS,mBAAmB,CAAM,EAE7C,MAAO,EAAO,CAEV,OADA,EAAQ,OAAO,CAAK,CAAC,EACd,KAGf,GAAI,IAAW,IACX,OAAO,EAEX,OADA,EAAQ,0BAA0B,GAAQ,EACnC,KAMX,SAAS,CAAC,EAAK,CACX,QAAY,EAAQ,KAAW,OAAO,QAAQ,KAAK,IAAI,EACnD,GAAI,EAAI,WAAW,CAAM,EACrB,OAAO,EAAS,GAAc,EAAI,UAAU,EAAO,MAAM,CAAC,EAElE,OAAO,EAAI,KAAO,IAAM,EAAM,KAAK,KAEvC,QAAQ,CAAC,EAAK,CACV,IAAM,EAAQ,KAAK,KAAK,SAClB,CAAC,SAAS,KAAK,KAAK,SAAW,OAAO,EACtC,CAAC,EACD,EAAa,OAAO,QAAQ,KAAK,IAAI,EACvC,EACJ,GAAI,GAAO,EAAW,OAAS,GAAK,GAAS,OAAO,EAAI,QAAQ,EAAG,CAC/D,IAAM,EAAO,CAAC,EACd,GAAM,MAAM,EAAI,SAAU,CAAC,EAAM,IAAS,CACtC,GAAI,GAAS,OAAO,CAAI,GAAK,EAAK,IAC9B,EAAK,EAAK,KAAO,GACxB,EACD,EAAW,OAAO,KAAK,CAAI,EAG3B,OAAW,CAAC,EAChB,QAAY,EAAQ,KAAW,EAAY,CACvC,GAAI,IAAW,MAAQ,IAAW,qBAC9B,SACJ,GAAI,CAAC,GAAO,EAAS,KAAK,KAAM,EAAG,WAAW,CAAM,CAAC,EACjD,EAAM,KAAK,QAAQ,KAAU,GAAQ,EAE7C,OAAO,EAAM,KAAK;AAAA,CAAI,EAE9B,CACA,EAAW,YAAc,CAAE,SAAU,GAAO,QAAS,KAAM,EAC3D,EAAW,YAAc,CAAE,KAAM,oBAAqB,EAE9C,cAAa,oBC/KrB,IAAI,OACA,QAOJ,SAAS,EAAa,CAAC,EAAQ,CAC3B,GAAI,sBAAsB,KAAK,CAAM,EAAG,CAEpC,IAAM,EAAM,6DADD,KAAK,UAAU,CAAM,IAEhC,MAAU,MAAM,CAAG,EAEvB,MAAO,GAEX,SAAS,EAAW,CAAC,EAAM,CACvB,IAAM,EAAU,IAAI,IAOpB,OANA,GAAM,MAAM,EAAM,CACd,KAAK,CAAC,EAAM,EAAM,CACd,GAAI,EAAK,OACL,EAAQ,IAAI,EAAK,MAAM,EAEnC,CAAC,EACM,EAGX,SAAS,EAAa,CAAC,EAAQ,EAAS,CACpC,QAAS,EAAI,GAAS,EAAE,EAAG,CACvB,IAAM,EAAO,GAAG,IAAS,IACzB,GAAI,CAAC,EAAQ,IAAI,CAAI,EACjB,OAAO,GAGnB,SAAS,EAAiB,CAAC,EAAK,EAAQ,CACpC,IAAM,EAAe,CAAC,EAChB,EAAgB,IAAI,IACtB,EAAc,KAClB,MAAO,CACH,SAAU,CAAC,IAAW,CAClB,EAAa,KAAK,CAAM,EACxB,IAAgB,EAAc,GAAY,CAAG,GAC7C,IAAM,EAAS,GAAc,EAAQ,CAAW,EAEhD,OADA,EAAY,IAAI,CAAM,EACf,GAOX,WAAY,IAAM,CACd,QAAW,KAAU,EAAc,CAC/B,IAAM,EAAM,EAAc,IAAI,CAAM,EACpC,GAAI,OAAO,IAAQ,UACf,EAAI,SACH,GAAS,SAAS,EAAI,IAAI,GAAK,GAAS,aAAa,EAAI,IAAI,GAC9D,EAAI,KAAK,OAAS,EAAI,OAErB,KACD,IAAM,EAAY,MAAM,4DAA4D,EAEpF,MADA,EAAM,OAAS,EACT,KAIlB,eACJ,EAGI,iBAAgB,GAChB,eAAc,GACd,qBAAoB,GACpB,iBAAgB,qBClExB,SAAS,EAAY,CAAC,EAAS,EAAK,EAAK,EAAK,CAC1C,GAAI,GAAO,OAAO,IAAQ,SACtB,GAAI,MAAM,QAAQ,CAAG,EACjB,QAAS,EAAI,EAAG,EAAM,EAAI,OAAQ,EAAI,EAAK,EAAE,EAAG,CAC5C,IAAM,EAAK,EAAI,GACT,EAAK,GAAa,EAAS,EAAK,OAAO,CAAC,EAAG,CAAE,EAEnD,GAAI,IAAO,OACP,OAAO,EAAI,GACV,QAAI,IAAO,EACZ,EAAI,GAAK,EAGhB,QAAI,aAAe,IACpB,QAAW,KAAK,MAAM,KAAK,EAAI,KAAK,CAAC,EAAG,CACpC,IAAM,EAAK,EAAI,IAAI,CAAC,EACd,EAAK,GAAa,EAAS,EAAK,EAAG,CAAE,EAC3C,GAAI,IAAO,OACP,EAAI,OAAO,CAAC,EACX,QAAI,IAAO,EACZ,EAAI,IAAI,EAAG,CAAE,EAGpB,QAAI,aAAe,IACpB,QAAW,KAAM,MAAM,KAAK,CAAG,EAAG,CAC9B,IAAM,EAAK,GAAa,EAAS,EAAK,EAAI,CAAE,EAC5C,GAAI,IAAO,OACP,EAAI,OAAO,CAAE,EACZ,QAAI,IAAO,EACZ,EAAI,OAAO,CAAE,EACb,EAAI,IAAI,CAAE,EAKlB,aAAY,EAAG,KAAO,OAAO,QAAQ,CAAG,EAAG,CACvC,IAAM,EAAK,GAAa,EAAS,EAAK,EAAG,CAAE,EAC3C,GAAI,IAAO,OACP,OAAO,EAAI,GACV,QAAI,IAAO,EACZ,EAAI,GAAK,EAIzB,OAAO,EAAQ,KAAK,EAAK,EAAK,CAAG,EAG7B,gBAAe,qBCtDvB,IAAI,OAYJ,SAAS,EAAI,CAAC,EAAO,EAAK,EAAK,CAE3B,GAAI,MAAM,QAAQ,CAAK,EACnB,OAAO,EAAM,IAAI,CAAC,EAAG,IAAM,GAAK,EAAG,OAAO,CAAC,EAAG,CAAG,CAAC,EACtD,GAAI,GAAS,OAAO,EAAM,SAAW,WAAY,CAE7C,GAAI,CAAC,GAAO,CAAC,GAAS,UAAU,CAAK,EACjC,OAAO,EAAM,OAAO,EAAK,CAAG,EAChC,IAAM,EAAO,CAAE,WAAY,EAAG,MAAO,EAAG,IAAK,MAAU,EACvD,EAAI,QAAQ,IAAI,EAAO,CAAI,EAC3B,EAAI,SAAW,KAAO,CAClB,EAAK,IAAM,EACX,OAAO,EAAI,UAEf,IAAM,EAAM,EAAM,OAAO,EAAK,CAAG,EACjC,GAAI,EAAI,SACJ,EAAI,SAAS,CAAG,EACpB,OAAO,EAEX,GAAI,OAAO,IAAU,UAAY,CAAC,GAAK,KACnC,OAAO,OAAO,CAAK,EACvB,OAAO,EAGH,QAAO,qBCpCf,IAAI,QACA,OACA,QAEJ,MAAM,EAAS,CACX,WAAW,CAAC,EAAM,CACd,OAAO,eAAe,KAAM,GAAS,UAAW,CAAE,MAAO,CAAK,CAAC,EAGnE,KAAK,EAAG,CACJ,IAAM,EAAO,OAAO,OAAO,OAAO,eAAe,IAAI,EAAG,OAAO,0BAA0B,IAAI,CAAC,EAC9F,GAAI,KAAK,MACL,EAAK,MAAQ,KAAK,MAAM,MAAM,EAClC,OAAO,EAGX,IAAI,CAAC,GAAO,WAAU,gBAAe,WAAU,WAAY,CAAC,EAAG,CAC3D,GAAI,CAAC,GAAS,WAAW,CAAG,EACxB,MAAU,UAAU,iCAAiC,EACzD,IAAM,EAAM,CACR,QAAS,IAAI,IACb,MACA,KAAM,GACN,SAAU,IAAa,GACvB,aAAc,GACd,cAAe,OAAO,IAAkB,SAAW,EAAgB,GACvE,EACM,EAAM,GAAK,KAAK,KAAM,GAAI,CAAG,EACnC,GAAI,OAAO,IAAa,WACpB,QAAa,QAAO,SAAS,EAAI,QAAQ,OAAO,EAC5C,EAAS,EAAK,CAAK,EAC3B,OAAO,OAAO,IAAY,WACpB,GAAa,aAAa,EAAS,CAAE,GAAI,CAAI,EAAG,GAAI,CAAG,EACvD,EAEd,CAEQ,YAAW,qBCrCnB,IAAI,QACA,QACA,OACA,QACA,QAEJ,MAAM,WAAc,GAAK,QAAS,CAC9B,WAAW,CAAC,EAAQ,CAChB,MAAM,GAAS,KAAK,EACpB,KAAK,OAAS,EACd,OAAO,eAAe,KAAM,MAAO,CAC/B,GAAG,EAAG,CACF,MAAU,MAAM,8BAA8B,EAEtD,CAAC,EAML,OAAO,CAAC,EAAK,EAAK,CACd,IAAI,EACJ,GAAI,GAAK,kBACL,EAAQ,EAAI,kBAUZ,QAPA,EAAQ,CAAC,EACT,GAAM,MAAM,EAAK,CACb,KAAM,CAAC,EAAM,IAAS,CAClB,GAAI,GAAS,QAAQ,CAAI,GAAK,GAAS,UAAU,CAAI,EACjD,EAAM,KAAK,CAAI,EAE3B,CAAC,EACG,EACA,EAAI,kBAAoB,EAEhC,IAAI,EAAQ,OACZ,QAAW,KAAQ,EAAO,CACtB,GAAI,IAAS,KACT,MACJ,GAAI,EAAK,SAAW,KAAK,OACrB,EAAQ,EAEhB,OAAO,EAEX,MAAM,CAAC,EAAM,EAAK,CACd,GAAI,CAAC,EACD,MAAO,CAAE,OAAQ,KAAK,MAAO,EACjC,IAAQ,UAAS,MAAK,iBAAkB,EAClC,EAAS,KAAK,QAAQ,EAAK,CAAG,EACpC,GAAI,CAAC,EAAQ,CACT,IAAM,EAAM,+DAA+D,KAAK,SAChF,MAAU,eAAe,CAAG,EAEhC,IAAI,EAAO,EAAQ,IAAI,CAAM,EAC7B,GAAI,CAAC,EAED,GAAK,KAAK,EAAQ,KAAM,CAAG,EAC3B,EAAO,EAAQ,IAAI,CAAM,EAG7B,GAAI,GAAM,MAAQ,OAEd,MAAU,eADE,wDACgB,EAEhC,GAAI,GAAiB,EAAG,CAEpB,GADA,EAAK,OAAS,EACV,EAAK,aAAe,EACpB,EAAK,WAAa,GAAc,EAAK,EAAQ,CAAO,EACxD,GAAI,EAAK,MAAQ,EAAK,WAAa,EAE/B,MAAU,eADE,8DACgB,EAGpC,OAAO,EAAK,IAEhB,QAAQ,CAAC,EAAK,EAAY,EAAc,CACpC,IAAM,EAAM,IAAI,KAAK,SACrB,GAAI,EAAK,CAEL,GADA,GAAQ,cAAc,KAAK,MAAM,EAC7B,EAAI,QAAQ,kBAAoB,CAAC,EAAI,QAAQ,IAAI,KAAK,MAAM,EAAG,CAC/D,IAAM,EAAM,+DAA+D,KAAK,SAChF,MAAU,MAAM,CAAG,EAEvB,GAAI,EAAI,YACJ,MAAO,GAAG,KAElB,OAAO,EAEf,CACA,SAAS,EAAa,CAAC,EAAK,EAAM,EAAS,CACvC,GAAI,GAAS,QAAQ,CAAI,EAAG,CACxB,IAAM,EAAS,EAAK,QAAQ,CAAG,EACzB,EAAS,GAAW,GAAU,EAAQ,IAAI,CAAM,EACtD,OAAO,EAAS,EAAO,MAAQ,EAAO,WAAa,EAElD,QAAI,GAAS,aAAa,CAAI,EAAG,CAClC,IAAI,EAAQ,EACZ,QAAW,KAAQ,EAAK,MAAO,CAC3B,IAAM,EAAI,GAAc,EAAK,EAAM,CAAO,EAC1C,GAAI,EAAI,EACJ,EAAQ,EAEhB,OAAO,EAEN,QAAI,GAAS,OAAO,CAAI,EAAG,CAC5B,IAAM,EAAK,GAAc,EAAK,EAAK,IAAK,CAAO,EACzC,EAAK,GAAc,EAAK,EAAK,MAAO,CAAO,EACjD,OAAO,KAAK,IAAI,EAAI,CAAE,EAE1B,MAAO,GAGH,SAAQ,oBCjHhB,IAAI,OACA,QACA,QAEE,GAAgB,CAAC,IAAU,CAAC,GAAU,OAAO,IAAU,YAAc,OAAO,IAAU,SAC5F,MAAM,WAAe,GAAK,QAAS,CAC/B,WAAW,CAAC,EAAO,CACf,MAAM,GAAS,MAAM,EACrB,KAAK,MAAQ,EAEjB,MAAM,CAAC,EAAK,EAAK,CACb,OAAO,GAAK,KAAO,KAAK,MAAQ,GAAK,KAAK,KAAK,MAAO,EAAK,CAAG,EAElE,QAAQ,EAAG,CACP,OAAO,OAAO,KAAK,KAAK,EAEhC,CACA,GAAO,aAAe,eACtB,GAAO,cAAgB,gBACvB,GAAO,MAAQ,QACf,GAAO,aAAe,eACtB,GAAO,aAAe,eAEd,UAAS,GACT,iBAAgB,qBCxBxB,IAAI,QACA,OACA,OAEE,GAAmB,qBACzB,SAAS,EAAa,CAAC,EAAO,EAAS,EAAM,CACzC,GAAI,EAAS,CACT,IAAM,EAAQ,EAAK,OAAO,KAAK,EAAE,MAAQ,CAAO,EAC1C,EAAS,EAAM,KAAK,KAAK,CAAC,EAAE,MAAM,GAAK,EAAM,GACnD,GAAI,CAAC,EACD,MAAU,MAAM,OAAO,aAAmB,EAC9C,OAAO,EAEX,OAAO,EAAK,KAAK,KAAK,EAAE,WAAW,CAAK,GAAK,CAAC,EAAE,MAAM,EAE1D,SAAS,EAAU,CAAC,EAAO,EAAS,EAAK,CACrC,GAAI,GAAS,WAAW,CAAK,EACzB,EAAQ,EAAM,SAClB,GAAI,GAAS,OAAO,CAAK,EACrB,OAAO,EACX,GAAI,GAAS,OAAO,CAAK,EAAG,CACxB,IAAM,EAAM,EAAI,OAAO,GAAS,KAAK,aAAa,EAAI,OAAQ,KAAM,CAAG,EAEvE,OADA,EAAI,MAAM,KAAK,CAAK,EACb,EAEX,GAAI,aAAiB,QACjB,aAAiB,QACjB,aAAiB,SAChB,OAAO,OAAW,KAAe,aAAiB,OAGnD,EAAQ,EAAM,QAAQ,EAE1B,IAAQ,wBAAuB,WAAU,WAAU,SAAQ,iBAAkB,EAGzE,EAAM,OACV,GAAI,GAAyB,GAAS,OAAO,IAAU,SAEnD,GADA,EAAM,EAAc,IAAI,CAAK,EACzB,EAEA,OADA,EAAI,SAAW,EAAI,OAAS,EAAS,CAAK,GACnC,IAAI,GAAM,MAAM,EAAI,MAAM,EAGjC,OAAM,CAAE,OAAQ,KAAM,KAAM,IAAK,EACjC,EAAc,IAAI,EAAO,CAAG,EAGpC,GAAI,GAAS,WAAW,IAAI,EACxB,EAAU,GAAmB,EAAQ,MAAM,CAAC,EAChD,IAAI,EAAS,GAAc,EAAO,EAAS,EAAO,IAAI,EACtD,GAAI,CAAC,EAAQ,CACT,GAAI,GAAS,OAAO,EAAM,SAAW,WAEjC,EAAQ,EAAM,OAAO,EAEzB,GAAI,CAAC,GAAS,OAAO,IAAU,SAAU,CACrC,IAAM,EAAO,IAAI,GAAO,OAAO,CAAK,EACpC,GAAI,EACA,EAAI,KAAO,EACf,OAAO,EAEX,EACI,aAAiB,IACX,EAAO,GAAS,MAChB,OAAO,YAAY,OAAO,CAAK,GAC3B,EAAO,GAAS,KAChB,EAAO,GAAS,KAElC,GAAI,EACA,EAAS,CAAM,EACf,OAAO,EAAI,SAEf,IAAM,EAAO,GAAQ,WACf,EAAO,WAAW,EAAI,OAAQ,EAAO,CAAG,EACxC,OAAO,GAAQ,WAAW,OAAS,WAC/B,EAAO,UAAU,KAAK,EAAI,OAAQ,EAAO,CAAG,EAC5C,IAAI,GAAO,OAAO,CAAK,EACjC,GAAI,EACA,EAAK,IAAM,EACV,QAAI,CAAC,EAAO,QACb,EAAK,IAAM,EAAO,IACtB,GAAI,EACA,EAAI,KAAO,EACf,OAAO,EAGH,cAAa,qBCvFrB,IAAI,QACA,MACA,QAEJ,SAAS,EAAkB,CAAC,EAAQ,EAAM,EAAO,CAC7C,IAAI,EAAI,EACR,QAAS,EAAI,EAAK,OAAS,EAAG,GAAK,EAAG,EAAE,EAAG,CACvC,IAAM,EAAI,EAAK,GACf,GAAI,OAAO,IAAM,UAAY,OAAO,UAAU,CAAC,GAAK,GAAK,EAAG,CACxD,IAAM,EAAI,CAAC,EACX,EAAE,GAAK,EACP,EAAI,EAGJ,OAAI,IAAI,IAAI,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,EAG5B,OAAO,GAAW,WAAW,EAAG,OAAW,CACvC,sBAAuB,GACvB,cAAe,GACf,SAAU,IAAM,CACZ,MAAU,MAAM,8CAA8C,GAElE,SACA,cAAe,IAAI,GACvB,CAAC,EAIL,IAAM,GAAc,CAAC,IAAS,GAAQ,MACjC,OAAO,IAAS,UAAY,CAAC,CAAC,EAAK,OAAO,UAAU,EAAE,KAAK,EAAE,KAClE,MAAM,WAAmB,GAAK,QAAS,CACnC,WAAW,CAAC,EAAM,EAAQ,CACtB,MAAM,CAAI,EACV,OAAO,eAAe,KAAM,SAAU,CAClC,MAAO,EACP,aAAc,GACd,WAAY,GACZ,SAAU,EACd,CAAC,EAOL,KAAK,CAAC,EAAQ,CACV,IAAM,EAAO,OAAO,OAAO,OAAO,eAAe,IAAI,EAAG,OAAO,0BAA0B,IAAI,CAAC,EAC9F,GAAI,EACA,EAAK,OAAS,EAElB,GADA,EAAK,MAAQ,EAAK,MAAM,IAAI,KAAM,EAAS,OAAO,CAAE,GAAK,EAAS,OAAO,CAAE,EAAI,EAAG,MAAM,CAAM,EAAI,CAAE,EAChG,KAAK,MACL,EAAK,MAAQ,KAAK,MAAM,MAAM,EAClC,OAAO,EAOX,KAAK,CAAC,EAAM,EAAO,CACf,GAAI,GAAY,CAAI,EAChB,KAAK,IAAI,CAAK,EACb,KACD,IAAO,KAAQ,GAAQ,EACjB,EAAO,KAAK,IAAI,EAAK,EAAI,EAC/B,GAAI,EAAS,aAAa,CAAI,EAC1B,EAAK,MAAM,EAAM,CAAK,EACrB,QAAI,IAAS,QAAa,KAAK,OAChC,KAAK,IAAI,EAAK,GAAmB,KAAK,OAAQ,EAAM,CAAK,CAAC,EAE1D,WAAU,MAAM,+BAA+B,sBAAwB,GAAM,GAOzF,QAAQ,CAAC,EAAM,CACX,IAAO,KAAQ,GAAQ,EACvB,GAAI,EAAK,SAAW,EAChB,OAAO,KAAK,OAAO,CAAG,EAC1B,IAAM,EAAO,KAAK,IAAI,EAAK,EAAI,EAC/B,GAAI,EAAS,aAAa,CAAI,EAC1B,OAAO,EAAK,SAAS,CAAI,EAEzB,WAAU,MAAM,+BAA+B,sBAAwB,GAAM,EAOrF,KAAK,CAAC,EAAM,EAAY,CACpB,IAAO,KAAQ,GAAQ,EACjB,EAAO,KAAK,IAAI,EAAK,EAAI,EAC/B,GAAI,EAAK,SAAW,EAChB,MAAO,CAAC,GAAc,EAAS,SAAS,CAAI,EAAI,EAAK,MAAQ,EAE7D,YAAO,EAAS,aAAa,CAAI,EAAI,EAAK,MAAM,EAAM,CAAU,EAAI,OAE5E,gBAAgB,CAAC,EAAa,CAC1B,OAAO,KAAK,MAAM,MAAM,KAAQ,CAC5B,GAAI,CAAC,EAAS,OAAO,CAAI,EACrB,MAAO,GACX,IAAM,EAAI,EAAK,MACf,OAAQ,GAAK,MACR,GACG,EAAS,SAAS,CAAC,GACnB,EAAE,OAAS,MACX,CAAC,EAAE,eACH,CAAC,EAAE,SACH,CAAC,EAAE,IACd,EAKL,KAAK,CAAC,EAAM,CACR,IAAO,KAAQ,GAAQ,EACvB,GAAI,EAAK,SAAW,EAChB,OAAO,KAAK,IAAI,CAAG,EACvB,IAAM,EAAO,KAAK,IAAI,EAAK,EAAI,EAC/B,OAAO,EAAS,aAAa,CAAI,EAAI,EAAK,MAAM,CAAI,EAAI,GAM5D,KAAK,CAAC,EAAM,EAAO,CACf,IAAO,KAAQ,GAAQ,EACvB,GAAI,EAAK,SAAW,EAChB,KAAK,IAAI,EAAK,CAAK,EAElB,KACD,IAAM,EAAO,KAAK,IAAI,EAAK,EAAI,EAC/B,GAAI,EAAS,aAAa,CAAI,EAC1B,EAAK,MAAM,EAAM,CAAK,EACrB,QAAI,IAAS,QAAa,KAAK,OAChC,KAAK,IAAI,EAAK,GAAmB,KAAK,OAAQ,EAAM,CAAK,CAAC,EAE1D,WAAU,MAAM,+BAA+B,sBAAwB,GAAM,GAG7F,CAEQ,cAAa,GACb,sBAAqB,GACrB,eAAc,qBC7ItB,IAAM,GAAmB,CAAC,IAAQ,EAAI,QAAQ,kBAAmB,GAAG,EACpE,SAAS,EAAa,CAAC,EAAS,EAAQ,CACpC,GAAI,QAAQ,KAAK,CAAO,EACpB,OAAO,EAAQ,UAAU,CAAC,EAC9B,OAAO,EAAS,EAAQ,QAAQ,aAAc,CAAM,EAAI,EAE5D,IAAM,GAAc,CAAC,EAAK,EAAQ,IAAY,EAAI,SAAS;AAAA,CAAI,EACzD,GAAc,EAAS,CAAM,EAC7B,EAAQ,SAAS;AAAA,CAAI,EACjB;AAAA,EAAO,GAAc,EAAS,CAAM,GACnC,EAAI,SAAS,GAAG,EAAI,GAAK,KAAO,EAEnC,iBAAgB,GAChB,eAAc,GACd,oBAAmB,qBCb3B,SAAS,EAAa,CAAC,EAAM,EAAQ,EAAO,QAAU,gBAAe,YAAY,GAAI,kBAAkB,GAAI,SAAQ,cAAe,CAAC,EAAG,CAClI,GAAI,CAAC,GAAa,EAAY,EAC1B,OAAO,EACX,GAAI,EAAY,EACZ,EAAkB,EACtB,IAAM,EAAU,KAAK,IAAI,EAAI,EAAiB,EAAI,EAAY,EAAO,MAAM,EAC3E,GAAI,EAAK,QAAU,EACf,OAAO,EACX,IAAM,EAAQ,CAAC,EACT,EAAe,CAAC,EAClB,EAAM,EAAY,EAAO,OAC7B,GAAI,OAAO,IAAkB,SACzB,GAAI,EAAgB,EAAY,KAAK,IAAI,EAAG,CAAe,EACvD,EAAM,KAAK,CAAC,EAEZ,OAAM,EAAY,EAE1B,IAAI,EAAQ,OACR,EAAO,OACP,EAAW,GACX,EAAI,GACJ,EAAW,GACX,EAAS,GACb,GAAI,IA9BW,SAgCX,GADA,EAAI,GAAyB,EAAM,EAAG,EAAO,MAAM,EAC/C,IAAM,GACN,EAAM,EAAI,EAElB,QAAS,EAAK,EAAK,EAAM,GAAK,IAAO,CACjC,GAAI,IAnCQ,UAmCgB,IAAO,KAAM,CAErC,OADA,EAAW,EACH,EAAK,EAAI,QACR,IACD,GAAK,EACL,UACC,IACD,GAAK,EACL,UACC,IACD,GAAK,EACL,cAEA,GAAK,EAEb,EAAS,EAEb,GAAI,IAAO;AAAA,EAAM,CACb,GAAI,IAtDG,QAuDH,EAAI,GAAyB,EAAM,EAAG,EAAO,MAAM,EACvD,EAAM,EAAI,EAAO,OAAS,EAC1B,EAAQ,OAEP,KACD,GAAI,IAAO,KACP,GACA,IAAS,KACT,IAAS;AAAA,GACT,IAAS,KAAM,CAEf,IAAM,EAAO,EAAK,EAAI,GACtB,GAAI,GAAQ,IAAS,KAAO,IAAS;AAAA,GAAQ,IAAS,KAClD,EAAQ,EAEhB,GAAI,GAAK,EACL,GAAI,EACA,EAAM,KAAK,CAAK,EAChB,EAAM,EAAQ,EACd,EAAQ,OAEP,QAAI,IA3EL,SA2E2B,CAE3B,MAAO,IAAS,KAAO,IAAS,KAC5B,EAAO,EACP,EAAK,EAAM,GAAK,GAChB,EAAW,GAGf,IAAM,EAAI,EAAI,EAAS,EAAI,EAAI,EAAI,EAAW,EAE9C,GAAI,EAAa,GACb,OAAO,EACX,EAAM,KAAK,CAAC,EACZ,EAAa,GAAK,GAClB,EAAM,EAAI,EACV,EAAQ,OAGR,OAAW,GAIvB,EAAO,EAEX,GAAI,GAAY,EACZ,EAAW,EACf,GAAI,EAAM,SAAW,EACjB,OAAO,EACX,GAAI,EACA,EAAO,EACX,IAAI,EAAM,EAAK,MAAM,EAAG,EAAM,EAAE,EAChC,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAAG,CACnC,IAAM,EAAO,EAAM,GACb,EAAM,EAAM,EAAI,IAAM,EAAK,OACjC,GAAI,IAAS,EACT,EAAM;AAAA,EAAK,IAAS,EAAK,MAAM,EAAG,CAAG,IACpC,KACD,GAAI,IAhHI,UAgHoB,EAAa,GACrC,GAAO,GAAG,EAAK,OACnB,GAAO;AAAA,EAAK,IAAS,EAAK,MAAM,EAAO,EAAG,CAAG,KAGrD,OAAO,EAMX,SAAS,EAAwB,CAAC,EAAM,EAAG,EAAQ,CAC/C,IAAI,EAAM,EACN,EAAQ,EAAI,EACZ,EAAK,EAAK,GACd,MAAO,IAAO,KAAO,IAAO,KACxB,GAAI,EAAI,EAAQ,EACZ,EAAK,EAAK,EAAE,GAEX,KACD,GACI,EAAK,EAAK,EAAE,SACP,GAAM,IAAO;AAAA,GACtB,EAAM,EACN,EAAQ,EAAI,EACZ,EAAK,EAAK,GAGlB,OAAO,EAGH,cAhJW,QAiJX,aAlJU,OAmJV,eAjJY,SAkJZ,iBAAgB,qBCpJxB,IAAI,MACA,QAEE,GAAiB,CAAC,EAAK,KAAa,CACtC,cAAe,EAAU,EAAI,OAAO,OAAS,EAAI,cACjD,UAAW,EAAI,QAAQ,UACvB,gBAAiB,EAAI,QAAQ,eACjC,GAGM,GAAyB,CAAC,IAAQ,mBAAmB,KAAK,CAAG,EACnE,SAAS,EAAmB,CAAC,EAAK,EAAW,EAAc,CACvD,GAAI,CAAC,GAAa,EAAY,EAC1B,MAAO,GACX,IAAM,EAAQ,EAAY,EACpB,EAAS,EAAI,OACnB,GAAI,GAAU,EACV,MAAO,GACX,QAAS,EAAI,EAAG,EAAQ,EAAG,EAAI,EAAQ,EAAE,EACrC,GAAI,EAAI,KAAO;AAAA,EAAM,CACjB,GAAI,EAAI,EAAQ,EACZ,MAAO,GAEX,GADA,EAAQ,EAAI,EACR,EAAS,GAAS,EAClB,MAAO,GAGnB,MAAO,GAEX,SAAS,EAAkB,CAAC,EAAO,EAAK,CACpC,IAAM,EAAO,KAAK,UAAU,CAAK,EACjC,GAAI,EAAI,QAAQ,mBACZ,OAAO,EACX,IAAQ,eAAgB,EAClB,EAAqB,EAAI,QAAQ,+BACjC,EAAS,EAAI,SAAW,GAAuB,CAAK,EAAI,KAAO,IACjE,EAAM,GACN,EAAQ,EACZ,QAAS,EAAI,EAAG,EAAK,EAAK,GAAI,EAAI,EAAK,EAAK,EAAE,GAAI,CAC9C,GAAI,IAAO,KAAO,EAAK,EAAI,KAAO,MAAQ,EAAK,EAAI,KAAO,IAEtD,GAAO,EAAK,MAAM,EAAO,CAAC,EAAI,MAC9B,GAAK,EACL,EAAQ,EACR,EAAK,KAET,GAAI,IAAO,KACP,OAAQ,EAAK,EAAI,QACR,IACD,CACI,GAAO,EAAK,MAAM,EAAO,CAAC,EAC1B,IAAM,EAAO,EAAK,OAAO,EAAI,EAAG,CAAC,EACjC,OAAQ,OACC,OACD,GAAO,MACP,UACC,OACD,GAAO,MACP,UACC,OACD,GAAO,MACP,UACC,OACD,GAAO,MACP,UACC,OACD,GAAO,MACP,UACC,OACD,GAAO,MACP,UACC,OACD,GAAO,MACP,UACC,OACD,GAAO,MACP,cAEA,GAAI,EAAK,OAAO,EAAG,CAAC,IAAM,KACtB,GAAO,MAAQ,EAAK,OAAO,CAAC,EAE5B,QAAO,EAAK,OAAO,EAAG,CAAC,EAEnC,GAAK,EACL,EAAQ,EAAI,CAChB,CACA,UACC,IACD,GAAI,GACA,EAAK,EAAI,KAAO,KAChB,EAAK,OAAS,EACd,GAAK,EAEJ,KAED,GAAO,EAAK,MAAM,EAAO,CAAC,EAAI;AAAA;AAAA,EAC9B,MAAO,EAAK,EAAI,KAAO,MACnB,EAAK,EAAI,KAAO,KAChB,EAAK,EAAI,KAAO,IAChB,GAAO;AAAA,EACP,GAAK,EAIT,GAFA,GAAO,EAEH,EAAK,EAAI,KAAO,IAChB,GAAO,KACX,GAAK,EACL,EAAQ,EAAI,EAEhB,cAEA,GAAK,GAIrB,OADA,EAAM,EAAQ,EAAM,EAAK,MAAM,CAAK,EAAI,EACjC,EACD,EACA,GAAc,cAAc,EAAK,EAAQ,GAAc,YAAa,GAAe,EAAK,EAAK,CAAC,EAExG,SAAS,EAAkB,CAAC,EAAO,EAAK,CACpC,GAAI,EAAI,QAAQ,cAAgB,IAC3B,EAAI,aAAe,EAAM,SAAS;AAAA,CAAI,GACvC,kBAAkB,KAAK,CAAK,EAE5B,OAAO,GAAmB,EAAO,CAAG,EACxC,IAAM,EAAS,EAAI,SAAW,GAAuB,CAAK,EAAI,KAAO,IAC/D,EAAM,IAAM,EAAM,QAAQ,KAAM,IAAI,EAAE,QAAQ,OAAQ;AAAA,EAAO,GAAQ,EAAI,IAC/E,OAAO,EAAI,YACL,EACA,GAAc,cAAc,EAAK,EAAQ,GAAc,UAAW,GAAe,EAAK,EAAK,CAAC,EAEtG,SAAS,EAAY,CAAC,EAAO,EAAK,CAC9B,IAAQ,eAAgB,EAAI,QACxB,EACJ,GAAI,IAAgB,GAChB,EAAK,GACJ,KACD,IAAM,EAAY,EAAM,SAAS,GAAG,EAC9B,EAAY,EAAM,SAAS,GAAG,EACpC,GAAI,GAAa,CAAC,EACd,EAAK,GACJ,QAAI,GAAa,CAAC,EACnB,EAAK,GAEL,OAAK,EAAc,GAAqB,GAEhD,OAAO,EAAG,EAAO,CAAG,EAIxB,IAAI,GACJ,GAAI,CACA,GAAmB,IAAI,OAAO;AAAA;AAAA;AAAA,KAA0B,GAAG,EAE/D,KAAM,CACF,GAAmB,eAEvB,SAAS,EAAW,EAAG,UAAS,OAAM,SAAS,EAAK,EAAW,EAAa,CACxE,IAAQ,aAAY,gBAAe,aAAc,EAAI,QAGrD,GAAI,CAAC,GAAc,YAAY,KAAK,CAAK,EACrC,OAAO,GAAa,EAAO,CAAG,EAElC,IAAM,EAAS,EAAI,SACd,EAAI,kBAAoB,GAAuB,CAAK,EAAI,KAAO,IAC9D,EAAU,IAAe,UACzB,GACA,IAAe,UAAY,IAAS,EAAO,OAAO,aAC9C,GACA,IAAS,EAAO,OAAO,cACnB,GACA,CAAC,GAAoB,EAAO,EAAW,EAAO,MAAM,EAClE,GAAI,CAAC,EACD,OAAO,EAAU;AAAA,EAAQ;AAAA,EAE7B,IAAI,EACA,EACJ,IAAK,EAAW,EAAM,OAAQ,EAAW,EAAG,EAAE,EAAU,CACpD,IAAM,EAAK,EAAM,EAAW,GAC5B,GAAI,IAAO;AAAA,GAAQ,IAAO,MAAQ,IAAO,IACrC,MAER,IAAI,EAAM,EAAM,UAAU,CAAQ,EAC5B,EAAW,EAAI,QAAQ;AAAA,CAAI,EACjC,GAAI,IAAa,GACb,EAAQ,IAEP,QAAI,IAAU,GAAO,IAAa,EAAI,OAAS,GAEhD,GADA,EAAQ,IACJ,EACA,EAAY,EAGhB,OAAQ,GAEZ,GAAI,EAAK,CAEL,GADA,EAAQ,EAAM,MAAM,EAAG,CAAC,EAAI,MAAM,EAC9B,EAAI,EAAI,OAAS,KAAO;AAAA,EACxB,EAAM,EAAI,MAAM,EAAG,EAAE,EACzB,EAAM,EAAI,QAAQ,GAAkB,KAAK,GAAQ,EAGrD,IAAI,EAAiB,GACjB,EACA,EAAa,GACjB,IAAK,EAAW,EAAG,EAAW,EAAM,OAAQ,EAAE,EAAU,CACpD,IAAM,EAAK,EAAM,GACjB,GAAI,IAAO,IACP,EAAiB,GAChB,QAAI,IAAO;AAAA,EACZ,EAAa,EAEb,WAER,IAAI,EAAQ,EAAM,UAAU,EAAG,EAAa,EAAW,EAAa,EAAI,CAAQ,EAChF,GAAI,EACA,EAAQ,EAAM,UAAU,EAAM,MAAM,EACpC,EAAQ,EAAM,QAAQ,OAAQ,KAAK,GAAQ,EAI/C,IAAI,GAAU,EAFK,EAAS,IAAM,IAEU,IAAM,EAClD,GAAI,GAEA,GADA,GAAU,IAAM,EAAc,EAAQ,QAAQ,aAAc,GAAG,CAAC,EAC5D,EACA,EAAU,EAElB,GAAI,CAAC,EAAS,CACV,IAAM,EAAc,EACf,QAAQ,OAAQ;AAAA,GAAM,EACtB,QAAQ,iDAAkD,MAAM,EAEhE,QAAQ,OAAQ,KAAK,GAAQ,EAC9B,EAAkB,GAChB,EAAc,GAAe,EAAK,EAAI,EAC5C,GAAI,IAAe,UAAY,IAAS,EAAO,OAAO,aAClD,EAAY,WAAa,IAAM,CAC3B,EAAkB,IAG1B,IAAM,EAAO,GAAc,cAAc,GAAG,IAAQ,IAAc,IAAO,EAAQ,GAAc,WAAY,CAAW,EACtH,GAAI,CAAC,EACD,MAAO,IAAI;AAAA,EAAW,IAAS,IAGvC,OADA,EAAQ,EAAM,QAAQ,OAAQ,KAAK,GAAQ,EACpC,IAAI;AAAA,EAAW,IAAS,IAAQ,IAAQ,IAEnD,SAAS,EAAW,CAAC,EAAM,EAAK,EAAW,EAAa,CACpD,IAAQ,OAAM,SAAU,GAChB,eAAc,cAAa,SAAQ,aAAY,UAAW,EAClE,GAAK,GAAe,EAAM,SAAS;AAAA,CAAI,GAClC,GAAU,WAAW,KAAK,CAAK,EAChC,OAAO,GAAa,EAAO,CAAG,EAElC,GAAI,oFAAoF,KAAK,CAAK,EAO9F,OAAO,GAAe,GAAU,CAAC,EAAM,SAAS;AAAA,CAAI,EAC9C,GAAa,EAAO,CAAG,EACvB,GAAY,EAAM,EAAK,EAAW,CAAW,EAEvD,GAAI,CAAC,GACD,CAAC,GACD,IAAS,EAAO,OAAO,OACvB,EAAM,SAAS;AAAA,CAAI,EAEnB,OAAO,GAAY,EAAM,EAAK,EAAW,CAAW,EAExD,GAAI,GAAuB,CAAK,GAC5B,GAAI,IAAW,GAEX,OADA,EAAI,iBAAmB,GAChB,GAAY,EAAM,EAAK,EAAW,CAAW,EAEnD,QAAI,GAAe,IAAW,EAC/B,OAAO,GAAa,EAAO,CAAG,EAGtC,IAAM,EAAM,EAAM,QAAQ,OAAQ;AAAA,EAAO,GAAQ,EAIjD,GAAI,EAAc,CACd,IAAM,EAAO,CAAC,IAAQ,EAAI,SAAW,EAAI,MAAQ,yBAA2B,EAAI,MAAM,KAAK,CAAG,GACtF,SAAQ,QAAS,EAAI,IAAI,OACjC,GAAI,EAAK,KAAK,CAAI,GAAK,GAAQ,KAAK,CAAI,EACpC,OAAO,GAAa,EAAO,CAAG,EAEtC,OAAO,EACD,EACA,GAAc,cAAc,EAAK,EAAQ,GAAc,UAAW,GAAe,EAAK,EAAK,CAAC,EAEtG,SAAS,EAAe,CAAC,EAAM,EAAK,EAAW,EAAa,CACxD,IAAQ,cAAa,UAAW,EAC1B,EAAK,OAAO,EAAK,QAAU,SAC3B,EACA,OAAO,OAAO,CAAC,EAAG,EAAM,CAAE,MAAO,OAAO,EAAK,KAAK,CAAE,CAAC,GACrD,QAAS,EACf,GAAI,IAAS,EAAO,OAAO,cAEvB,GAAI,kDAAkD,KAAK,EAAG,KAAK,EAC/D,EAAO,EAAO,OAAO,aAE7B,IAAM,EAAa,CAAC,IAAU,CAC1B,OAAQ,QACC,EAAO,OAAO,kBACd,EAAO,OAAO,cACf,OAAO,GAAe,EAChB,GAAa,EAAG,MAAO,CAAG,EAC1B,GAAY,EAAI,EAAK,EAAW,CAAW,OAChD,EAAO,OAAO,aACf,OAAO,GAAmB,EAAG,MAAO,CAAG,OACtC,EAAO,OAAO,aACf,OAAO,GAAmB,EAAG,MAAO,CAAG,OACtC,EAAO,OAAO,MACf,OAAO,GAAY,EAAI,EAAK,EAAW,CAAW,UAElD,OAAO,OAGf,EAAM,EAAW,CAAI,EACzB,GAAI,IAAQ,KAAM,CACd,IAAQ,iBAAgB,qBAAsB,EAAI,QAC5C,EAAK,GAAe,GAAmB,EAE7C,GADA,EAAM,EAAW,CAAC,EACd,IAAQ,KACR,MAAU,MAAM,mCAAmC,GAAG,EAE9D,OAAO,EAGH,mBAAkB,qBC/U1B,IAAI,QACA,OACA,QACA,QAEJ,SAAS,EAAsB,CAAC,EAAK,EAAS,CAC1C,IAAM,EAAM,OAAO,OAAO,CACtB,WAAY,GACZ,cAAe,GAAiB,iBAChC,eAAgB,KAChB,kBAAmB,QACnB,WAAY,KACZ,mBAAoB,GACpB,+BAAgC,GAChC,SAAU,QACV,sBAAuB,GACvB,UAAW,GACX,UAAW,GACX,gBAAiB,GACjB,QAAS,OACT,WAAY,GACZ,YAAa,KACb,cAAe,GACf,QAAS,OACT,iBAAkB,EACtB,EAAG,EAAI,OAAO,gBAAiB,CAAO,EAClC,EACJ,OAAQ,EAAI,qBACH,QACD,EAAS,GACT,UACC,OACD,EAAS,GACT,cAEA,EAAS,KAEjB,MAAO,CACH,QAAS,IAAI,IACb,MACA,sBAAuB,EAAI,sBAAwB,IAAM,GACzD,OAAQ,GACR,WAAY,OAAO,EAAI,SAAW,SAAW,IAAI,OAAO,EAAI,MAAM,EAAI,KACtE,SACA,QAAS,CACb,EAEJ,SAAS,EAAY,CAAC,EAAM,EAAM,CAC9B,GAAI,EAAK,IAAK,CACV,IAAM,EAAQ,EAAK,OAAO,KAAK,EAAE,MAAQ,EAAK,GAAG,EACjD,GAAI,EAAM,OAAS,EACf,OAAO,EAAM,KAAK,KAAK,EAAE,SAAW,EAAK,MAAM,GAAK,EAAM,GAElE,IAAI,EAAS,OACT,EACJ,GAAI,GAAS,SAAS,CAAI,EAAG,CACzB,EAAM,EAAK,MACX,IAAI,EAAQ,EAAK,OAAO,KAAK,EAAE,WAAW,CAAG,CAAC,EAC9C,GAAI,EAAM,OAAS,EAAG,CAClB,IAAM,EAAY,EAAM,OAAO,KAAK,EAAE,IAAI,EAC1C,GAAI,EAAU,OAAS,EACnB,EAAQ,EAEhB,EACI,EAAM,KAAK,KAAK,EAAE,SAAW,EAAK,MAAM,GAAK,EAAM,KAAK,KAAK,CAAC,EAAE,MAAM,EAG1E,OAAM,EACN,EAAS,EAAK,KAAK,KAAK,EAAE,WAAa,aAAe,EAAE,SAAS,EAErE,GAAI,CAAC,EAAQ,CACT,IAAM,EAAO,GAAK,aAAa,OAAS,IAAQ,KAAO,OAAS,OAAO,GACvE,MAAU,MAAM,wBAAwB,SAAY,EAExD,OAAO,EAGX,SAAS,EAAc,CAAC,EAAM,GAAU,QAAS,EAAW,OAAO,CAC/D,GAAI,CAAC,EAAI,WACL,MAAO,GACX,IAAM,EAAQ,CAAC,EACT,GAAU,GAAS,SAAS,CAAI,GAAK,GAAS,aAAa,CAAI,IAAM,EAAK,OAChF,GAAI,GAAU,GAAQ,cAAc,CAAM,EACtC,EAAU,IAAI,CAAM,EACpB,EAAM,KAAK,IAAI,GAAQ,EAE3B,IAAM,EAAM,EAAK,MAAQ,EAAO,QAAU,KAAO,EAAO,KACxD,GAAI,EACA,EAAM,KAAK,EAAI,WAAW,UAAU,CAAG,CAAC,EAC5C,OAAO,EAAM,KAAK,GAAG,EAEzB,SAAS,EAAS,CAAC,EAAM,EAAK,EAAW,EAAa,CAClD,GAAI,GAAS,OAAO,CAAI,EACpB,OAAO,EAAK,SAAS,EAAK,EAAW,CAAW,EACpD,GAAI,GAAS,QAAQ,CAAI,EAAG,CACxB,GAAI,EAAI,IAAI,WACR,OAAO,EAAK,SAAS,CAAG,EAC5B,GAAI,EAAI,iBAAiB,IAAI,CAAI,EAC7B,MAAU,UAAU,yDAAyD,EAE5E,KACD,GAAI,EAAI,gBACJ,EAAI,gBAAgB,IAAI,CAAI,EAE5B,OAAI,gBAAkB,IAAI,IAAI,CAAC,CAAI,CAAC,EACxC,EAAO,EAAK,QAAQ,EAAI,GAAG,GAGnC,IAAI,EAAS,OACP,EAAO,GAAS,OAAO,CAAI,EAC3B,EACA,EAAI,IAAI,WAAW,EAAM,CAAE,SAAU,KAAM,EAAS,CAAG,CAAC,EAC9D,IAAW,EAAS,GAAa,EAAI,IAAI,OAAO,KAAM,CAAI,GAC1D,IAAM,EAAQ,GAAe,EAAM,EAAQ,CAAG,EAC9C,GAAI,EAAM,OAAS,EACf,EAAI,eAAiB,EAAI,eAAiB,GAAK,EAAM,OAAS,EAClE,IAAM,EAAM,OAAO,EAAO,YAAc,WAClC,EAAO,UAAU,EAAM,EAAK,EAAW,CAAW,EAClD,GAAS,SAAS,CAAI,EAClB,GAAgB,gBAAgB,EAAM,EAAK,EAAW,CAAW,EACjE,EAAK,SAAS,EAAK,EAAW,CAAW,EACnD,GAAI,CAAC,EACD,OAAO,EACX,OAAO,GAAS,SAAS,CAAI,GAAK,EAAI,KAAO,KAAO,EAAI,KAAO,IACzD,GAAG,KAAS,IACZ,GAAG;AAAA,EAAU,EAAI,SAAS,IAG5B,0BAAyB,GACzB,aAAY,qBCjIpB,IAAI,OACA,OACA,QACA,QAEJ,SAAS,EAAa,EAAG,MAAK,SAAS,EAAK,EAAW,EAAa,CAChE,IAAQ,gBAAe,MAAK,SAAQ,aAAY,SAAW,gBAAe,YAAW,eAAiB,EAClG,EAAc,GAAS,OAAO,CAAG,GAAK,EAAI,SAAY,KAC1D,GAAI,EAAY,CACZ,GAAI,EACA,MAAU,MAAM,kDAAkD,EAEtE,GAAI,GAAS,aAAa,CAAG,GAAM,CAAC,GAAS,OAAO,CAAG,GAAK,OAAO,IAAQ,SAEvE,MAAU,MADE,4DACO,EAG3B,IAAI,EAAc,CAAC,IACd,CAAC,GACG,GAAc,GAAS,MAAQ,CAAC,EAAI,QACrC,GAAS,aAAa,CAAG,IACxB,GAAS,SAAS,CAAG,EAChB,EAAI,OAAS,GAAO,OAAO,cAAgB,EAAI,OAAS,GAAO,OAAO,cACtE,OAAO,IAAQ,WAC7B,EAAM,OAAO,OAAO,CAAC,EAAG,EAAK,CACzB,cAAe,GACf,YAAa,CAAC,IAAgB,GAAc,CAAC,GAC7C,OAAQ,EAAS,CACrB,CAAC,EACD,IAAI,EAAiB,GACjB,EAAY,GACZ,EAAM,GAAU,UAAU,EAAK,EAAK,IAAO,EAAiB,GAAO,IAAO,EAAY,EAAK,EAC/F,GAAI,CAAC,GAAe,CAAC,EAAI,QAAU,EAAI,OAAS,KAAM,CAClD,GAAI,EACA,MAAU,MAAM,8EAA8E,EAClG,EAAc,GAElB,GAAI,EAAI,QACJ,GAAI,GAAiB,GAAS,KAAM,CAChC,GAAI,GAAkB,EAClB,EAAU,EACd,OAAO,IAAQ,GAAK,IAAM,EAAc,KAAK,IAAQ,GAGxD,QAAK,GAAiB,CAAC,GAAgB,GAAS,MAAQ,EAAc,CAEvE,GADA,EAAM,KAAK,IACP,GAAc,CAAC,EACf,GAAO,GAAiB,YAAY,EAAK,EAAI,OAAQ,EAAc,CAAU,CAAC,EAE7E,QAAI,GAAa,EAClB,EAAY,EAChB,OAAO,EAEX,GAAI,EACA,EAAa,KACjB,GAAI,EAAa,CACb,GAAI,EACA,GAAO,GAAiB,YAAY,EAAK,EAAI,OAAQ,EAAc,CAAU,CAAC,EAClF,EAAM,KAAK;AAAA,EAAQ,KAInB,QADA,EAAM,GAAG,KACL,EACA,GAAO,GAAiB,YAAY,EAAK,EAAI,OAAQ,EAAc,CAAU,CAAC,EAEtF,IAAI,EAAK,EAAK,EACd,GAAI,GAAS,OAAO,CAAK,EACrB,EAAM,CAAC,CAAC,EAAM,YACd,EAAM,EAAM,cACZ,EAAe,EAAM,QAMrB,QAHA,EAAM,GACN,EAAM,KACN,EAAe,KACX,GAAS,OAAO,IAAU,SAC1B,EAAQ,EAAI,WAAW,CAAK,EAGpC,GADA,EAAI,YAAc,GACd,CAAC,GAAe,CAAC,GAAc,GAAS,SAAS,CAAK,EACtD,EAAI,cAAgB,EAAI,OAAS,EAErC,GADA,EAAY,GACR,CAAC,GACD,EAAW,QAAU,GACrB,CAAC,EAAI,QACL,CAAC,GACD,GAAS,MAAM,CAAK,GACpB,CAAC,EAAM,MACP,CAAC,EAAM,KACP,CAAC,EAAM,OAEP,EAAI,OAAS,EAAI,OAAO,UAAU,CAAC,EAEvC,IAAI,EAAmB,GACjB,EAAW,GAAU,UAAU,EAAO,EAAK,IAAO,EAAmB,GAAO,IAAO,EAAY,EAAK,EACtG,EAAK,IACT,GAAI,GAAc,GAAO,EAAK,CAE1B,GADA,EAAK,EAAM;AAAA,EAAO,GACd,EAAK,CACL,IAAM,EAAK,EAAc,CAAG,EAC5B,GAAM;AAAA,EAAK,GAAiB,cAAc,EAAI,EAAI,MAAM,IAE5D,GAAI,IAAa,IAAM,CAAC,EAAI,QACxB,GAAI,IAAO;AAAA,GAAQ,EACf,EAAK;AAAA;AAAA,EAGT,QAAM;AAAA,EAAK,EAAI,SAGlB,QAAI,CAAC,GAAe,GAAS,aAAa,CAAK,EAAG,CACnD,IAAM,EAAM,EAAS,GACf,EAAM,EAAS,QAAQ;AAAA,CAAI,EAC3B,EAAa,IAAQ,GACrB,EAAO,EAAI,QAAU,EAAM,MAAQ,EAAM,MAAM,SAAW,EAChE,GAAI,GAAc,CAAC,EAAM,CACrB,IAAI,EAAe,GACnB,GAAI,IAAe,IAAQ,KAAO,IAAQ,KAAM,CAC5C,IAAI,EAAM,EAAS,QAAQ,GAAG,EAC9B,GAAI,IAAQ,KACR,IAAQ,IACR,EAAM,GACN,EAAS,EAAM,KAAO,IACtB,EAAM,EAAS,QAAQ,IAAK,EAAM,CAAC,EAEvC,GAAI,IAAQ,IAAM,EAAM,EACpB,EAAe,GAEvB,GAAI,CAAC,EACD,EAAK;AAAA,EAAK,EAAI,UAGrB,QAAI,IAAa,IAAM,EAAS,KAAO;AAAA,EACxC,EAAK,GAGT,GADA,GAAO,EAAK,EACR,EAAI,QACJ,GAAI,GAAoB,EACpB,EAAU,EAEb,QAAI,GAAgB,CAAC,EACtB,GAAO,GAAiB,YAAY,EAAK,EAAI,OAAQ,EAAc,CAAY,CAAC,EAE/E,QAAI,GAAa,EAClB,EAAY,EAEhB,OAAO,EAGH,iBAAgB,qBCrJxB,IAAI,iBAEJ,SAAS,EAAK,CAAC,KAAa,EAAU,CAClC,GAAI,IAAa,QACb,QAAQ,IAAI,GAAG,CAAQ,EAE/B,SAAS,EAAI,CAAC,EAAU,EAAS,CAC7B,GAAI,IAAa,SAAW,IAAa,OACrC,GAAI,OAAO,GAAa,cAAgB,WACpC,GAAa,YAAY,CAAO,EAEhC,aAAQ,KAAK,CAAO,EAIxB,SAAQ,GACR,QAAO,qBChBf,IAAI,OACA,OASE,GAAY,KACZ,GAAQ,CACV,SAAU,KAAS,IAAU,IACxB,OAAO,IAAU,UAAY,EAAM,cAAgB,GACxD,QAAS,MACT,IAAK,0BACL,KAAM,OACN,QAAS,IAAM,OAAO,OAAO,IAAI,GAAO,OAAO,OAAO,EAAS,CAAC,EAAG,CAC/D,WAAY,EAChB,CAAC,EACD,UAAW,IAAM,EACrB,EACM,GAAa,CAAC,EAAK,KAAS,GAAM,SAAS,CAAG,GAC/C,GAAS,SAAS,CAAG,IACjB,CAAC,EAAI,MAAQ,EAAI,OAAS,GAAO,OAAO,QACzC,GAAM,SAAS,EAAI,KAAK,IAC5B,GAAK,IAAI,OAAO,KAAK,KAAK,KAAO,EAAI,MAAQ,GAAM,KAAO,EAAI,OAAO,EACzE,SAAS,EAAe,CAAC,EAAK,EAAK,EAAO,CAEtC,GADA,EAAQ,GAAO,GAAS,QAAQ,CAAK,EAAI,EAAM,QAAQ,EAAI,GAAG,EAAI,EAC9D,GAAS,MAAM,CAAK,EACpB,QAAW,KAAM,EAAM,MACnB,GAAW,EAAK,EAAK,CAAE,EAC1B,QAAI,MAAM,QAAQ,CAAK,EACxB,QAAW,KAAM,EACb,GAAW,EAAK,EAAK,CAAE,EAE3B,QAAW,EAAK,EAAK,CAAK,EAElC,SAAS,EAAU,CAAC,EAAK,EAAK,EAAO,CACjC,IAAM,EAAS,GAAO,GAAS,QAAQ,CAAK,EAAI,EAAM,QAAQ,EAAI,GAAG,EAAI,EACzE,GAAI,CAAC,GAAS,MAAM,CAAM,EACtB,MAAU,MAAM,2CAA2C,EAC/D,IAAM,EAAS,EAAO,OAAO,KAAM,EAAK,GAAG,EAC3C,QAAY,EAAK,KAAU,EACvB,GAAI,aAAe,KACf,GAAI,CAAC,EAAI,IAAI,CAAG,EACZ,EAAI,IAAI,EAAK,CAAK,EAErB,QAAI,aAAe,IACpB,EAAI,IAAI,CAAG,EAEV,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,EAAK,CAAG,EACnD,OAAO,eAAe,EAAK,EAAK,CAC5B,QACA,SAAU,GACV,WAAY,GACZ,aAAc,EAClB,CAAC,EAGT,OAAO,EAGH,mBAAkB,GAClB,cAAa,GACb,SAAQ,qBCjEhB,IAAI,QACA,QACA,QACA,OACA,QAEJ,SAAS,EAAc,CAAC,EAAK,GAAO,MAAK,SAAS,CAC9C,GAAI,GAAS,OAAO,CAAG,GAAK,EAAI,WAC5B,EAAI,WAAW,EAAK,EAAK,CAAK,EAE7B,QAAI,GAAM,WAAW,EAAK,CAAG,EAC9B,GAAM,gBAAgB,EAAK,EAAK,CAAK,EACpC,KACD,IAAM,EAAQ,GAAK,KAAK,EAAK,GAAI,CAAG,EACpC,GAAI,aAAe,IACf,EAAI,IAAI,EAAO,GAAK,KAAK,EAAO,EAAO,CAAG,CAAC,EAE1C,QAAI,aAAe,IACpB,EAAI,IAAI,CAAK,EAEZ,KACD,IAAM,EAAY,GAAa,EAAK,EAAO,CAAG,EACxC,EAAU,GAAK,KAAK,EAAO,EAAW,CAAG,EAC/C,GAAI,KAAa,EACb,OAAO,eAAe,EAAK,EAAW,CAClC,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EAClB,CAAC,EAED,OAAI,GAAa,GAG7B,OAAO,EAEX,SAAS,EAAY,CAAC,EAAK,EAAO,EAAK,CACnC,GAAI,IAAU,KACV,MAAO,GAEX,GAAI,OAAO,IAAU,SACjB,OAAO,OAAO,CAAK,EACvB,GAAI,GAAS,OAAO,CAAG,GAAK,GAAK,IAAK,CAClC,IAAM,EAAS,GAAU,uBAAuB,EAAI,IAAK,CAAC,CAAC,EAC3D,EAAO,QAAU,IAAI,IACrB,QAAW,KAAQ,EAAI,QAAQ,KAAK,EAChC,EAAO,QAAQ,IAAI,EAAK,MAAM,EAClC,EAAO,OAAS,GAChB,EAAO,eAAiB,GACxB,IAAM,EAAS,EAAI,SAAS,CAAM,EAClC,GAAI,CAAC,EAAI,aAAc,CACnB,IAAI,EAAU,KAAK,UAAU,CAAM,EACnC,GAAI,EAAQ,OAAS,GACjB,EAAU,EAAQ,UAAU,EAAG,EAAE,EAAI,OACzC,GAAI,KAAK,EAAI,IAAI,QAAQ,SAAU,kFAAkF,2CAAiD,EACtK,EAAI,aAAe,GAEvB,OAAO,EAEX,OAAO,KAAK,UAAU,CAAK,EAGvB,kBAAiB,qBC9DzB,IAAI,QACA,QACA,QACA,OAEJ,SAAS,EAAU,CAAC,EAAK,EAAO,EAAK,CACjC,IAAM,EAAI,GAAW,WAAW,EAAK,OAAW,CAAG,EAC7C,EAAI,GAAW,WAAW,EAAO,OAAW,CAAG,EACrD,OAAO,IAAI,GAAK,EAAG,CAAC,EAExB,MAAM,EAAK,CACP,WAAW,CAAC,EAAK,EAAQ,KAAM,CAC3B,OAAO,eAAe,KAAM,GAAS,UAAW,CAAE,MAAO,GAAS,IAAK,CAAC,EACxE,KAAK,IAAM,EACX,KAAK,MAAQ,EAEjB,KAAK,CAAC,EAAQ,CACV,IAAM,MAAK,SAAU,KACrB,GAAI,GAAS,OAAO,CAAG,EACnB,EAAM,EAAI,MAAM,CAAM,EAC1B,GAAI,GAAS,OAAO,CAAK,EACrB,EAAQ,EAAM,MAAM,CAAM,EAC9B,OAAO,IAAI,GAAK,EAAK,CAAK,EAE9B,MAAM,CAAC,EAAG,EAAK,CACX,IAAM,EAAO,GAAK,SAAW,IAAI,IAAQ,CAAC,EAC1C,OAAO,GAAe,eAAe,EAAK,EAAM,IAAI,EAExD,QAAQ,CAAC,EAAK,EAAW,EAAa,CAClC,OAAO,GAAK,IACN,GAAc,cAAc,KAAM,EAAK,EAAW,CAAW,EAC7D,KAAK,UAAU,IAAI,EAEjC,CAEQ,QAAO,GACP,cAAa,qBCpCrB,IAAI,OACA,QACA,QAEJ,SAAS,EAAmB,CAAC,EAAY,EAAK,EAAS,CAGnD,OAFa,EAAI,QAAU,EAAW,KACb,GAA0B,IAClC,EAAY,EAAK,CAAO,EAE7C,SAAS,EAAwB,EAAG,UAAS,SAAS,GAAO,kBAAiB,YAAW,aAAY,cAAa,aAAa,CAC3H,IAAQ,SAAQ,SAAW,kBAAoB,EACzC,EAAU,OAAO,OAAO,CAAC,EAAG,EAAK,CAAE,OAAQ,EAAY,KAAM,IAAK,CAAC,EACrE,EAAY,GACV,EAAQ,CAAC,EACf,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAAG,CACnC,IAAM,EAAO,EAAM,GACf,EAAU,KACd,GAAI,GAAS,OAAO,CAAI,EAAG,CACvB,GAAI,CAAC,GAAa,EAAK,YACnB,EAAM,KAAK,EAAE,EAEjB,GADA,GAAiB,EAAK,EAAO,EAAK,cAAe,CAAS,EACtD,EAAK,QACL,EAAU,EAAK,QAElB,QAAI,GAAS,OAAO,CAAI,EAAG,CAC5B,IAAM,EAAK,GAAS,OAAO,EAAK,GAAG,EAAI,EAAK,IAAM,KAClD,GAAI,EAAI,CACJ,GAAI,CAAC,GAAa,EAAG,YACjB,EAAM,KAAK,EAAE,EACjB,GAAiB,EAAK,EAAO,EAAG,cAAe,CAAS,GAGhE,EAAY,GACZ,IAAI,EAAM,GAAU,UAAU,EAAM,EAAS,IAAO,EAAU,KAAO,IAAO,EAAY,EAAK,EAC7F,GAAI,EACA,GAAO,GAAiB,YAAY,EAAK,EAAY,EAAc,CAAO,CAAC,EAC/E,GAAI,GAAa,EACb,EAAY,GAChB,EAAM,KAAK,EAAkB,CAAG,EAEpC,IAAI,EACJ,GAAI,EAAM,SAAW,EACjB,EAAM,EAAU,MAAQ,EAAU,IAEjC,KACD,EAAM,EAAM,GACZ,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAAG,CACnC,IAAM,EAAO,EAAM,GACnB,GAAO,EAAO;AAAA,EAAK,IAAS,IAAS;AAAA,GAG7C,GAAI,GAEA,GADA,GAAO;AAAA,EAAO,GAAiB,cAAc,EAAc,CAAO,EAAG,CAAM,EACvE,EACA,EAAU,EAEb,QAAI,GAAa,EAClB,EAAY,EAChB,OAAO,EAEX,SAAS,EAAuB,EAAG,SAAS,GAAO,YAAW,cAAc,CACxE,IAAQ,SAAQ,aAAY,sBAAuB,EAAW,SAAW,kBAAoB,EAC7F,GAAc,EACd,IAAM,EAAU,OAAO,OAAO,CAAC,EAAG,EAAK,CACnC,OAAQ,EACR,OAAQ,GACR,KAAM,IACV,CAAC,EACG,EAAa,GACb,EAAe,EACb,EAAQ,CAAC,EACf,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAAG,CACnC,IAAM,EAAO,EAAM,GACf,EAAU,KACd,GAAI,GAAS,OAAO,CAAI,EAAG,CACvB,GAAI,EAAK,YACL,EAAM,KAAK,EAAE,EAEjB,GADA,GAAiB,EAAK,EAAO,EAAK,cAAe,EAAK,EAClD,EAAK,QACL,EAAU,EAAK,QAElB,QAAI,GAAS,OAAO,CAAI,EAAG,CAC5B,IAAM,EAAK,GAAS,OAAO,EAAK,GAAG,EAAI,EAAK,IAAM,KAClD,GAAI,EAAI,CACJ,GAAI,EAAG,YACH,EAAM,KAAK,EAAE,EAEjB,GADA,GAAiB,EAAK,EAAO,EAAG,cAAe,EAAK,EAChD,EAAG,QACH,EAAa,GAErB,IAAM,EAAK,GAAS,OAAO,EAAK,KAAK,EAAI,EAAK,MAAQ,KACtD,GAAI,EAAI,CACJ,GAAI,EAAG,QACH,EAAU,EAAG,QACjB,GAAI,EAAG,cACH,EAAa,GAEhB,QAAI,EAAK,OAAS,MAAQ,GAAI,QAC/B,EAAU,EAAG,QAGrB,GAAI,EACA,EAAa,GACjB,IAAI,EAAM,GAAU,UAAU,EAAM,EAAS,IAAO,EAAU,IAAK,EAEnE,GADA,IAAe,EAAa,EAAM,OAAS,GAAgB,EAAI,SAAS;AAAA,CAAI,GACxE,EAAI,EAAM,OAAS,EACnB,GAAO,IAEN,QAAI,EAAI,QAAQ,cAAe,CAChC,GAAI,EAAI,QAAQ,UAAY,EACxB,IAAe,EAAa,EAAM,OAAO,CAAC,EAAK,IAAS,EAAM,EAAK,OAAS,EAAG,CAAC,GAC3E,EAAI,OAAS,GACd,EAAI,QAAQ,WAEpB,GAAI,EACA,GAAO,IAGf,GAAI,EACA,GAAO,GAAiB,YAAY,EAAK,EAAY,EAAc,CAAO,CAAC,EAC/E,EAAM,KAAK,CAAG,EACd,EAAe,EAAM,OAEzB,IAAQ,QAAO,OAAQ,EACvB,GAAI,EAAM,SAAW,EACjB,OAAO,EAAQ,EAEd,KACD,GAAI,CAAC,EAAY,CACb,IAAM,EAAM,EAAM,OAAO,CAAC,EAAK,IAAS,EAAM,EAAK,OAAS,EAAG,CAAC,EAChE,EAAa,EAAI,QAAQ,UAAY,GAAK,EAAM,EAAI,QAAQ,UAEhE,GAAI,EAAY,CACZ,IAAI,EAAM,EACV,QAAW,KAAQ,EACf,GAAO,EAAO;AAAA,EAAK,IAAa,IAAS,IAAS;AAAA,EACtD,MAAO,GAAG;AAAA,EAAQ,IAAS,IAG3B,WAAO,GAAG,IAAQ,IAAY,EAAM,KAAK,GAAG,IAAI,IAAY,KAIxE,SAAS,EAAgB,EAAG,SAAQ,SAAW,kBAAmB,EAAO,EAAS,EAAW,CACzF,GAAI,GAAW,EACX,EAAU,EAAQ,QAAQ,OAAQ,EAAE,EACxC,GAAI,EAAS,CACT,IAAM,EAAK,GAAiB,cAAc,EAAc,CAAO,EAAG,CAAM,EACxE,EAAM,KAAK,EAAG,UAAU,CAAC,GAIzB,uBAAsB,qBCxJ9B,IAAI,QACA,QACA,QACA,OACA,QACA,OAEJ,SAAS,EAAQ,CAAC,EAAO,EAAK,CAC1B,IAAM,EAAI,GAAS,SAAS,CAAG,EAAI,EAAI,MAAQ,EAC/C,QAAW,KAAM,EACb,GAAI,GAAS,OAAO,CAAE,EAAG,CACrB,GAAI,EAAG,MAAQ,GAAO,EAAG,MAAQ,EAC7B,OAAO,EACX,GAAI,GAAS,SAAS,EAAG,GAAG,GAAK,EAAG,IAAI,QAAU,EAC9C,OAAO,EAGnB,OAEJ,MAAM,WAAgB,GAAW,UAAW,WAC7B,QAAO,EAAG,CACjB,MAAO,wBAEX,WAAW,CAAC,EAAQ,CAChB,MAAM,GAAS,IAAK,CAAM,EAC1B,KAAK,MAAQ,CAAC,QAMX,KAAI,CAAC,EAAQ,EAAK,EAAK,CAC1B,IAAQ,gBAAe,YAAa,EAC9B,EAAM,IAAI,KAAK,CAAM,EACrB,EAAM,CAAC,EAAK,IAAU,CACxB,GAAI,OAAO,IAAa,WACpB,EAAQ,EAAS,KAAK,EAAK,EAAK,CAAK,EACpC,QAAI,MAAM,QAAQ,CAAQ,GAAK,CAAC,EAAS,SAAS,CAAG,EACtD,OACJ,GAAI,IAAU,QAAa,EACvB,EAAI,MAAM,KAAK,GAAK,WAAW,EAAK,EAAO,CAAG,CAAC,GAEvD,GAAI,aAAe,IACf,QAAY,EAAK,KAAU,EACvB,EAAI,EAAK,CAAK,EAEjB,QAAI,GAAO,OAAO,IAAQ,SAC3B,QAAW,KAAO,OAAO,KAAK,CAAG,EAC7B,EAAI,EAAK,EAAI,EAAI,EAEzB,GAAI,OAAO,EAAO,iBAAmB,WACjC,EAAI,MAAM,KAAK,EAAO,cAAc,EAExC,OAAO,EAQX,GAAG,CAAC,EAAM,EAAW,CACjB,IAAI,EACJ,GAAI,GAAS,OAAO,CAAI,EACpB,EAAQ,EACP,QAAI,CAAC,GAAQ,OAAO,IAAS,UAAY,EAAE,QAAS,GAErD,EAAQ,IAAI,GAAK,KAAK,EAAM,GAAM,KAAK,EAGvC,OAAQ,IAAI,GAAK,KAAK,EAAK,IAAK,EAAK,KAAK,EAC9C,IAAM,EAAO,GAAS,KAAK,MAAO,EAAM,GAAG,EACrC,EAAc,KAAK,QAAQ,eACjC,GAAI,EAAM,CACN,GAAI,CAAC,EACD,MAAU,MAAM,OAAO,EAAM,iBAAiB,EAElD,GAAI,GAAS,SAAS,EAAK,KAAK,GAAK,GAAO,cAAc,EAAM,KAAK,EACjE,EAAK,MAAM,MAAQ,EAAM,MAEzB,OAAK,MAAQ,EAAM,MAEtB,QAAI,EAAa,CAClB,IAAM,EAAI,KAAK,MAAM,UAAU,KAAQ,EAAY,EAAO,CAAI,EAAI,CAAC,EACnE,GAAI,IAAM,GACN,KAAK,MAAM,KAAK,CAAK,EAErB,UAAK,MAAM,OAAO,EAAG,EAAG,CAAK,EAGjC,UAAK,MAAM,KAAK,CAAK,EAG7B,MAAM,CAAC,EAAK,CACR,IAAM,EAAK,GAAS,KAAK,MAAO,CAAG,EACnC,GAAI,CAAC,EACD,MAAO,GAEX,OADY,KAAK,MAAM,OAAO,KAAK,MAAM,QAAQ,CAAE,EAAG,CAAC,EAC5C,OAAS,EAExB,GAAG,CAAC,EAAK,EAAY,CAEjB,IAAM,EADK,GAAS,KAAK,MAAO,CAAG,GAClB,MACjB,OAAQ,CAAC,GAAc,GAAS,SAAS,CAAI,EAAI,EAAK,MAAQ,IAAS,OAE3E,GAAG,CAAC,EAAK,CACL,MAAO,CAAC,CAAC,GAAS,KAAK,MAAO,CAAG,EAErC,GAAG,CAAC,EAAK,EAAO,CACZ,KAAK,IAAI,IAAI,GAAK,KAAK,EAAK,CAAK,EAAG,EAAI,EAO5C,MAAM,CAAC,EAAG,EAAK,EAAM,CACjB,IAAM,EAAM,EAAO,IAAI,EAAS,GAAK,SAAW,IAAI,IAAQ,CAAC,EAC7D,GAAI,GAAK,SACL,EAAI,SAAS,CAAG,EACpB,QAAW,KAAQ,KAAK,MACpB,GAAe,eAAe,EAAK,EAAK,CAAI,EAChD,OAAO,EAEX,QAAQ,CAAC,EAAK,EAAW,EAAa,CAClC,GAAI,CAAC,EACD,OAAO,KAAK,UAAU,IAAI,EAC9B,QAAW,KAAQ,KAAK,MACpB,GAAI,CAAC,GAAS,OAAO,CAAI,EACrB,MAAU,MAAM,sCAAsC,KAAK,UAAU,CAAI,WAAW,EAE5F,GAAI,CAAC,EAAI,eAAiB,KAAK,iBAAiB,EAAK,EACjD,EAAM,OAAO,OAAO,CAAC,EAAG,EAAK,CAAE,cAAe,EAAK,CAAC,EACxD,OAAO,GAAoB,oBAAoB,KAAM,EAAK,CACtD,gBAAiB,GACjB,UAAW,CAAE,MAAO,IAAK,IAAK,GAAI,EAClC,WAAY,EAAI,QAAU,GAC1B,cACA,WACJ,CAAC,EAET,CAEQ,WAAU,GACV,YAAW,qBChJnB,IAAI,OACA,QAEE,GAAM,CACR,WAAY,MACZ,QAAS,GACT,UAAW,GAAQ,QACnB,IAAK,wBACL,OAAO,CAAC,EAAK,EAAS,CAClB,GAAI,CAAC,GAAS,MAAM,CAAG,EACnB,EAAQ,iCAAiC,EAC7C,OAAO,GAEX,WAAY,CAAC,EAAQ,EAAK,IAAQ,GAAQ,QAAQ,KAAK,EAAQ,EAAK,CAAG,CAC3E,EAEQ,OAAM,qBChBd,IAAI,QACA,QACA,QACA,OACA,OACA,QAEJ,MAAM,WAAgB,GAAW,UAAW,WAC7B,QAAO,EAAG,CACjB,MAAO,wBAEX,WAAW,CAAC,EAAQ,CAChB,MAAM,GAAS,IAAK,CAAM,EAC1B,KAAK,MAAQ,CAAC,EAElB,GAAG,CAAC,EAAO,CACP,KAAK,MAAM,KAAK,CAAK,EAUzB,MAAM,CAAC,EAAK,CACR,IAAM,EAAM,GAAY,CAAG,EAC3B,GAAI,OAAO,IAAQ,SACf,MAAO,GAEX,OADY,KAAK,MAAM,OAAO,EAAK,CAAC,EACzB,OAAS,EAExB,GAAG,CAAC,EAAK,EAAY,CACjB,IAAM,EAAM,GAAY,CAAG,EAC3B,GAAI,OAAO,IAAQ,SACf,OACJ,IAAM,EAAK,KAAK,MAAM,GACtB,MAAO,CAAC,GAAc,GAAS,SAAS,CAAE,EAAI,EAAG,MAAQ,EAQ7D,GAAG,CAAC,EAAK,CACL,IAAM,EAAM,GAAY,CAAG,EAC3B,OAAO,OAAO,IAAQ,UAAY,EAAM,KAAK,MAAM,OASvD,GAAG,CAAC,EAAK,EAAO,CACZ,IAAM,EAAM,GAAY,CAAG,EAC3B,GAAI,OAAO,IAAQ,SACf,MAAU,MAAM,+BAA+B,IAAM,EACzD,IAAM,EAAO,KAAK,MAAM,GACxB,GAAI,GAAS,SAAS,CAAI,GAAK,GAAO,cAAc,CAAK,EACrD,EAAK,MAAQ,EAEb,UAAK,MAAM,GAAO,EAE1B,MAAM,CAAC,EAAG,EAAK,CACX,IAAM,EAAM,CAAC,EACb,GAAI,GAAK,SACL,EAAI,SAAS,CAAG,EACpB,IAAI,EAAI,EACR,QAAW,KAAQ,KAAK,MACpB,EAAI,KAAK,GAAK,KAAK,EAAM,OAAO,GAAG,EAAG,CAAG,CAAC,EAC9C,OAAO,EAEX,QAAQ,CAAC,EAAK,EAAW,EAAa,CAClC,GAAI,CAAC,EACD,OAAO,KAAK,UAAU,IAAI,EAC9B,OAAO,GAAoB,oBAAoB,KAAM,EAAK,CACtD,gBAAiB,KACjB,UAAW,CAAE,MAAO,IAAK,IAAK,GAAI,EAClC,YAAa,EAAI,QAAU,IAAM,KACjC,cACA,WACJ,CAAC,QAEE,KAAI,CAAC,EAAQ,EAAK,EAAK,CAC1B,IAAQ,YAAa,EACf,EAAM,IAAI,KAAK,CAAM,EAC3B,GAAI,GAAO,OAAO,YAAY,OAAO,CAAG,EAAG,CACvC,IAAI,EAAI,EACR,QAAS,KAAM,EAAK,CAChB,GAAI,OAAO,IAAa,WAAY,CAChC,IAAM,EAAM,aAAe,IAAM,EAAK,OAAO,GAAG,EAChD,EAAK,EAAS,KAAK,EAAK,EAAK,CAAE,EAEnC,EAAI,MAAM,KAAK,GAAW,WAAW,EAAI,OAAW,CAAG,CAAC,GAGhE,OAAO,EAEf,CACA,SAAS,EAAW,CAAC,EAAK,CACtB,IAAI,EAAM,GAAS,SAAS,CAAG,EAAI,EAAI,MAAQ,EAC/C,GAAI,GAAO,OAAO,IAAQ,SACtB,EAAM,OAAO,CAAG,EACpB,OAAO,OAAO,IAAQ,UAAY,OAAO,UAAU,CAAG,GAAK,GAAO,EAC5D,EACA,KAGF,WAAU,qBChHlB,IAAI,OACA,QAEE,GAAM,CACR,WAAY,MACZ,QAAS,GACT,UAAW,GAAQ,QACnB,IAAK,wBACL,OAAO,CAAC,EAAK,EAAS,CAClB,GAAI,CAAC,GAAS,MAAM,CAAG,EACnB,EAAQ,kCAAkC,EAC9C,OAAO,GAEX,WAAY,CAAC,EAAQ,EAAK,IAAQ,GAAQ,QAAQ,KAAK,EAAQ,EAAK,CAAG,CAC3E,EAEQ,OAAM,qBChBd,IAAI,QAEE,GAAS,CACX,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,wBACL,QAAS,KAAO,EAChB,SAAS,CAAC,EAAM,EAAK,EAAW,EAAa,CAEzC,OADA,EAAM,OAAO,OAAO,CAAE,aAAc,EAAK,EAAG,CAAG,EACxC,GAAgB,gBAAgB,EAAM,EAAK,EAAW,CAAW,EAEhF,EAEQ,UAAS,qBCbjB,IAAI,OAEE,GAAU,CACZ,SAAU,KAAS,GAAS,KAC5B,WAAY,IAAM,IAAI,GAAO,OAAO,IAAI,EACxC,QAAS,GACT,IAAK,yBACL,KAAM,wBACN,QAAS,IAAM,IAAI,GAAO,OAAO,IAAI,EACrC,UAAW,EAAG,UAAU,IAAQ,OAAO,IAAW,UAAY,GAAQ,KAAK,KAAK,CAAM,EAChF,EACA,EAAI,QAAQ,OACtB,EAEQ,WAAU,qBCdlB,IAAI,OAEE,GAAU,CACZ,SAAU,KAAS,OAAO,IAAU,UACpC,QAAS,GACT,IAAK,yBACL,KAAM,oCACN,QAAS,KAAO,IAAI,GAAO,OAAO,EAAI,KAAO,KAAO,EAAI,KAAO,GAAG,EAClE,SAAS,EAAG,SAAQ,SAAS,EAAK,CAC9B,GAAI,GAAU,GAAQ,KAAK,KAAK,CAAM,EAAG,CACrC,IAAM,EAAK,EAAO,KAAO,KAAO,EAAO,KAAO,IAC9C,GAAI,IAAU,EACV,OAAO,EAEf,OAAO,EAAQ,EAAI,QAAQ,QAAU,EAAI,QAAQ,SAEzD,EAEQ,WAAU,qBClBlB,SAAS,EAAe,EAAG,SAAQ,oBAAmB,MAAK,SAAS,CAChE,GAAI,OAAO,IAAU,SACjB,OAAO,OAAO,CAAK,EACvB,IAAM,EAAM,OAAO,IAAU,SAAW,EAAQ,OAAO,CAAK,EAC5D,GAAI,CAAC,SAAS,CAAG,EACb,OAAO,MAAM,CAAG,EAAI,OAAS,EAAM,EAAI,QAAU,OACrD,IAAI,EAAI,OAAO,GAAG,EAAO,EAAE,EAAI,KAAO,KAAK,UAAU,CAAK,EAC1D,GAAI,CAAC,GACD,IACC,CAAC,GAAO,IAAQ,4BACjB,MAAM,KAAK,CAAC,EAAG,CACf,IAAI,EAAI,EAAE,QAAQ,GAAG,EACrB,GAAI,EAAI,EACJ,EAAI,EAAE,OACN,GAAK,IAET,IAAI,EAAI,GAAqB,EAAE,OAAS,EAAI,GAC5C,MAAO,KAAM,EACT,GAAK,IAEb,OAAO,EAGH,mBAAkB,qBCvB1B,IAAI,OACA,QAEE,GAAW,CACb,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,0BACL,KAAM,iDACN,QAAS,KAAO,EAAI,MAAM,EAAE,EAAE,YAAY,IAAM,MAC1C,IACA,EAAI,KAAO,IACP,OAAO,kBACP,OAAO,kBACjB,UAAW,GAAgB,eAC/B,EACM,GAAW,CACb,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,0BACL,OAAQ,MACR,KAAM,yDACN,QAAS,KAAO,WAAW,CAAG,EAC9B,SAAS,CAAC,EAAM,CACZ,IAAM,EAAM,OAAO,EAAK,KAAK,EAC7B,OAAO,SAAS,CAAG,EAAI,EAAI,cAAc,EAAI,GAAgB,gBAAgB,CAAI,EAEzF,EACM,GAAQ,CACV,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,0BACL,KAAM,qCACN,OAAO,CAAC,EAAK,CACT,IAAM,EAAO,IAAI,GAAO,OAAO,WAAW,CAAG,CAAC,EACxC,EAAM,EAAI,QAAQ,GAAG,EAC3B,GAAI,IAAQ,IAAM,EAAI,EAAI,OAAS,KAAO,IACtC,EAAK,kBAAoB,EAAI,OAAS,EAAM,EAChD,OAAO,GAEX,UAAW,GAAgB,eAC/B,EAEQ,SAAQ,GACR,YAAW,GACX,YAAW,qBC5CnB,IAAI,QAEE,GAAc,CAAC,IAAU,OAAO,IAAU,UAAY,OAAO,UAAU,CAAK,EAC5E,GAAa,CAAC,EAAK,EAAQ,GAAS,iBAAmB,EAAc,OAAO,CAAG,EAAI,SAAS,EAAI,UAAU,CAAM,EAAG,CAAK,EAC9H,SAAS,EAAY,CAAC,EAAM,EAAO,EAAQ,CACvC,IAAQ,SAAU,EAClB,GAAI,GAAY,CAAK,GAAK,GAAS,EAC/B,OAAO,EAAS,EAAM,SAAS,CAAK,EACxC,OAAO,GAAgB,gBAAgB,CAAI,EAE/C,IAAM,GAAS,CACX,SAAU,KAAS,GAAY,CAAK,GAAK,GAAS,EAClD,QAAS,GACT,IAAK,wBACL,OAAQ,MACR,KAAM,aACN,QAAS,CAAC,EAAK,EAAU,IAAQ,GAAW,EAAK,EAAG,EAAG,CAAG,EAC1D,UAAW,KAAQ,GAAa,EAAM,EAAG,IAAI,CACjD,EACM,GAAM,CACR,SAAU,GACV,QAAS,GACT,IAAK,wBACL,KAAM,gBACN,QAAS,CAAC,EAAK,EAAU,IAAQ,GAAW,EAAK,EAAG,GAAI,CAAG,EAC3D,UAAW,GAAgB,eAC/B,EACM,GAAS,CACX,SAAU,KAAS,GAAY,CAAK,GAAK,GAAS,EAClD,QAAS,GACT,IAAK,wBACL,OAAQ,MACR,KAAM,mBACN,QAAS,CAAC,EAAK,EAAU,IAAQ,GAAW,EAAK,EAAG,GAAI,CAAG,EAC3D,UAAW,KAAQ,GAAa,EAAM,GAAI,IAAI,CAClD,EAEQ,OAAM,GACN,UAAS,GACT,UAAS,qBCvCjB,IAAI,QACA,QACA,QACA,QACA,QACA,QACA,QAEE,GAAS,CACX,GAAI,IACJ,GAAI,IACJ,GAAO,OACP,GAAM,QACN,GAAK,QACL,GAAI,OACJ,GAAI,IACJ,GAAI,OACJ,GAAM,SACN,GAAM,SACN,GAAM,KACV,EAEQ,UAAS,qBCtBjB,IAAI,OACA,QACA,QAEJ,SAAS,EAAW,CAAC,EAAO,CACxB,OAAO,OAAO,IAAU,UAAY,OAAO,UAAU,CAAK,EAE9D,IAAM,GAAgB,EAAG,WAAY,KAAK,UAAU,CAAK,EACnD,GAAc,CAChB,CACI,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,wBACL,QAAS,KAAO,EAChB,UAAW,EACf,EACA,CACI,SAAU,KAAS,GAAS,KAC5B,WAAY,IAAM,IAAI,GAAO,OAAO,IAAI,EACxC,QAAS,GACT,IAAK,yBACL,KAAM,SACN,QAAS,IAAM,KACf,UAAW,EACf,EACA,CACI,SAAU,KAAS,OAAO,IAAU,UACpC,QAAS,GACT,IAAK,yBACL,KAAM,iBACN,QAAS,KAAO,IAAQ,OACxB,UAAW,EACf,EACA,CACI,SAAU,GACV,QAAS,GACT,IAAK,wBACL,KAAM,wBACN,QAAS,CAAC,EAAK,GAAY,iBAAkB,EAAc,OAAO,CAAG,EAAI,SAAS,EAAK,EAAE,EACzF,UAAW,EAAG,WAAY,GAAY,CAAK,EAAI,EAAM,SAAS,EAAI,KAAK,UAAU,CAAK,CAC1F,EACA,CACI,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,0BACL,KAAM,yDACN,QAAS,KAAO,WAAW,CAAG,EAC9B,UAAW,EACf,CACJ,EACM,GAAY,CACd,QAAS,GACT,IAAK,GACL,KAAM,IACN,OAAO,CAAC,EAAK,EAAS,CAElB,OADA,EAAQ,2BAA2B,KAAK,UAAU,CAAG,GAAG,EACjD,EAEf,EACM,GAAS,CAAC,GAAI,IAAK,GAAI,GAAG,EAAE,OAAO,GAAa,EAAS,EAEvD,UAAS,qBC7DjB,IAAI,gBACA,OACA,QAEE,GAAS,CACX,SAAU,KAAS,aAAiB,WACpC,QAAS,GACT,IAAK,2BASL,OAAO,CAAC,EAAK,EAAS,CAClB,GAAI,OAAO,GAAY,SAAW,WAC9B,OAAO,GAAY,OAAO,KAAK,EAAK,QAAQ,EAE3C,QAAI,OAAO,OAAS,WAAY,CAEjC,IAAM,EAAM,KAAK,EAAI,QAAQ,UAAW,EAAE,CAAC,EACrC,EAAS,IAAI,WAAW,EAAI,MAAM,EACxC,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,EAAE,EAC9B,EAAO,GAAK,EAAI,WAAW,CAAC,EAChC,OAAO,EAIP,YADA,EAAQ,0FAA0F,EAC3F,GAGf,SAAS,EAAG,UAAS,OAAM,SAAS,EAAK,EAAW,EAAa,CAC7D,GAAI,CAAC,EACD,MAAO,GACX,IAAM,EAAM,EACR,EACJ,GAAI,OAAO,GAAY,SAAW,WAC9B,EACI,aAAe,GAAY,OACrB,EAAI,SAAS,QAAQ,EACrB,GAAY,OAAO,KAAK,EAAI,MAAM,EAAE,SAAS,QAAQ,EAE9D,QAAI,OAAO,OAAS,WAAY,CACjC,IAAI,EAAI,GACR,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,EAAE,EAC9B,GAAK,OAAO,aAAa,EAAI,EAAE,EACnC,EAAM,KAAK,CAAC,EAGZ,WAAU,MAAM,0FAA0F,EAG9G,GADA,IAAS,EAAO,GAAO,OAAO,eAC1B,IAAS,GAAO,OAAO,aAAc,CACrC,IAAM,EAAY,KAAK,IAAI,EAAI,QAAQ,UAAY,EAAI,OAAO,OAAQ,EAAI,QAAQ,eAAe,EAC3F,EAAI,KAAK,KAAK,EAAI,OAAS,CAAS,EACpC,EAAY,MAAM,CAAC,EACzB,QAAS,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,EAAE,EAAG,GAAK,EACpC,EAAM,GAAK,EAAI,OAAO,EAAG,CAAS,EAEtC,EAAM,EAAM,KAAK,IAAS,GAAO,OAAO,cAAgB;AAAA,EAAO,GAAG,EAEtE,OAAO,GAAgB,gBAAgB,CAAE,UAAS,OAAM,MAAO,CAAI,EAAG,EAAK,EAAW,CAAW,EAEzG,EAEQ,UAAS,qBCnEjB,IAAI,OACA,QACA,OACA,QAEJ,SAAS,EAAY,CAAC,EAAK,EAAS,CAChC,GAAI,GAAS,MAAM,CAAG,EAClB,QAAS,EAAI,EAAG,EAAI,EAAI,MAAM,OAAQ,EAAE,EAAG,CACvC,IAAI,EAAO,EAAI,MAAM,GACrB,GAAI,GAAS,OAAO,CAAI,EACpB,SACC,QAAI,GAAS,MAAM,CAAI,EAAG,CAC3B,GAAI,EAAK,MAAM,OAAS,EACpB,EAAQ,gDAAgD,EAC5D,IAAM,EAAO,EAAK,MAAM,IAAM,IAAI,GAAK,KAAK,IAAI,GAAO,OAAO,IAAI,CAAC,EACnE,GAAI,EAAK,cACL,EAAK,IAAI,cAAgB,EAAK,IAAI,cAC5B,GAAG,EAAK;AAAA,EAAkB,EAAK,IAAI,gBACnC,EAAK,cACf,GAAI,EAAK,QAAS,CACd,IAAM,EAAK,EAAK,OAAS,EAAK,IAC9B,EAAG,QAAU,EAAG,QACV,GAAG,EAAK;AAAA,EAAY,EAAG,UACvB,EAAK,QAEf,EAAO,EAEX,EAAI,MAAM,GAAK,GAAS,OAAO,CAAI,EAAI,EAAO,IAAI,GAAK,KAAK,CAAI,EAIpE,OAAQ,kCAAkC,EAC9C,OAAO,EAEX,SAAS,EAAW,CAAC,EAAQ,EAAU,EAAK,CACxC,IAAQ,YAAa,EACf,EAAQ,IAAI,GAAQ,QAAQ,CAAM,EACxC,EAAM,IAAM,0BACZ,IAAI,EAAI,EACR,GAAI,GAAY,OAAO,YAAY,OAAO,CAAQ,EAC9C,QAAS,KAAM,EAAU,CACrB,GAAI,OAAO,IAAa,WACpB,EAAK,EAAS,KAAK,EAAU,OAAO,GAAG,EAAG,CAAE,EAChD,IAAI,EAAK,EACT,GAAI,MAAM,QAAQ,CAAE,EAChB,GAAI,EAAG,SAAW,EACd,EAAM,EAAG,GACT,EAAQ,EAAG,GAGX,WAAU,UAAU,gCAAgC,GAAI,EAE3D,QAAI,GAAM,aAAc,OAAQ,CACjC,IAAM,EAAO,OAAO,KAAK,CAAE,EAC3B,GAAI,EAAK,SAAW,EAChB,EAAM,EAAK,GACX,EAAQ,EAAG,GAGX,WAAU,UAAU,oCAAoC,EAAK,aAAa,EAI9E,OAAM,EAEV,EAAM,MAAM,KAAK,GAAK,WAAW,EAAK,EAAO,CAAG,CAAC,EAEzD,OAAO,EAEX,IAAM,GAAQ,CACV,WAAY,MACZ,QAAS,GACT,IAAK,0BACL,QAAS,GACT,WAAY,EAChB,EAEQ,eAAc,GACd,SAAQ,GACR,gBAAe,qBC/EvB,IAAI,OACA,QACA,QACA,QACA,QAEJ,MAAM,WAAiB,GAAQ,OAAQ,CACnC,WAAW,EAAG,CACV,MAAM,EACN,KAAK,IAAM,GAAQ,QAAQ,UAAU,IAAI,KAAK,IAAI,EAClD,KAAK,OAAS,GAAQ,QAAQ,UAAU,OAAO,KAAK,IAAI,EACxD,KAAK,IAAM,GAAQ,QAAQ,UAAU,IAAI,KAAK,IAAI,EAClD,KAAK,IAAM,GAAQ,QAAQ,UAAU,IAAI,KAAK,IAAI,EAClD,KAAK,IAAM,GAAQ,QAAQ,UAAU,IAAI,KAAK,IAAI,EAClD,KAAK,IAAM,GAAS,IAMxB,MAAM,CAAC,EAAG,EAAK,CACX,GAAI,CAAC,EACD,OAAO,MAAM,OAAO,CAAC,EACzB,IAAM,EAAM,IAAI,IAChB,GAAI,GAAK,SACL,EAAI,SAAS,CAAG,EACpB,QAAW,KAAQ,KAAK,MAAO,CAC3B,IAAI,EAAK,EACT,GAAI,GAAS,OAAO,CAAI,EACpB,EAAM,GAAK,KAAK,EAAK,IAAK,GAAI,CAAG,EACjC,EAAQ,GAAK,KAAK,EAAK,MAAO,EAAK,CAAG,EAGtC,OAAM,GAAK,KAAK,EAAM,GAAI,CAAG,EAEjC,GAAI,EAAI,IAAI,CAAG,EACX,MAAU,MAAM,8CAA8C,EAClE,EAAI,IAAI,EAAK,CAAK,EAEtB,OAAO,QAEJ,KAAI,CAAC,EAAQ,EAAU,EAAK,CAC/B,IAAM,EAAU,GAAM,YAAY,EAAQ,EAAU,CAAG,EACjD,EAAO,IAAI,KAEjB,OADA,EAAK,MAAQ,EAAQ,MACd,EAEf,CACA,GAAS,IAAM,yBACf,IAAM,GAAO,CACT,WAAY,MACZ,SAAU,KAAS,aAAiB,IACpC,UAAW,GACX,QAAS,GACT,IAAK,yBACL,OAAO,CAAC,EAAK,EAAS,CAClB,IAAM,EAAU,GAAM,aAAa,EAAK,CAAO,EACzC,EAAW,CAAC,EAClB,QAAa,SAAS,EAAQ,MAC1B,GAAI,GAAS,SAAS,CAAG,EACrB,GAAI,EAAS,SAAS,EAAI,KAAK,EAC3B,EAAQ,iDAAiD,EAAI,OAAO,EAGpE,OAAS,KAAK,EAAI,KAAK,EAInC,OAAO,OAAO,OAAO,IAAI,GAAY,CAAO,GAEhD,WAAY,CAAC,EAAQ,EAAU,IAAQ,GAAS,KAAK,EAAQ,EAAU,CAAG,CAC9E,EAEQ,YAAW,GACX,QAAO,qBC1Ef,IAAI,OAEJ,SAAS,EAAa,EAAG,QAAO,UAAU,EAAK,CAE3C,GAAI,IADY,EAAQ,GAAU,IACZ,KAAK,KAAK,CAAM,EAClC,OAAO,EACX,OAAO,EAAQ,EAAI,QAAQ,QAAU,EAAI,QAAQ,SAErD,IAAM,GAAU,CACZ,SAAU,KAAS,IAAU,GAC7B,QAAS,GACT,IAAK,yBACL,KAAM,6CACN,QAAS,IAAM,IAAI,GAAO,OAAO,EAAI,EACrC,UAAW,EACf,EACM,GAAW,CACb,SAAU,KAAS,IAAU,GAC7B,QAAS,GACT,IAAK,yBACL,KAAM,+CACN,QAAS,IAAM,IAAI,GAAO,OAAO,EAAK,EACtC,UAAW,EACf,EAEQ,YAAW,GACX,WAAU,qBC1BlB,IAAI,OACA,QAEE,GAAW,CACb,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,0BACL,KAAM,iDACN,QAAS,CAAC,IAAQ,EAAI,MAAM,EAAE,EAAE,YAAY,IAAM,MAC5C,IACA,EAAI,KAAO,IACP,OAAO,kBACP,OAAO,kBACjB,UAAW,GAAgB,eAC/B,EACM,GAAW,CACb,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,0BACL,OAAQ,MACR,KAAM,wDACN,QAAS,CAAC,IAAQ,WAAW,EAAI,QAAQ,KAAM,EAAE,CAAC,EAClD,SAAS,CAAC,EAAM,CACZ,IAAM,EAAM,OAAO,EAAK,KAAK,EAC7B,OAAO,SAAS,CAAG,EAAI,EAAI,cAAc,EAAI,GAAgB,gBAAgB,CAAI,EAEzF,EACM,GAAQ,CACV,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,0BACL,KAAM,oCACN,OAAO,CAAC,EAAK,CACT,IAAM,EAAO,IAAI,GAAO,OAAO,WAAW,EAAI,QAAQ,KAAM,EAAE,CAAC,CAAC,EAC1D,EAAM,EAAI,QAAQ,GAAG,EAC3B,GAAI,IAAQ,GAAI,CACZ,IAAM,EAAI,EAAI,UAAU,EAAM,CAAC,EAAE,QAAQ,KAAM,EAAE,EACjD,GAAI,EAAE,EAAE,OAAS,KAAO,IACpB,EAAK,kBAAoB,EAAE,OAEnC,OAAO,GAEX,UAAW,GAAgB,eAC/B,EAEQ,SAAQ,GACR,YAAW,GACX,YAAW,qBC/CnB,IAAI,QAEE,GAAc,CAAC,IAAU,OAAO,IAAU,UAAY,OAAO,UAAU,CAAK,EAClF,SAAS,EAAU,CAAC,EAAK,EAAQ,GAAS,eAAe,CACrD,IAAM,EAAO,EAAI,GACjB,GAAI,IAAS,KAAO,IAAS,IACzB,GAAU,EAEd,GADA,EAAM,EAAI,UAAU,CAAM,EAAE,QAAQ,KAAM,EAAE,EACxC,EAAa,CACb,OAAQ,OACC,GACD,EAAM,KAAK,IACX,UACC,GACD,EAAM,KAAK,IACX,UACC,IACD,EAAM,KAAK,IACX,MAER,IAAM,EAAI,OAAO,CAAG,EACpB,OAAO,IAAS,IAAM,OAAO,EAAE,EAAI,EAAI,EAE3C,IAAM,EAAI,SAAS,EAAK,CAAK,EAC7B,OAAO,IAAS,IAAM,GAAK,EAAI,EAEnC,SAAS,EAAY,CAAC,EAAM,EAAO,EAAQ,CACvC,IAAQ,SAAU,EAClB,GAAI,GAAY,CAAK,EAAG,CACpB,IAAM,EAAM,EAAM,SAAS,CAAK,EAChC,OAAO,EAAQ,EAAI,IAAM,EAAS,EAAI,OAAO,CAAC,EAAI,EAAS,EAE/D,OAAO,GAAgB,gBAAgB,CAAI,EAE/C,IAAM,GAAS,CACX,SAAU,GACV,QAAS,GACT,IAAK,wBACL,OAAQ,MACR,KAAM,mBACN,QAAS,CAAC,EAAK,EAAU,IAAQ,GAAW,EAAK,EAAG,EAAG,CAAG,EAC1D,UAAW,KAAQ,GAAa,EAAM,EAAG,IAAI,CACjD,EACM,GAAS,CACX,SAAU,GACV,QAAS,GACT,IAAK,wBACL,OAAQ,MACR,KAAM,kBACN,QAAS,CAAC,EAAK,EAAU,IAAQ,GAAW,EAAK,EAAG,EAAG,CAAG,EAC1D,UAAW,KAAQ,GAAa,EAAM,EAAG,GAAG,CAChD,EACM,GAAM,CACR,SAAU,GACV,QAAS,GACT,IAAK,wBACL,KAAM,sBACN,QAAS,CAAC,EAAK,EAAU,IAAQ,GAAW,EAAK,EAAG,GAAI,CAAG,EAC3D,UAAW,GAAgB,eAC/B,EACM,GAAS,CACX,SAAU,GACV,QAAS,GACT,IAAK,wBACL,OAAQ,MACR,KAAM,yBACN,QAAS,CAAC,EAAK,EAAU,IAAQ,GAAW,EAAK,EAAG,GAAI,CAAG,EAC3D,UAAW,KAAQ,GAAa,EAAM,GAAI,IAAI,CAClD,EAEQ,OAAM,GACN,UAAS,GACT,UAAS,GACT,UAAS,qBCzEjB,IAAI,OACA,QACA,QAEJ,MAAM,WAAgB,GAAQ,OAAQ,CAClC,WAAW,CAAC,EAAQ,CAChB,MAAM,CAAM,EACZ,KAAK,IAAM,GAAQ,IAEvB,GAAG,CAAC,EAAK,CACL,IAAI,EACJ,GAAI,GAAS,OAAO,CAAG,EACnB,EAAO,EACN,QAAI,GACL,OAAO,IAAQ,UACf,QAAS,GACT,UAAW,GACX,EAAI,QAAU,KACd,EAAO,IAAI,GAAK,KAAK,EAAI,IAAK,IAAI,EAElC,OAAO,IAAI,GAAK,KAAK,EAAK,IAAI,EAElC,GAAI,CADS,GAAQ,SAAS,KAAK,MAAO,EAAK,GAAG,EAE9C,KAAK,MAAM,KAAK,CAAI,EAM5B,GAAG,CAAC,EAAK,EAAU,CACf,IAAM,EAAO,GAAQ,SAAS,KAAK,MAAO,CAAG,EAC7C,MAAO,CAAC,GAAY,GAAS,OAAO,CAAI,EAClC,GAAS,SAAS,EAAK,GAAG,EACtB,EAAK,IAAI,MACT,EAAK,IACT,EAEV,GAAG,CAAC,EAAK,EAAO,CACZ,GAAI,OAAO,IAAU,UACjB,MAAU,MAAM,iEAAiE,OAAO,GAAO,EACnG,IAAM,EAAO,GAAQ,SAAS,KAAK,MAAO,CAAG,EAC7C,GAAI,GAAQ,CAAC,EACT,KAAK,MAAM,OAAO,KAAK,MAAM,QAAQ,CAAI,EAAG,CAAC,EAE5C,QAAI,CAAC,GAAQ,EACd,KAAK,MAAM,KAAK,IAAI,GAAK,KAAK,CAAG,CAAC,EAG1C,MAAM,CAAC,EAAG,EAAK,CACX,OAAO,MAAM,OAAO,EAAG,EAAK,GAAG,EAEnC,QAAQ,CAAC,EAAK,EAAW,EAAa,CAClC,GAAI,CAAC,EACD,OAAO,KAAK,UAAU,IAAI,EAC9B,GAAI,KAAK,iBAAiB,EAAI,EAC1B,OAAO,MAAM,SAAS,OAAO,OAAO,CAAC,EAAG,EAAK,CAAE,cAAe,EAAK,CAAC,EAAG,EAAW,CAAW,EAE7F,WAAU,MAAM,qCAAqC,QAEtD,KAAI,CAAC,EAAQ,EAAU,EAAK,CAC/B,IAAQ,YAAa,EACf,EAAM,IAAI,KAAK,CAAM,EAC3B,GAAI,GAAY,OAAO,YAAY,OAAO,CAAQ,EAC9C,QAAS,KAAS,EAAU,CACxB,GAAI,OAAO,IAAa,WACpB,EAAQ,EAAS,KAAK,EAAU,EAAO,CAAK,EAChD,EAAI,MAAM,KAAK,GAAK,WAAW,EAAO,KAAM,CAAG,CAAC,EAExD,OAAO,EAEf,CACA,GAAQ,IAAM,wBACd,IAAM,GAAM,CACR,WAAY,MACZ,SAAU,KAAS,aAAiB,IACpC,UAAW,GACX,QAAS,GACT,IAAK,wBACL,WAAY,CAAC,EAAQ,EAAU,IAAQ,GAAQ,KAAK,EAAQ,EAAU,CAAG,EACzE,OAAO,CAAC,EAAK,EAAS,CAClB,GAAI,GAAS,MAAM,CAAG,EAClB,GAAI,EAAI,iBAAiB,EAAI,EACzB,OAAO,OAAO,OAAO,IAAI,GAAW,CAAG,EAEvC,OAAQ,qCAAqC,EAGjD,OAAQ,iCAAiC,EAC7C,OAAO,EAEf,EAEQ,WAAU,GACV,OAAM,qBC7Fd,IAAI,QAGJ,SAAS,EAAgB,CAAC,EAAK,EAAU,CACrC,IAAM,EAAO,EAAI,GACX,EAAQ,IAAS,KAAO,IAAS,IAAM,EAAI,UAAU,CAAC,EAAI,EAC1D,EAAM,CAAC,IAAM,EAAW,OAAO,CAAC,EAAI,OAAO,CAAC,EAC5C,EAAM,EACP,QAAQ,KAAM,EAAE,EAChB,MAAM,GAAG,EACT,OAAO,CAAC,EAAK,IAAM,EAAM,EAAI,EAAE,EAAI,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EACtD,OAAQ,IAAS,IAAM,EAAI,EAAE,EAAI,EAAM,EAO3C,SAAS,EAAoB,CAAC,EAAM,CAChC,IAAM,SAAU,EACZ,EAAM,CAAC,IAAM,EACjB,GAAI,OAAO,IAAU,SACjB,EAAM,KAAK,OAAO,CAAC,EAClB,QAAI,MAAM,CAAK,GAAK,CAAC,SAAS,CAAK,EACpC,OAAO,GAAgB,gBAAgB,CAAI,EAC/C,IAAI,EAAO,GACX,GAAI,EAAQ,EACR,EAAO,IACP,GAAS,EAAI,EAAE,EAEnB,IAAM,EAAM,EAAI,EAAE,EACZ,EAAQ,CAAC,EAAQ,CAAG,EAC1B,GAAI,EAAQ,GACR,EAAM,QAAQ,CAAC,EAKf,QAFA,GAAS,EAAQ,EAAM,IAAM,EAC7B,EAAM,QAAQ,EAAQ,CAAG,EACrB,GAAS,GACT,GAAS,EAAQ,EAAM,IAAM,EAC7B,EAAM,QAAQ,CAAK,EAG3B,OAAQ,EACJ,EACK,IAAI,KAAK,OAAO,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,EACnC,KAAK,GAAG,EACR,QAAQ,aAAc,EAAE,EAGrC,IAAM,GAAU,CACZ,SAAU,KAAS,OAAO,IAAU,UAAY,OAAO,UAAU,CAAK,EACtE,QAAS,GACT,IAAK,wBACL,OAAQ,OACR,KAAM,uCACN,QAAS,CAAC,EAAK,GAAY,iBAAkB,GAAiB,EAAK,CAAW,EAC9E,UAAW,EACf,EACM,GAAY,CACd,SAAU,KAAS,OAAO,IAAU,SACpC,QAAS,GACT,IAAK,0BACL,OAAQ,OACR,KAAM,gDACN,QAAS,KAAO,GAAiB,EAAK,EAAK,EAC3C,UAAW,EACf,EACM,GAAY,CACd,SAAU,KAAS,aAAiB,KACpC,QAAS,GACT,IAAK,8BAIL,KAAM,OAAO,2JAKJ,EACT,OAAO,CAAC,EAAK,CACT,IAAM,EAAQ,EAAI,MAAM,GAAU,IAAI,EACtC,GAAI,CAAC,EACD,MAAU,MAAM,sDAAsD,EAC1E,KAAS,EAAM,EAAO,EAAK,EAAM,EAAQ,GAAU,EAAM,IAAI,MAAM,EAC7D,EAAW,EAAM,GAAK,QAAQ,EAAM,GAAK,MAAM,OAAO,EAAG,CAAC,CAAC,EAAI,EACjE,EAAO,KAAK,IAAI,EAAM,EAAQ,EAAG,EAAK,GAAQ,EAAG,GAAU,EAAG,GAAU,EAAG,CAAQ,EACjF,EAAK,EAAM,GACjB,GAAI,GAAM,IAAO,IAAK,CAClB,IAAI,EAAI,GAAiB,EAAI,EAAK,EAClC,GAAI,KAAK,IAAI,CAAC,EAAI,GACd,GAAK,GACT,GAAQ,MAAQ,EAEpB,OAAO,IAAI,KAAK,CAAI,GAExB,UAAW,EAAG,WAAY,GAAO,YAAY,EAAE,QAAQ,sBAAuB,EAAE,GAAK,EACzF,EAEQ,aAAY,GACZ,WAAU,GACV,aAAY,qBCtGpB,IAAI,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QAEE,GAAS,CACX,GAAI,IACJ,GAAI,IACJ,GAAO,OACP,GAAM,QACN,GAAK,QACL,GAAK,SACL,GAAI,OACJ,GAAI,OACJ,GAAI,IACJ,GAAI,OACJ,GAAM,SACN,GAAM,SACN,GAAM,MACN,GAAO,OACP,GAAM,MACN,GAAK,KACL,GAAM,MACN,GAAI,IACJ,GAAU,QACV,GAAU,UACV,GAAU,SACd,EAEQ,UAAS,qBCtCjB,IAAI,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QAEE,GAAU,IAAI,IAAI,CACpB,CAAC,OAAQ,GAAO,MAAM,EACtB,CAAC,WAAY,CAAC,GAAI,IAAK,GAAI,IAAK,GAAO,MAAM,CAAC,EAC9C,CAAC,OAAQ,GAAS,MAAM,EACxB,CAAC,SAAU,GAAS,MAAM,EAC1B,CAAC,WAAY,GAAS,MAAM,CAChC,CAAC,EACK,GAAa,CACf,OAAQ,GAAO,OACf,KAAM,GAAK,QACX,MAAO,GAAM,MACb,SAAU,GAAM,SAChB,SAAU,GAAM,SAChB,UAAW,GAAU,UACrB,IAAK,GAAI,IACT,OAAQ,GAAI,OACZ,OAAQ,GAAI,OACZ,QAAS,GAAU,QACnB,IAAK,GAAI,IACT,MAAO,GAAM,MACb,KAAM,GAAM,QACZ,KAAM,GAAK,KACX,MAAO,GAAM,MACb,IAAK,GAAI,IACT,IAAK,GAAI,IACT,UAAW,GAAU,SACzB,EACM,GAAgB,CAClB,2BAA4B,GAAO,OACnC,0BAA2B,GAAM,MACjC,yBAA0B,GAAK,KAC/B,0BAA2B,GAAM,MACjC,wBAAyB,GAAI,IAC7B,8BAA+B,GAAU,SAC7C,EACA,SAAS,EAAO,CAAC,EAAY,EAAY,EAAa,CAClD,IAAM,EAAa,GAAQ,IAAI,CAAU,EACzC,GAAI,GAAc,CAAC,EACf,OAAO,GAAe,CAAC,EAAW,SAAS,GAAM,KAAK,EAChD,EAAW,OAAO,GAAM,KAAK,EAC7B,EAAW,MAAM,EAE3B,IAAI,EAAO,EACX,GAAI,CAAC,EACD,GAAI,MAAM,QAAQ,CAAU,EACxB,EAAO,CAAC,EACP,KACD,IAAM,EAAO,MAAM,KAAK,GAAQ,KAAK,CAAC,EACjC,OAAO,KAAO,IAAQ,QAAQ,EAC9B,IAAI,KAAO,KAAK,UAAU,CAAG,CAAC,EAC9B,KAAK,IAAI,EACd,MAAU,MAAM,mBAAmB,kBAA2B,8BAAiC,EAGvG,GAAI,MAAM,QAAQ,CAAU,EACxB,QAAW,KAAO,EACd,EAAO,EAAK,OAAO,CAAG,EAEzB,QAAI,OAAO,IAAe,WAC3B,EAAO,EAAW,EAAK,MAAM,CAAC,EAElC,GAAI,EACA,EAAO,EAAK,OAAO,GAAM,KAAK,EAClC,OAAO,EAAK,OAAO,CAAC,EAAM,IAAQ,CAC9B,IAAM,EAAS,OAAO,IAAQ,SAAW,GAAW,GAAO,EAC3D,GAAI,CAAC,EAAQ,CACT,IAAM,EAAU,KAAK,UAAU,CAAG,EAC5B,EAAO,OAAO,KAAK,EAAU,EAC9B,IAAI,KAAO,KAAK,UAAU,CAAG,CAAC,EAC9B,KAAK,IAAI,EACd,MAAU,MAAM,sBAAsB,iBAAuB,GAAM,EAEvE,GAAI,CAAC,EAAK,SAAS,CAAM,EACrB,EAAK,KAAK,CAAM,EACpB,OAAO,GACR,CAAC,CAAC,EAGD,iBAAgB,GAChB,WAAU,qBChGlB,IAAI,OACA,QACA,QACA,QACA,QAEE,GAAsB,CAAC,EAAG,IAAM,EAAE,IAAM,EAAE,IAAM,GAAK,EAAE,IAAM,EAAE,IAAM,EAAI,EAC/E,MAAM,EAAO,CACT,WAAW,EAAG,SAAQ,aAAY,QAAO,mBAAkB,SAAQ,iBAAgB,oBAAoB,CACnG,KAAK,OAAS,MAAM,QAAQ,CAAM,EAC5B,GAAK,QAAQ,EAAQ,QAAQ,EAC7B,EACI,GAAK,QAAQ,KAAM,CAAM,EACzB,KACV,KAAK,KAAQ,OAAO,IAAW,UAAY,GAAW,OACtD,KAAK,UAAY,EAAmB,GAAK,cAAgB,CAAC,EAC1D,KAAK,KAAO,GAAK,QAAQ,EAAY,KAAK,KAAM,CAAK,EACrD,KAAK,gBAAkB,GAAoB,KAC3C,OAAO,eAAe,KAAM,GAAS,IAAK,CAAE,MAAO,GAAI,GAAI,CAAC,EAC5D,OAAO,eAAe,KAAM,GAAS,OAAQ,CAAE,MAAO,GAAO,MAAO,CAAC,EACrE,OAAO,eAAe,KAAM,GAAS,IAAK,CAAE,MAAO,GAAI,GAAI,CAAC,EAE5D,KAAK,eACD,OAAO,IAAmB,WACpB,EACA,IAAmB,GACf,GACA,KAElB,KAAK,EAAG,CACJ,IAAM,EAAO,OAAO,OAAO,GAAO,UAAW,OAAO,0BAA0B,IAAI,CAAC,EAEnF,OADA,EAAK,KAAO,KAAK,KAAK,MAAM,EACrB,EAEf,CAEQ,UAAS,qBCpCjB,IAAI,OACA,QACA,QAEJ,SAAS,EAAiB,CAAC,EAAK,EAAS,CACrC,IAAM,EAAQ,CAAC,EACX,EAAgB,EAAQ,aAAe,GAC3C,GAAI,EAAQ,aAAe,IAAS,EAAI,WAAY,CAChD,IAAM,EAAM,EAAI,WAAW,SAAS,CAAG,EACvC,GAAI,EACA,EAAM,KAAK,CAAG,EACd,EAAgB,GAEf,QAAI,EAAI,WAAW,SACpB,EAAgB,GAExB,GAAI,EACA,EAAM,KAAK,KAAK,EACpB,IAAM,EAAM,GAAU,uBAAuB,EAAK,CAAO,GACjD,iBAAkB,EAAI,QAC9B,GAAI,EAAI,cAAe,CACnB,GAAI,EAAM,SAAW,EACjB,EAAM,QAAQ,EAAE,EACpB,IAAM,EAAK,EAAc,EAAI,aAAa,EAC1C,EAAM,QAAQ,GAAiB,cAAc,EAAI,EAAE,CAAC,EAExD,IAAI,EAAY,GACZ,EAAiB,KACrB,GAAI,EAAI,SAAU,CACd,GAAI,GAAS,OAAO,EAAI,QAAQ,EAAG,CAC/B,GAAI,EAAI,SAAS,aAAe,EAC5B,EAAM,KAAK,EAAE,EACjB,GAAI,EAAI,SAAS,cAAe,CAC5B,IAAM,EAAK,EAAc,EAAI,SAAS,aAAa,EACnD,EAAM,KAAK,GAAiB,cAAc,EAAI,EAAE,CAAC,EAGrD,EAAI,iBAAmB,CAAC,CAAC,EAAI,QAC7B,EAAiB,EAAI,SAAS,QAElC,IAAM,EAAc,EAAiB,OAAY,IAAO,EAAY,GAChE,EAAO,GAAU,UAAU,EAAI,SAAU,EAAK,IAAO,EAAiB,KAAO,CAAW,EAC5F,GAAI,EACA,GAAQ,GAAiB,YAAY,EAAM,GAAI,EAAc,CAAc,CAAC,EAChF,IAAK,EAAK,KAAO,KAAO,EAAK,KAAO,MAChC,EAAM,EAAM,OAAS,KAAO,MAG5B,EAAM,EAAM,OAAS,GAAK,OAAO,IAGjC,OAAM,KAAK,CAAI,EAGnB,OAAM,KAAK,GAAU,UAAU,EAAI,SAAU,CAAG,CAAC,EAErD,GAAI,EAAI,YAAY,OAChB,GAAI,EAAI,QAAS,CACb,IAAM,EAAK,EAAc,EAAI,OAAO,EACpC,GAAI,EAAG,SAAS;AAAA,CAAI,EAChB,EAAM,KAAK,KAAK,EAChB,EAAM,KAAK,GAAiB,cAAc,EAAI,EAAE,CAAC,EAGjD,OAAM,KAAK,OAAO,GAAI,EAI1B,OAAM,KAAK,KAAK,EAGnB,KACD,IAAI,EAAK,EAAI,QACb,GAAI,GAAM,EACN,EAAK,EAAG,QAAQ,OAAQ,EAAE,EAC9B,GAAI,EAAI,CACJ,IAAK,CAAC,GAAa,IAAmB,EAAM,EAAM,OAAS,KAAO,GAC9D,EAAM,KAAK,EAAE,EACjB,EAAM,KAAK,GAAiB,cAAc,EAAc,CAAE,EAAG,EAAE,CAAC,GAGxE,OAAO,EAAM,KAAK;AAAA,CAAI,EAAI;AAAA,EAGtB,qBAAoB,qBCpF5B,IAAI,QACA,QACA,MACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QAEJ,MAAM,EAAS,CACX,WAAW,CAAC,EAAO,EAAU,EAAS,CAElC,KAAK,cAAgB,KAErB,KAAK,QAAU,KAEf,KAAK,OAAS,CAAC,EAEf,KAAK,SAAW,CAAC,EACjB,OAAO,eAAe,KAAM,EAAS,UAAW,CAAE,MAAO,EAAS,GAAI,CAAC,EACvE,IAAI,EAAY,KAChB,GAAI,OAAO,IAAa,YAAc,MAAM,QAAQ,CAAQ,EACxD,EAAY,EAEX,QAAI,IAAY,QAAa,EAC9B,EAAU,EACV,EAAW,OAEf,IAAM,EAAM,OAAO,OAAO,CACtB,YAAa,GACb,iBAAkB,GAClB,SAAU,OACV,aAAc,GACd,OAAQ,GACR,WAAY,GACZ,WAAY,GACZ,QAAS,KACb,EAAG,CAAO,EACV,KAAK,QAAU,EACf,IAAM,WAAY,EAClB,GAAI,GAAS,aAET,GADA,KAAK,WAAa,EAAQ,YAAY,WAAW,EAC7C,KAAK,WAAW,KAAK,SACrB,EAAU,KAAK,WAAW,KAAK,QAGnC,UAAK,WAAa,IAAI,GAAW,WAAW,CAAE,SAAQ,CAAC,EAC3D,KAAK,UAAU,EAAS,CAAO,EAE/B,KAAK,SACD,IAAU,OAAY,KAAO,KAAK,WAAW,EAAO,EAAW,CAAO,EAO9E,KAAK,EAAG,CACJ,IAAM,EAAO,OAAO,OAAO,GAAS,UAAW,EAC1C,EAAS,WAAY,CAAE,MAAO,EAAS,GAAI,CAChD,CAAC,EAMD,GALA,EAAK,cAAgB,KAAK,cAC1B,EAAK,QAAU,KAAK,QACpB,EAAK,OAAS,KAAK,OAAO,MAAM,EAChC,EAAK,SAAW,KAAK,SAAS,MAAM,EACpC,EAAK,QAAU,OAAO,OAAO,CAAC,EAAG,KAAK,OAAO,EACzC,KAAK,WACL,EAAK,WAAa,KAAK,WAAW,MAAM,EAM5C,GALA,EAAK,OAAS,KAAK,OAAO,MAAM,EAEhC,EAAK,SAAW,EAAS,OAAO,KAAK,QAAQ,EACvC,KAAK,SAAS,MAAM,EAAK,MAAM,EAC/B,KAAK,SACP,KAAK,MACL,EAAK,MAAQ,KAAK,MAAM,MAAM,EAClC,OAAO,EAGX,GAAG,CAAC,EAAO,CACP,GAAI,GAAiB,KAAK,QAAQ,EAC9B,KAAK,SAAS,IAAI,CAAK,EAG/B,KAAK,CAAC,EAAM,EAAO,CACf,GAAI,GAAiB,KAAK,QAAQ,EAC9B,KAAK,SAAS,MAAM,EAAM,CAAK,EAWvC,WAAW,CAAC,EAAM,EAAM,CACpB,GAAI,CAAC,EAAK,OAAQ,CACd,IAAM,EAAO,GAAQ,YAAY,IAAI,EACrC,EAAK,OAED,CAAC,GAAQ,EAAK,IAAI,CAAI,EAAI,GAAQ,cAAc,GAAQ,IAAK,CAAI,EAAI,EAE7E,OAAO,IAAI,GAAM,MAAM,EAAK,MAAM,EAEtC,UAAU,CAAC,EAAO,EAAU,EAAS,CACjC,IAAI,EAAY,OAChB,GAAI,OAAO,IAAa,WACpB,EAAQ,EAAS,KAAK,CAAE,GAAI,CAAM,EAAG,GAAI,CAAK,EAC9C,EAAY,EAEX,QAAI,MAAM,QAAQ,CAAQ,EAAG,CAC9B,IAAM,EAAW,CAAC,IAAM,OAAO,IAAM,UAAY,aAAa,QAAU,aAAa,OAC/E,EAAQ,EAAS,OAAO,CAAQ,EAAE,IAAI,MAAM,EAClD,GAAI,EAAM,OAAS,EACf,EAAW,EAAS,OAAO,CAAK,EACpC,EAAY,EAEX,QAAI,IAAY,QAAa,EAC9B,EAAU,EACV,EAAW,OAEf,IAAQ,wBAAuB,eAAc,OAAM,gBAAe,WAAU,OAAQ,GAAW,CAAC,GACxF,WAAU,aAAY,iBAAkB,GAAQ,kBAAkB,KAE1E,GAAgB,GAAG,EACb,EAAM,CACR,sBAAuB,GAAyB,GAChD,cAAe,GAAiB,GAChC,WACA,WACA,SAAU,EACV,OAAQ,KAAK,OACb,eACJ,EACM,EAAO,GAAW,WAAW,EAAO,EAAK,CAAG,EAClD,GAAI,GAAQ,EAAS,aAAa,CAAI,EAClC,EAAK,KAAO,GAEhB,OADA,EAAW,EACJ,EAMX,UAAU,CAAC,EAAK,EAAO,EAAU,CAAC,EAAG,CACjC,IAAM,EAAI,KAAK,WAAW,EAAK,KAAM,CAAO,EACtC,EAAI,KAAK,WAAW,EAAO,KAAM,CAAO,EAC9C,OAAO,IAAI,GAAK,KAAK,EAAG,CAAC,EAM7B,MAAM,CAAC,EAAK,CACR,OAAO,GAAiB,KAAK,QAAQ,EAAI,KAAK,SAAS,OAAO,CAAG,EAAI,GAMzE,QAAQ,CAAC,EAAM,CACX,GAAI,GAAW,YAAY,CAAI,EAAG,CAC9B,GAAI,KAAK,UAAY,KACjB,MAAO,GAGX,OADA,KAAK,SAAW,KACT,GAEX,OAAO,GAAiB,KAAK,QAAQ,EAC/B,KAAK,SAAS,SAAS,CAAI,EAC3B,GAOV,GAAG,CAAC,EAAK,EAAY,CACjB,OAAO,EAAS,aAAa,KAAK,QAAQ,EACpC,KAAK,SAAS,IAAI,EAAK,CAAU,EACjC,OAOV,KAAK,CAAC,EAAM,EAAY,CACpB,GAAI,GAAW,YAAY,CAAI,EAC3B,MAAO,CAAC,GAAc,EAAS,SAAS,KAAK,QAAQ,EAC/C,KAAK,SAAS,MACd,KAAK,SACf,OAAO,EAAS,aAAa,KAAK,QAAQ,EACpC,KAAK,SAAS,MAAM,EAAM,CAAU,EACpC,OAKV,GAAG,CAAC,EAAK,CACL,OAAO,EAAS,aAAa,KAAK,QAAQ,EAAI,KAAK,SAAS,IAAI,CAAG,EAAI,GAK3E,KAAK,CAAC,EAAM,CACR,GAAI,GAAW,YAAY,CAAI,EAC3B,OAAO,KAAK,WAAa,OAC7B,OAAO,EAAS,aAAa,KAAK,QAAQ,EAAI,KAAK,SAAS,MAAM,CAAI,EAAI,GAM9E,GAAG,CAAC,EAAK,EAAO,CACZ,GAAI,KAAK,UAAY,KAEjB,KAAK,SAAW,GAAW,mBAAmB,KAAK,OAAQ,CAAC,CAAG,EAAG,CAAK,EAEtE,QAAI,GAAiB,KAAK,QAAQ,EACnC,KAAK,SAAS,IAAI,EAAK,CAAK,EAOpC,KAAK,CAAC,EAAM,EAAO,CACf,GAAI,GAAW,YAAY,CAAI,EAE3B,KAAK,SAAW,EAEf,QAAI,KAAK,UAAY,KAEtB,KAAK,SAAW,GAAW,mBAAmB,KAAK,OAAQ,MAAM,KAAK,CAAI,EAAG,CAAK,EAEjF,QAAI,GAAiB,KAAK,QAAQ,EACnC,KAAK,SAAS,MAAM,EAAM,CAAK,EAUvC,SAAS,CAAC,EAAS,EAAU,CAAC,EAAG,CAC7B,GAAI,OAAO,IAAY,SACnB,EAAU,OAAO,CAAO,EAC5B,IAAI,EACJ,OAAQ,OACC,MACD,GAAI,KAAK,WACL,KAAK,WAAW,KAAK,QAAU,MAE/B,UAAK,WAAa,IAAI,GAAW,WAAW,CAAE,QAAS,KAAM,CAAC,EAClE,EAAM,CAAE,iBAAkB,GAAO,OAAQ,UAAW,EACpD,UACC,UACA,OACD,GAAI,KAAK,WACL,KAAK,WAAW,KAAK,QAAU,EAE/B,UAAK,WAAa,IAAI,GAAW,WAAW,CAAE,SAAQ,CAAC,EAC3D,EAAM,CAAE,iBAAkB,GAAM,OAAQ,MAAO,EAC/C,WACC,KACD,GAAI,KAAK,WACL,OAAO,KAAK,WAChB,EAAM,KACN,cACK,CACL,IAAM,EAAK,KAAK,UAAU,CAAO,EACjC,MAAU,MAAM,+DAA+D,GAAI,CACvF,EAGJ,GAAI,EAAQ,kBAAkB,OAC1B,KAAK,OAAS,EAAQ,OACrB,QAAI,EACL,KAAK,OAAS,IAAI,GAAO,OAAO,OAAO,OAAO,EAAK,CAAO,CAAC,EAE3D,WAAU,MAAM,qEAAqE,EAG7F,IAAI,EAAG,OAAM,UAAS,WAAU,gBAAe,WAAU,WAAY,CAAC,EAAG,CACrE,IAAM,EAAM,CACR,QAAS,IAAI,IACb,IAAK,KACL,KAAM,CAAC,EACP,SAAU,IAAa,GACvB,aAAc,GACd,cAAe,OAAO,IAAkB,SAAW,EAAgB,GACvE,EACM,EAAM,GAAK,KAAK,KAAK,SAAU,GAAW,GAAI,CAAG,EACvD,GAAI,OAAO,IAAa,WACpB,QAAa,QAAO,SAAS,EAAI,QAAQ,OAAO,EAC5C,EAAS,EAAK,CAAK,EAC3B,OAAO,OAAO,IAAY,WACpB,GAAa,aAAa,EAAS,CAAE,GAAI,CAAI,EAAG,GAAI,CAAG,EACvD,EAQV,MAAM,CAAC,EAAS,EAAU,CACtB,OAAO,KAAK,KAAK,CAAE,KAAM,GAAM,UAAS,SAAU,GAAO,UAAS,CAAC,EAGvE,QAAQ,CAAC,EAAU,CAAC,EAAG,CACnB,GAAI,KAAK,OAAO,OAAS,EACrB,MAAU,MAAM,4CAA4C,EAChE,GAAI,WAAY,IACX,CAAC,OAAO,UAAU,EAAQ,MAAM,GAAK,OAAO,EAAQ,MAAM,GAAK,GAAI,CACpE,IAAM,EAAI,KAAK,UAAU,EAAQ,MAAM,EACvC,MAAU,MAAM,mDAAmD,GAAG,EAE1E,OAAO,GAAkB,kBAAkB,KAAM,CAAO,EAEhE,CACA,SAAS,EAAgB,CAAC,EAAU,CAChC,GAAI,EAAS,aAAa,CAAQ,EAC9B,MAAO,GACX,MAAU,MAAM,iDAAiD,EAG7D,YAAW,qBC9UnB,MAAM,WAAkB,KAAM,CAC1B,WAAW,CAAC,EAAM,EAAK,EAAM,EAAS,CAClC,MAAM,EACN,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,QAAU,EACf,KAAK,IAAM,EAEnB,CACA,MAAM,WAAuB,EAAU,CACnC,WAAW,CAAC,EAAK,EAAM,EAAS,CAC5B,MAAM,iBAAkB,EAAK,EAAM,CAAO,EAElD,CACA,MAAM,WAAoB,EAAU,CAChC,WAAW,CAAC,EAAK,EAAM,EAAS,CAC5B,MAAM,cAAe,EAAK,EAAM,CAAO,EAE/C,CACA,IAAM,GAAgB,CAAC,EAAK,IAAO,CAAC,IAAU,CAC1C,GAAI,EAAM,IAAI,KAAO,GACjB,OACJ,EAAM,QAAU,EAAM,IAAI,IAAI,KAAO,EAAG,QAAQ,CAAG,CAAC,EACpD,IAAQ,OAAM,OAAQ,EAAM,QAAQ,GACpC,EAAM,SAAW,YAAY,aAAgB,IAC7C,IAAI,EAAK,EAAM,EACX,EAAU,EACT,UAAU,EAAG,WAAW,EAAO,GAAI,EAAG,WAAW,EAAK,EACtD,QAAQ,WAAY,EAAE,EAE3B,GAAI,GAAM,IAAM,EAAQ,OAAS,GAAI,CACjC,IAAM,EAAY,KAAK,IAAI,EAAK,GAAI,EAAQ,OAAS,EAAE,EACvD,EAAU,IAAK,EAAQ,UAAU,CAAS,EAC1C,GAAM,EAAY,EAEtB,GAAI,EAAQ,OAAS,GACjB,EAAU,EAAQ,UAAU,EAAG,EAAE,EAAI,IAEzC,GAAI,EAAO,GAAK,OAAO,KAAK,EAAQ,UAAU,EAAG,CAAE,CAAC,EAAG,CAEnD,IAAI,EAAO,EAAI,UAAU,EAAG,WAAW,EAAO,GAAI,EAAG,WAAW,EAAO,EAAE,EACzE,GAAI,EAAK,OAAS,GACd,EAAO,EAAK,UAAU,EAAG,EAAE,EAAI;AAAA,EACnC,EAAU,EAAO,EAErB,GAAI,OAAO,KAAK,CAAO,EAAG,CACtB,IAAI,EAAQ,EACN,EAAM,EAAM,QAAQ,GAC1B,GAAI,GAAK,OAAS,GAAQ,EAAI,IAAM,EAChC,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,IAAM,EAAK,GAAK,CAAE,CAAC,EAExD,IAAM,EAAU,IAAI,OAAO,CAAE,EAAI,IAAI,OAAO,CAAK,EACjD,EAAM,SAAW;AAAA;AAAA,EAAQ;AAAA,EAAY;AAAA,IAIrC,aAAY,GACZ,kBAAiB,GACjB,eAAc,GACd,iBAAgB,qBC3DxB,SAAS,EAAY,CAAC,GAAU,OAAM,YAAW,OAAM,SAAQ,UAAS,eAAc,kBAAkB,CACpG,IAAI,EAAc,GACd,EAAY,EACZ,EAAW,EACX,EAAU,GACV,EAAa,GACb,EAAa,GACb,EAAW,GACX,EAAM,KACN,EAAS,KACT,EAAM,KACN,EAAmB,KACnB,EAAQ,KACR,EAAQ,KACR,EAAQ,KACZ,QAAW,KAAS,EAAQ,CACxB,GAAI,EAAU,CACV,GAAI,EAAM,OAAS,SACf,EAAM,OAAS,WACf,EAAM,OAAS,QACf,EAAQ,EAAM,OAAQ,eAAgB,uEAAuE,EACjH,EAAW,GAEf,GAAI,EAAK,CACL,GAAI,GAAa,EAAM,OAAS,WAAa,EAAM,OAAS,UACxD,EAAQ,EAAK,gBAAiB,qCAAqC,EAEvE,EAAM,KAEV,OAAQ,EAAM,UACL,QAID,GAAI,CAAC,IACA,IAAc,aAAe,GAAM,OAAS,oBAC7C,EAAM,OAAO,SAAS,IAAI,EAC1B,EAAM,EAEV,EAAW,GACX,UACC,UAAW,CACZ,GAAI,CAAC,EACD,EAAQ,EAAO,eAAgB,wEAAwE,EAC3G,IAAM,EAAK,EAAM,OAAO,UAAU,CAAC,GAAK,IACxC,GAAI,CAAC,EACD,EAAU,EAEV,QAAW,EAAa,EAC5B,EAAa,GACb,EAAY,GACZ,KACJ,KACK,UACD,GAAI,GACA,GAAI,EACA,GAAW,EAAM,OAChB,QAAI,CAAC,GAAS,IAAc,eAC7B,EAAc,GAGlB,QAAc,EAAM,OAGxB,GAFA,EAAY,GACZ,EAAa,GACT,GAAU,EACV,EAAmB,EACvB,EAAW,GACX,UACC,SACD,GAAI,EACA,EAAQ,EAAO,mBAAoB,oCAAoC,EAC3E,GAAI,EAAM,OAAO,SAAS,GAAG,EACzB,EAAQ,EAAM,OAAS,EAAM,OAAO,OAAS,EAAG,YAAa,kCAAmC,EAAI,EACxG,EAAS,EACT,IAAU,EAAQ,EAAM,QACxB,EAAY,GACZ,EAAW,GACX,EAAW,GACX,UACC,MAAO,CACR,GAAI,EACA,EAAQ,EAAO,gBAAiB,iCAAiC,EACrE,EAAM,EACN,IAAU,EAAQ,EAAM,QACxB,EAAY,GACZ,EAAW,GACX,EAAW,GACX,KACJ,MACK,EAED,GAAI,GAAU,EACV,EAAQ,EAAO,iBAAkB,sCAAsC,EAAM,kBAAkB,EACnG,GAAI,EACA,EAAQ,EAAO,mBAAoB,cAAc,EAAM,aAAa,GAAQ,cAAc,EAC9F,EAAQ,EACR,EACI,IAAc,gBAAkB,IAAc,mBAClD,EAAW,GACX,UACC,QACD,GAAI,EAAM,CACN,GAAI,EACA,EAAQ,EAAO,mBAAoB,mBAAmB,GAAM,EAChE,EAAQ,EACR,EAAY,GACZ,EAAW,GACX,cAIJ,EAAQ,EAAO,mBAAoB,cAAc,EAAM,YAAY,EACnE,EAAY,GACZ,EAAW,IAGvB,IAAM,EAAO,EAAO,EAAO,OAAS,GAC9B,EAAM,EAAO,EAAK,OAAS,EAAK,OAAO,OAAS,EACtD,GAAI,GACA,GACA,EAAK,OAAS,SACd,EAAK,OAAS,WACd,EAAK,OAAS,UACb,EAAK,OAAS,UAAY,EAAK,SAAW,IAC3C,EAAQ,EAAK,OAAQ,eAAgB,uEAAuE,EAEhH,GAAI,IACE,GAAa,EAAI,QAAU,GACzB,GAAM,OAAS,aACf,GAAM,OAAS,aACnB,EAAQ,EAAK,gBAAiB,qCAAqC,EACvE,MAAO,CACH,QACA,QACA,cACA,UACA,aACA,SACA,MACA,mBACA,MACA,MAAO,GAAS,CACpB,EAGI,gBAAe,qBCjJvB,SAAS,EAAe,CAAC,EAAK,CAC1B,GAAI,CAAC,EACD,OAAO,KACX,OAAQ,EAAI,UACH,YACA,aACA,2BACA,uBACD,GAAI,EAAI,OAAO,SAAS;AAAA,CAAI,EACxB,MAAO,GACX,GAAI,EAAI,KACJ,QAAW,KAAM,EAAI,IACjB,GAAI,EAAG,OAAS,UACZ,MAAO,GACnB,MAAO,OACN,kBACD,QAAW,KAAM,EAAI,MAAO,CACxB,QAAW,KAAM,EAAG,MAChB,GAAI,EAAG,OAAS,UACZ,MAAO,GACf,GAAI,EAAG,KACH,QAAW,KAAM,EAAG,IAChB,GAAI,EAAG,OAAS,UACZ,MAAO,GACnB,GAAI,GAAgB,EAAG,GAAG,GAAK,GAAgB,EAAG,KAAK,EACnD,MAAO,GAEf,MAAO,WAEP,MAAO,IAIX,mBAAkB,qBCjC1B,IAAI,QAEJ,SAAS,EAAe,CAAC,EAAQ,EAAI,EAAS,CAC1C,GAAI,GAAI,OAAS,kBAAmB,CAChC,IAAM,EAAM,EAAG,IAAI,GACnB,GAAI,EAAI,SAAW,IACd,EAAI,SAAW,KAAO,EAAI,SAAW,MACtC,GAAoB,gBAAgB,CAAE,EAEtC,EAAQ,EAAK,aADD,yDACoB,EAAI,GAKxC,mBAAkB,qBCd1B,IAAI,OAEJ,SAAS,EAAW,CAAC,EAAK,EAAO,EAAQ,CACrC,IAAQ,cAAe,EAAI,QAC3B,GAAI,IAAe,GACf,MAAO,GACX,IAAM,EAAU,OAAO,IAAe,WAChC,EACA,CAAC,EAAG,IAAM,IAAM,GAAM,GAAS,SAAS,CAAC,GAAK,GAAS,SAAS,CAAC,GAAK,EAAE,QAAU,EAAE,MAC1F,OAAO,EAAM,KAAK,KAAQ,EAAQ,EAAK,IAAK,CAAM,CAAC,EAG/C,eAAc,qBCZtB,IAAI,QACA,QACA,QACA,QACA,QACA,QAEE,GAAc,kDACpB,SAAS,EAAe,EAAG,cAAa,oBAAoB,EAAK,EAAI,EAAS,EAAK,CAE/E,IAAM,EAAM,IADM,GAAK,WAAa,GAAQ,SAClB,EAAI,MAAM,EACpC,GAAI,EAAI,OACJ,EAAI,OAAS,GACjB,IAAI,EAAS,EAAG,OACZ,EAAa,KACjB,QAAW,KAAY,EAAG,MAAO,CAC7B,IAAQ,QAAO,MAAK,MAAK,SAAU,EAE7B,EAAW,GAAa,aAAa,EAAO,CAC9C,UAAW,mBACX,KAAM,GAAO,IAAM,GACnB,SACA,UACA,aAAc,EAAG,OACjB,eAAgB,EACpB,CAAC,EACK,EAAc,CAAC,EAAS,MAC9B,GAAI,EAAa,CACb,GAAI,GACA,GAAI,EAAI,OAAS,YACb,EAAQ,EAAQ,wBAAyB,yDAAyD,EACjG,QAAI,WAAY,GAAO,EAAI,SAAW,EAAG,OAC1C,EAAQ,EAAQ,aAAc,EAAW,EAEjD,GAAI,CAAC,EAAS,QAAU,CAAC,EAAS,KAAO,CAAC,EAAK,CAE3C,GADA,EAAa,EAAS,IAClB,EAAS,QACT,GAAI,EAAI,QACJ,EAAI,SAAW;AAAA,EAAO,EAAS,QAE/B,OAAI,QAAU,EAAS,QAE/B,SAEJ,GAAI,EAAS,kBAAoB,GAAoB,gBAAgB,CAAG,EACpE,EAAQ,GAAO,EAAM,EAAM,OAAS,GAAI,yBAA0B,2CAA2C,EAGhH,QAAI,EAAS,OAAO,SAAW,EAAG,OACnC,EAAQ,EAAQ,aAAc,EAAW,EAG7C,EAAI,MAAQ,GACZ,IAAM,EAAW,EAAS,IACpB,EAAU,EACV,EAAY,EAAK,EAAK,EAAU,CAAO,EACvC,EAAiB,EAAK,EAAU,EAAO,KAAM,EAAU,CAAO,EACpE,GAAI,EAAI,OAAO,OACX,GAAoB,gBAAgB,EAAG,OAAQ,EAAK,CAAO,EAE/D,GADA,EAAI,MAAQ,GACR,GAAgB,YAAY,EAAK,EAAI,MAAO,CAAO,EACnD,EAAQ,EAAU,gBAAiB,yBAAyB,EAEhE,IAAM,EAAa,GAAa,aAAa,GAAO,CAAC,EAAG,CACpD,UAAW,gBACX,KAAM,EACN,OAAQ,EAAQ,MAAM,GACtB,UACA,aAAc,EAAG,OACjB,eAAgB,CAAC,GAAO,EAAI,OAAS,cACzC,CAAC,EAED,GADA,EAAS,EAAW,IAChB,EAAW,MAAO,CAClB,GAAI,EAAa,CACb,GAAI,GAAO,OAAS,aAAe,CAAC,EAAW,WAC3C,EAAQ,EAAQ,wBAAyB,qDAAqD,EAClG,GAAI,EAAI,QAAQ,QACZ,EAAS,MAAQ,EAAW,MAAM,OAAS,KAC3C,EAAQ,EAAQ,MAAO,sBAAuB,6FAA6F,EAGnJ,IAAM,EAAY,EACZ,EAAY,EAAK,EAAO,EAAY,CAAO,EAC3C,EAAiB,EAAK,EAAQ,EAAK,KAAM,EAAY,CAAO,EAClE,GAAI,EAAI,OAAO,OACX,GAAoB,gBAAgB,EAAG,OAAQ,EAAO,CAAO,EACjE,EAAS,EAAU,MAAM,GACzB,IAAM,EAAO,IAAI,GAAK,KAAK,EAAS,CAAS,EAC7C,GAAI,EAAI,QAAQ,iBACZ,EAAK,SAAW,EACpB,EAAI,MAAM,KAAK,CAAI,EAElB,KAED,GAAI,EACA,EAAQ,EAAQ,MAAO,eAAgB,qDAAqD,EAChG,GAAI,EAAW,QACX,GAAI,EAAQ,QACR,EAAQ,SAAW;AAAA,EAAO,EAAW,QAErC,OAAQ,QAAU,EAAW,QAErC,IAAM,EAAO,IAAI,GAAK,KAAK,CAAO,EAClC,GAAI,EAAI,QAAQ,iBACZ,EAAK,SAAW,EACpB,EAAI,MAAM,KAAK,CAAI,GAG3B,GAAI,GAAc,EAAa,EAC3B,EAAQ,EAAY,aAAc,mCAAmC,EAEzE,OADA,EAAI,MAAQ,CAAC,EAAG,OAAQ,EAAQ,GAAc,CAAM,EAC7C,EAGH,mBAAkB,qBClH1B,IAAI,QACA,QACA,QAEJ,SAAS,EAAe,EAAG,cAAa,oBAAoB,EAAK,EAAI,EAAS,EAAK,CAE/E,IAAM,EAAM,IADM,GAAK,WAAa,GAAQ,SAClB,EAAI,MAAM,EACpC,GAAI,EAAI,OACJ,EAAI,OAAS,GACjB,GAAI,EAAI,MACJ,EAAI,MAAQ,GAChB,IAAI,EAAS,EAAG,OACZ,EAAa,KACjB,QAAa,QAAO,WAAW,EAAG,MAAO,CACrC,IAAM,EAAQ,GAAa,aAAa,EAAO,CAC3C,UAAW,eACX,KAAM,EACN,SACA,UACA,aAAc,EAAG,OACjB,eAAgB,EACpB,CAAC,EACD,GAAI,CAAC,EAAM,MACP,GAAI,EAAM,QAAU,EAAM,KAAO,EAC7B,GAAI,GAAO,OAAS,YAChB,EAAQ,EAAM,IAAK,aAAc,kDAAkD,EAEnF,OAAQ,EAAQ,eAAgB,mCAAmC,EAEtE,KAED,GADA,EAAa,EAAM,IACf,EAAM,QACN,EAAI,QAAU,EAAM,QACxB,SAGR,IAAM,EAAO,EACP,EAAY,EAAK,EAAO,EAAO,CAAO,EACtC,EAAiB,EAAK,EAAM,IAAK,EAAO,KAAM,EAAO,CAAO,EAClE,GAAI,EAAI,OAAO,OACX,GAAoB,gBAAgB,EAAG,OAAQ,EAAO,CAAO,EACjE,EAAS,EAAK,MAAM,GACpB,EAAI,MAAM,KAAK,CAAI,EAGvB,OADA,EAAI,MAAQ,CAAC,EAAG,OAAQ,EAAQ,GAAc,CAAM,EAC7C,EAGH,mBAAkB,qBChD1B,SAAS,EAAU,CAAC,EAAK,EAAQ,EAAU,EAAS,CAChD,IAAI,EAAU,GACd,GAAI,EAAK,CACL,IAAI,EAAW,GACX,EAAM,GACV,QAAW,KAAS,EAAK,CACrB,IAAQ,SAAQ,QAAS,EACzB,OAAQ,OACC,QACD,EAAW,GACX,UACC,UAAW,CACZ,GAAI,GAAY,CAAC,EACb,EAAQ,EAAO,eAAgB,wEAAwE,EAC3G,IAAM,EAAK,EAAO,UAAU,CAAC,GAAK,IAClC,GAAI,CAAC,EACD,EAAU,EAEV,QAAW,EAAM,EACrB,EAAM,GACN,KACJ,KACK,UACD,GAAI,EACA,GAAO,EACX,EAAW,GACX,cAEA,EAAQ,EAAO,mBAAoB,cAAc,eAAkB,EAE3E,GAAU,EAAO,QAGzB,MAAO,CAAE,UAAS,QAAO,EAGrB,cAAa,qBCpCrB,IAAI,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QAEE,GAAW,4DACX,GAAU,CAAC,IAAU,IAAU,EAAM,OAAS,aAAe,EAAM,OAAS,aAClF,SAAS,EAAqB,EAAG,cAAa,oBAAoB,EAAK,EAAI,EAAS,EAAK,CACrF,IAAM,EAAQ,EAAG,MAAM,SAAW,IAC5B,EAAS,EAAQ,WAAa,gBAE9B,EAAO,IADM,GAAK,YAAc,EAAQ,GAAQ,QAAU,GAAQ,UAC7C,EAAI,MAAM,EACrC,EAAK,KAAO,GACZ,IAAM,EAAS,EAAI,OACnB,GAAI,EACA,EAAI,OAAS,GACjB,GAAI,EAAI,MACJ,EAAI,MAAQ,GAChB,IAAI,EAAS,EAAG,OAAS,EAAG,MAAM,OAAO,OACzC,QAAS,EAAI,EAAG,EAAI,EAAG,MAAM,OAAQ,EAAE,EAAG,CACtC,IAAM,EAAW,EAAG,MAAM,IAClB,QAAO,MAAK,MAAK,SAAU,EAC7B,EAAQ,GAAa,aAAa,EAAO,CAC3C,KAAM,EACN,UAAW,mBACX,KAAM,GAAO,IAAM,GACnB,SACA,UACA,aAAc,EAAG,OACjB,eAAgB,EACpB,CAAC,EACD,GAAI,CAAC,EAAM,MAAO,CACd,GAAI,CAAC,EAAM,QAAU,CAAC,EAAM,KAAO,CAAC,GAAO,CAAC,EAAO,CAC/C,GAAI,IAAM,GAAK,EAAM,MACjB,EAAQ,EAAM,MAAO,mBAAoB,mBAAmB,GAAQ,EACnE,QAAI,EAAI,EAAG,MAAM,OAAS,EAC3B,EAAQ,EAAM,MAAO,mBAAoB,4BAA4B,GAAQ,EACjF,GAAI,EAAM,QACN,GAAI,EAAK,QACL,EAAK,SAAW;AAAA,EAAO,EAAM,QAE7B,OAAK,QAAU,EAAM,QAE7B,EAAS,EAAM,IACf,SAEJ,GAAI,CAAC,GAAS,EAAI,QAAQ,QAAU,GAAoB,gBAAgB,CAAG,EACvE,EAAQ,EACR,yBAA0B,kEAAkE,EAEpG,GAAI,IAAM,GACN,GAAI,EAAM,MACN,EAAQ,EAAM,MAAO,mBAAoB,mBAAmB,GAAQ,EAEvE,KACD,GAAI,CAAC,EAAM,MACP,EAAQ,EAAM,MAAO,eAAgB,qBAAqB,SAAc,EAC5E,GAAI,EAAM,QAAS,CACf,IAAI,EAAkB,GACtB,EAAM,QAAW,KAAM,EACnB,OAAQ,EAAG,UACF,YACA,QACD,UACC,UACD,EAAkB,EAAG,OAAO,UAAU,CAAC,EACvC,gBAEA,QAGZ,GAAI,EAAiB,CACjB,IAAI,EAAO,EAAK,MAAM,EAAK,MAAM,OAAS,GAC1C,GAAI,GAAS,OAAO,CAAI,EACpB,EAAO,EAAK,OAAS,EAAK,IAC9B,GAAI,EAAK,QACL,EAAK,SAAW;AAAA,EAAO,EAEvB,OAAK,QAAU,EACnB,EAAM,QAAU,EAAM,QAAQ,UAAU,EAAgB,OAAS,CAAC,IAI9E,GAAI,CAAC,GAAS,CAAC,GAAO,CAAC,EAAM,MAAO,CAGhC,IAAM,EAAY,EACZ,EAAY,EAAK,EAAO,EAAO,CAAO,EACtC,EAAiB,EAAK,EAAM,IAAK,EAAK,KAAM,EAAO,CAAO,EAGhE,GAFA,EAAK,MAAM,KAAK,CAAS,EACzB,EAAS,EAAU,MAAM,GACrB,GAAQ,CAAK,EACb,EAAQ,EAAU,MAAO,gBAAiB,EAAQ,EAErD,KAGD,EAAI,MAAQ,GACZ,IAAM,EAAW,EAAM,IACjB,EAAU,EACV,EAAY,EAAK,EAAK,EAAO,CAAO,EACpC,EAAiB,EAAK,EAAU,EAAO,KAAM,EAAO,CAAO,EACjE,GAAI,GAAQ,CAAG,EACX,EAAQ,EAAQ,MAAO,gBAAiB,EAAQ,EACpD,EAAI,MAAQ,GAEZ,IAAM,EAAa,GAAa,aAAa,GAAO,CAAC,EAAG,CACpD,KAAM,EACN,UAAW,gBACX,KAAM,EACN,OAAQ,EAAQ,MAAM,GACtB,UACA,aAAc,EAAG,OACjB,eAAgB,EACpB,CAAC,EACD,GAAI,EAAW,OACX,GAAI,CAAC,GAAS,CAAC,EAAM,OAAS,EAAI,QAAQ,OAAQ,CAC9C,GAAI,EACA,QAAW,KAAM,EAAK,CAClB,GAAI,IAAO,EAAW,MAClB,MACJ,GAAI,EAAG,OAAS,UAAW,CACvB,EAAQ,EAAI,yBAA0B,kEAAkE,EACxG,OAGZ,GAAI,EAAM,MAAQ,EAAW,MAAM,OAAS,KACxC,EAAQ,EAAW,MAAO,sBAAuB,6FAA6F,GAGrJ,QAAI,EACL,GAAI,WAAY,GAAS,EAAM,SAAS,KAAO,IAC3C,EAAQ,EAAO,eAAgB,4BAA4B,GAAQ,EAEnE,OAAQ,EAAW,MAAO,eAAgB,0BAA0B,SAAc,EAG1F,IAAM,EAAY,EACZ,EAAY,EAAK,EAAO,EAAY,CAAO,EAC3C,EAAW,MACP,EAAiB,EAAK,EAAW,IAAK,EAAK,KAAM,EAAY,CAAO,EACpE,KACV,GAAI,GACA,GAAI,GAAQ,CAAK,EACb,EAAQ,EAAU,MAAO,gBAAiB,EAAQ,EAErD,QAAI,EAAW,QAChB,GAAI,EAAQ,QACR,EAAQ,SAAW;AAAA,EAAO,EAAW,QAErC,OAAQ,QAAU,EAAW,QAErC,IAAM,EAAO,IAAI,GAAK,KAAK,EAAS,CAAS,EAC7C,GAAI,EAAI,QAAQ,iBACZ,EAAK,SAAW,EACpB,GAAI,EAAO,CACP,IAAM,EAAM,EACZ,GAAI,GAAgB,YAAY,EAAK,EAAI,MAAO,CAAO,EACnD,EAAQ,EAAU,gBAAiB,yBAAyB,EAChE,EAAI,MAAM,KAAK,CAAI,EAElB,KACD,IAAM,EAAM,IAAI,GAAQ,QAAQ,EAAI,MAAM,EAC1C,EAAI,KAAO,GACX,EAAI,MAAM,KAAK,CAAI,EACnB,IAAM,IAAY,GAAa,GAAS,MACxC,EAAI,MAAQ,CAAC,EAAQ,MAAM,GAAI,GAAS,GAAI,GAAS,EAAE,EACvD,EAAK,MAAM,KAAK,CAAG,EAEvB,EAAS,EAAY,EAAU,MAAM,GAAK,EAAW,KAG7D,IAAM,EAAc,EAAQ,IAAM,KAC3B,KAAO,GAAM,EAAG,IACnB,EAAQ,EACZ,GAAI,GAAI,SAAW,EACf,EAAQ,EAAG,OAAS,EAAG,OAAO,OAC7B,KACD,IAAM,EAAO,EAAO,GAAG,YAAY,EAAI,EAAO,UAAU,CAAC,EACnD,EAAM,EACN,GAAG,qBAAwB,IAC3B,GAAG,sEAAyE,IAElF,GADA,EAAQ,EAAQ,EAAS,eAAiB,aAAc,CAAG,EACvD,GAAM,EAAG,OAAO,SAAW,EAC3B,EAAG,QAAQ,CAAE,EAErB,GAAI,EAAG,OAAS,EAAG,CACf,IAAM,EAAM,GAAW,WAAW,EAAI,EAAO,EAAI,QAAQ,OAAQ,CAAO,EACxE,GAAI,EAAI,QACJ,GAAI,EAAK,QACL,EAAK,SAAW;AAAA,EAAO,EAAI,QAE3B,OAAK,QAAU,EAAI,QAE3B,EAAK,MAAQ,CAAC,EAAG,OAAQ,EAAO,EAAI,MAAM,EAG1C,OAAK,MAAQ,CAAC,EAAG,OAAQ,EAAO,CAAK,EAEzC,OAAO,EAGH,yBAAwB,qBC9MhC,IAAI,OACA,OACA,QACA,QACA,QACA,QACA,QAEJ,SAAS,EAAiB,CAAC,EAAI,EAAK,EAAO,EAAS,EAAS,EAAK,CAC9D,IAAM,EAAO,EAAM,OAAS,YACtB,GAAgB,gBAAgB,EAAI,EAAK,EAAO,EAAS,CAAG,EAC5D,EAAM,OAAS,YACX,GAAgB,gBAAgB,EAAI,EAAK,EAAO,EAAS,CAAG,EAC5D,GAAsB,sBAAsB,EAAI,EAAK,EAAO,EAAS,CAAG,EAC5E,EAAO,EAAK,YAGlB,GAAI,IAAY,KAAO,IAAY,EAAK,QAEpC,OADA,EAAK,IAAM,EAAK,QACT,EAEX,GAAI,EACA,EAAK,IAAM,EACf,OAAO,EAEX,SAAS,EAAiB,CAAC,EAAI,EAAK,EAAO,EAAO,EAAS,CACvD,IAAM,EAAW,EAAM,IACjB,EAAU,CAAC,EACX,KACA,EAAI,WAAW,QAAQ,EAAS,OAAQ,KAAO,EAAQ,EAAU,qBAAsB,CAAG,CAAC,EACjG,GAAI,EAAM,OAAS,YAAa,CAC5B,IAAQ,SAAQ,iBAAkB,GAAO,EACnC,EAAW,GAAU,EACrB,EAAO,OAAS,EAAS,OACrB,EACA,EACH,GAAU,EACjB,GAAI,IAAa,CAAC,GAAM,EAAG,OAAS,EAAS,QAEzC,EAAQ,EAAU,eADF,4CACyB,EAGjD,IAAM,EAAU,EAAM,OAAS,YACzB,MACA,EAAM,OAAS,YACX,MACA,EAAM,MAAM,SAAW,IACnB,MACA,MAGd,GAAI,CAAC,GACD,CAAC,GACD,IAAY,KACX,IAAY,GAAQ,QAAQ,SAAW,IAAY,OACnD,IAAY,GAAQ,QAAQ,SAAW,IAAY,MACpD,OAAO,GAAkB,EAAI,EAAK,EAAO,EAAS,CAAO,EAE7D,IAAI,EAAM,EAAI,OAAO,KAAK,KAAK,KAAK,EAAE,MAAQ,GAAW,EAAE,aAAe,CAAO,EACjF,GAAI,CAAC,EAAK,CACN,IAAM,EAAK,EAAI,OAAO,UAAU,GAChC,GAAI,GAAI,aAAe,EACnB,EAAI,OAAO,KAAK,KAAK,OAAO,OAAO,CAAC,EAAG,EAAI,CAAE,QAAS,EAAM,CAAC,CAAC,EAC9D,EAAM,EAEL,KACD,GAAI,EACA,EAAQ,EAAU,sBAAuB,GAAG,EAAG,gBAAgB,6BAAmC,EAAG,YAAc,WAAY,EAAI,EAGnI,OAAQ,EAAU,qBAAsB,mBAAmB,IAAW,EAAI,EAE9E,OAAO,GAAkB,EAAI,EAAK,EAAO,EAAS,CAAO,GAGjE,IAAM,EAAO,GAAkB,EAAI,EAAK,EAAO,EAAS,EAAS,CAAG,EAC9D,EAAM,EAAI,UAAU,EAAM,KAAO,EAAQ,EAAU,qBAAsB,CAAG,EAAG,EAAI,OAAO,GAAK,EAC/F,EAAO,GAAS,OAAO,CAAG,EAC1B,EACA,IAAI,GAAO,OAAO,CAAG,EAG3B,GAFA,EAAK,MAAQ,EAAK,MAClB,EAAK,IAAM,EACP,GAAK,OACL,EAAK,OAAS,EAAI,OACtB,OAAO,EAGH,qBAAoB,qBCvF5B,IAAI,OAEJ,SAAS,EAAkB,CAAC,EAAK,EAAQ,EAAS,CAC9C,IAAM,EAAQ,EAAO,OACf,EAAS,GAAuB,EAAQ,EAAI,QAAQ,OAAQ,CAAO,EACzE,GAAI,CAAC,EACD,MAAO,CAAE,MAAO,GAAI,KAAM,KAAM,QAAS,GAAI,MAAO,CAAC,EAAO,EAAO,CAAK,CAAE,EAC9E,IAAM,EAAO,EAAO,OAAS,IAAM,GAAO,OAAO,aAAe,GAAO,OAAO,cACxE,EAAQ,EAAO,OAAS,GAAW,EAAO,MAAM,EAAI,CAAC,EAEvD,EAAa,EAAM,OACvB,QAAS,EAAI,EAAM,OAAS,EAAG,GAAK,EAAG,EAAE,EAAG,CACxC,IAAM,EAAU,EAAM,GAAG,GACzB,GAAI,IAAY,IAAM,IAAY,KAC9B,EAAa,EAEb,WAGR,GAAI,IAAe,EAAG,CAClB,IAAM,EAAQ,EAAO,QAAU,KAAO,EAAM,OAAS,EAC/C;AAAA,EAAK,OAAO,KAAK,IAAI,EAAG,EAAM,OAAS,CAAC,CAAC,EACzC,GACF,EAAM,EAAQ,EAAO,OACzB,GAAI,EAAO,OACP,GAAO,EAAO,OAAO,OACzB,MAAO,CAAE,QAAO,OAAM,QAAS,EAAO,QAAS,MAAO,CAAC,EAAO,EAAK,CAAG,CAAE,EAG5E,IAAI,EAAa,EAAO,OAAS,EAAO,OACpC,EAAS,EAAO,OAAS,EAAO,OAChC,EAAe,EACnB,QAAS,EAAI,EAAG,EAAI,EAAY,EAAE,EAAG,CACjC,IAAO,EAAQ,GAAW,EAAM,GAChC,GAAI,IAAY,IAAM,IAAY,MAC9B,GAAI,EAAO,SAAW,GAAK,EAAO,OAAS,EACvC,EAAa,EAAO,OAEvB,KACD,GAAI,EAAO,OAAS,EAEhB,EAAQ,EAAS,EAAO,OAAQ,eADhB,iGACuC,EAE3D,GAAI,EAAO,SAAW,EAClB,EAAa,EAAO,OAExB,GADA,EAAe,EACX,IAAe,GAAK,CAAC,EAAI,OAEzB,EAAQ,EAAQ,aADA,qDACqB,EAEzC,MAEJ,GAAU,EAAO,OAAS,EAAQ,OAAS,EAG/C,QAAS,EAAI,EAAM,OAAS,EAAG,GAAK,EAAY,EAAE,EAC9C,GAAI,EAAM,GAAG,GAAG,OAAS,EACrB,EAAa,EAAI,EAEzB,IAAI,EAAQ,GACR,EAAM,GACN,EAAmB,GAEvB,QAAS,EAAI,EAAG,EAAI,EAAc,EAAE,EAChC,GAAS,EAAM,GAAG,GAAG,MAAM,CAAU,EAAI;AAAA,EAC7C,QAAS,EAAI,EAAc,EAAI,EAAY,EAAE,EAAG,CAC5C,IAAK,EAAQ,GAAW,EAAM,GAC9B,GAAU,EAAO,OAAS,EAAQ,OAAS,EAC3C,IAAM,EAAO,EAAQ,EAAQ,OAAS,KAAO,KAC7C,GAAI,EACA,EAAU,EAAQ,MAAM,EAAG,EAAE,EAEjC,GAAI,GAAW,EAAO,OAAS,EAAY,CAIvC,IAAM,EAAU,2DAHJ,EAAO,OACb,iCACA,eAEN,EAAQ,EAAS,EAAQ,QAAU,EAAO,EAAI,GAAI,aAAc,CAAO,EACvE,EAAS,GAEb,GAAI,IAAS,GAAO,OAAO,cACvB,GAAS,EAAM,EAAO,MAAM,CAAU,EAAI,EAC1C,EAAM;AAAA,EAEL,QAAI,EAAO,OAAS,GAAc,EAAQ,KAAO,KAAM,CAExD,GAAI,IAAQ,IACR,EAAM;AAAA,EACL,QAAI,CAAC,GAAoB,IAAQ;AAAA,EAClC,EAAM;AAAA;AAAA,EACV,GAAS,EAAM,EAAO,MAAM,CAAU,EAAI,EAC1C,EAAM;AAAA,EACN,EAAmB,GAElB,QAAI,IAAY,GAEjB,GAAI,IAAQ;AAAA,EACR,GAAS;AAAA,EAET,OAAM;AAAA,EAGV,QAAS,EAAM,EACf,EAAM,IACN,EAAmB,GAG3B,OAAQ,EAAO,WACN,IACD,UACC,IACD,QAAS,EAAI,EAAY,EAAI,EAAM,OAAQ,EAAE,EACzC,GAAS;AAAA,EAAO,EAAM,GAAG,GAAG,MAAM,CAAU,EAChD,GAAI,EAAM,EAAM,OAAS,KAAO;AAAA,EAC5B,GAAS;AAAA,EACb,cAEA,GAAS;AAAA,EAEjB,IAAM,EAAM,EAAQ,EAAO,OAAS,EAAO,OAAO,OAClD,MAAO,CAAE,QAAO,OAAM,QAAS,EAAO,QAAS,MAAO,CAAC,EAAO,EAAK,CAAG,CAAE,EAE5E,SAAS,EAAsB,EAAG,SAAQ,SAAS,EAAQ,EAAS,CAEhE,GAAI,EAAM,GAAG,OAAS,sBAElB,OADA,EAAQ,EAAM,GAAI,aAAc,+BAA+B,EACxD,KAEX,IAAQ,UAAW,EAAM,GACnB,EAAO,EAAO,GAChB,EAAS,EACT,EAAQ,GACR,EAAQ,GACZ,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,EAAE,EAAG,CACpC,IAAM,EAAK,EAAO,GAClB,GAAI,CAAC,IAAU,IAAO,KAAO,IAAO,KAChC,EAAQ,EACP,KACD,IAAM,EAAI,OAAO,CAAE,EACnB,GAAI,CAAC,GAAU,EACX,EAAS,EACR,QAAI,IAAU,GACf,EAAQ,EAAS,GAG7B,GAAI,IAAU,GACV,EAAQ,EAAO,mBAAoB,kDAAkD,GAAQ,EACjG,IAAI,EAAW,GACX,EAAU,GACV,EAAS,EAAO,OACpB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAAG,CACnC,IAAM,EAAQ,EAAM,GACpB,OAAQ,EAAM,UACL,QACD,EAAW,OAEV,UACD,GAAU,EAAM,OAAO,OACvB,UACC,UACD,GAAI,GAAU,CAAC,EAEX,EAAQ,EAAO,eADC,wEACsB,EAE1C,GAAU,EAAM,OAAO,OACvB,EAAU,EAAM,OAAO,UAAU,CAAC,EAClC,UACC,QACD,EAAQ,EAAO,mBAAoB,EAAM,OAAO,EAChD,GAAU,EAAM,OAAO,OACvB,cAEK,CACL,IAAM,EAAU,4CAA4C,EAAM,OAClE,EAAQ,EAAO,mBAAoB,CAAO,EAC1C,IAAM,EAAK,EAAM,OACjB,GAAI,GAAM,OAAO,IAAO,SACpB,GAAU,EAAG,MACrB,GAGR,MAAO,CAAE,OAAM,SAAQ,QAAO,UAAS,QAAO,EAGlD,SAAS,EAAU,CAAC,EAAQ,CACxB,IAAM,EAAQ,EAAO,MAAM,QAAQ,EAC7B,EAAQ,EAAM,GACd,EAAI,EAAM,MAAM,OAAO,EAIvB,EAAQ,CAHA,IAAI,GACZ,CAAC,EAAE,GAAI,EAAM,MAAM,EAAE,GAAG,MAAM,CAAC,EAC/B,CAAC,GAAI,CAAK,CACI,EACpB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,GAAK,EACnC,EAAM,KAAK,CAAC,EAAM,GAAI,EAAM,EAAI,EAAE,CAAC,EACvC,OAAO,EAGH,sBAAqB,qBCrM7B,IAAI,OACA,QAEJ,SAAS,EAAiB,CAAC,EAAQ,EAAQ,EAAS,CAChD,IAAQ,SAAQ,OAAM,SAAQ,OAAQ,EAClC,EACA,EACE,EAAW,CAAC,EAAK,EAAM,IAAQ,EAAQ,EAAS,EAAK,EAAM,CAAG,EACpE,OAAQ,OACC,SACD,EAAQ,GAAO,OAAO,MACtB,EAAQ,GAAW,EAAQ,CAAQ,EACnC,UACC,uBACD,EAAQ,GAAO,OAAO,aACtB,EAAQ,GAAkB,EAAQ,CAAQ,EAC1C,UACC,uBACD,EAAQ,GAAO,OAAO,aACtB,EAAQ,GAAkB,EAAQ,CAAQ,EAC1C,cAIA,OADA,EAAQ,EAAQ,mBAAoB,4CAA4C,GAAM,EAC/E,CACH,MAAO,GACP,KAAM,KACN,QAAS,GACT,MAAO,CAAC,EAAQ,EAAS,EAAO,OAAQ,EAAS,EAAO,MAAM,CAClE,EAER,IAAM,EAAW,EAAS,EAAO,OAC3B,EAAK,GAAW,WAAW,EAAK,EAAU,EAAQ,CAAO,EAC/D,MAAO,CACH,QACA,KAAM,EACN,QAAS,EAAG,QACZ,MAAO,CAAC,EAAQ,EAAU,EAAG,MAAM,CACvC,EAEJ,SAAS,EAAU,CAAC,EAAQ,EAAS,CACjC,IAAI,EAAU,GACd,OAAQ,EAAO,QAEN,KACD,EAAU,kBACV,UACC,IACD,EAAU,6BACV,UACC,IACD,EAAU,kCACV,UACC,QACA,IAAK,CACN,EAAU,0BAA0B,EAAO,KAC3C,KACJ,KACK,QACA,IAAK,CACN,EAAU,sBAAsB,EAAO,KACvC,KACJ,EAEJ,GAAI,EACA,EAAQ,EAAG,mBAAoB,iCAAiC,GAAS,EAC7E,OAAO,GAAU,CAAM,EAE3B,SAAS,EAAiB,CAAC,EAAQ,EAAS,CACxC,GAAI,EAAO,EAAO,OAAS,KAAO,KAAO,EAAO,SAAW,EACvD,EAAQ,EAAO,OAAQ,eAAgB,wBAAwB,EACnE,OAAO,GAAU,EAAO,MAAM,EAAG,EAAE,CAAC,EAAE,QAAQ,MAAO,GAAG,EAE5D,SAAS,EAAS,CAAC,EAAQ,CAQvB,IAAI,EAAO,EACX,GAAI,CACA,EAAQ,IAAI,OAAO;AAAA,EAA8B,IAAI,EACrD,EAAO,IAAI,OAAO;AAAA,EAAyC,IAAI,EAEnE,KAAM,CACF,EAAQ,qBACR,EAAO,2BAEX,IAAI,EAAQ,EAAM,KAAK,CAAM,EAC7B,GAAI,CAAC,EACD,OAAO,EACX,IAAI,EAAM,EAAM,GACZ,EAAM,IACN,EAAM,EAAM,UAChB,EAAK,UAAY,EACjB,MAAQ,EAAQ,EAAK,KAAK,CAAM,EAAI,CAChC,GAAI,EAAM,KAAO,GACb,GAAI,IAAQ;AAAA,EACR,GAAO,EAEP,OAAM;AAAA,EAGV,QAAO,EAAM,EAAM,GACnB,EAAM,IAEV,EAAM,EAAK,UAEf,IAAM,EAAO,eAGb,OAFA,EAAK,UAAY,EACjB,EAAQ,EAAK,KAAK,CAAM,EACjB,EAAM,GAAO,IAAQ,IAAM,IAEtC,SAAS,EAAiB,CAAC,EAAQ,EAAS,CACxC,IAAI,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,EAAO,OAAS,EAAG,EAAE,EAAG,CACxC,IAAM,EAAK,EAAO,GAClB,GAAI,IAAO,MAAQ,EAAO,EAAI,KAAO;AAAA,EACjC,SACJ,GAAI,IAAO;AAAA,EAAM,CACb,IAAQ,OAAM,UAAW,GAAY,EAAQ,CAAC,EAC9C,GAAO,EACP,EAAI,EAEH,QAAI,IAAO,KAAM,CAClB,IAAI,EAAO,EAAO,EAAE,GACd,EAAK,GAAY,GACvB,GAAI,EACA,GAAO,EACN,QAAI,IAAS;AAAA,EAAM,CAEpB,EAAO,EAAO,EAAI,GAClB,MAAO,IAAS,KAAO,IAAS,KAC5B,EAAO,EAAO,EAAE,EAAI,GAEvB,QAAI,IAAS,MAAQ,EAAO,EAAI,KAAO;AAAA,EAAM,CAE9C,EAAO,EAAO,EAAE,EAAI,GACpB,MAAO,IAAS,KAAO,IAAS,KAC5B,EAAO,EAAO,EAAE,EAAI,GAEvB,QAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,CACnD,IAAM,EAAS,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAE,GACpC,GAAO,GAAc,EAAQ,EAAI,EAAG,EAAQ,CAAO,EACnD,GAAK,EAEJ,KACD,IAAM,EAAM,EAAO,OAAO,EAAI,EAAG,CAAC,EAClC,EAAQ,EAAI,EAAG,gBAAiB,2BAA2B,GAAK,EAChE,GAAO,GAGV,QAAI,IAAO,KAAO,IAAO,KAAM,CAEhC,IAAM,EAAU,EACZ,EAAO,EAAO,EAAI,GACtB,MAAO,IAAS,KAAO,IAAS,KAC5B,EAAO,EAAO,EAAE,EAAI,GACxB,GAAI,IAAS;AAAA,GAAQ,EAAE,IAAS,MAAQ,EAAO,EAAI,KAAO;AAAA,GACtD,GAAO,EAAI,EAAU,EAAO,MAAM,EAAS,EAAI,CAAC,EAAI,EAGxD,QAAO,EAGf,GAAI,EAAO,EAAO,OAAS,KAAO,KAAO,EAAO,SAAW,EACvD,EAAQ,EAAO,OAAQ,eAAgB,wBAAwB,EACnE,OAAO,EAMX,SAAS,EAAW,CAAC,EAAQ,EAAQ,CACjC,IAAI,EAAO,GACP,EAAK,EAAO,EAAS,GACzB,MAAO,IAAO,KAAO,IAAO,MAAQ,IAAO;AAAA,GAAQ,IAAO,KAAM,CAC5D,GAAI,IAAO,MAAQ,EAAO,EAAS,KAAO;AAAA,EACtC,MACJ,GAAI,IAAO;AAAA,EACP,GAAQ;AAAA,EACZ,GAAU,EACV,EAAK,EAAO,EAAS,GAEzB,GAAI,CAAC,EACD,EAAO,IACX,MAAO,CAAE,OAAM,QAAO,EAE1B,IAAM,GAAc,CAChB,IAAK,OACL,EAAG,OACH,EAAG,KACH,EAAG,OACH,EAAG,KACH,EAAG;AAAA,EACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,EAAG,IACH,EAAG,IACH,EAAG,SACH,EAAG,SACH,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,KACN,KAAM,IACV,EACA,SAAS,EAAa,CAAC,EAAQ,EAAQ,EAAQ,EAAS,CACpD,IAAM,EAAK,EAAO,OAAO,EAAQ,CAAM,EAEjC,EADK,EAAG,SAAW,GAAU,iBAAiB,KAAK,CAAE,EACzC,SAAS,EAAI,EAAE,EAAI,IACrC,GAAI,MAAM,CAAI,EAAG,CACb,IAAM,EAAM,EAAO,OAAO,EAAS,EAAG,EAAS,CAAC,EAEhD,OADA,EAAQ,EAAS,EAAG,gBAAiB,2BAA2B,GAAK,EAC9D,EAEX,OAAO,OAAO,cAAc,CAAI,EAG5B,qBAAoB,qBC9N5B,IAAI,OACA,OACA,QACA,QAEJ,SAAS,EAAa,CAAC,EAAK,EAAO,EAAU,EAAS,CAClD,IAAQ,QAAO,OAAM,UAAS,SAAU,EAAM,OAAS,eACjD,GAAmB,mBAAmB,EAAK,EAAO,CAAO,EACzD,GAAkB,kBAAkB,EAAO,EAAI,QAAQ,OAAQ,CAAO,EACtE,EAAU,EACV,EAAI,WAAW,QAAQ,EAAS,OAAQ,KAAO,EAAQ,EAAU,qBAAsB,CAAG,CAAC,EAC3F,KACF,EACJ,GAAI,EAAI,QAAQ,YAAc,EAAI,MAC9B,EAAM,EAAI,OAAO,GAAS,QAEzB,QAAI,EACL,EAAM,GAAoB,EAAI,OAAQ,EAAO,EAAS,EAAU,CAAO,EACtE,QAAI,EAAM,OAAS,SACpB,EAAM,GAAoB,EAAK,EAAO,EAAO,CAAO,EAEpD,OAAM,EAAI,OAAO,GAAS,QAC9B,IAAI,EACJ,GAAI,CACA,IAAM,EAAM,EAAI,QAAQ,EAAO,KAAO,EAAQ,GAAY,EAAO,qBAAsB,CAAG,EAAG,EAAI,OAAO,EACxG,EAAS,GAAS,SAAS,CAAG,EAAI,EAAM,IAAI,GAAO,OAAO,CAAG,EAEjE,MAAO,EAAO,CACV,IAAM,EAAM,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EACjE,EAAQ,GAAY,EAAO,qBAAsB,CAAG,EACpD,EAAS,IAAI,GAAO,OAAO,CAAK,EAIpC,GAFA,EAAO,MAAQ,EACf,EAAO,OAAS,EACZ,EACA,EAAO,KAAO,EAClB,GAAI,EACA,EAAO,IAAM,EACjB,GAAI,EAAI,OACJ,EAAO,OAAS,EAAI,OACxB,GAAI,EACA,EAAO,QAAU,EACrB,OAAO,EAEX,SAAS,EAAmB,CAAC,EAAQ,EAAO,EAAS,EAAU,EAAS,CACpE,GAAI,IAAY,IACZ,OAAO,EAAO,GAAS,QAC3B,IAAM,EAAgB,CAAC,EACvB,QAAW,KAAO,EAAO,KACrB,GAAI,CAAC,EAAI,YAAc,EAAI,MAAQ,EAC/B,GAAI,EAAI,SAAW,EAAI,KACnB,EAAc,KAAK,CAAG,EAEtB,YAAO,EAGnB,QAAW,KAAO,EACd,GAAI,EAAI,MAAM,KAAK,CAAK,EACpB,OAAO,EACf,IAAM,EAAK,EAAO,UAAU,GAC5B,GAAI,GAAM,CAAC,EAAG,WAIV,OADA,EAAO,KAAK,KAAK,OAAO,OAAO,CAAC,EAAG,EAAI,CAAE,QAAS,GAAO,KAAM,MAAU,CAAC,CAAC,EACpE,EAGX,OADA,EAAQ,EAAU,qBAAsB,mBAAmB,IAAW,IAAY,uBAAuB,EAClG,EAAO,GAAS,QAE3B,SAAS,EAAmB,EAAG,QAAO,aAAY,UAAU,EAAO,EAAO,EAAS,CAC/E,IAAM,EAAM,EAAO,KAAK,KAAK,MAAQ,EAAI,UAAY,IAAS,GAAS,EAAI,UAAY,QACnF,EAAI,MAAM,KAAK,CAAK,CAAC,GAAK,EAAO,GAAS,QAC9C,GAAI,EAAO,OAAQ,CACf,IAAM,EAAS,EAAO,OAAO,KAAK,KAAO,EAAI,SAAW,EAAI,MAAM,KAAK,CAAK,CAAC,GACzE,EAAO,GAAS,QACpB,GAAI,EAAI,MAAQ,EAAO,IAAK,CACxB,IAAM,EAAK,EAAW,UAAU,EAAI,GAAG,EACjC,EAAK,EAAW,UAAU,EAAO,GAAG,EACpC,EAAM,iCAAiC,QAAS,IACtD,EAAQ,EAAO,qBAAsB,EAAK,EAAI,GAGtD,OAAO,EAGH,iBAAgB,qBCrFxB,SAAS,EAAmB,CAAC,EAAQ,EAAQ,EAAK,CAC9C,GAAI,EAAQ,CACR,IAAQ,EAAM,EAAO,QACrB,QAAS,EAAI,EAAM,EAAG,GAAK,EAAG,EAAE,EAAG,CAC/B,IAAI,EAAK,EAAO,GAChB,OAAQ,EAAG,UACF,YACA,cACA,UACD,GAAU,EAAG,OAAO,OACpB,SAIR,EAAK,EAAO,EAAE,GACd,MAAO,GAAI,OAAS,QAChB,GAAU,EAAG,OAAO,OACpB,EAAK,EAAO,EAAE,GAElB,OAGR,OAAO,EAGH,uBAAsB,qBCzB9B,IAAI,QACA,OACA,QACA,QACA,QACA,QAEE,GAAK,CAAE,eAAa,mBAAiB,EAC3C,SAAS,EAAW,CAAC,EAAK,EAAO,EAAO,EAAS,CAC7C,IAAM,EAAQ,EAAI,OACV,cAAa,UAAS,SAAQ,OAAQ,EAC1C,EACA,EAAa,GACjB,OAAQ,EAAM,UACL,QAED,GADA,EAAO,GAAa,EAAK,EAAO,CAAO,EACnC,GAAU,EACV,EAAQ,EAAO,cAAe,+CAA+C,EACjF,UACC,aACA,2BACA,2BACA,eAED,GADA,EAAO,GAAc,cAAc,EAAK,EAAO,EAAK,CAAO,EACvD,EACA,EAAK,OAAS,EAAO,OAAO,UAAU,CAAC,EAC3C,UACC,gBACA,gBACA,kBACD,GAAI,CAEA,GADA,EAAO,GAAkB,kBAAkB,GAAI,EAAK,EAAO,EAAO,CAAO,EACrE,EACA,EAAK,OAAS,EAAO,OAAO,UAAU,CAAC,EAE/C,MAAO,EAAO,CAEV,IAAM,EAAU,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EACrE,EAAQ,EAAO,sBAAuB,CAAO,EAEjD,cACK,CACL,IAAM,EAAU,EAAM,OAAS,QACzB,EAAM,QACN,4BAA4B,EAAM,QACxC,EAAQ,EAAO,mBAAoB,CAAO,EAC1C,EAAa,EACjB,EAGJ,GADA,IAAS,EAAO,GAAiB,EAAK,EAAM,OAAQ,OAAW,KAAM,EAAO,CAAO,GAC/E,GAAU,EAAK,SAAW,GAC1B,EAAQ,EAAQ,YAAa,kCAAkC,EACnE,GAAI,GACA,EAAI,QAAQ,aACX,CAAC,GAAS,SAAS,CAAI,GACpB,OAAO,EAAK,QAAU,UACrB,EAAK,KAAO,EAAK,MAAQ,yBAE9B,EAAQ,GAAO,EAAO,iBADV,2CAC+B,EAE/C,GAAI,EACA,EAAK,YAAc,GACvB,GAAI,EACA,GAAI,EAAM,OAAS,UAAY,EAAM,SAAW,GAC5C,EAAK,QAAU,EAEf,OAAK,cAAgB,EAG7B,GAAI,EAAI,QAAQ,kBAAoB,EAChC,EAAK,SAAW,EACpB,OAAO,EAEX,SAAS,EAAgB,CAAC,EAAK,EAAQ,EAAQ,GAAO,cAAa,UAAS,SAAQ,MAAK,OAAO,EAAS,CACrG,IAAM,EAAQ,CACV,KAAM,SACN,OAAQ,GAAwB,oBAAoB,EAAQ,EAAQ,CAAG,EACvE,OAAQ,GACR,OAAQ,EACZ,EACM,EAAO,GAAc,cAAc,EAAK,EAAO,EAAK,CAAO,EACjE,GAAI,GAEA,GADA,EAAK,OAAS,EAAO,OAAO,UAAU,CAAC,EACnC,EAAK,SAAW,GAChB,EAAQ,EAAQ,YAAa,kCAAkC,EAEvE,GAAI,EACA,EAAK,YAAc,GACvB,GAAI,EACA,EAAK,QAAU,EACf,EAAK,MAAM,GAAK,EAEpB,OAAO,EAEX,SAAS,EAAY,EAAG,YAAa,SAAQ,SAAQ,OAAO,EAAS,CACjE,IAAM,EAAQ,IAAI,GAAM,MAAM,EAAO,UAAU,CAAC,CAAC,EACjD,GAAI,EAAM,SAAW,GACjB,EAAQ,EAAQ,YAAa,iCAAiC,EAClE,GAAI,EAAM,OAAO,SAAS,GAAG,EACzB,EAAQ,EAAS,EAAO,OAAS,EAAG,YAAa,iCAAkC,EAAI,EAC3F,IAAM,EAAW,EAAS,EAAO,OAC3B,EAAK,GAAW,WAAW,EAAK,EAAU,EAAQ,OAAQ,CAAO,EAEvE,GADA,EAAM,MAAQ,CAAC,EAAQ,EAAU,EAAG,MAAM,EACtC,EAAG,QACH,EAAM,QAAU,EAAG,QACvB,OAAO,EAGH,oBAAmB,GACnB,eAAc,qBC7GtB,IAAI,QACA,QACA,QACA,QAEJ,SAAS,EAAU,CAAC,EAAS,GAAc,SAAQ,QAAO,QAAO,OAAO,EAAS,CAC7E,IAAM,EAAO,OAAO,OAAO,CAAE,YAAa,CAAW,EAAG,CAAO,EACzD,EAAM,IAAI,GAAS,SAAS,OAAW,CAAI,EAC3C,EAAM,CACR,MAAO,GACP,OAAQ,GACR,WAAY,EAAI,WAChB,QAAS,EAAI,QACb,OAAQ,EAAI,MAChB,EACM,EAAQ,GAAa,aAAa,EAAO,CAC3C,UAAW,YACX,KAAM,GAAS,IAAM,GACrB,SACA,UACA,aAAc,EACd,eAAgB,EACpB,CAAC,EACD,GAAI,EAAM,OAEN,GADA,EAAI,WAAW,SAAW,GACtB,IACC,EAAM,OAAS,aAAe,EAAM,OAAS,cAC9C,CAAC,EAAM,WACP,EAAQ,EAAM,IAAK,eAAgB,uEAAuE,EAGlH,EAAI,SAAW,EACT,GAAY,YAAY,EAAK,EAAO,EAAO,CAAO,EAClD,GAAY,iBAAiB,EAAK,EAAM,IAAK,EAAO,KAAM,EAAO,CAAO,EAC9E,IAAM,EAAa,EAAI,SAAS,MAAM,GAChC,EAAK,GAAW,WAAW,EAAK,EAAY,GAAO,CAAO,EAChE,GAAI,EAAG,QACH,EAAI,QAAU,EAAG,QAErB,OADA,EAAI,MAAQ,CAAC,EAAQ,EAAY,EAAG,MAAM,EACnC,EAGH,cAAa,qBC1CrB,IAAI,iBACA,QACA,QACA,QACA,OACA,QACA,QAEJ,SAAS,EAAW,CAAC,EAAK,CACtB,GAAI,OAAO,IAAQ,SACf,MAAO,CAAC,EAAK,EAAM,CAAC,EACxB,GAAI,MAAM,QAAQ,CAAG,EACjB,OAAO,EAAI,SAAW,EAAI,EAAM,CAAC,EAAI,GAAI,EAAI,EAAE,EACnD,IAAQ,SAAQ,UAAW,EAC3B,MAAO,CAAC,EAAQ,GAAU,OAAO,IAAW,SAAW,EAAO,OAAS,EAAE,EAE7E,SAAS,EAAY,CAAC,EAAS,CAC3B,IAAI,EAAU,GACV,EAAY,GACZ,EAAiB,GACrB,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,EAAE,EAAG,CACrC,IAAM,EAAS,EAAQ,GACvB,OAAQ,EAAO,QACN,IACD,IACK,IAAY,GAAK,GAAK,EAAiB;AAAA;AAAA,EAAS;AAAA,IAC5C,EAAO,UAAU,CAAC,GAAK,KAChC,EAAY,GACZ,EAAiB,GACjB,UACC,IACD,GAAI,EAAQ,EAAI,KAAK,KAAO,IACxB,GAAK,EACT,EAAY,GACZ,cAGA,GAAI,CAAC,EACD,EAAiB,GACrB,EAAY,IAGxB,MAAO,CAAE,UAAS,gBAAe,EAarC,MAAM,EAAS,CACX,WAAW,CAAC,EAAU,CAAC,EAAG,CACtB,KAAK,IAAM,KACX,KAAK,aAAe,GACpB,KAAK,QAAU,CAAC,EAChB,KAAK,OAAS,CAAC,EACf,KAAK,SAAW,CAAC,EACjB,KAAK,QAAU,CAAC,EAAQ,EAAM,EAAS,IAAY,CAC/C,IAAM,EAAM,GAAY,CAAM,EAC9B,GAAI,EACA,KAAK,SAAS,KAAK,IAAI,GAAO,YAAY,EAAK,EAAM,CAAO,CAAC,EAE7D,UAAK,OAAO,KAAK,IAAI,GAAO,eAAe,EAAK,EAAM,CAAO,CAAC,GAGtE,KAAK,WAAa,IAAI,GAAW,WAAW,CAAE,QAAS,EAAQ,SAAW,KAAM,CAAC,EACjF,KAAK,QAAU,EAEnB,QAAQ,CAAC,EAAK,EAAU,CACpB,IAAQ,UAAS,kBAAmB,GAAa,KAAK,OAAO,EAE7D,GAAI,EAAS,CACT,IAAM,EAAK,EAAI,SACf,GAAI,EACA,EAAI,QAAU,EAAI,QAAU,GAAG,EAAI;AAAA,EAAY,IAAY,EAE1D,QAAI,GAAkB,EAAI,WAAW,UAAY,CAAC,EACnD,EAAI,cAAgB,EAEnB,QAAI,GAAS,aAAa,CAAE,GAAK,CAAC,EAAG,MAAQ,EAAG,MAAM,OAAS,EAAG,CACnE,IAAI,EAAK,EAAG,MAAM,GAClB,GAAI,GAAS,OAAO,CAAE,EAClB,EAAK,EAAG,IACZ,IAAM,EAAK,EAAG,cACd,EAAG,cAAgB,EAAK,GAAG;AAAA,EAAY,IAAO,EAE7C,KACD,IAAM,EAAK,EAAG,cACd,EAAG,cAAgB,EAAK,GAAG;AAAA,EAAY,IAAO,GAGtD,GAAI,EACA,MAAM,UAAU,KAAK,MAAM,EAAI,OAAQ,KAAK,MAAM,EAClD,MAAM,UAAU,KAAK,MAAM,EAAI,SAAU,KAAK,QAAQ,EAGtD,OAAI,OAAS,KAAK,OAClB,EAAI,SAAW,KAAK,SAExB,KAAK,QAAU,CAAC,EAChB,KAAK,OAAS,CAAC,EACf,KAAK,SAAW,CAAC,EAOrB,UAAU,EAAG,CACT,MAAO,CACH,QAAS,GAAa,KAAK,OAAO,EAAE,QACpC,WAAY,KAAK,WACjB,OAAQ,KAAK,OACb,SAAU,KAAK,QACnB,GAQH,OAAO,CAAC,EAAQ,EAAW,GAAO,EAAY,GAAI,CAC/C,QAAW,KAAS,EAChB,MAAO,KAAK,KAAK,CAAK,EAC1B,MAAO,KAAK,IAAI,EAAU,CAAS,GAGtC,IAAI,CAAC,EAAO,CACT,GAAI,GAAa,IAAI,WACjB,QAAQ,IAAI,EAAO,CAAE,MAAO,IAAK,CAAC,EACtC,OAAQ,EAAM,UACL,YACD,KAAK,WAAW,IAAI,EAAM,OAAQ,CAAC,EAAQ,EAAS,IAAY,CAC5D,IAAM,EAAM,GAAY,CAAK,EAC7B,EAAI,IAAM,EACV,KAAK,QAAQ,EAAK,gBAAiB,EAAS,CAAO,EACtD,EACD,KAAK,QAAQ,KAAK,EAAM,MAAM,EAC9B,KAAK,aAAe,GACpB,UACC,WAAY,CACb,IAAM,EAAM,GAAW,WAAW,KAAK,QAAS,KAAK,WAAY,EAAO,KAAK,OAAO,EACpF,GAAI,KAAK,cAAgB,CAAC,EAAI,WAAW,SACrC,KAAK,QAAQ,EAAO,eAAgB,iDAAiD,EAEzF,GADA,KAAK,SAAS,EAAK,EAAK,EACpB,KAAK,IACL,MAAM,KAAK,IACf,KAAK,IAAM,EACX,KAAK,aAAe,GACpB,KACJ,KACK,sBACA,QACD,UACC,cACA,UACD,KAAK,QAAQ,KAAK,EAAM,MAAM,EAC9B,UACC,QAAS,CACV,IAAM,EAAM,EAAM,OACZ,GAAG,EAAM,YAAY,KAAK,UAAU,EAAM,MAAM,IAChD,EAAM,QACN,EAAQ,IAAI,GAAO,eAAe,GAAY,CAAK,EAAG,mBAAoB,CAAG,EACnF,GAAI,KAAK,cAAgB,CAAC,KAAK,IAC3B,KAAK,OAAO,KAAK,CAAK,EAEtB,UAAK,IAAI,OAAO,KAAK,CAAK,EAC9B,KACJ,KACK,UAAW,CACZ,GAAI,CAAC,KAAK,IAAK,CAEX,KAAK,OAAO,KAAK,IAAI,GAAO,eAAe,GAAY,CAAK,EAAG,mBADnD,+CAC0E,CAAC,EACvF,MAEJ,KAAK,IAAI,WAAW,OAAS,GAC7B,IAAM,EAAM,GAAW,WAAW,EAAM,IAAK,EAAM,OAAS,EAAM,OAAO,OAAQ,KAAK,IAAI,QAAQ,OAAQ,KAAK,OAAO,EAEtH,GADA,KAAK,SAAS,KAAK,IAAK,EAAI,EACxB,EAAI,QAAS,CACb,IAAM,EAAK,KAAK,IAAI,QACpB,KAAK,IAAI,QAAU,EAAK,GAAG;AAAA,EAAO,EAAI,UAAY,EAAI,QAE1D,KAAK,IAAI,MAAM,GAAK,EAAI,OACxB,KACJ,SAEI,KAAK,OAAO,KAAK,IAAI,GAAO,eAAe,GAAY,CAAK,EAAG,mBAAoB,qBAAqB,EAAM,MAAM,CAAC,IAShI,GAAG,CAAC,EAAW,GAAO,EAAY,GAAI,CACnC,GAAI,KAAK,IACL,KAAK,SAAS,KAAK,IAAK,EAAI,EAC5B,MAAM,KAAK,IACX,KAAK,IAAM,KAEV,QAAI,EAAU,CACf,IAAM,EAAO,OAAO,OAAO,CAAE,YAAa,KAAK,UAAW,EAAG,KAAK,OAAO,EACnE,EAAM,IAAI,GAAS,SAAS,OAAW,CAAI,EACjD,GAAI,KAAK,aACL,KAAK,QAAQ,EAAW,eAAgB,uCAAuC,EACnF,EAAI,MAAQ,CAAC,EAAG,EAAW,CAAS,EACpC,KAAK,SAAS,EAAK,EAAK,EACxB,MAAM,GAGlB,CAEQ,YAAW,qBC3NnB,IAAI,QACA,QACA,QACA,QAEJ,SAAS,EAAe,CAAC,EAAO,EAAS,GAAM,EAAS,CACpD,GAAI,EAAO,CACP,IAAM,EAAW,CAAC,EAAK,EAAM,IAAY,CACrC,IAAM,EAAS,OAAO,IAAQ,SAAW,EAAM,MAAM,QAAQ,CAAG,EAAI,EAAI,GAAK,EAAI,OACjF,GAAI,EACA,EAAQ,EAAQ,EAAM,CAAO,EAE7B,WAAM,IAAI,GAAO,eAAe,CAAC,EAAQ,EAAS,CAAC,EAAG,EAAM,CAAO,GAE3E,OAAQ,EAAM,UACL,aACA,2BACA,uBACD,OAAO,GAAkB,kBAAkB,EAAO,EAAQ,CAAQ,MACjE,eACD,OAAO,GAAmB,mBAAmB,CAAE,QAAS,CAAE,QAAO,CAAE,EAAG,EAAO,CAAQ,GAGjG,OAAO,KAgBX,SAAS,EAAiB,CAAC,EAAO,EAAS,CACvC,IAAQ,cAAc,GAAO,SAAQ,SAAS,GAAO,SAAS,GAAI,OAAO,SAAY,EAC/E,EAAS,GAAgB,gBAAgB,CAAE,OAAM,OAAM,EAAG,CAC5D,cACA,OAAQ,EAAS,EAAI,IAAI,OAAO,CAAM,EAAI,GAC1C,SACA,QAAS,CAAE,WAAY,GAAM,UAAW,EAAG,CAC/C,CAAC,EACK,EAAM,EAAQ,KAAO,CACvB,CAAE,KAAM,UAAW,OAAQ,GAAI,SAAQ,OAAQ;AAAA,CAAK,CACxD,EACA,OAAQ,EAAO,QACN,QACA,IAAK,CACN,IAAM,EAAK,EAAO,QAAQ;AAAA,CAAI,EACxB,EAAO,EAAO,UAAU,EAAG,CAAE,EAC7B,EAAO,EAAO,UAAU,EAAK,CAAC,EAAI;AAAA,EAClC,EAAQ,CACV,CAAE,KAAM,sBAAuB,SAAQ,SAAQ,OAAQ,CAAK,CAChE,EACA,GAAI,CAAC,GAAmB,EAAO,CAAG,EAC9B,EAAM,KAAK,CAAE,KAAM,UAAW,OAAQ,GAAI,SAAQ,OAAQ;AAAA,CAAK,CAAC,EACpE,MAAO,CAAE,KAAM,eAAgB,SAAQ,SAAQ,QAAO,OAAQ,CAAK,CACvE,KACK,IACD,MAAO,CAAE,KAAM,uBAAwB,SAAQ,SAAQ,SAAQ,KAAI,MAClE,IACD,MAAO,CAAE,KAAM,uBAAwB,SAAQ,SAAQ,SAAQ,KAAI,UAEnE,MAAO,CAAE,KAAM,SAAU,SAAQ,SAAQ,SAAQ,KAAI,GAmBjE,SAAS,EAAc,CAAC,EAAO,EAAO,EAAU,CAAC,EAAG,CAChD,IAAM,WAAW,GAAO,cAAc,GAAO,SAAS,GAAO,QAAS,EAClE,EAAS,WAAY,EAAQ,EAAM,OAAS,KAChD,GAAI,GAAY,OAAO,IAAW,SAC9B,GAAU,EACd,GAAI,CAAC,EACD,OAAQ,EAAM,UACL,uBACD,EAAO,eACP,UACC,uBACD,EAAO,eACP,UACC,eAAgB,CACjB,IAAM,EAAS,EAAM,MAAM,GAC3B,GAAI,EAAO,OAAS,sBAChB,MAAU,MAAM,6BAA6B,EACjD,EAAO,EAAO,OAAO,KAAO,IAAM,eAAiB,gBACnD,KACJ,SAEI,EAAO,QAEnB,IAAM,EAAS,GAAgB,gBAAgB,CAAE,OAAM,OAAM,EAAG,CAC5D,YAAa,GAAe,IAAW,KACvC,OAAQ,IAAW,MAAQ,EAAS,EAAI,IAAI,OAAO,CAAM,EAAI,GAC7D,SACA,QAAS,CAAE,WAAY,GAAM,UAAW,EAAG,CAC/C,CAAC,EACD,OAAQ,EAAO,QACN,QACA,IACD,GAAoB,EAAO,CAAM,EACjC,UACC,IACD,GAAmB,EAAO,EAAQ,sBAAsB,EACxD,UACC,IACD,GAAmB,EAAO,EAAQ,sBAAsB,EACxD,cAEA,GAAmB,EAAO,EAAQ,QAAQ,GAGtD,SAAS,EAAmB,CAAC,EAAO,EAAQ,CACxC,IAAM,EAAK,EAAO,QAAQ;AAAA,CAAI,EACxB,EAAO,EAAO,UAAU,EAAG,CAAE,EAC7B,EAAO,EAAO,UAAU,EAAK,CAAC,EAAI;AAAA,EACxC,GAAI,EAAM,OAAS,eAAgB,CAC/B,IAAM,EAAS,EAAM,MAAM,GAC3B,GAAI,EAAO,OAAS,sBAChB,MAAU,MAAM,6BAA6B,EACjD,EAAO,OAAS,EAChB,EAAM,OAAS,EAEd,KACD,IAAQ,UAAW,EACb,EAAS,WAAY,EAAQ,EAAM,OAAS,GAC5C,EAAQ,CACV,CAAE,KAAM,sBAAuB,SAAQ,SAAQ,OAAQ,CAAK,CAChE,EACA,GAAI,CAAC,GAAmB,EAAO,QAAS,EAAQ,EAAM,IAAM,MAAS,EACjE,EAAM,KAAK,CAAE,KAAM,UAAW,OAAQ,GAAI,SAAQ,OAAQ;AAAA,CAAK,CAAC,EACpE,QAAW,KAAO,OAAO,KAAK,CAAK,EAC/B,GAAI,IAAQ,QAAU,IAAQ,SAC1B,OAAO,EAAM,GACrB,OAAO,OAAO,EAAO,CAAE,KAAM,eAAgB,SAAQ,QAAO,OAAQ,CAAK,CAAC,GAIlF,SAAS,EAAkB,CAAC,EAAO,EAAK,CACpC,GAAI,EACA,QAAW,KAAM,EACb,OAAQ,EAAG,UACF,YACA,UACD,EAAM,KAAK,CAAE,EACb,UACC,UAED,OADA,EAAM,KAAK,CAAE,EACN,GAEvB,MAAO,GAEX,SAAS,EAAkB,CAAC,EAAO,EAAQ,EAAM,CAC7C,OAAQ,EAAM,UACL,aACA,2BACA,uBACD,EAAM,KAAO,EACb,EAAM,OAAS,EACf,UACC,eAAgB,CACjB,IAAM,EAAM,EAAM,MAAM,MAAM,CAAC,EAC3B,EAAK,EAAO,OAChB,GAAI,EAAM,MAAM,GAAG,OAAS,sBACxB,GAAM,EAAM,MAAM,GAAG,OAAO,OAChC,QAAW,KAAO,EACd,EAAI,QAAU,EAClB,OAAO,EAAM,MACb,OAAO,OAAO,EAAO,CAAE,OAAM,SAAQ,KAAI,CAAC,EAC1C,KACJ,KACK,gBACA,YAAa,CAEd,IAAM,EAAK,CAAE,KAAM,UAAW,OADf,EAAM,OAAS,EAAO,OACC,OAAQ,EAAM,OAAQ,OAAQ;AAAA,CAAK,EACzE,OAAO,EAAM,MACb,OAAO,OAAO,EAAO,CAAE,OAAM,SAAQ,IAAK,CAAC,CAAE,CAAE,CAAC,EAChD,KACJ,SACS,CACL,IAAM,EAAS,WAAY,EAAQ,EAAM,OAAS,GAC5C,EAAM,QAAS,GAAS,MAAM,QAAQ,EAAM,GAAG,EAC/C,EAAM,IAAI,OAAO,KAAM,EAAG,OAAS,SACjC,EAAG,OAAS,WACZ,EAAG,OAAS,SAAS,EACvB,CAAC,EACP,QAAW,KAAO,OAAO,KAAK,CAAK,EAC/B,GAAI,IAAQ,QAAU,IAAQ,SAC1B,OAAO,EAAM,GACrB,OAAO,OAAO,EAAO,CAAE,OAAM,SAAQ,SAAQ,KAAI,CAAC,CACtD,GAIA,qBAAoB,GACpB,mBAAkB,GAClB,kBAAiB,qBCjNzB,IAAM,GAAY,CAAC,KAAQ,SAAU,GAAM,GAAe,CAAG,EAAI,GAAc,CAAG,EAClF,SAAS,EAAc,CAAC,EAAO,CAC3B,OAAQ,EAAM,UACL,eAAgB,CACjB,IAAI,EAAM,GACV,QAAW,KAAO,EAAM,MACpB,GAAO,GAAe,CAAG,EAC7B,OAAO,EAAM,EAAM,MACvB,KACK,gBACA,YAAa,CACd,IAAI,EAAM,GACV,QAAW,KAAQ,EAAM,MACrB,GAAO,GAAc,CAAI,EAC7B,OAAO,CACX,KACK,kBAAmB,CACpB,IAAI,EAAM,EAAM,MAAM,OACtB,QAAW,KAAQ,EAAM,MACrB,GAAO,GAAc,CAAI,EAC7B,QAAW,KAAM,EAAM,IACnB,GAAO,EAAG,OACd,OAAO,CACX,KACK,WAAY,CACb,IAAI,EAAM,GAAc,CAAK,EAC7B,GAAI,EAAM,IACN,QAAW,KAAM,EAAM,IACnB,GAAO,EAAG,OAClB,OAAO,CACX,SACS,CACL,IAAI,EAAM,EAAM,OAChB,GAAI,QAAS,GAAS,EAAM,IACxB,QAAW,KAAM,EAAM,IACnB,GAAO,EAAG,OAClB,OAAO,CACX,GAGR,SAAS,EAAa,EAAG,QAAO,MAAK,MAAK,SAAS,CAC/C,IAAI,EAAM,GACV,QAAW,KAAM,EACb,GAAO,EAAG,OACd,GAAI,EACA,GAAO,GAAe,CAAG,EAC7B,GAAI,EACA,QAAW,KAAM,EACb,GAAO,EAAG,OAClB,GAAI,EACA,GAAO,GAAe,CAAK,EAC/B,OAAO,EAGH,aAAY,qBC5DpB,IAAM,GAAQ,OAAO,aAAa,EAC5B,GAAO,OAAO,eAAe,EAC7B,GAAS,OAAO,aAAa,EA6BnC,SAAS,EAAK,CAAC,EAAK,EAAS,CACzB,GAAI,SAAU,GAAO,EAAI,OAAS,WAC9B,EAAM,CAAE,MAAO,EAAI,MAAO,MAAO,EAAI,KAAM,EAC/C,GAAO,OAAO,OAAO,CAAC,CAAC,EAAG,EAAK,CAAO,EAM1C,GAAM,MAAQ,GAEd,GAAM,KAAO,GAEb,GAAM,OAAS,GAEf,GAAM,WAAa,CAAC,EAAK,IAAS,CAC9B,IAAI,EAAO,EACX,QAAY,EAAO,KAAU,EAAM,CAC/B,IAAM,EAAM,IAAO,GACnB,GAAI,GAAO,UAAW,EAClB,EAAO,EAAI,MAAM,GAGjB,YAER,OAAO,GAOX,GAAM,iBAAmB,CAAC,EAAK,IAAS,CACpC,IAAM,EAAS,GAAM,WAAW,EAAK,EAAK,MAAM,EAAG,EAAE,CAAC,EAChD,EAAQ,EAAK,EAAK,OAAS,GAAG,GAC9B,EAAO,IAAS,GACtB,GAAI,GAAQ,UAAW,EACnB,OAAO,EACX,MAAU,MAAM,6BAA6B,GAEjD,SAAS,EAAM,CAAC,EAAM,EAAM,EAAS,CACjC,IAAI,EAAO,EAAQ,EAAM,CAAI,EAC7B,GAAI,OAAO,IAAS,SAChB,OAAO,EACX,QAAW,IAAS,CAAC,MAAO,OAAO,EAAG,CAClC,IAAM,EAAQ,EAAK,GACnB,GAAI,GAAS,UAAW,EAAO,CAC3B,QAAS,EAAI,EAAG,EAAI,EAAM,MAAM,OAAQ,EAAE,EAAG,CACzC,IAAM,EAAK,GAAO,OAAO,OAAO,EAAK,OAAO,CAAC,CAAC,EAAO,CAAC,CAAC,CAAC,CAAC,EAAG,EAAM,MAAM,GAAI,CAAO,EACnF,GAAI,OAAO,IAAO,SACd,EAAI,EAAK,EACR,QAAI,IAAO,GACZ,OAAO,GACN,QAAI,IAAO,GACZ,EAAM,MAAM,OAAO,EAAG,CAAC,EACvB,GAAK,EAGb,GAAI,OAAO,IAAS,YAAc,IAAU,MACxC,EAAO,EAAK,EAAM,CAAI,GAGlC,OAAO,OAAO,IAAS,WAAa,EAAK,EAAM,CAAI,EAAI,EAGnD,SAAQ,qBChGhB,IAAI,QACA,QACA,QAGE,GAAM,SAEN,GAAW,OAEX,GAAW,OAEX,GAAS,OAET,GAAe,CAAC,IAAU,CAAC,CAAC,IAAS,UAAW,GAEhD,GAAW,CAAC,IAAU,CAAC,CAAC,IACzB,EAAM,OAAS,UACZ,EAAM,OAAS,wBACf,EAAM,OAAS,wBACf,EAAM,OAAS,gBAGvB,SAAS,EAAW,CAAC,EAAO,CACxB,OAAQ,QACC,GACD,MAAO,aACN,GACD,MAAO,aACN,GACD,MAAO,kBACN,GACD,MAAO,mBAEP,OAAO,KAAK,UAAU,CAAK,GAIvC,SAAS,EAAS,CAAC,EAAQ,CACvB,OAAQ,QACC,GACD,MAAO,uBACN,GACD,MAAO,gBACN,GACD,MAAO,sBACN,GACD,MAAO,aACN,MACD,MAAO,gBACN,MACD,MAAO,cACN,OACA;AAAA,MACA;AAAA,EACD,MAAO,cACN,IACD,MAAO,mBACN,IACD,MAAO,uBACN,IACD,MAAO,oBACN,IACD,MAAO,qBACN,IACD,MAAO,mBACN,IACD,MAAO,qBACN,IACD,MAAO,mBACN,IACD,MAAO,QAEf,OAAQ,EAAO,QACN,QACA,KACD,MAAO,YACN,IACD,MAAO,cACN,IACD,MAAO,qBACN,IACD,MAAO,YACN,IACD,MAAO,aACN,IACD,MAAO,UACN,IACD,MAAO,2BACN,IACD,MAAO,2BACN,QACA,IACD,MAAO,sBAEf,OAAO,KAGH,qBAAoB,GAAU,kBAC9B,mBAAkB,GAAU,gBAC5B,kBAAiB,GAAU,eAC3B,aAAY,GAAa,UACzB,SAAQ,GAAS,MACjB,OAAM,GACN,YAAW,GACX,YAAW,GACX,UAAS,GACT,gBAAe,GACf,YAAW,GACX,eAAc,GACd,aAAY,qBC7GpB,IAAI,QAqEJ,SAAS,CAAO,CAAC,EAAI,CACjB,OAAQ,OACC,YACA,QACA;AAAA,MACA,SACA,KACD,MAAO,WAEP,MAAO,IAGnB,IAAM,GAAY,IAAI,IAAI,wBAAwB,EAC5C,GAAW,IAAI,IAAI,mFAAmF,EACtG,GAAqB,IAAI,IAAI,OAAO,EACpC,GAAqB,IAAI,IAAI;AAAA,IAAc,EAC3C,GAAkB,CAAC,IAAO,CAAC,GAAM,GAAmB,IAAI,CAAE,EAgBhE,MAAM,EAAM,CACR,WAAW,EAAG,CAKV,KAAK,MAAQ,GAMb,KAAK,kBAAoB,GAMzB,KAAK,gBAAkB,GAEvB,KAAK,OAAS,GAKd,KAAK,QAAU,GAEf,KAAK,UAAY,EAKjB,KAAK,WAAa,EAElB,KAAK,YAAc,EAEnB,KAAK,WAAa,KAElB,KAAK,KAAO,KAEZ,KAAK,IAAM,GAQd,GAAG,CAAC,EAAQ,EAAa,GAAO,CAC7B,GAAI,EAAQ,CACR,GAAI,OAAO,IAAW,SAClB,MAAM,UAAU,wBAAwB,EAC5C,KAAK,OAAS,KAAK,OAAS,KAAK,OAAS,EAAS,EACnD,KAAK,WAAa,KAEtB,KAAK,MAAQ,CAAC,EACd,IAAI,EAAO,KAAK,MAAQ,SACxB,MAAO,IAAS,GAAc,KAAK,SAAS,CAAC,GACzC,EAAO,MAAO,KAAK,UAAU,CAAI,EAEzC,SAAS,EAAG,CACR,IAAI,EAAI,KAAK,IACT,EAAK,KAAK,OAAO,GACrB,MAAO,IAAO,KAAO,IAAO,KACxB,EAAK,KAAK,OAAO,EAAE,GACvB,GAAI,CAAC,GAAM,IAAO,KAAO,IAAO;AAAA,EAC5B,MAAO,GACX,GAAI,IAAO,KACP,OAAO,KAAK,OAAO,EAAI,KAAO;AAAA,EAClC,MAAO,GAEX,MAAM,CAAC,EAAG,CACN,OAAO,KAAK,OAAO,KAAK,IAAM,GAElC,cAAc,CAAC,EAAQ,CACnB,IAAI,EAAK,KAAK,OAAO,GACrB,GAAI,KAAK,WAAa,EAAG,CACrB,IAAI,EAAS,EACb,MAAO,IAAO,IACV,EAAK,KAAK,OAAO,EAAE,EAAS,GAChC,GAAI,IAAO,KAAM,CACb,IAAM,EAAO,KAAK,OAAO,EAAS,EAAS,GAC3C,GAAI,IAAS;AAAA,GAAS,CAAC,GAAQ,CAAC,KAAK,MACjC,OAAO,EAAS,EAAS,EAEjC,OAAO,IAAO;AAAA,GAAQ,GAAU,KAAK,YAAe,CAAC,GAAM,CAAC,KAAK,MAC3D,EAAS,EACT,GAEV,GAAI,IAAO,KAAO,IAAO,IAAK,CAC1B,IAAM,EAAK,KAAK,OAAO,OAAO,EAAQ,CAAC,EACvC,IAAK,IAAO,OAAS,IAAO,QAAU,EAAQ,KAAK,OAAO,EAAS,EAAE,EACjE,MAAO,GAEf,OAAO,EAEX,OAAO,EAAG,CACN,IAAI,EAAM,KAAK,WACf,GAAI,OAAO,IAAQ,UAAa,IAAQ,IAAM,EAAM,KAAK,IACrD,EAAM,KAAK,OAAO,QAAQ;AAAA,EAAM,KAAK,GAAG,EACxC,KAAK,WAAa,EAEtB,GAAI,IAAQ,GACR,OAAO,KAAK,MAAQ,KAAK,OAAO,UAAU,KAAK,GAAG,EAAI,KAC1D,GAAI,KAAK,OAAO,EAAM,KAAO,KACzB,GAAO,EACX,OAAO,KAAK,OAAO,UAAU,KAAK,IAAK,CAAG,EAE9C,QAAQ,CAAC,EAAG,CACR,OAAO,KAAK,IAAM,GAAK,KAAK,OAAO,OAEvC,OAAO,CAAC,EAAO,CAKX,OAJA,KAAK,OAAS,KAAK,OAAO,UAAU,KAAK,GAAG,EAC5C,KAAK,IAAM,EACX,KAAK,WAAa,KAClB,KAAK,KAAO,EACL,KAEX,IAAI,CAAC,EAAG,CACJ,OAAO,KAAK,OAAO,OAAO,KAAK,IAAK,CAAC,GAExC,SAAS,CAAC,EAAM,CACb,OAAQ,OACC,SACD,OAAO,MAAO,KAAK,YAAY,MAC9B,aACD,OAAO,MAAO,KAAK,eAAe,MACjC,cACD,OAAO,MAAO,KAAK,gBAAgB,MAClC,MACD,OAAO,MAAO,KAAK,cAAc,MAChC,OACD,OAAO,MAAO,KAAK,oBAAoB,MACtC,gBACD,OAAO,MAAO,KAAK,kBAAkB,MACpC,eACD,OAAO,MAAO,KAAK,iBAAiB,MACnC,eACD,OAAO,MAAO,KAAK,iBAAiB,IAG/C,WAAW,EAAG,CACX,IAAI,EAAO,KAAK,QAAQ,EACxB,GAAI,IAAS,KACT,OAAO,KAAK,QAAQ,QAAQ,EAChC,GAAI,EAAK,KAAO,GAAI,IAChB,MAAO,KAAK,UAAU,CAAC,EACvB,EAAO,EAAK,UAAU,CAAC,EAE3B,GAAI,EAAK,KAAO,IAAK,CACjB,IAAI,EAAS,EAAK,OACd,EAAK,EAAK,QAAQ,GAAG,EACzB,MAAO,IAAO,GAAI,CACd,IAAM,EAAK,EAAK,EAAK,GACrB,GAAI,IAAO,KAAO,IAAO,KAAM,CAC3B,EAAS,EAAK,EACd,MAGA,OAAK,EAAK,QAAQ,IAAK,EAAK,CAAC,EAGrC,MAAO,GAAM,CACT,IAAM,EAAK,EAAK,EAAS,GACzB,GAAI,IAAO,KAAO,IAAO,KACrB,GAAU,EAEV,WAER,IAAM,GAAK,MAAO,KAAK,UAAU,CAAM,IAAM,MAAO,KAAK,WAAW,EAAI,GAGxE,OAFA,MAAO,KAAK,UAAU,EAAK,OAAS,CAAC,EACrC,KAAK,YAAY,EACV,SAEX,GAAI,KAAK,UAAU,EAAG,CAClB,IAAM,EAAK,MAAO,KAAK,WAAW,EAAI,EAGtC,OAFA,MAAO,KAAK,UAAU,EAAK,OAAS,CAAE,EACtC,MAAO,KAAK,YAAY,EACjB,SAGX,OADA,MAAM,GAAI,SACH,MAAO,KAAK,eAAe,GAErC,cAAc,EAAG,CACd,IAAM,EAAK,KAAK,OAAO,CAAC,EACxB,GAAI,CAAC,GAAM,CAAC,KAAK,MACb,OAAO,KAAK,QAAQ,YAAY,EACpC,GAAI,IAAO,KAAO,IAAO,IAAK,CAC1B,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,SAAS,CAAC,EAC/B,OAAO,KAAK,QAAQ,YAAY,EACpC,IAAM,EAAI,KAAK,KAAK,CAAC,EACrB,IAAK,IAAM,OAAS,IAAM,QAAU,EAAQ,KAAK,OAAO,CAAC,CAAC,EAItD,OAHA,MAAO,KAAK,UAAU,CAAC,EACvB,KAAK,YAAc,EACnB,KAAK,WAAa,EACX,IAAM,MAAQ,MAAQ,SAIrC,GADA,KAAK,YAAc,MAAO,KAAK,WAAW,EAAK,EAC3C,KAAK,WAAa,KAAK,aAAe,CAAC,EAAQ,KAAK,OAAO,CAAC,CAAC,EAC7D,KAAK,WAAa,KAAK,YAC3B,OAAO,MAAO,KAAK,gBAAgB,GAEtC,eAAe,EAAG,CACf,IAAO,EAAK,GAAO,KAAK,KAAK,CAAC,EAC9B,GAAI,CAAC,GAAO,CAAC,KAAK,MACd,OAAO,KAAK,QAAQ,aAAa,EACrC,IAAK,IAAQ,KAAO,IAAQ,KAAO,IAAQ,MAAQ,EAAQ,CAAG,EAAG,CAC7D,IAAM,GAAK,MAAO,KAAK,UAAU,CAAC,IAAM,MAAO,KAAK,WAAW,EAAI,GAGnE,OAFA,KAAK,WAAa,KAAK,YAAc,EACrC,KAAK,aAAe,EACb,MAAO,KAAK,gBAAgB,EAEvC,MAAO,OAEV,aAAa,EAAG,CACb,MAAO,KAAK,WAAW,EAAI,EAC3B,IAAM,EAAO,KAAK,QAAQ,EAC1B,GAAI,IAAS,KACT,OAAO,KAAK,QAAQ,KAAK,EAC7B,IAAI,EAAI,MAAO,KAAK,eAAe,EACnC,OAAQ,EAAK,QACJ,IACD,MAAO,KAAK,UAAU,EAAK,OAAS,CAAC,MAEpC,QAED,OADA,MAAO,KAAK,YAAY,EACjB,MAAO,KAAK,eAAe,MACjC,QACA,IAID,OAHA,MAAO,KAAK,UAAU,CAAC,EACvB,KAAK,QAAU,GACf,KAAK,UAAY,EACV,WACN,QACA,IAGD,OADA,MAAO,KAAK,UAAU,CAAC,EAChB,UACN,IAED,OADA,MAAO,KAAK,UAAU,EAAe,EAC9B,UACN,QACA,IACD,OAAO,MAAO,KAAK,kBAAkB,MACpC,QACA,IAKD,OAJA,GAAK,MAAO,KAAK,uBAAuB,EACxC,GAAK,MAAO,KAAK,WAAW,EAAI,EAChC,MAAO,KAAK,UAAU,EAAK,OAAS,CAAC,EACrC,MAAO,KAAK,YAAY,EACjB,MAAO,KAAK,iBAAiB,UAEpC,OAAO,MAAO,KAAK,iBAAiB,IAG/C,mBAAmB,EAAG,CACnB,IAAI,EAAI,EACJ,EAAS,GACb,EAAG,CAEC,GADA,EAAK,MAAO,KAAK,YAAY,EACzB,EAAK,EACL,EAAK,MAAO,KAAK,WAAW,EAAK,EACjC,KAAK,YAAc,EAAS,EAG5B,OAAK,EAET,GAAM,MAAO,KAAK,WAAW,EAAI,QAC5B,EAAK,EAAK,GACnB,IAAM,EAAO,KAAK,QAAQ,EAC1B,GAAI,IAAS,KACT,OAAO,KAAK,QAAQ,MAAM,EAC9B,GAAK,IAAW,IAAM,EAAS,KAAK,YAAc,EAAK,KAAO,KACzD,IAAW,IACP,EAAK,WAAW,KAAK,GAAK,EAAK,WAAW,KAAK,IAChD,EAAQ,EAAK,EAAE,GAOnB,GAAI,EAHoB,IAAW,KAAK,WAAa,GACjD,KAAK,YAAc,IAClB,EAAK,KAAO,KAAO,EAAK,KAAO,MAKhC,OAFA,KAAK,UAAY,EACjB,MAAM,GAAI,SACH,MAAO,KAAK,eAAe,EAG1C,IAAI,EAAI,EACR,MAAO,EAAK,KAAO,IACf,GAAK,MAAO,KAAK,UAAU,CAAC,EAC5B,GAAK,MAAO,KAAK,WAAW,EAAI,EAChC,KAAK,QAAU,GAGnB,OADA,GAAK,MAAO,KAAK,eAAe,EACxB,EAAK,QACJ,QACD,MAAO,WACN,IAED,OADA,MAAO,KAAK,UAAU,EAAK,OAAS,CAAC,EAC9B,WACN,QACA,IAID,OAHA,MAAO,KAAK,UAAU,CAAC,EACvB,KAAK,QAAU,GACf,KAAK,WAAa,EACX,WACN,QACA,IAID,OAHA,MAAO,KAAK,UAAU,CAAC,EACvB,KAAK,QAAU,GACf,KAAK,WAAa,EACX,KAAK,UAAY,OAAS,UAChC,IAED,OADA,MAAO,KAAK,UAAU,EAAe,EAC9B,WACN,QACA,IAED,OADA,KAAK,QAAU,GACR,MAAO,KAAK,kBAAkB,MACpC,IAAK,CACN,IAAM,EAAO,KAAK,OAAO,CAAC,EAC1B,GAAI,KAAK,SAAW,EAAQ,CAAI,GAAK,IAAS,IAI1C,OAHA,KAAK,QAAU,GACf,MAAO,KAAK,UAAU,CAAC,EACvB,MAAO,KAAK,WAAW,EAAI,EACpB,MAEf,SAII,OADA,KAAK,QAAU,GACR,MAAO,KAAK,iBAAiB,IAG/C,iBAAiB,EAAG,CACjB,IAAM,EAAQ,KAAK,OAAO,CAAC,EACvB,EAAM,KAAK,OAAO,QAAQ,EAAO,KAAK,IAAM,CAAC,EACjD,GAAI,IAAU,IACV,MAAO,IAAQ,IAAM,KAAK,OAAO,EAAM,KAAO,IAC1C,EAAM,KAAK,OAAO,QAAQ,IAAK,EAAM,CAAC,EAI1C,WAAO,IAAQ,GAAI,CACf,IAAI,EAAI,EACR,MAAO,KAAK,OAAO,EAAM,EAAI,KAAO,KAChC,GAAK,EACT,GAAI,EAAI,IAAM,EACV,MACJ,EAAM,KAAK,OAAO,QAAQ,IAAK,EAAM,CAAC,EAI9C,IAAM,EAAK,KAAK,OAAO,UAAU,EAAG,CAAG,EACnC,EAAK,EAAG,QAAQ;AAAA,EAAM,KAAK,GAAG,EAClC,GAAI,IAAO,GAAI,CACX,MAAO,IAAO,GAAI,CACd,IAAM,EAAK,KAAK,eAAe,EAAK,CAAC,EACrC,GAAI,IAAO,GACP,MACJ,EAAK,EAAG,QAAQ;AAAA,EAAM,CAAE,EAE5B,GAAI,IAAO,GAEP,EAAM,GAAM,EAAG,EAAK,KAAO,KAAO,EAAI,GAG9C,GAAI,IAAQ,GAAI,CACZ,GAAI,CAAC,KAAK,MACN,OAAO,KAAK,QAAQ,eAAe,EACvC,EAAM,KAAK,OAAO,OAGtB,OADA,MAAO,KAAK,YAAY,EAAM,EAAG,EAAK,EAC/B,KAAK,UAAY,OAAS,OAEpC,sBAAsB,EAAG,CACtB,KAAK,kBAAoB,GACzB,KAAK,gBAAkB,GACvB,IAAI,EAAI,KAAK,IACb,MAAO,GAAM,CACT,IAAM,EAAK,KAAK,OAAO,EAAE,GACzB,GAAI,IAAO,IACP,KAAK,gBAAkB,GACtB,QAAI,EAAK,KAAO,GAAM,IACvB,KAAK,kBAAoB,OAAO,CAAE,EAAI,EACrC,QAAI,IAAO,IACZ,MAER,OAAO,MAAO,KAAK,UAAU,KAAM,EAAQ,CAAE,GAAK,IAAO,GAAG,GAE/D,gBAAgB,EAAG,CAChB,IAAI,EAAK,KAAK,IAAM,EAChB,EAAS,EACT,EACJ,EAAM,QAAS,EAAI,KAAK,IAAM,EAAK,KAAK,OAAO,GAAK,EAAE,EAClD,OAAQ,OACC,IACD,GAAU,EACV,UACC;AAAA,EACD,EAAK,EACL,EAAS,EACT,UACC,KAAM,CACP,IAAM,EAAO,KAAK,OAAO,EAAI,GAC7B,GAAI,CAAC,GAAQ,CAAC,KAAK,MACf,OAAO,KAAK,QAAQ,cAAc,EACtC,GAAI,IAAS;AAAA,EACT,KACR,SAEI,QAGZ,GAAI,CAAC,GAAM,CAAC,KAAK,MACb,OAAO,KAAK,QAAQ,cAAc,EACtC,GAAI,GAAU,KAAK,WAAY,CAC3B,GAAI,KAAK,oBAAsB,GAC3B,KAAK,WAAa,EAElB,UAAK,WACD,KAAK,mBAAqB,KAAK,aAAe,EAAI,EAAI,KAAK,YAEnE,EAAG,CACC,IAAM,EAAK,KAAK,eAAe,EAAK,CAAC,EACrC,GAAI,IAAO,GACP,MACJ,EAAK,KAAK,OAAO,QAAQ;AAAA,EAAM,CAAE,QAC5B,IAAO,IAChB,GAAI,IAAO,GAAI,CACX,GAAI,CAAC,KAAK,MACN,OAAO,KAAK,QAAQ,cAAc,EACtC,EAAK,KAAK,OAAO,QAKzB,IAAI,EAAI,EAAK,EACb,EAAK,KAAK,OAAO,GACjB,MAAO,IAAO,IACV,EAAK,KAAK,OAAO,EAAE,GACvB,GAAI,IAAO,KAAM,CACb,MAAO,IAAO,MAAQ,IAAO,KAAO,IAAO,MAAQ,IAAO;AAAA,EACtD,EAAK,KAAK,OAAO,EAAE,GACvB,EAAK,EAAI,EAER,QAAI,CAAC,KAAK,gBACX,EAAG,CACC,IAAI,EAAI,EAAK,EACT,EAAK,KAAK,OAAO,GACrB,GAAI,IAAO,KACP,EAAK,KAAK,OAAO,EAAE,GACvB,IAAM,EAAW,EACjB,MAAO,IAAO,IACV,EAAK,KAAK,OAAO,EAAE,GACvB,GAAI,IAAO;AAAA,GAAQ,GAAK,KAAK,KAAO,EAAI,EAAI,EAAS,EACjD,EAAK,EAEL,iBACC,IAIb,OAFA,MAAM,GAAI,OACV,MAAO,KAAK,YAAY,EAAK,EAAG,EAAI,EAC7B,MAAO,KAAK,eAAe,GAErC,gBAAgB,EAAG,CAChB,IAAM,EAAS,KAAK,UAAY,EAC5B,EAAM,KAAK,IAAM,EACjB,EAAI,KAAK,IAAM,EACf,EACJ,MAAQ,EAAK,KAAK,OAAO,EAAE,GACvB,GAAI,IAAO,IAAK,CACZ,IAAM,EAAO,KAAK,OAAO,EAAI,GAC7B,GAAI,EAAQ,CAAI,GAAM,GAAU,GAAmB,IAAI,CAAI,EACvD,MACJ,EAAM,EAEL,QAAI,EAAQ,CAAE,EAAG,CAClB,IAAI,EAAO,KAAK,OAAO,EAAI,GAC3B,GAAI,IAAO,KACP,GAAI,IAAS;AAAA,EACT,GAAK,EACL,EAAK;AAAA,EACL,EAAO,KAAK,OAAO,EAAI,GAGvB,OAAM,EAEd,GAAI,IAAS,KAAQ,GAAU,GAAmB,IAAI,CAAI,EACtD,MACJ,GAAI,IAAO;AAAA,EAAM,CACb,IAAM,EAAK,KAAK,eAAe,EAAI,CAAC,EACpC,GAAI,IAAO,GACP,MACJ,EAAI,KAAK,IAAI,EAAG,EAAK,CAAC,GAGzB,KACD,GAAI,GAAU,GAAmB,IAAI,CAAE,EACnC,MACJ,EAAM,EAGd,GAAI,CAAC,GAAM,CAAC,KAAK,MACb,OAAO,KAAK,QAAQ,cAAc,EAGtC,OAFA,MAAM,GAAI,OACV,MAAO,KAAK,YAAY,EAAM,EAAG,EAAI,EAC9B,EAAS,OAAS,OAE5B,SAAS,CAAC,EAAG,CACV,GAAI,EAAI,EAGJ,OAFA,MAAM,KAAK,OAAO,OAAO,KAAK,IAAK,CAAC,EACpC,KAAK,KAAO,EACL,EAEX,MAAO,IAEV,WAAW,CAAC,EAAG,EAAY,CACxB,IAAM,EAAI,KAAK,OAAO,MAAM,KAAK,IAAK,CAAC,EACvC,GAAI,EAGA,OAFA,MAAM,EACN,KAAK,KAAO,EAAE,OACP,EAAE,OAER,QAAI,EACL,KAAM,GACV,MAAO,IAEV,cAAc,EAAG,CACd,OAAQ,KAAK,OAAO,CAAC,OACZ,IACD,OAAS,MAAO,KAAK,QAAQ,IACxB,MAAO,KAAK,WAAW,EAAI,IAC3B,MAAO,KAAK,eAAe,OAC/B,IACD,OAAS,MAAO,KAAK,UAAU,EAAe,IACzC,MAAO,KAAK,WAAW,EAAI,IAC3B,MAAO,KAAK,eAAe,OAC/B,QACA,QACA,IAAK,CACN,IAAM,EAAS,KAAK,UAAY,EAC1B,EAAM,KAAK,OAAO,CAAC,EACzB,GAAI,EAAQ,CAAG,GAAM,GAAU,GAAmB,IAAI,CAAG,EAAI,CACzD,GAAI,CAAC,EACD,KAAK,WAAa,KAAK,YAAc,EACpC,QAAI,KAAK,QACV,KAAK,QAAU,GACnB,OAAS,MAAO,KAAK,UAAU,CAAC,IAC3B,MAAO,KAAK,WAAW,EAAI,IAC3B,MAAO,KAAK,eAAe,GAExC,EAEJ,MAAO,IAEV,OAAO,EAAG,CACP,GAAI,KAAK,OAAO,CAAC,IAAM,IAAK,CACxB,IAAI,EAAI,KAAK,IAAM,EACf,EAAK,KAAK,OAAO,GACrB,MAAO,CAAC,EAAQ,CAAE,GAAK,IAAO,IAC1B,EAAK,KAAK,OAAO,EAAE,GACvB,OAAO,MAAO,KAAK,YAAY,IAAO,IAAM,EAAI,EAAI,EAAG,EAAK,EAE3D,KACD,IAAI,EAAI,KAAK,IAAM,EACf,EAAK,KAAK,OAAO,GACrB,MAAO,EACH,GAAI,GAAS,IAAI,CAAE,EACf,EAAK,KAAK,OAAO,EAAE,GAClB,QAAI,IAAO,KACZ,GAAU,IAAI,KAAK,OAAO,EAAI,EAAE,GAChC,GAAU,IAAI,KAAK,OAAO,EAAI,EAAE,EAChC,EAAK,KAAK,OAAQ,GAAK,GAGvB,WAER,OAAO,MAAO,KAAK,YAAY,EAAG,EAAK,IAG9C,WAAW,EAAG,CACX,IAAM,EAAK,KAAK,OAAO,KAAK,KAC5B,GAAI,IAAO;AAAA,EACP,OAAO,MAAO,KAAK,UAAU,CAAC,EAC7B,QAAI,IAAO,MAAQ,KAAK,OAAO,CAAC,IAAM;AAAA,EACvC,OAAO,MAAO,KAAK,UAAU,CAAC,EAE9B,WAAO,IAEd,UAAU,CAAC,EAAW,CACnB,IAAI,EAAI,KAAK,IAAM,EACf,EACJ,GACI,EAAK,KAAK,OAAO,EAAE,SACd,IAAO,KAAQ,GAAa,IAAO,MAC5C,IAAM,EAAI,EAAI,KAAK,IACnB,GAAI,EAAI,EACJ,MAAM,KAAK,OAAO,OAAO,KAAK,IAAK,CAAC,EACpC,KAAK,IAAM,EAEf,OAAO,GAEV,SAAS,CAAC,EAAM,CACb,IAAI,EAAI,KAAK,IACT,EAAK,KAAK,OAAO,GACrB,MAAO,CAAC,EAAK,CAAE,EACX,EAAK,KAAK,OAAO,EAAE,GACvB,OAAO,MAAO,KAAK,YAAY,EAAG,EAAK,EAE/C,CAEQ,SAAQ,qBCvsBhB,MAAM,EAAY,CACd,WAAW,EAAG,CACV,KAAK,WAAa,CAAC,EAKnB,KAAK,WAAa,CAAC,IAAW,KAAK,WAAW,KAAK,CAAM,EAMzD,KAAK,QAAU,CAAC,IAAW,CACvB,IAAI,EAAM,EACN,EAAO,KAAK,WAAW,OAC3B,MAAO,EAAM,EAAM,CACf,IAAM,EAAO,EAAM,GAAS,EAC5B,GAAI,KAAK,WAAW,GAAO,EACvB,EAAM,EAAM,EAEZ,OAAO,EAEf,GAAI,KAAK,WAAW,KAAS,EACzB,MAAO,CAAE,KAAM,EAAM,EAAG,IAAK,CAAE,EACnC,GAAI,IAAQ,EACR,MAAO,CAAE,KAAM,EAAG,IAAK,CAAO,EAClC,IAAM,EAAQ,KAAK,WAAW,EAAM,GACpC,MAAO,CAAE,KAAM,EAAK,IAAK,EAAS,EAAQ,CAAE,GAGxD,CAEQ,eAAc,qBCtCtB,IAAI,iBACA,QACA,QAEJ,SAAS,EAAa,CAAC,EAAM,EAAM,CAC/B,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC/B,GAAI,EAAK,GAAG,OAAS,EACjB,MAAO,GACf,MAAO,GAEX,SAAS,EAAiB,CAAC,EAAM,CAC7B,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC/B,OAAQ,EAAK,GAAG,UACP,YACA,cACA,UACD,cAEA,OAAO,EAGnB,MAAO,GAEX,SAAS,EAAW,CAAC,EAAO,CACxB,OAAQ,GAAO,UACN,YACA,aACA,2BACA,2BACA,kBACD,MAAO,WAEP,MAAO,IAGnB,SAAS,EAAY,CAAC,EAAQ,CAC1B,OAAQ,EAAO,UACN,WACD,OAAO,EAAO,UACb,YAAa,CACd,IAAM,EAAK,EAAO,MAAM,EAAO,MAAM,OAAS,GAC9C,OAAO,EAAG,KAAO,EAAG,KACxB,KACK,YACD,OAAO,EAAO,MAAM,EAAO,MAAM,OAAS,GAAG,cAG7C,MAAO,CAAC,GAIpB,SAAS,EAAqB,CAAC,EAAM,CACjC,GAAI,EAAK,SAAW,EAChB,MAAO,CAAC,EACZ,IAAI,EAAI,EAAK,OACb,EAAM,MAAO,EAAE,GAAK,EAChB,OAAQ,EAAK,GAAG,UACP,gBACA,uBACA,oBACA,mBACA,UACD,QAGZ,MAAO,EAAK,EAAE,IAAI,OAAS,QAAS,CAGpC,OAAO,EAAK,OAAO,EAAG,EAAK,MAAM,EAErC,SAAS,EAAe,CAAC,EAAI,CACzB,GAAI,EAAG,MAAM,OAAS,kBAClB,QAAW,KAAM,EAAG,MAChB,GAAI,EAAG,KACH,CAAC,EAAG,OACJ,CAAC,GAAc,EAAG,MAAO,kBAAkB,GAC3C,CAAC,GAAc,EAAG,IAAK,eAAe,EAAG,CACzC,GAAI,EAAG,IACH,EAAG,MAAQ,EAAG,IAElB,GADA,OAAO,EAAG,IACN,GAAY,EAAG,KAAK,EACpB,GAAI,EAAG,MAAM,IACT,MAAM,UAAU,KAAK,MAAM,EAAG,MAAM,IAAK,EAAG,GAAG,EAE/C,OAAG,MAAM,IAAM,EAAG,IAGtB,WAAM,UAAU,KAAK,MAAM,EAAG,MAAO,EAAG,GAAG,EAC/C,OAAO,EAAG,MAgC1B,MAAM,EAAO,CAKT,WAAW,CAAC,EAAW,CAEnB,KAAK,UAAY,GAEjB,KAAK,SAAW,GAEhB,KAAK,OAAS,EAEd,KAAK,OAAS,EAEd,KAAK,UAAY,GAEjB,KAAK,MAAQ,CAAC,EAEd,KAAK,OAAS,GAEd,KAAK,KAAO,GAEZ,KAAK,MAAQ,IAAI,GAAM,MACvB,KAAK,UAAY,GAUpB,KAAK,CAAC,EAAQ,EAAa,GAAO,CAC/B,GAAI,KAAK,WAAa,KAAK,SAAW,EAClC,KAAK,UAAU,CAAC,EACpB,QAAW,KAAU,KAAK,MAAM,IAAI,EAAQ,CAAU,EAClD,MAAO,KAAK,KAAK,CAAM,EAC3B,GAAI,CAAC,EACD,MAAO,KAAK,IAAI,GAKvB,IAAI,CAAC,EAAQ,CAEV,GADA,KAAK,OAAS,EACV,GAAa,IAAI,WACjB,QAAQ,IAAI,IAAK,GAAI,YAAY,CAAM,CAAC,EAC5C,GAAI,KAAK,SAAU,CACf,KAAK,SAAW,GAChB,MAAO,KAAK,KAAK,EACjB,KAAK,QAAU,EAAO,OACtB,OAEJ,IAAM,EAAO,GAAI,UAAU,CAAM,EACjC,GAAI,CAAC,EAAM,CACP,IAAM,EAAU,qBAAqB,IACrC,MAAO,KAAK,IAAI,CAAE,KAAM,QAAS,OAAQ,KAAK,OAAQ,UAAS,QAAO,CAAC,EACvE,KAAK,QAAU,EAAO,OAErB,QAAI,IAAS,SACd,KAAK,UAAY,GACjB,KAAK,SAAW,GAChB,KAAK,KAAO,SAEX,KAGD,OAFA,KAAK,KAAO,EACZ,MAAO,KAAK,KAAK,EACT,OACC,UAGD,GAFA,KAAK,UAAY,GACjB,KAAK,OAAS,EACV,KAAK,UACL,KAAK,UAAU,KAAK,OAAS,EAAO,MAAM,EAC9C,UACC,QACD,GAAI,KAAK,WAAa,EAAO,KAAO,IAChC,KAAK,QAAU,EAAO,OAC1B,UACC,uBACA,oBACA,eACD,GAAI,KAAK,UACL,KAAK,QAAU,EAAO,OAC1B,UACC,eACA,iBACD,eAEA,KAAK,UAAY,GAEzB,KAAK,QAAU,EAAO,SAI7B,GAAG,EAAG,CACH,MAAO,KAAK,MAAM,OAAS,EACvB,MAAO,KAAK,IAAI,KAEpB,YAAW,EAAG,CAOd,MANW,CACP,KAAM,KAAK,KACX,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,OAAQ,KAAK,MACjB,GAGH,IAAI,EAAG,CACJ,IAAM,EAAM,KAAK,KAAK,CAAC,EACvB,GAAI,KAAK,OAAS,WAAa,GAAK,OAAS,UAAW,CACpD,MAAO,KAAK,MAAM,OAAS,EACvB,MAAO,KAAK,IAAI,EACpB,KAAK,MAAM,KAAK,CACZ,KAAM,UACN,OAAQ,KAAK,OACb,OAAQ,KAAK,MACjB,CAAC,EACD,OAEJ,GAAI,CAAC,EACD,OAAO,MAAO,KAAK,OAAO,EAC9B,OAAQ,EAAI,UACH,WACD,OAAO,MAAO,KAAK,SAAS,CAAG,MAC9B,YACA,aACA,2BACA,uBACD,OAAO,MAAO,KAAK,OAAO,CAAG,MAC5B,eACD,OAAO,MAAO,KAAK,YAAY,CAAG,MACjC,YACD,OAAO,MAAO,KAAK,SAAS,CAAG,MAC9B,YACD,OAAO,MAAO,KAAK,cAAc,CAAG,MACnC,kBACD,OAAO,MAAO,KAAK,eAAe,CAAG,MACpC,UACD,OAAO,MAAO,KAAK,YAAY,CAAG,EAG1C,MAAO,KAAK,IAAI,EAEpB,IAAI,CAAC,EAAG,CACJ,OAAO,KAAK,MAAM,KAAK,MAAM,OAAS,IAEzC,GAAG,CAAC,EAAO,CACR,IAAM,EAAQ,GAAS,KAAK,MAAM,IAAI,EAEtC,GAAI,CAAC,EAED,KAAM,CAAE,KAAM,QAAS,OAAQ,KAAK,OAAQ,OAAQ,GAAI,QADxC,6BACgD,EAE/D,QAAI,KAAK,MAAM,SAAW,EAC3B,MAAM,EAEL,KACD,IAAM,EAAM,KAAK,KAAK,CAAC,EACvB,GAAI,EAAM,OAAS,eAEf,EAAM,OAAS,WAAY,EAAM,EAAI,OAAS,EAE7C,QAAI,EAAM,OAAS,mBAAqB,EAAI,OAAS,WAEtD,EAAM,OAAS,EAEnB,GAAI,EAAM,OAAS,kBACf,GAAgB,CAAK,EACzB,OAAQ,EAAI,UACH,WACD,EAAI,MAAQ,EACZ,UACC,eACD,EAAI,MAAM,KAAK,CAAK,EACpB,UACC,YAAa,CACd,IAAM,EAAK,EAAI,MAAM,EAAI,MAAM,OAAS,GACxC,GAAI,EAAG,MAAO,CACV,EAAI,MAAM,KAAK,CAAE,MAAO,CAAC,EAAG,IAAK,EAAO,IAAK,CAAC,CAAE,CAAC,EACjD,KAAK,UAAY,GACjB,OAEC,QAAI,EAAG,IACR,EAAG,MAAQ,EAEV,KACD,OAAO,OAAO,EAAI,CAAE,IAAK,EAAO,IAAK,CAAC,CAAE,CAAC,EACzC,KAAK,UAAY,CAAC,EAAG,YACrB,OAEJ,KACJ,KACK,YAAa,CACd,IAAM,EAAK,EAAI,MAAM,EAAI,MAAM,OAAS,GACxC,GAAI,EAAG,MACH,EAAI,MAAM,KAAK,CAAE,MAAO,CAAC,EAAG,MAAO,CAAM,CAAC,EAE1C,OAAG,MAAQ,EACf,KACJ,KACK,kBAAmB,CACpB,IAAM,EAAK,EAAI,MAAM,EAAI,MAAM,OAAS,GACxC,GAAI,CAAC,GAAM,EAAG,MACV,EAAI,MAAM,KAAK,CAAE,MAAO,CAAC,EAAG,IAAK,EAAO,IAAK,CAAC,CAAE,CAAC,EAChD,QAAI,EAAG,IACR,EAAG,MAAQ,EAEX,YAAO,OAAO,EAAI,CAAE,IAAK,EAAO,IAAK,CAAC,CAAE,CAAC,EAC7C,MACJ,SAGI,MAAO,KAAK,IAAI,EAChB,MAAO,KAAK,IAAI,CAAK,EAE7B,IAAK,EAAI,OAAS,YACd,EAAI,OAAS,aACb,EAAI,OAAS,eACZ,EAAM,OAAS,aAAe,EAAM,OAAS,aAAc,CAC5D,IAAM,EAAO,EAAM,MAAM,EAAM,MAAM,OAAS,GAC9C,GAAI,GACA,CAAC,EAAK,KACN,CAAC,EAAK,OACN,EAAK,MAAM,OAAS,GACpB,GAAkB,EAAK,KAAK,IAAM,KACjC,EAAM,SAAW,GACd,EAAK,MAAM,MAAM,KAAM,EAAG,OAAS,WAAa,EAAG,OAAS,EAAM,MAAM,GAAI,CAChF,GAAI,EAAI,OAAS,WACb,EAAI,IAAM,EAAK,MAEf,OAAI,MAAM,KAAK,CAAE,MAAO,EAAK,KAAM,CAAC,EACxC,EAAM,MAAM,OAAO,GAAI,CAAC,MAKvC,MAAM,EAAG,CACN,OAAQ,KAAK,UACJ,iBACD,KAAM,CAAE,KAAM,YAAa,OAAQ,KAAK,OAAQ,OAAQ,KAAK,MAAO,EACpE,WACC,sBACA,YACA,cACA,UACD,MAAM,KAAK,YACX,WACC,eACA,YAAa,CACd,IAAM,EAAM,CACR,KAAM,WACN,OAAQ,KAAK,OACb,MAAO,CAAC,CACZ,EACA,GAAI,KAAK,OAAS,YACd,EAAI,MAAM,KAAK,KAAK,WAAW,EACnC,KAAK,MAAM,KAAK,CAAG,EACnB,MACJ,EAEJ,KAAM,CACF,KAAM,QACN,OAAQ,KAAK,OACb,QAAS,cAAc,KAAK,4BAC5B,OAAQ,KAAK,MACjB,GAEH,QAAQ,CAAC,EAAK,CACX,GAAI,EAAI,MACJ,OAAO,MAAO,KAAK,QAAQ,CAAG,EAClC,OAAQ,KAAK,UACJ,YAAa,CACd,GAAI,GAAkB,EAAI,KAAK,IAAM,GACjC,MAAO,KAAK,IAAI,EAChB,MAAO,KAAK,KAAK,EAGjB,OAAI,MAAM,KAAK,KAAK,WAAW,EACnC,MACJ,KACK,aACA,UACA,YACA,cACA,UACD,EAAI,MAAM,KAAK,KAAK,WAAW,EAC/B,OAER,IAAM,EAAK,KAAK,gBAAgB,CAAG,EACnC,GAAI,EACA,KAAK,MAAM,KAAK,CAAE,EAElB,UAAM,CACF,KAAM,QACN,OAAQ,KAAK,OACb,QAAS,cAAc,KAAK,8BAC5B,OAAQ,KAAK,MACjB,GAGP,MAAM,CAAC,EAAQ,CACZ,GAAI,KAAK,OAAS,gBAAiB,CAC/B,IAAM,EAAO,GAAa,KAAK,KAAK,CAAC,CAAC,EAChC,EAAQ,GAAsB,CAAI,EACpC,EACJ,GAAI,EAAO,IACP,EAAM,EAAO,IACb,EAAI,KAAK,KAAK,WAAW,EACzB,OAAO,EAAO,IAGd,OAAM,CAAC,KAAK,WAAW,EAC3B,IAAM,EAAM,CACR,KAAM,YACN,OAAQ,EAAO,OACf,OAAQ,EAAO,OACf,MAAO,CAAC,CAAE,QAAO,IAAK,EAAQ,KAAI,CAAC,CACvC,EACA,KAAK,UAAY,GACjB,KAAK,MAAM,KAAK,MAAM,OAAS,GAAK,EAGpC,WAAO,KAAK,QAAQ,CAAM,GAEjC,WAAW,CAAC,EAAQ,CACjB,OAAQ,KAAK,UACJ,YACA,cACA,UACD,EAAO,MAAM,KAAK,KAAK,WAAW,EAClC,WACC,SAKD,GAJA,EAAO,OAAS,KAAK,OAErB,KAAK,UAAY,GACjB,KAAK,OAAS,EACV,KAAK,UAAW,CAChB,IAAI,EAAK,KAAK,OAAO,QAAQ;AAAA,CAAI,EAAI,EACrC,MAAO,IAAO,EACV,KAAK,UAAU,KAAK,OAAS,CAAE,EAC/B,EAAK,KAAK,OAAO,QAAQ;AAAA,EAAM,CAAE,EAAI,EAG7C,MAAO,KAAK,IAAI,EAChB,cAGA,MAAO,KAAK,IAAI,EAChB,MAAO,KAAK,KAAK,IAG5B,QAAQ,CAAC,EAAK,CACX,IAAM,EAAK,EAAI,MAAM,EAAI,MAAM,OAAS,GAExC,OAAQ,KAAK,UACJ,UAED,GADA,KAAK,UAAY,GACb,EAAG,MAAO,CACV,IAAM,EAAM,QAAS,EAAG,MAAQ,EAAG,MAAM,IAAM,OAE/C,IADa,MAAM,QAAQ,CAAG,EAAI,EAAI,EAAI,OAAS,GAAK,SAC9C,OAAS,UACf,GAAK,KAAK,KAAK,WAAW,EAE1B,OAAI,MAAM,KAAK,CAAE,MAAO,CAAC,KAAK,WAAW,CAAE,CAAC,EAE/C,QAAI,EAAG,IACR,EAAG,IAAI,KAAK,KAAK,WAAW,EAG5B,OAAG,MAAM,KAAK,KAAK,WAAW,EAElC,WACC,YACA,UACD,GAAI,EAAG,MACH,EAAI,MAAM,KAAK,CAAE,MAAO,CAAC,KAAK,WAAW,CAAE,CAAC,EAE3C,QAAI,EAAG,IACR,EAAG,IAAI,KAAK,KAAK,WAAW,EAE3B,KACD,GAAI,KAAK,kBAAkB,EAAG,MAAO,EAAI,MAAM,EAAG,CAE9C,IAAM,EADO,EAAI,MAAM,EAAI,MAAM,OAAS,IACxB,OAAO,IACzB,GAAI,MAAM,QAAQ,CAAG,EAAG,CACpB,MAAM,UAAU,KAAK,MAAM,EAAK,EAAG,KAAK,EACxC,EAAI,KAAK,KAAK,WAAW,EACzB,EAAI,MAAM,IAAI,EACd,QAGR,EAAG,MAAM,KAAK,KAAK,WAAW,EAElC,OAER,GAAI,KAAK,QAAU,EAAI,OAAQ,CAC3B,IAAM,EAAc,CAAC,KAAK,WAAa,KAAK,SAAW,EAAI,OACrD,EAAa,IACd,EAAG,KAAO,EAAG,cACd,KAAK,OAAS,eAEd,EAAQ,CAAC,EACb,GAAI,GAAc,EAAG,KAAO,CAAC,EAAG,MAAO,CACnC,IAAM,EAAK,CAAC,EACZ,QAAS,EAAI,EAAG,EAAI,EAAG,IAAI,OAAQ,EAAE,EAAG,CACpC,IAAM,EAAK,EAAG,IAAI,GAClB,OAAQ,EAAG,UACF,UACD,EAAG,KAAK,CAAC,EACT,UACC,QACD,UACC,UACD,GAAI,EAAG,OAAS,EAAI,OAChB,EAAG,OAAS,EAChB,cAEA,EAAG,OAAS,GAGxB,GAAI,EAAG,QAAU,EACb,EAAQ,EAAG,IAAI,OAAO,EAAG,EAAE,EAEnC,OAAQ,KAAK,UACJ,aACA,MACD,GAAI,GAAc,EAAG,MACjB,EAAM,KAAK,KAAK,WAAW,EAC3B,EAAI,MAAM,KAAK,CAAE,OAAM,CAAC,EACxB,KAAK,UAAY,GAEhB,QAAI,EAAG,IACR,EAAG,IAAI,KAAK,KAAK,WAAW,EAG5B,OAAG,MAAM,KAAK,KAAK,WAAW,EAElC,WACC,mBACD,GAAI,CAAC,EAAG,KAAO,CAAC,EAAG,YACf,EAAG,MAAM,KAAK,KAAK,WAAW,EAC9B,EAAG,YAAc,GAEhB,QAAI,GAAc,EAAG,MACtB,EAAM,KAAK,KAAK,WAAW,EAC3B,EAAI,MAAM,KAAK,CAAE,QAAO,YAAa,EAAK,CAAC,EAG3C,UAAK,MAAM,KAAK,CACZ,KAAM,YACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,CAAC,CAAE,MAAO,CAAC,KAAK,WAAW,EAAG,YAAa,EAAK,CAAC,CAC5D,CAAC,EAEL,KAAK,UAAY,GACjB,WACC,gBACD,GAAI,EAAG,YACH,GAAI,CAAC,EAAG,IACJ,GAAI,GAAc,EAAG,MAAO,SAAS,EACjC,OAAO,OAAO,EAAI,CAAE,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,EAEvD,KACD,IAAM,EAAQ,GAAsB,EAAG,KAAK,EAC5C,KAAK,MAAM,KAAK,CACZ,KAAM,YACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,CAAC,CAAE,QAAO,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,CACzD,CAAC,EAGJ,QAAI,EAAG,MACR,EAAI,MAAM,KAAK,CAAE,MAAO,CAAC,EAAG,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,EAE/D,QAAI,GAAc,EAAG,IAAK,eAAe,EAC1C,KAAK,MAAM,KAAK,CACZ,KAAM,YACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,CAAC,CAAE,QAAO,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,CACzD,CAAC,EAEA,QAAI,GAAY,EAAG,GAAG,GACvB,CAAC,GAAc,EAAG,IAAK,SAAS,EAAG,CACnC,IAAM,EAAQ,GAAsB,EAAG,KAAK,EACtC,EAAM,EAAG,IACT,EAAM,EAAG,IACf,EAAI,KAAK,KAAK,WAAW,EAEzB,OAAO,EAAG,IAEV,OAAO,EAAG,IACV,KAAK,MAAM,KAAK,CACZ,KAAM,YACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,CAAC,CAAE,QAAO,MAAK,KAAI,CAAC,CAC/B,CAAC,EAEA,QAAI,EAAM,OAAS,EAEpB,EAAG,IAAM,EAAG,IAAI,OAAO,EAAO,KAAK,WAAW,EAG9C,OAAG,IAAI,KAAK,KAAK,WAAW,EAIhC,QAAI,CAAC,EAAG,IACJ,OAAO,OAAO,EAAI,CAAE,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,EAEvD,QAAI,EAAG,OAAS,EACjB,EAAI,MAAM,KAAK,CAAE,QAAO,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,EAE3D,QAAI,GAAc,EAAG,IAAK,eAAe,EAC1C,KAAK,MAAM,KAAK,CACZ,KAAM,YACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,CAAC,CAAE,MAAO,CAAC,EAAG,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,CAC7D,CAAC,EAGD,OAAG,IAAI,KAAK,KAAK,WAAW,EAGpC,KAAK,UAAY,GACjB,WACC,YACA,aACA,2BACA,uBAAwB,CACzB,IAAM,EAAK,KAAK,WAAW,KAAK,IAAI,EACpC,GAAI,GAAc,EAAG,MACjB,EAAI,MAAM,KAAK,CAAE,QAAO,IAAK,EAAI,IAAK,CAAC,CAAE,CAAC,EAC1C,KAAK,UAAY,GAEhB,QAAI,EAAG,IACR,KAAK,MAAM,KAAK,CAAE,EAGlB,YAAO,OAAO,EAAI,CAAE,IAAK,EAAI,IAAK,CAAC,CAAE,CAAC,EACtC,KAAK,UAAY,GAErB,MACJ,SACS,CACL,IAAM,EAAK,KAAK,gBAAgB,CAAG,EACnC,GAAI,EAAI,CACJ,GAAI,EAAG,OAAS,aACZ,GAAI,CAAC,EAAG,aACJ,EAAG,KACH,CAAC,GAAc,EAAG,IAAK,SAAS,EAAG,CACnC,MAAO,KAAK,IAAI,CACZ,KAAM,QACN,OAAQ,KAAK,OACb,QAAS,iDACT,OAAQ,KAAK,MACjB,CAAC,EACD,QAGH,QAAI,EACL,EAAI,MAAM,KAAK,CAAE,OAAM,CAAC,EAE5B,KAAK,MAAM,KAAK,CAAE,EAClB,OAER,GAGR,MAAO,KAAK,IAAI,EAChB,MAAO,KAAK,KAAK,GAEpB,aAAa,CAAC,EAAK,CAChB,IAAM,EAAK,EAAI,MAAM,EAAI,MAAM,OAAS,GACxC,OAAQ,KAAK,UACJ,UACD,GAAI,EAAG,MAAO,CACV,IAAM,EAAM,QAAS,EAAG,MAAQ,EAAG,MAAM,IAAM,OAE/C,IADa,MAAM,QAAQ,CAAG,EAAI,EAAI,EAAI,OAAS,GAAK,SAC9C,OAAS,UACf,GAAK,KAAK,KAAK,WAAW,EAE1B,OAAI,MAAM,KAAK,CAAE,MAAO,CAAC,KAAK,WAAW,CAAE,CAAC,EAGhD,OAAG,MAAM,KAAK,KAAK,WAAW,EAClC,WACC,YACA,UACD,GAAI,EAAG,MACH,EAAI,MAAM,KAAK,CAAE,MAAO,CAAC,KAAK,WAAW,CAAE,CAAC,EAC3C,KACD,GAAI,KAAK,kBAAkB,EAAG,MAAO,EAAI,MAAM,EAAG,CAE9C,IAAM,EADO,EAAI,MAAM,EAAI,MAAM,OAAS,IACxB,OAAO,IACzB,GAAI,MAAM,QAAQ,CAAG,EAAG,CACpB,MAAM,UAAU,KAAK,MAAM,EAAK,EAAG,KAAK,EACxC,EAAI,KAAK,KAAK,WAAW,EACzB,EAAI,MAAM,IAAI,EACd,QAGR,EAAG,MAAM,KAAK,KAAK,WAAW,EAElC,WACC,aACA,MACD,GAAI,EAAG,OAAS,KAAK,QAAU,EAAI,OAC/B,MACJ,EAAG,MAAM,KAAK,KAAK,WAAW,EAC9B,WACC,eACD,GAAI,KAAK,SAAW,EAAI,OACpB,MACJ,GAAI,EAAG,OAAS,GAAc,EAAG,MAAO,cAAc,EAClD,EAAI,MAAM,KAAK,CAAE,MAAO,CAAC,KAAK,WAAW,CAAE,CAAC,EAE5C,OAAG,MAAM,KAAK,KAAK,WAAW,EAClC,OAER,GAAI,KAAK,OAAS,EAAI,OAAQ,CAC1B,IAAM,EAAK,KAAK,gBAAgB,CAAG,EACnC,GAAI,EAAI,CACJ,KAAK,MAAM,KAAK,CAAE,EAClB,QAGR,MAAO,KAAK,IAAI,EAChB,MAAO,KAAK,KAAK,GAEpB,cAAc,CAAC,EAAI,CAChB,IAAM,EAAK,EAAG,MAAM,EAAG,MAAM,OAAS,GACtC,GAAI,KAAK,OAAS,iBAAkB,CAChC,IAAI,EACJ,GACI,MAAO,KAAK,IAAI,EAChB,EAAM,KAAK,KAAK,CAAC,QACZ,GAAK,OAAS,mBAEtB,QAAI,EAAG,IAAI,SAAW,EAAG,CAC1B,OAAQ,KAAK,UACJ,YACA,mBACD,GAAI,CAAC,GAAM,EAAG,IACV,EAAG,MAAM,KAAK,CAAE,MAAO,CAAC,KAAK,WAAW,CAAE,CAAC,EAE3C,OAAG,MAAM,KAAK,KAAK,WAAW,EAClC,WACC,gBACD,GAAI,CAAC,GAAM,EAAG,MACV,EAAG,MAAM,KAAK,CAAE,MAAO,CAAC,EAAG,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,EAC9D,QAAI,EAAG,IACR,EAAG,IAAI,KAAK,KAAK,WAAW,EAE5B,YAAO,OAAO,EAAI,CAAE,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,EAC5D,WACC,YACA,cACA,cACA,aACA,MACD,GAAI,CAAC,GAAM,EAAG,MACV,EAAG,MAAM,KAAK,CAAE,MAAO,CAAC,KAAK,WAAW,CAAE,CAAC,EAC1C,QAAI,EAAG,IACR,EAAG,IAAI,KAAK,KAAK,WAAW,EAE5B,OAAG,MAAM,KAAK,KAAK,WAAW,EAClC,WACC,YACA,aACA,2BACA,uBAAwB,CACzB,IAAM,EAAK,KAAK,WAAW,KAAK,IAAI,EACpC,GAAI,CAAC,GAAM,EAAG,MACV,EAAG,MAAM,KAAK,CAAE,MAAO,CAAC,EAAG,IAAK,EAAI,IAAK,CAAC,CAAE,CAAC,EAC5C,QAAI,EAAG,IACR,KAAK,MAAM,KAAK,CAAE,EAElB,YAAO,OAAO,EAAI,CAAE,IAAK,EAAI,IAAK,CAAC,CAAE,CAAC,EAC1C,MACJ,KACK,mBACA,eACD,EAAG,IAAI,KAAK,KAAK,WAAW,EAC5B,OAER,IAAM,EAAK,KAAK,gBAAgB,CAAE,EAElC,GAAI,EACA,KAAK,MAAM,KAAK,CAAE,EAElB,WAAO,KAAK,IAAI,EAChB,MAAO,KAAK,KAAK,EAGpB,KACD,IAAM,EAAS,KAAK,KAAK,CAAC,EAC1B,GAAI,EAAO,OAAS,cACd,KAAK,OAAS,iBAAmB,EAAO,SAAW,EAAG,QACnD,KAAK,OAAS,WACX,CAAC,EAAO,MAAM,EAAO,MAAM,OAAS,GAAG,KAC/C,MAAO,KAAK,IAAI,EAChB,MAAO,KAAK,KAAK,EAEhB,QAAI,KAAK,OAAS,iBACnB,EAAO,OAAS,kBAAmB,CACnC,IAAM,EAAO,GAAa,CAAM,EAC1B,EAAQ,GAAsB,CAAI,EACxC,GAAgB,CAAE,EAClB,IAAM,EAAM,EAAG,IAAI,OAAO,EAAG,EAAG,IAAI,MAAM,EAC1C,EAAI,KAAK,KAAK,WAAW,EACzB,IAAM,EAAM,CACR,KAAM,YACN,OAAQ,EAAG,OACX,OAAQ,EAAG,OACX,MAAO,CAAC,CAAE,QAAO,IAAK,EAAI,KAAI,CAAC,CACnC,EACA,KAAK,UAAY,GACjB,KAAK,MAAM,KAAK,MAAM,OAAS,GAAK,EAGpC,WAAO,KAAK,QAAQ,CAAE,GAIlC,UAAU,CAAC,EAAM,CACb,GAAI,KAAK,UAAW,CAChB,IAAI,EAAK,KAAK,OAAO,QAAQ;AAAA,CAAI,EAAI,EACrC,MAAO,IAAO,EACV,KAAK,UAAU,KAAK,OAAS,CAAE,EAC/B,EAAK,KAAK,OAAO,QAAQ;AAAA,EAAM,CAAE,EAAI,EAG7C,MAAO,CACH,OACA,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,OAAQ,KAAK,MACjB,EAEJ,eAAe,CAAC,EAAQ,CACpB,OAAQ,KAAK,UACJ,YACA,aACA,2BACA,uBACD,OAAO,KAAK,WAAW,KAAK,IAAI,MAC/B,sBACD,MAAO,CACH,KAAM,eACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,CAAC,KAAK,WAAW,EACxB,OAAQ,EACZ,MACC,qBACA,iBACD,MAAO,CACH,KAAM,kBACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,KAAK,YACZ,MAAO,CAAC,EACR,IAAK,CAAC,CACV,MACC,eACD,MAAO,CACH,KAAM,YACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,CAAC,CAAE,MAAO,CAAC,KAAK,WAAW,CAAE,CAAC,CACzC,MACC,mBAAoB,CACrB,KAAK,UAAY,GACjB,IAAM,EAAO,GAAa,CAAM,EAC1B,EAAQ,GAAsB,CAAI,EAExC,OADA,EAAM,KAAK,KAAK,WAAW,EACpB,CACH,KAAM,YACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,CAAC,CAAE,QAAO,YAAa,EAAK,CAAC,CACxC,CACJ,KACK,gBAAiB,CAClB,KAAK,UAAY,GACjB,IAAM,EAAO,GAAa,CAAM,EAC1B,EAAQ,GAAsB,CAAI,EACxC,MAAO,CACH,KAAM,YACN,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,CAAC,CAAE,QAAO,IAAK,KAAM,IAAK,CAAC,KAAK,WAAW,CAAE,CAAC,CACzD,CACJ,EAEJ,OAAO,KAEX,iBAAiB,CAAC,EAAO,EAAQ,CAC7B,GAAI,KAAK,OAAS,UACd,MAAO,GACX,GAAI,KAAK,QAAU,EACf,MAAO,GACX,OAAO,EAAM,MAAM,KAAM,EAAG,OAAS,WAAa,EAAG,OAAS,OAAO,GAExE,WAAW,CAAC,EAAQ,CACjB,GAAI,KAAK,OAAS,WAAY,CAC1B,GAAI,EAAO,IACP,EAAO,IAAI,KAAK,KAAK,WAAW,EAEhC,OAAO,IAAM,CAAC,KAAK,WAAW,EAClC,GAAI,KAAK,OAAS,UACd,MAAO,KAAK,IAAI,IAG3B,OAAO,CAAC,EAAO,CACZ,OAAQ,KAAK,UACJ,YACA,gBACA,cACA,mBACA,mBACA,gBACD,MAAO,KAAK,IAAI,EAChB,MAAO,KAAK,KAAK,EACjB,UACC,UACD,KAAK,UAAY,OAEhB,YACA,kBAGD,GAAI,EAAM,IACN,EAAM,IAAI,KAAK,KAAK,WAAW,EAE/B,OAAM,IAAM,CAAC,KAAK,WAAW,EACjC,GAAI,KAAK,OAAS,UACd,MAAO,KAAK,IAAI,GAGpC,CAEQ,UAAS,qBCz8BjB,IAAI,QACA,QACA,QACA,QACA,OACA,QACA,QAEJ,SAAS,EAAY,CAAC,EAAS,CAC3B,IAAM,EAAe,EAAQ,eAAiB,GAE9C,MAAO,CAAE,YADa,EAAQ,aAAgB,GAAgB,IAAI,GAAY,aAAkB,KAC3D,cAAa,EAWtD,SAAS,EAAiB,CAAC,EAAQ,EAAU,CAAC,EAAG,CAC7C,IAAQ,cAAa,gBAAiB,GAAa,CAAO,EACpD,EAAW,IAAI,GAAO,OAAO,GAAa,UAAU,EACpD,EAAa,IAAI,GAAS,SAAS,CAAO,EAC1C,EAAO,MAAM,KAAK,EAAW,QAAQ,EAAS,MAAM,CAAM,CAAC,CAAC,EAClE,GAAI,GAAgB,EAChB,QAAW,KAAO,EACd,EAAI,OAAO,QAAQ,GAAO,cAAc,EAAQ,CAAW,CAAC,EAC5D,EAAI,SAAS,QAAQ,GAAO,cAAc,EAAQ,CAAW,CAAC,EAEtE,GAAI,EAAK,OAAS,EACd,OAAO,EACX,OAAO,OAAO,OAAO,CAAC,EAAG,CAAE,MAAO,EAAK,EAAG,EAAW,WAAW,CAAC,EAGrE,SAAS,EAAa,CAAC,EAAQ,EAAU,CAAC,EAAG,CACzC,IAAQ,cAAa,gBAAiB,GAAa,CAAO,EACpD,EAAW,IAAI,GAAO,OAAO,GAAa,UAAU,EACpD,EAAa,IAAI,GAAS,SAAS,CAAO,EAE5C,EAAM,KACV,QAAW,KAAQ,EAAW,QAAQ,EAAS,MAAM,CAAM,EAAG,GAAM,EAAO,MAAM,EAC7E,GAAI,CAAC,EACD,EAAM,EACL,QAAI,EAAI,QAAQ,WAAa,SAAU,CACxC,EAAI,OAAO,KAAK,IAAI,GAAO,eAAe,EAAK,MAAM,MAAM,EAAG,CAAC,EAAG,gBAAiB,yEAAyE,CAAC,EAC7J,MAGR,GAAI,GAAgB,EAChB,EAAI,OAAO,QAAQ,GAAO,cAAc,EAAQ,CAAW,CAAC,EAC5D,EAAI,SAAS,QAAQ,GAAO,cAAc,EAAQ,CAAW,CAAC,EAElE,OAAO,EAEX,SAAS,EAAK,CAAC,EAAK,EAAS,EAAS,CAClC,IAAI,EAAW,OACf,GAAI,OAAO,IAAY,WACnB,EAAW,EAEV,QAAI,IAAY,QAAa,GAAW,OAAO,IAAY,SAC5D,EAAU,EAEd,IAAM,EAAM,GAAc,EAAK,CAAO,EACtC,GAAI,CAAC,EACD,OAAO,KAEX,GADA,EAAI,SAAS,QAAQ,KAAW,GAAI,KAAK,EAAI,QAAQ,SAAU,CAAO,CAAC,EACnE,EAAI,OAAO,OAAS,EACpB,GAAI,EAAI,QAAQ,WAAa,SACzB,MAAM,EAAI,OAAO,GAEjB,OAAI,OAAS,CAAC,EAEtB,OAAO,EAAI,KAAK,OAAO,OAAO,CAAE,QAAS,CAAS,EAAG,CAAO,CAAC,EAEjE,SAAS,EAAS,CAAC,EAAO,EAAU,EAAS,CACzC,IAAI,EAAY,KAChB,GAAI,OAAO,IAAa,YAAc,MAAM,QAAQ,CAAQ,EACxD,EAAY,EAEX,QAAI,IAAY,QAAa,EAC9B,EAAU,EAEd,GAAI,OAAO,IAAY,SACnB,EAAU,EAAQ,OACtB,GAAI,OAAO,IAAY,SAAU,CAC7B,IAAM,EAAS,KAAK,MAAM,CAAO,EACjC,EAAU,EAAS,EAAI,OAAY,EAAS,EAAI,CAAE,OAAQ,CAAE,EAAI,CAAE,QAAO,EAE7E,GAAI,IAAU,OAAW,CACrB,IAAQ,iBAAkB,GAAW,GAAY,CAAC,EAClD,GAAI,CAAC,EACD,OAER,GAAI,GAAS,WAAW,CAAK,GAAK,CAAC,EAC/B,OAAO,EAAM,SAAS,CAAO,EACjC,OAAO,IAAI,GAAS,SAAS,EAAO,EAAW,CAAO,EAAE,SAAS,CAAO,EAGpE,SAAQ,GACR,qBAAoB,GACpB,iBAAgB,GAChB,aAAY,KCvGb,IAAM,EAAmB,CAE9B,CAAE,MAAO,EAAG,KAAM,eAAgB,MAAO,OAAQ,YAAa,eAAgB,SAAU,SAAU,EAClG,CAAE,MAAO,EAAG,KAAM,eAAgB,MAAO,OAAQ,YAAa,kBAAmB,SAAU,SAAU,EACrG,CAAE,MAAO,EAAG,KAAM,wBAAyB,MAAO,WAAY,YAAa,mBAAoB,SAAU,SAAU,EAGnH,CAAE,MAAO,EAAG,KAAM,oBAAqB,MAAO,MAAO,YAAa,mBAAoB,SAAU,OAAQ,EACxG,CAAE,MAAO,EAAG,KAAM,qBAAsB,MAAO,OAAQ,YAAa,yBAA0B,SAAU,OAAQ,EAChH,CAAE,MAAO,EAAG,KAAM,oBAAqB,MAAO,MAAO,YAAa,oBAAqB,SAAU,OAAQ,EACzG,CAAE,MAAO,EAAG,KAAM,sBAAuB,MAAO,QAAS,YAAa,oBAAqB,SAAU,OAAQ,EAC7G,CAAE,MAAO,EAAG,KAAM,qBAAsB,MAAO,OAAQ,YAAa,iCAAkC,SAAU,OAAQ,EACxH,CAAE,MAAO,EAAG,KAAM,oBAAqB,MAAO,MAAO,YAAa,kBAAmB,SAAU,OAAQ,EAGvG,CAAE,MAAO,GAAI,KAAM,iBAA0B,UAAW,kBAAmB,MAAO,YAAc,YAAa,kCAAmC,SAAU,UAAW,EACrK,CAAE,MAAO,GAAI,KAAM,sBAA0B,UAAW,YAAmB,MAAO,MAAc,YAAa,gBAAmC,SAAU,UAAW,EACrK,CAAE,MAAO,GAAI,KAAM,mBAAwD,MAAO,aAAc,YAAa,uBAAmC,SAAU,UAAW,EACrK,CAAE,MAAO,GAAI,KAAM,yBAA0B,UAAW,cAAmB,MAAO,QAAc,YAAa,mBAAmC,SAAU,UAAW,EAGrK,CAAE,MAAO,GAAI,KAAM,gBAAwD,MAAO,UAAc,YAAa,oBAAqC,SAAU,SAAU,EACtK,CAAE,MAAO,GAAI,KAAM,iBAA0B,UAAW,YAAmB,MAAO,MAAc,YAAa,kCAAqC,SAAU,SAAU,EACtK,CAAE,MAAO,GAAI,KAAM,gBAAwD,MAAO,UAAc,YAAa,oCAAqC,SAAU,SAAU,EACtK,CAAE,MAAO,GAAI,KAAM,iBAA0B,UAAW,WAAmB,MAAO,WAAc,YAAa,WAAqC,SAAU,SAAU,EACtK,CAAE,MAAO,GAAI,KAAM,mBAAwD,MAAO,aAAc,YAAa,mCAAqC,SAAU,SAAU,EAGtK,CAAE,MAAO,GAAI,KAAM,gBAAiB,MAAO,UAAW,YAAa,mBAAoB,SAAU,WAAY,EAC7G,CAAE,MAAO,GAAI,KAAM,cAAe,MAAO,QAAS,YAAa,aAAc,SAAU,WAAY,EACnG,CAAE,MAAO,GAAI,KAAM,aAAc,MAAO,QAAS,YAAa,QAAS,SAAU,WAAY,EAG7F,CAAE,MAAO,GAAI,KAAM,sBAAwD,MAAO,WAAmB,YAAa,gBAAqB,SAAU,kBAAmB,EACpK,CAAE,MAAO,GAAI,KAAM,wBAA0B,UAAW,oBAAqB,MAAO,kBAAmB,YAAa,kBAAmB,SAAU,kBAAmB,EACpK,CAAE,MAAO,GAAI,KAAM,mBAAoB,MAAO,aAAc,YAAa,0BAA2B,SAAU,kBAAmB,EACjI,CAAE,MAAO,GAAI,KAAM,0BAA2B,MAAO,WAAY,YAAa,qBAAsB,SAAU,kBAAmB,EACjI,CAAE,MAAO,GAAI,KAAM,8BAA+B,MAAO,qBAAsB,YAAa,2BAA4B,SAAU,kBAAmB,EAGrJ,CAAE,MAAO,GAAI,KAAM,cAAe,MAAO,QAAS,YAAa,cAAe,SAAU,gBAAiB,EACzG,CAAE,MAAO,GAAI,KAAM,cAAe,MAAO,QAAS,YAAa,gBAAiB,SAAU,gBAAiB,EAC3G,CAAE,MAAO,GAAI,KAAM,eAAgB,MAAO,SAAU,YAAa,gBAAiB,SAAU,gBAAiB,EAC7G,CAAE,MAAO,GAAI,KAAM,gBAAiB,MAAO,UAAW,YAAa,iBAAkB,SAAU,gBAAiB,EAGhH,CAAE,MAAO,GAAI,KAAM,+BAAgC,MAAO,aAAc,YAAa,mBAAoB,SAAU,gBAAiB,EACpI,CAAE,MAAO,GAAI,KAAM,0BAA2B,MAAO,iBAAkB,YAAa,iBAAkB,SAAU,gBAAiB,EACjI,CAAE,MAAO,GAAI,KAAM,wBAAyB,MAAO,eAAgB,YAAa,qBAAsB,SAAU,gBAAiB,CACnI,EAIa,GAAe,IAAI,IAC9B,EAAM,QAAQ,KAAK,EAAE,UAAY,CAAC,CAAC,EAAE,KAAM,CAAC,EAAG,CAAC,EAAE,UAAW,CAAC,CAAC,EAAI,CAAC,CAAC,EAAE,KAAM,CAAC,CAAC,CAAC,CAClF,EAKa,GAAoD,IAAI,IACnE,EAAM,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,KAAK,CAAC,EAAE,UAAqB,EAAE,IAAI,CAAC,CACzE,EAIa,GAAoD,IAAI,IACnE,EAAM,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,KAAK,CAAC,EAAE,KAAM,EAAE,SAAmB,CAAC,CACzE,EAWO,SAAS,EAAa,CAC3B,EACA,EACS,CACT,IAAM,EAAU,CAAC,IAAuB,CACtC,IAAM,EAAQ,EAAE,MAAM,GAAG,EACrB,EAAe,EACnB,QAAW,KAAQ,EACjB,GAAI,GAAO,OAAO,IAAQ,UAAY,KAAS,EAC7C,EAAO,EAAgC,GAEvC,YAGJ,OAAO,GAEH,EAAU,EAAQ,EAAK,IAAI,EACjC,GAAI,IAAY,OAAY,OAAO,EACnC,GAAI,EAAK,UAAY,OAAO,EAAQ,EAAK,SAAS,EAClD,OAIK,SAAS,EAAe,CAAC,EAAmC,CACjE,OAAO,EAAM,OAAO,KAAK,EAAE,WAAa,CAAQ,EAI3C,IAAM,GAAa,EAAM,OAAO,KAAK,EAAE,OAAS,EAAE,EAG5C,GAAmB,EAGnB,GAAe,IAAI,IAAI,CAClC,6BACA,oBACA,iBACA,OACA,OACA,UACA,MACA,gBACF,CAAC,EAGM,SAAS,EAAa,CAAC,EAAyB,CACrD,GAAI,IAAU,MAAQ,IAAU,QAAa,IAAU,GAAK,MAAO,GACnE,GAAI,OAAO,IAAU,SACnB,OAAO,GAAa,IAAI,EAAM,YAAY,EAAE,KAAK,CAAC,EAEpD,GAAI,MAAM,QAAQ,CAAK,GAAK,EAAM,SAAW,EAAI,MAAO,GACxD,GAAI,OAAO,IAAU,UAAY,OAAO,KAAK,CAAe,EAAE,SAAW,EAAI,MAAO,GACpF,MAAO,GAiBF,IAAM,GAAsD,CAQjE,MAAO,CAAC,EAGR,cAAe,CAAC,UAAW,OAAO,EAMlC,OAAQ,CAAC,UAAW,OAAO,EAM3B,aAAc,CAAC,UAAW,OAAO,EAGjC,IAAK,CAAC,UAAW,QAAS,WAAW,EACrC,QAAS,CAAC,UAAW,QAAS,WAAW,EACzC,IAAK,CAAC,UAAW,QAAS,WAAW,EACrC,KAAM,CAAC,UAAW,QAAS,WAAW,EACtC,KAAM,CAAC,UAAW,QAAS,WAAW,EAMtC,cAAe,CAAC,UAAW,QAAS,WAAW,EAG/C,SAAU,CAAC,UAAW,WAAY,QAAS,WAAW,EACtD,QAAS,CAAC,UAAW,WAAY,QAAS,WAAW,EACrD,OAAQ,CAAC,UAAW,WAAY,QAAS,WAAW,EAGpD,UAAW,CAAC,UAAW,WAAY,QAAS,WAAW,EAGvD,IAAK,CAAC,UAAW,UAAW,QAAS,WAAW,EAChD,QAAS,CAAC,UAAW,UAAW,YAAa,OAAO,EACpD,eAAgB,CAAC,UAAW,UAAW,QAAS,WAAW,EAG3D,UAAW,CAAC,UAAW,WAAY,UAAW,YAAa,OAAO,EAClE,OAAQ,CAAC,UAAW,WAAY,UAAW,YAAa,OAAO,EAC/D,UAAW,CAAC,UAAW,WAAY,UAAW,YAAa,OAAO,EAClE,gBAAiB,CAAC,UAAW,QAAS,mBAAoB,iBAAkB,gBAAgB,EAG5F,OAAQ,CAAC,UAAW,UAAW,YAAa,QAAS,iBAAkB,gBAAgB,EACvF,KAAM,CAAC,UAAW,WAAY,UAAW,YAAa,QAAS,gBAAgB,EAG/E,WAAY,CAAC,UAAW,WAAY,UAAW,YAAa,QAAS,mBAAoB,iBAAkB,gBAAgB,CAC7H,ECrNA,IAAM,GAAM,CAAC,IAAiB,CAAC,IAAc,QAAQ,KAAQ,WAEhD,GAAO,GAAI,GAAG,EACd,GAAM,GAAI,GAAG,EACb,GAAS,GAAI,GAAG,EAKhB,GAAU,CACrB,KAAM,UACN,SAAU,UACV,OAAQ,SACV,EAEa,GAAU,CAAC,IAAc,uBAAuB,WAChD,GAAc,CAAC,IAAc,wBAAwB,WACrD,GAAS,CAAC,IAAc,iBAAiB,WCH/C,IAAM,EAAoB,CAC/B,CAAE,KAAM,SAAU,UAAW,GAAG,GAAO,GAAE,KAAK,GAAO,QAAQ,IAAK,UAAW,GAAI,EACjF,CAAE,KAAM,OAAU,UAAW,GAAG,GAAO,GAAK,GAAE,CAAC,KAAK,GAAO,MAAM,IAAQ,UAAW,EAAG,EACvF,CAAE,KAAM,SAAU,UAAW,GAAG,GAAQ,GAAE,KAAK,GAAQ,QAAQ,IAAK,UAAW,EAAG,EAClF,CAAE,KAAM,SAAU,UAAW,GAAG,GAAY,GAAE,KAAK,GAAY,QAAQ,IAAK,UAAW,EAAG,EAC1F,CAAE,KAAM,QAAU,UAAW,GAAG,GAAK,GAAE,UAA6B,UAAW,EAAG,EAClF,CAAE,KAAM,SAAU,UAAW,GAAG,GAAI,GAAE,WAA8B,UAAW,EAAG,EAClF,CAAE,KAAM,MAAU,UAAW,GAAG,GAAI,GAAE,QAA8B,UAAW,CAAE,EACjF,CAAE,KAAM,QAAU,UAAW,GAAG,GAAI,GAAE,IAA8B,UAAW,CAAE,CACnF,EAQO,SAAS,EAAO,CAAC,EAAyB,CAC/C,QAAW,KAAQ,EACjB,GAAI,GAAS,EAAK,UAAY,OAAO,EAEvC,OAAO,EAAM,EAAM,OAAS,GAIvB,SAAS,EAAW,CAAC,EAAgC,CAC1D,IAAM,EAAU,GAAQ,CAAK,EACvB,EAAM,EAAM,QAAQ,CAAO,EACjC,OAAO,EAAM,EAAI,EAAM,EAAM,GAAK,+JCxCpC,IAAI,GAAqD,KAEzD,SAAS,EAAS,EAAwC,CACxD,GAAI,GAAS,OAAO,GACpB,GAAI,CACF,IAAM,2BAEN,OADA,GAAS,EACF,EACP,KAAM,CACN,MAAU,MACR;AAAA;AAAA;AAAA,CACF,GAKG,SAAS,EAAK,CAAC,EAAiC,CACrD,OAAO,KAAK,MAAM,GAAU,EAAE,UAAU,CAAI,CAAC,EAIxC,SAAS,EAAe,CAAC,EAAiC,CAC/D,OAAO,KAAK,MAAM,GAAU,EAAE,qBAAqB,CAAI,CAAC,EAInD,SAAS,EAAQ,CAAC,EAAuB,CAC9C,OAAO,GAAU,EAAE,aAAa,CAAI,EAI/B,SAAS,EAAO,CAAC,EAA0B,CAChD,OAAO,GAAU,EAAE,aAAa,CAAI,EAI/B,SAAS,EAAS,CAAC,EAA6B,CACrD,OAAO,KAAK,MAAM,GAAU,EAAE,eAAe,CAAK,CAAC,EAI9C,SAAS,EAAQ,CAAC,EAA6B,CACpD,OAAO,KAAK,MAAM,GAAU,EAAE,UAAU,CAAK,CAAC,EAUzC,SAAS,EAAS,CAAC,EAA6B,CACrD,OAAO,KAAK,MAAM,GAAU,EAAE,WAAW,CAAK,CAAC,EAI1C,SAAS,EAAU,EAAW,CACnC,OAAO,GAAU,EAAE,YAAY,ECzD1B,SAAS,EAAW,CAAC,EAAwC,CAClE,MAAO,CACL,MAAO,EAAO,MACd,KAAM,GAAQ,EAAO,KAAK,EAC1B,UAAW,EAAO,UAClB,MAAO,EAAO,MACd,QAAS,EAAO,QAChB,OAAQ,EAAO,OACf,MAAO,EAAO,MACd,MAAO,EAAO,KAChB,EAsBK,SAAS,EAAY,CAAC,EAA2B,CAKtD,GAFoB,6BAA6B,KAAK,CAAI,EAEzC,CAEf,IAAM,EAAmB,EAAK,MAAM,gCAAgC,EAC9D,EAAW,EAAmB,SAAS,EAAiB,GAAI,EAAE,EAAI,GAClE,EAAS,GAAY,GAAK,GAAY,IAAO,EAAW,GAExD,EAAkB,EAAK,MAAM,8BAA8B,EAC3D,EAAa,EAAkB,EAAgB,GAAK,OAK1D,MAAO,CACL,QACA,KAAM,GAAS,EAAI,GAAQ,CAAK,EAAI,EAAM,EAAM,OAAS,GACzD,UAAW,EACX,MAAO,EACP,QAAS,EACT,OAAQ,EACR,MAAO,EACP,MAAO,CAAC,EACR,UAAW,GACX,YACF,EAIF,OAAO,GAAmB,GAAM,CAAI,CAAC,EClEhC,SAAS,EAAW,CAAC,EAAqD,CAC/E,IAAM,EAAmB,CAAC,EAE1B,GAAI,CAAC,GAAQ,OAAO,IAAS,SAE3B,OADA,EAAO,KAAK,kCAAkC,EACvC,CAAE,MAAO,GAAO,QAAO,EAGhC,IAAM,EAAM,EAEZ,GAAI,CAAC,EAAI,YACP,EAAO,KAAK,qCAAqC,EAGnD,GAAI,CAAC,EAAI,SAAS,KAChB,EAAO,KAAK,sCAAsC,EAOpD,GAAI,EAAI,WAAa,QAAS,CAC5B,GAAI,CAAC,EAAI,OAAO,WACd,EAAO,KAAK,gFAAgF,EACvF,QAAI,CAAC,qCAAqC,KAAK,EAAI,MAAM,UAAU,EACxE,EAAO,KAAK,sDAAsD,EAAI,MAAM,aAAa,EAI3F,GAAI,EAAI,OAAO,eAAiB,OAAW,CACzC,IAAM,EAAI,EAAI,MAAM,aACpB,GAAI,OAAO,IAAM,UAAY,EAAI,GAAK,EAAI,IACxC,EAAO,KAAK,mDAAmD,IAAI,GAKzE,MAAO,CAAE,MAAO,EAAO,SAAW,EAAG,QAAO,ECzC9C,uBAAS,oBAAc,iBAAe,YACtC,eAAS,cAAM,eAAS,cCCxB,IAAI,QACA,QACA,QACA,QACA,QACA,OACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QAIJ,IAAQ,GAAW,GAAS,SACpB,GAAW,GAAS,SACpB,GAAS,GAAO,OAChB,GAAY,GAAO,UACnB,GAAiB,GAAO,eACxB,GAAc,GAAO,YACrB,GAAQ,GAAM,MACd,GAAU,GAAS,QACnB,GAAe,GAAS,aACxB,GAAa,GAAS,WACtB,GAAQ,GAAS,MACjB,GAAS,GAAS,OAClB,GAAS,GAAS,OAClB,GAAW,GAAS,SACpB,GAAQ,GAAS,MACjB,GAAO,GAAK,KACZ,GAAS,GAAO,OAChB,GAAU,GAAQ,QAClB,GAAU,GAAQ,QAE1B,IAAQ,GAAQ,GAAM,MACd,GAAc,GAAY,YAC1B,GAAS,GAAO,OAChB,GAAQ,GAAU,MAClB,GAAoB,GAAU,kBAC9B,GAAgB,GAAU,cAC1B,GAAY,GAAU,UACtB,GAAQ,GAAM,MACd,GAAa,GAAM,WD1CpB,SAAS,EAAO,CAAC,EAAuB,CAC7C,IAAM,EAAO,GAAa,EAAM,OAAO,EACvC,OAAO,GAAM,CAAI,EAyCZ,SAAS,EAAU,CAAC,EAAsB,CAC/C,OAAO,GAAa,EAAM,OAAO,EAW5B,SAAS,EAAW,CAAC,EAAc,QAAQ,IAAI,EAAkB,CACtE,IAAM,EAAa,CAAC,cAAe,MAAM,EAKzC,QAAW,KAAQ,EAAY,CAC7B,IAAM,EAAO,GAAK,EAAK,CAAI,EAC3B,GAAI,GAAW,CAAI,EAAI,OAAO,EAKhC,IAAM,EAAS,GAAQ,CAAG,EAC1B,GAAI,IAAW,EACb,QAAW,KAAQ,EAAY,CAC7B,IAAM,EAAO,GAAK,EAAQ,CAAI,EAC9B,GAAI,GAAW,CAAI,EAAI,OAAO,EAGlC,OAAO,KElFT,wBAAS,YACT,eAAS,cAwBT,IAAM,GAAS,GAAQ,OACjB,GAAO,GAAQ,KACf,GAAY,GAAQ,SACpB,GAAU,UACV,GAAQ,UACR,GAAiB,UACjB,GAAc,UACd,GAA6D,CACjE,OAAQ,CAAE,MAAO,IAAI,MAAO,EAAO,EACnC,KAAM,CAAE,MAAO,IAAI,MAAO,EAAO,EACjC,OAAQ,CAAE,MAAO,IAAI,MAAO,EAAK,EACjC,OAAQ,CAAE,MAAO,IAAI,MAAO,EAAU,EACtC,MAAO,CAAE,MAAO,IAAI,MAAO,EAAe,EAC1C,OAAQ,CAAE,MAAO,IAAI,MAAO,EAAQ,EACpC,IAAK,CAAE,MAAO,IAAI,MAAO,EAAM,EAC/B,MAAO,CAAE,MAAO,IAAI,MAAO,EAAY,CACzC,EAGA,SAAS,EAAG,CAAC,EAAoB,CAC/B,OAAO,OAAO,GAAK,EAAE,EAClB,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,OAAO,EAG1B,IAAM,GAAQ,CAAC,MAAO,OAAQ,MAAO,QAAS,OAAQ,KAAK,EAE3D,SAAS,EAAI,CAAC,EAAsC,CAClD,OAAO,EACJ,OAAO,GAAI,KAAO,IAAM,QAAa,IAAM,MAAQ,OAAO,CAAC,EAAE,KAAK,IAAM,EAAE,EAC1E,IACC,EAAE,EAAG,KACH,mCAAmC,GAAI,CAAC,yBAAyB,GAAI,CAAC,eAC1E,EACC,KAAK;AAAA,CAAI,EAIP,SAAS,EAAmB,CACjC,EACA,EACA,EAAU,cACF,CACR,IAAM,EAAO,GAAI,EAAK,SAAS,MAAQ,SAAS,EAC1C,EAAW,EAAO,MAAM,MAAQ,QAChC,EAAM,GAAS,IAAa,GAAS,MACrC,EAAY,EAAO,UACrB,EAAO,WACL,kBAAkB,GAAI,EAAO,UAAU,IACvC,YACF,GAAG,EAAO,SAER,EAAW,IAAa,UAAY,CAAC,EAAO,UAG5C,EAAK,EAAK,eAAiB,CAAC,EAC5B,EAA4B,GAAM,IAAI,CAAC,IAAM,CAAC,EAAG,EAAG,EAAE,CAAC,EACvD,EAAU,OAAO,QAAQ,CAAE,EAAE,OACjC,EAAE,KAAO,CAAC,GAAM,SAAS,CAA2B,CACtD,EAEM,EAAmC,CACvC,CAAC,OAAQ,EAAK,SAAS,IAAI,EAC3B,CAAC,gBAAiB,EAAK,SAAS,aAAa,EAC7C,CAAC,OAAQ,EAAK,SAAS,IAAI,EAC3B,CAAC,YAAc,EAAK,SAAiD,SAAS,EAC9E,CAAC,cAAe,EAAK,WAAW,CAClC,EAEM,EAAe,OAAO,QAAQ,EAAK,OAAS,CAAC,CAAC,EAC9C,EAAc,EAAa,OAC/B,GAAI,KAAO,GAAK,IAAM,eAAiB,OAAO,CAAC,EAAE,KAAK,IAAM,EAC9D,EACM,EAAe,EAAa,OAAO,GAAI,KAAO,IAAM,aAAa,EAAE,OAEzE,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,SAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iFAOwE,EAAI;AAAA;AAAA;AAAA,iDAGpC,EAAI;AAAA;AAAA;AAAA;AAAA,sFAIiC,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA,mDAKvC,EAAI,eAAe,KAAK,IAAI,EAAG,KAAK,IAAI,IAAK,EAAO,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBvG;AAAA,sBACgB,EAAI,SAAS,GAAI,CAAQ;AAAA,sBACzB;AAAA;AAAA;AAAA,EAIpB,EACI,6IACA,6BAA6B,EAAO,aAAa,EAAO,4BAA2B,EAAO,cAAc,EAAe,MAAM,QAAqB;AAAA;AAAA;AAAA;AAAA,EAKtJ,GAAK,CAAI,GAAK;AAAA,EACd,EAAQ,OAAS,GAAK,CAAO,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjC,GAAK,CAAW,GAAK;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrB,EAAY,OACR,GAAK,CAAW,EAChB;AAAA;AAAA;AAAA;AAAA,+CAKyC,GAAI,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUnD,SAAS,EAAgB,CAC9B,EACA,EACA,EACA,EAAU,cACJ,CACN,GACE,GAAK,EAAK,cAAc,EACxB,GAAoB,EAAM,EAAQ,CAAO,EACzC,OACF,ECnMF,wBAAS,YACT,eAAS,cA+BT,IAAM,GAAa,2BACb,GAAS,4EACT,GAAU,oCAGhB,SAAS,EAAU,CAAC,EAAuB,CACzC,IAAM,EAAM,OAAO,EAAK,SAAS,MAAQ,SAAS,EAAE,KAAK,EACzD,GAAI,EAAI,SAAS,GAAG,GAAK,GAAQ,KAAK,CAAG,EAAI,OAAO,EAEpD,IAAM,EAAY,EAAK,SAAS,UAC9B,EAAK,SAAS,SACd,EAAK,SAAS,IACZ,EAAK,QACT,GAAI,EACF,GAAI,CAEF,EADa,IAAI,IAAI,CAAQ,EAAE,SAAS,QAAQ,SAAU,EAAE,EAClD,MAAM,GAAG,EAAE,QAAQ,EAAE,KAAK,GAAG,EACvC,KAAM,EAIV,IAAM,EAAO,EAAI,QAAQ,mBAAoB,GAAG,EAAE,QAAQ,WAAY,EAAE,GAAK,UAC7E,MAAO,GAAG,KAAM,IAIlB,SAAS,EAAgB,CAAC,EAAuB,CAC/C,IAAM,EAAM,OACV,EAAK,SAAS,MAAQ,EAAK,SAAW,EAAK,SAAS,MAAQ,YAC9D,EACG,QAAQ,OAAQ,GAAG,EACnB,KAAK,EACR,GAAI,CAAC,EAAM,MAAO,aAClB,OAAO,EAAI,QAAU,IAAM,EAAM,GAAG,EAAI,MAAM,EAAG,EAAE,EAAE,QAAQ,OASxD,SAAS,EAAe,CAC7B,EACA,EAA0B,CAAC,EACF,CACzB,MAAO,CACL,IAAK,EAAK,YAAc,gBACxB,UAAW,GACX,KAAM,gDAAgD,KACtD,cAAe,MACX,EAAK,cAAgB,CAAE,cAAe,EAAK,aAAc,EAAI,CAAC,EAClE,UACG,EAAK,WAAoC,EAAK,KAAO,IAAI,KAAK,EAAE,YAAY,CACjF,EAIK,SAAS,EAAkB,CAChC,EACA,EAA0B,CAAC,EACF,CACzB,IAAM,EAAgC,CACpC,QAAS,GACT,KAAM,GAAW,CAAI,EACrB,QAAS,OAAO,EAAK,SAAS,SAAW,OAAO,EAChD,YAAa,GAAiB,CAAI,CACpC,EAEM,EAAQ,GAAc,CAAI,GAAM,EAAK,SAAS,KACpD,GAAI,GAAS,EAAM,QAAU,IAAM,EAAK,MAAQ,EAEhD,IAAM,EAAY,EAAK,SAAS,UAC9B,EAAK,SAAS,SACd,EAAK,SAAS,IAChB,GAAI,EAAW,EAAK,WAAa,EAEjC,GAAI,EAAK,UACP,EAAK,QAAU,CAAC,CAAE,KAAM,kBAAmB,IAAK,EAAK,SAAU,CAAC,EAMlE,OAFA,EAAK,MAAQ,CAAE,kBAAmB,GAAgB,EAAM,CAAI,CAAE,EAEvD,EAGF,IAAM,GAAyB,sDAChC,GAAoB,KAYnB,SAAS,EAAY,CAC1B,EACA,EAA0B,CAAC,EACF,CACzB,IAAM,EAAW,CAAE,kBAAmB,GAAgB,EAAM,CAAI,CAAE,EAC5D,EAAQ,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,CAAQ,CAAC,EAAE,OACjE,GAAI,EAAQ,GACV,MAAU,MACR,+BAA+B,6BAAgC,SACjE,EAEF,MAAO,EAAG,IAAyB,CAAS,EAUvC,SAAS,EAAY,CAAC,EAAuB,CAClD,OAAO,GAAW,CAAI,EAWjB,SAAS,EAAa,CAAC,EAAmC,CAC/D,IAAM,EAAO,EAAK,SAA6C,MAC/D,GAAI,OAAO,IAAQ,SAAU,CAC3B,IAAM,EAAI,EAAI,KAAK,EACnB,GAAI,GAAK,EAAE,QAAU,IAAM,OAAO,EAEpC,OAOK,SAAS,EAAe,CAC7B,EACA,EACA,EAA0B,CAAC,EACnB,CACR,IAAM,EAAO,GAAmB,EAAM,CAAI,EACpC,EAAM,GAAK,EAAK,aAAa,EAEnC,OADA,GAAc,EAAK,GAAG,KAAK,UAAU,EAAM,KAAM,CAAC;AAAA,EAAS,OAAO,EAC3D,ECrLF,IAAM,GAAiB,CAAC,YAAa,WAAY,OAAQ,UAAU,EAG7D,GAAwC,OAAO,YAC1D,GAAe,IAAI,CAAC,EAAG,IAAM,CAAC,EAAG,CAAC,CAAC,CACrC,EAEa,GAAkB,IAAI,IAAI,CAAC,OAAQ,WAAY,UAAW,WAAW,CAAC,EAEtE,GAAiB,IAAI,IAAI,CACpC,UACA,UACA,YACA,UACA,cACA,YACA,QACA,QACF,CAAC,EAEY,GAAoB,IAAI,IAAI,CAAC,QAAS,WAAY,cAAe,QAAQ,CAAC,EAE1E,GAA4C,CACvD,IAAK,YACL,OAAQ,UACV,ECzBA,uBAAS,oBAAc,iBAAe,YAW/B,SAAS,EAAM,EAAW,CAC/B,OAAO,IAAI,KAAK,EAAE,YAAY,EAAE,QAAQ,YAAa,GAAG,EAG1D,SAAS,CAAK,CAAC,EAAmC,CAChD,OAAO,IAAM,MAAQ,IAAM,OAGtB,SAAS,EAAiB,CAAC,EAAsC,CACtE,GAAI,EAAM,CAAC,EAAI,MAAO,WACtB,GAAI,GAAgB,GAAK,OAAO,GAAgB,GAChD,GAAI,KAAK,GAAgB,OAAO,EAChC,MAAO,WAGT,IAAM,GAAa,IAAI,IAAI,CACzB,OACA,KACA,OACA,WACA,OACA,QACA,YACA,QACF,CAAC,EAEM,SAAS,EAAW,CAAC,EAAoB,CAC9C,GAAI,OAAO,IAAQ,SACjB,MAAO,CACL,KAAM,EACN,GAAI,KACJ,KAAM,KACN,SAAU,WACV,KAAM,CAAC,EACP,MAAO,CAAC,EACR,UAAW,KACX,OAAQ,KACR,MAAO,CAAC,CACV,EAEF,GAAI,CAAC,GAAO,OAAO,IAAQ,UAAY,EAAE,SAAU,GACjD,MAAU,MAAM,mDAAmD,KAAK,UAAU,CAAG,GAAG,EAE1F,IAAM,EAAI,EACJ,EAAiC,CAAC,EACxC,QAAY,EAAG,KAAM,OAAO,QAAQ,CAAC,EACnC,GAAI,CAAC,GAAW,IAAI,CAAC,EAAI,EAAM,GAAK,EAEtC,MAAO,CACL,KAAM,OAAO,EAAE,IAAI,EACnB,GAAK,EAAE,IAAiB,KACxB,KAAO,EAAE,MAAmB,KAC5B,SAAU,GAAkB,EAAE,QAA8B,EAC5D,KAAM,MAAM,QAAQ,EAAE,IAAI,EAAK,EAAE,KAAkB,MAAM,EAAI,CAAC,EAC9D,MAAO,MAAM,QAAQ,EAAE,KAAK,EAAK,EAAE,MAAmB,MAAM,EAAI,CAAC,EACjE,UAAY,EAAE,WAAwB,KACtC,OAAS,EAAE,QAAqB,KAChC,OACF,EAGK,SAAS,EAAS,CAAC,EAAkB,CAU1C,GARE,EAAM,EAAE,EAAE,GACV,EAAM,EAAE,IAAI,GACZ,EAAE,KAAK,SAAW,GAClB,EAAE,MAAM,SAAW,GACnB,EAAM,EAAE,SAAS,GACjB,EAAM,EAAE,MAAM,GACd,OAAO,KAAK,EAAE,KAAK,EAAE,SAAW,GAChC,EAAE,WAAa,WACN,OAAO,EAAE,KACpB,IAAM,EAA+B,CAAE,KAAM,EAAE,IAAK,EACpD,GAAI,CAAC,EAAM,EAAE,EAAE,EAAI,EAAI,GAAK,EAAE,GAC9B,GAAI,CAAC,EAAM,EAAE,IAAI,EAAI,EAAI,KAAO,EAAE,KAElC,GADA,EAAI,SAAW,EAAE,SACb,EAAE,KAAK,OAAS,EAAI,KAAO,EAAE,KACjC,GAAI,EAAE,MAAM,OAAS,EAAI,MAAQ,EAAE,MACnC,GAAI,CAAC,EAAM,EAAE,SAAS,EAAI,EAAI,UAAY,EAAE,UAC5C,GAAI,CAAC,EAAM,EAAE,MAAM,EAAI,EAAI,OAAS,EAAE,OAEtC,OADA,OAAO,OAAO,EAAK,EAAE,KAAK,EACnB,EAGF,MAAM,EAAK,CAChB,UACA,QACA,UACA,QACA,YACQ,OACA,MACA,OACA,UACA,aACA,QACA,OACA,aAER,WAAW,CACT,EACA,EAWI,CAAC,EACL,CACA,KAAK,UAAY,EACjB,KAAK,QAAU,EAAK,SAAW,YAC/B,KAAK,UAAY,EAAK,WAAa,UACnC,KAAK,QAAU,EAAK,SAAW,GAAO,EACtC,KAAK,YAAc,KAAK,QACxB,KAAK,OAAS,EAAK,MAAQ,EAAK,MAAM,MAAM,EAAI,CAAC,EACjD,KAAK,MAAQ,IAAI,IACjB,KAAK,OAAO,QAAQ,CAAC,EAAG,IAAM,CAC5B,GAAI,CAAC,EAAM,EAAE,EAAE,EAAI,KAAK,MAAM,IAAI,EAAE,GAAI,CAAC,EAC1C,EACD,KAAK,OAAS,EAAK,MAAQ,EAAK,MAAM,MAAM,EAAI,CAAC,EACjD,KAAK,UAAY,EAAK,SAAW,gBAAgB,EAAK,QAAQ,EAAI,CAAC,EACnE,KAAK,aAAe,EAAK,YAAc,IAAK,EAAK,WAAY,EAAI,CAAC,EAClE,KAAK,QAAU,EAAK,OAAS,IAAK,EAAK,MAAO,EAAI,CAAC,EACnD,KAAK,OAAS,EAAK,MAAQ,IAAK,EAAK,KAAM,EAAI,CAAC,EAChD,KAAK,aAAe,EAAK,YAAc,IAAK,EAAK,WAAY,EAAI,CAAC,KAGhE,MAAK,EAAW,CAClB,OAAO,KAAK,UAGV,MAAK,EAAa,CACpB,OAAO,KAAK,UAGV,SAAQ,EAAc,CACxB,OAAO,KAAK,aAGV,YAAW,EAA4B,CACzC,OAAO,KAAK,gBAGV,OAAM,EAA4B,CACpC,OAAO,KAAK,WAGV,MAAK,EAA4B,CACnC,OAAO,KAAK,UAGV,YAAW,EAA4B,CACzC,OAAO,KAAK,mBAGP,KAAI,CAAC,EAAoB,CAC9B,GAAI,CAAC,GAAW,CAAI,EAClB,MAAU,MAAM,wBAAwB,GAAM,EAEhD,IAAM,EAAM,GAAa,EAAM,OAAO,EAChC,EAAM,GAAU,CAAG,EACzB,GAAI,CAAC,GAAO,OAAO,IAAQ,SACzB,MAAU,MAAM,4BAA4B,EAE9C,IAAM,EACJ,EAAI,QAAU,OAAO,EAAI,SAAW,SAC/B,EAAI,OACL,CAAC,EACD,EAAW,MAAM,QAAQ,EAAO,KAAK,EAAI,EAAO,MAAQ,CAAC,EACzD,EAAoC,CAAC,EAC3C,QAAY,EAAG,KAAM,OAAO,QAAQ,CAAG,EACrC,GAAI,CAAC,GAAe,IAAI,CAAC,EAAI,EAAS,GAAK,gBAAgB,CAAC,EAE9D,IAAM,EAAuC,CAAC,EAC9C,QAAY,EAAG,KAAM,OAAO,QAAQ,CAAM,EACxC,GAAI,CAAC,GAAkB,IAAI,CAAC,EAAI,EAAY,GAAK,gBAAgB,CAAC,EAEpE,IAAM,EAAO,IAAI,GAAK,OAAO,EAAI,WAAa,EAAK,QAAQ,OAAQ,EAAE,EAAE,QAAQ,UAAW,EAAE,CAAC,EAAG,CAC9F,QAAS,OAAO,EAAI,SAAW,OAAO,EACtC,MAAO,EAAS,IAAI,EAAW,EAC/B,UAAW,OAAO,EAAI,WAAa,SAAS,EAC5C,QAAU,EAAI,SAAsB,KACpC,MAAO,MAAM,QAAQ,EAAI,KAAK,EAAK,EAAI,MAAmB,MAAM,EAAI,CAAC,EACrE,SAAU,MAAM,QAAQ,EAAO,QAAQ,EAAI,gBAAgB,EAAO,QAAQ,EAAI,CAAC,EAC/E,YACE,EAAO,aAAe,OAAO,EAAO,cAAgB,SAChD,gBAAgB,EAAO,WAAsC,EAC7D,CAAC,EACP,OACE,EAAO,QAAU,OAAO,EAAO,SAAW,SACtC,gBAAgB,EAAO,MAAiC,EACxD,CAAC,EACP,MAAO,EACP,aACF,CAAC,EAED,OADA,EAAK,YAAc,OAAO,EAAI,aAAe,EAAK,OAAO,EAClD,QAGF,SAAQ,CAAC,EAAoB,CAClC,OAAO,GAAK,KAAK,CAAI,EAGvB,KAAK,EAAY,CACf,IAAM,EAA4B,CAChC,MAAO,KAAK,OAAO,IAAI,EAAS,EAChC,SAAU,gBAAgB,KAAK,SAAS,EACxC,YAAa,gBAAgB,KAAK,YAAY,EAC9C,OAAQ,gBAAgB,KAAK,OAAO,CACtC,EACA,QAAY,EAAG,KAAM,OAAO,QAAQ,KAAK,YAAY,EACnD,GAAI,CAAC,GAAkB,IAAI,CAAC,EAAI,EAAO,GAAK,gBAAgB,CAAC,EAE/D,IAAM,EAAe,CACnB,QAAS,MACT,QAAS,KAAK,QACd,UAAW,KAAK,UAChB,QAAS,KAAK,QACd,YAAa,KAAK,YAClB,UAAW,KAAK,UAChB,MAAO,KAAK,OAAO,MAAM,EACzB,QACF,EACA,QAAY,EAAG,KAAM,OAAO,QAAQ,KAAK,MAAM,EAC7C,GAAI,CAAC,GAAe,IAAI,CAAC,EAAI,EAAI,GAAK,gBAAgB,CAAC,EAEzD,OAAO,EAGT,MAAM,EAAW,CACf,OAAO,GAAc,KAAK,MAAM,EAAG,CAAE,UAAW,GAAI,CAAC,EAGvD,YAAY,CAAC,EAAQ,GAAc,CAIjC,OAHA,KAAK,OAAS,KAAK,OAAO,IACxB,CAAC,IAAM,GAAG,EAAE,IAAM,SAAQ,EAAE,KAAK,MAAM,EAAG,CAAK,GACjD,EACO,KAAK,OAGd,IAAI,CAAC,EAAc,EAA8B,CAAC,EAAW,CAE3D,GADgB,EAAK,UAAY,GACnB,KAAK,aAAa,EAEhC,OADA,GAAc,EAAM,KAAK,OAAO,EAAG,OAAO,EACnC,EAGT,MAAM,CAAC,EAAc,EAA8B,CAAC,EAAW,CAC7D,OAAO,KAAK,KAAK,EAAM,CAAI,EAG7B,GAAG,CAAC,EAAkB,CACpB,GAAI,CAAC,EAAM,EAAK,EAAE,GAAK,KAAK,MAAM,IAAI,EAAK,EAAE,EAAG,CAC9C,IAAM,EAAM,KAAK,MAAM,IAAI,EAAK,EAAE,EAClC,GAAI,IAAQ,OACV,KAAK,OAAO,GAAO,EAIrB,QADA,KAAK,OAAO,KAAK,CAAI,EACjB,CAAC,EAAM,EAAK,EAAE,EAAI,KAAK,MAAM,IAAI,EAAK,GAAI,KAAK,OAAO,OAAS,CAAC,EAEtE,GAAI,EAAK,WAAa,EAAK,WAAa,KAAK,aAAe,IAC1D,KAAK,YAAc,EAAK,UAE1B,OAAO,EAGT,IAAI,CACF,EACA,EAOI,CAAC,EACC,CACN,OAAO,KAAK,IAAI,CACd,OACA,GAAI,EAAK,IAAM,KACf,KAAM,EAAK,MAAQ,KACnB,SAAU,GAAkB,EAAK,QAAQ,EACzC,KAAM,EAAK,KAAO,EAAK,KAAK,MAAM,EAAI,CAAC,EACvC,MAAO,EAAK,MAAQ,EAAK,MAAM,MAAM,EAAI,CAAC,EAC1C,UAAW,GAAO,EAClB,OAAQ,EAAK,QAAU,KACvB,MAAO,CAAC,CACV,CAAC,EAGH,MAAM,CACJ,EACA,EAKI,CAAC,EACG,CACR,IAAM,EAAQ,GAAc,GAAkB,EAAK,aAAe,WAAW,IAAM,EAC7E,GAAK,GAAS,IAAI,YAAY,EAC9B,EAAW,IAAI,IAAI,EAAK,MAAQ,CAAC,CAAC,EAClC,EAAiC,CAAC,EACxC,KAAK,OAAO,QAAQ,CAAC,EAAG,IAAM,CAC5B,GAAI,GAAK,CAAC,EAAE,KAAK,YAAY,EAAE,SAAS,CAAC,EAAI,OAC7C,GAAI,EAAS,KAAO,GAAK,CAAC,CAAC,GAAG,CAAQ,EAAE,KAAK,CAAC,IAAM,EAAE,KAAK,SAAS,CAAC,CAAC,EAAI,OAC1E,GAAI,CAAC,EAAM,EAAK,IAAI,GAAK,EAAE,OAAS,EAAK,KAAO,OAChD,IAAK,GAAc,EAAE,WAAa,GAAK,EAAQ,OAC/C,EAAQ,KAAK,CAAC,EAAG,CAAC,CAAC,EACpB,EACD,EAAQ,KAAK,CAAC,EAAG,IAAM,CACrB,IAAM,EAAK,GAAc,EAAE,GAAG,WAAa,EACrC,EAAK,GAAc,EAAE,GAAG,WAAa,EAC3C,GAAI,IAAO,EAAK,OAAO,EAAK,EAC5B,IAAM,EAAK,EAAE,GAAG,WAAa,GACvB,EAAK,EAAE,GAAG,WAAa,GAC7B,GAAI,IAAO,EAAK,OAAO,EAAK,EAAK,GAAK,EAAK,EAAK,EAAI,EACpD,OAAO,EAAE,GAAK,EAAE,GACjB,EACD,IAAM,EAAU,EAAQ,IAAI,GAAI,KAAO,CAAC,EACxC,GAAI,CAAC,EAAM,EAAK,KAAK,EAAI,OAAO,EAAQ,MAAM,EAAG,EAAK,KAAK,EAC3D,OAAO,EAGT,OAAO,CAAC,EAAyB,CAC/B,IAAM,EAAI,KAAK,MAAM,IAAI,CAAE,EAC3B,OAAO,IAAM,OAAY,KAAO,KAAK,OAAO,GAG9C,UAAU,CAAC,EAAqB,CAC9B,IAAM,EAAI,KAAK,MAAM,IAAI,CAAE,EAC3B,GAAI,IAAM,OAAY,MAAO,GAM7B,OALA,KAAK,OAAO,OAAO,EAAG,CAAC,EACvB,KAAK,MAAM,MAAM,EACjB,KAAK,OAAO,QAAQ,CAAC,EAAG,IAAM,CAC5B,GAAI,CAAC,EAAM,EAAE,EAAE,EAAI,KAAK,MAAM,IAAI,EAAE,GAAI,CAAC,EAC1C,EACM,GAEX,CCnWA,sBAAS,mBAAa,eAAc,iBAAU,YAC9C,eAAS,eAAM,cAAU,cAKlB,IAAM,GAAe,IAAI,IAAI,CAAC,YAAa,iBAAkB,WAAW,CAAC,EAE1E,GAAU,oBAEhB,SAAS,EAAQ,CAAC,EAAsB,CACtC,IAAM,EAAK,GAAS,CAAI,EAAE,QAC1B,OAAO,IAAI,KAAK,CAAE,EAAE,YAAY,EAAE,QAAQ,YAAa,GAAG,EAG5D,SAAS,EAAgB,CAAC,EAAoE,CAC5F,GAAI,CAAC,EAAK,WAAW,KAAK,EAAI,MAAO,CAAE,GAAI,KAAM,KAAM,CAAK,EAC5D,IAAM,EAAQ,EAAK,MAAM,KAAK,EAC9B,GAAI,EAAM,OAAS,EAAI,MAAO,CAAE,GAAI,KAAM,KAAM,CAAK,EACrD,GAAI,CACF,IAAM,EAAK,GAAU,EAAM,EAAE,EAC7B,GAAI,CAAC,GAAM,OAAO,IAAO,SAAW,MAAO,CAAE,GAAI,KAAM,KAAM,EAAM,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,KAAK,CAAE,EAC/F,MAAO,CAAE,GAAI,EAA+B,KAAM,EAAM,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,KAAK,CAAE,EACpF,KAAM,CACN,MAAO,CAAE,GAAI,KAAM,KAAM,CAAK,GAIlC,SAAS,EAAa,CAAC,EAAc,EAAc,EAA0C,CAC3F,GAAI,CAAC,EAAG,KAAO,OAAO,KACtB,IAAM,EACJ,EAAG,UAAY,OAAO,EAAG,WAAa,SACjC,EAAG,SACJ,CAAC,EACD,EAAQ,EAAK,KACnB,GAAI,OAAO,IAAU,UAAY,CAAC,GAAgB,IAAI,CAAK,EAAI,OAAO,KAEtE,IAAM,EAAO,OAAO,EAAG,IAAI,EAAE,KAAK,EAK5B,GAHJ,EAAG,cAAgB,QAAa,EAAG,cAAgB,MAAQ,OAAO,EAAG,WAAW,EAAE,KAAK,EACnF,OAAO,EAAG,WAAW,EAAE,KAAK,EAC5B,KACsB,EAEtB,EAAiC,CAAC,EACxC,GAAI,EAAK,gBACP,EAAM,WAAa,CAAC,WAAW,EAAK,iBAAiB,EAGvD,IAAM,EAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAK,SAAS,EAAO,CAAC,EAAE,IAAI,CAAC,IAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAE9E,MAAO,CACL,OACA,GAAI,EACJ,KAAM,EACN,SAAU,WACV,KAAM,CAAC,EACP,QACA,UAAW,GAAS,CAAI,EACxB,OAAQ,uBAAuB,GAAS,CAAI,IAC5C,OACF,EAMK,SAAS,EAAa,CAC3B,EACA,EAAmD,CAAC,EAC9C,CACN,IAAM,EAAO,GAAQ,CAAI,EACzB,GAAI,CAAC,GAAW,CAAI,EAClB,MAAU,MAAM,sCAAsC,GAAM,EAE9D,GAAI,CAAC,GAAS,CAAI,EAAE,YAAY,EAC9B,MAAU,MAAM,0CAA0C,GAAM,EAGlE,IAAM,EAAO,EAAK,MAAQ,GACpB,EAAY,EAAK,WAAa,gBAAgB,GAAS,CAAI,IAE3D,EAAgB,CAAC,EACjB,EAAQ,GAAY,CAAI,EAC3B,OAAO,CAAC,IAAM,EAAE,SAAS,KAAK,CAAC,EAC/B,KAAK,EAER,QAAW,KAAQ,EAAO,CACxB,GAAI,EAAK,IAAI,CAAI,EAAI,SACrB,IAAM,EAAO,GAAK,EAAM,CAAI,EACxB,EACJ,GAAI,CACF,EAAO,GAAa,EAAM,OAAO,EACjC,KAAM,CACN,SAEF,IAAQ,KAAI,QAAS,GAAiB,CAAI,EAC1C,GAAI,CAAC,EAAK,SACV,IAAM,EAAO,GAAc,EAAM,EAAM,CAAE,EACzC,GAAI,EAAO,EAAM,KAAK,CAAI,EAG5B,IAAM,EAAS,EAAM,IAAI,CAAC,IAAM,EAAE,SAAS,EAAE,OAAO,OAAO,EACrD,EAAU,EAAO,OAAS,EAAO,OAAO,CAAC,EAAG,IAAO,EAAI,EAAI,EAAI,CAAE,EAAI,GAAO,EAC5E,EAAO,EAAO,OAAS,EAAO,OAAO,CAAC,EAAG,IAAO,EAAI,EAAI,EAAI,CAAE,EAAI,EAElE,EAAO,IAAI,GAAK,EAAW,CAC/B,QAAS,YACT,QACA,SACF,CAAC,EAGD,OAFA,EAAK,YAAc,EACnB,EAAK,aAAa,EACX,EC/FF,IAAM,GAAoB,kBAoD3B,GAAQ,sBAOD,GAAuD,CAClE,CACE,KAAM,eACN,SAAU,oCACV,OAAQ,OACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,eACN,SAAU,4CACV,OAAQ,OACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,oBACN,SAAU,oBAAoB,KAC9B,OAAQ,MACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,qBACN,SAAU,2BAA2B,KACrC,OAAQ,OACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,oBACN,SAAU,sBAAsB,KAChC,OAAQ,MACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,sBACN,SAAU,8BAA8B,KACxC,OAAQ,QACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,qBACN,SAAU,6BAA4B,KACtC,OAAQ,OACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,oBACN,SAAU,4BAA4B,KACtC,OAAQ,MACR,KAAM,OACN,SAAU,EACZ,CACF,EAOa,GAAwD,CACnE,CACE,KAAM,wBACN,SAAU,4CACV,OAAQ,WACR,KAAM,SACN,SAAU,GACV,QAAS,CACP,CAAE,MAAO,aAAc,MAAO,aAAc,YAAa,uBAAwB,EACjF,CAAE,MAAO,aAAc,MAAO,aAAc,YAAa,uBAAwB,EACjF,CAAE,MAAO,SAAU,MAAO,SAAU,YAAa,YAAa,EAC9D,CAAE,MAAO,OAAQ,MAAO,OAAQ,YAAa,qBAAsB,EACnE,CAAE,MAAO,KAAM,MAAO,KAAM,YAAa,QAAS,EAClD,CAAE,MAAO,QAAS,MAAO,QAAS,YAAa,kBAAmB,CACpE,CACF,EACA,CACE,KAAM,iBACN,SAAU,uCACV,OAAQ,WACR,KAAM,SACN,SAAU,GACV,QAAS,CACP,CAAE,MAAO,QAAS,MAAO,QAAS,YAAa,UAAW,EAC1D,CAAE,MAAO,MAAO,MAAO,MAAO,YAAa,QAAS,EACpD,CAAE,MAAO,SAAU,MAAO,SAAU,YAAa,kBAAmB,EACpE,CAAE,MAAO,UAAW,MAAO,UAAW,YAAa,iBAAkB,EACrE,CAAE,MAAO,OAAQ,MAAO,OAAQ,YAAa,aAAc,EAC3D,CAAE,MAAO,QAAS,MAAO,QAAS,YAAa,kBAAmB,CACpE,CACF,EACA,CACE,KAAM,gBACN,SAAU,sCACV,OAAQ,UACR,KAAM,SACN,SAAU,GACV,QAAS,CACP,CAAE,MAAO,UAAW,MAAO,UAAW,YAAa,iBAAkB,EACrE,CAAE,MAAO,UAAW,MAAO,UAAW,YAAa,iBAAkB,EACrE,CAAE,MAAO,SAAU,MAAO,SAAU,YAAa,eAAgB,EACjE,CAAE,MAAO,UAAW,MAAO,UAAW,YAAa,gBAAiB,EACpE,CAAE,MAAO,OAAQ,MAAO,OAAQ,YAAa,YAAa,EAC1D,CAAE,MAAO,QAAS,MAAO,QAAS,YAAa,kBAAmB,CACpE,CACF,EACA,CACE,KAAM,iBACN,SAAU,6BACV,OAAQ,WACR,KAAM,SACN,SAAU,GACV,QAAS,CACP,CAAE,MAAO,aAAc,MAAO,aAAc,YAAa,UAAW,EACpE,CAAE,MAAO,QAAS,MAAO,QAAS,YAAa,eAAgB,EAC/D,CAAE,MAAO,SAAU,MAAO,SAAU,YAAa,cAAe,EAChE,CAAE,MAAO,UAAW,MAAO,UAAW,YAAa,gBAAiB,EACpE,CAAE,MAAO,OAAQ,MAAO,OAAQ,YAAa,aAAc,EAC3D,CAAE,MAAO,QAAS,MAAO,QAAS,YAAa,kBAAmB,CACpE,CACF,EACA,CACE,KAAM,gBACN,SAAU,+BACV,OAAQ,UACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,gBACN,SAAU,qCACV,OAAQ,UACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,cACN,SAAU,0BACV,OAAQ,QACR,KAAM,OACN,SAAU,EACZ,EACA,CACE,KAAM,aACN,SAAU,0BACV,OAAQ,QACR,KAAM,OACN,SAAU,EACZ,CACF,EAGa,GAAiC,CAAC,GAAG,GAAkB,GAAG,EAAe,EAGzE,GAAoB,IAAI,IACnC,GAAU,IAAI,CAAC,IAAM,CAAC,EAAE,KAAM,CAAC,CAAC,CAClC,EASa,GAAqD,OAAO,YACvE,GAAU,IAAI,CAAC,IAAM,CAAC,EAAE,KAAM,CAAC,CAAC,CAClC,EAOO,SAAS,EAAe,CAAC,EAAsB,CACpD,IAAM,EAAI,GAAkB,IAAI,CAAI,EACpC,GAAI,EAAI,OAAO,EAAE,SACjB,IAAM,EAAO,GAAa,IAAI,CAAI,GAAK,EAAM,KAAK,CAAC,IAAM,EAAE,YAAc,CAAI,EAC7E,OAAO,EAAO,GAAG,EAAK,eAAe,QAAQ,QAAS,GAAG,EAAI,GAAG,KAQ3D,SAAS,EAAmB,CACjC,EACA,EACqB,CACrB,OAAO,GAAU,OAAO,CAAC,IAAM,CAC7B,IAAM,EAAQ,EAAE,KAAK,MAAM,GAAG,EAC1B,EAAe,EACnB,QAAW,KAAQ,EACjB,GAAI,GAAO,OAAO,IAAQ,UAAY,KAAS,EAC7C,EAAO,EAAgC,GAClC,KACL,EAAM,OACN,MAGJ,GAAI,IAAQ,cAAgB,MAAO,GACnC,OAAO,EAAQ,CAAG,EACnB,EAoBH,IAAM,GAAmB,IAAI,IAAI,CAC/B,aAAc,oBAAqB,mBAAoB,QAAS,cAChE,iBAAkB,eAAgB,WAAY,iBAC9C,iCAAkC,yBAClC,+BAAgC,qBAAsB,0BACtD,oBAAqB,aAAc,SAAU,MAAO,UAAW,MACjE,CAAC,EAIK,GAAoD,CACxD,CAAC,MAAO,UAAU,EAClB,CAAC,OAAQ,WAAW,EACpB,CAAC,YAAa,iBAAiB,EAC/B,CAAC,WAAY,eAAe,EAC5B,CAAC,SAAU,aAAa,EACxB,CAAC,aAAc,iBAAiB,EAChC,CAAC,SAAU,aAAa,EACxB,CAAC,UAAW,cAAc,EAC1B,CAAC,MAAO,UAAU,EAClB,CAAC,YAAa,gBAAgB,EAC9B,CAAC,OAAQ,WAAW,EACpB,CAAC,UAAW,cAAc,EAC1B,CAAC,OAAQ,WAAW,EACpB,CAAC,SAAU,aAAa,EACxB,CAAC,eAAgB,mBAAmB,EACpC,CAAC,mBAAoB,uBAAuB,EAC5C,CAAC,WAAY,eAAe,CAC9B,EAEM,GAAgB,CAAC,IAAuB,GAAiB,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAMnF,GAAa,iFACnB,SAAS,EAAO,CAAC,EAAW,EAAM,EAAW,CAC3C,IAAM,EAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO,EAAE,MAAM,EAAG,CAAG,EAChE,MAAO,EAAM,QAAU,GAAW,KAAK,EAAM,EAAM,OAAS,GAAG,QAAQ,WAAY,EAAE,CAAC,EACpF,EAAM,IAAI,EAEZ,OAAO,EAAM,KAAK,GAAG,EAchB,SAAS,EAAiB,CAAC,EAAwB,CACxD,IAAM,EAAiB,CAAC,EACxB,GAAI,CAAC,GAAQ,OAAO,IAAS,SAAW,OAAO,EAC/C,IAAM,EAAI,EAAK,KAAK,EAId,EAAO,EACV,QAAQ,iBAAkB,EAAE,EAC5B,MAAM,2DAA0D,EAAE,GAClE,KAAK,EACF,EAAY,GAAQ,CAAI,EAC9B,GAAI,EAAU,MAAM,KAAK,EAAE,OAAO,OAAO,EAAE,QAAU,GAAK,CAAC,GAAc,CAAS,EAChF,EAAK,KAAO,EAId,IAAM,EAAS,GAAc,OAAO,GAAI,KAAQ,EAAG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,KAAW,CAAK,EAClF,GAAI,EAAO,OAAS,EAAK,MAAQ,EAAO,MAAM,EAAG,CAAC,EAAE,KAAK,IAAI,EAO7D,IAAM,EAAS,EAAE,MAAM,0HAAyH,EAC1I,EAAW,IAAS,IAAS,IAAM,IAAI,KAAK,EAAE,QAAQ,OAAQ,GAAG,CAAC,EACxE,GAAI,GAAY,CAAC,GAAc,CAAQ,EACrC,EAAK,IAAM,EAGb,OAAO,EAuCT,SAAS,EAAW,CAAC,EAA+B,EAAuB,CACzE,IAAI,EAAe,EACnB,QAAW,KAAQ,EAAK,MAAM,GAAG,EAC/B,GAAI,GAAO,OAAO,IAAQ,UAAY,KAAS,EAC7C,EAAO,EAAgC,GAEvC,YAGJ,OAAO,EAIT,SAAS,EAAgB,CAAC,EAAyB,CACjD,GAAI,OAAO,IAAM,SAAW,MAAO,GACnC,IAAM,EAAI,EAAE,KAAK,EACjB,GAAI,CAAC,GAAK,IAAM,cAAgB,MAAO,GACvC,MAAO,CAAC,GAAc,CAAC,EAalB,SAAS,EAAa,CAC3B,EACA,EAA4D,CAAC,EACnD,CACV,IAAM,EAAO,GAAO,OAAO,IAAQ,SAAW,EAAM,CAAC,EAC/C,EAAU,GAAY,EAAM,cAAc,EAC1C,GAAW,GAAiB,CAAO,EAAI,OAAO,CAAO,EAAE,KAAK,EAAI,MAAQ,EAAK,MAAQ,IAAI,KAAK,EAC9F,EAAO,GAAkB,CAAO,EAChC,EAAY,EAAK,UAAY,CAAC,EAC9B,EAA+C,CACnD,eAAgB,GAAW,OAC3B,qBAAsB,EAAK,KAC3B,sBAAuB,EAAK,MAC5B,oBAAqB,EAAK,GAC5B,EAIM,EAAU,CAAC,IAAoF,CACnG,IAAM,EAAI,EAAS,GACnB,GAAI,EAAI,MAAO,CAAE,MAAO,EAAG,OAAQ,eAAgB,WAAY,GAAI,EACnE,IAAM,EAAI,EAAK,WAAW,gBAAgB,EAAI,EAAK,MAAM,EAAuB,EAAI,GAC9E,EAAI,EAAI,EAAS,GAAK,OAC5B,OAAO,EAAI,CAAE,MAAO,EAAE,MAAO,OAAQ,EAAE,OAAQ,WAAY,EAAE,UAAW,EAAI,QAGxE,EAAsB,GAAiB,IAAI,CAAC,EAAG,IAAM,CACzD,IAAM,EAAO,CAAE,EAAG,EAAI,EAAG,KAAM,EAAE,KAAM,OAAQ,EAAE,OAAQ,SAAU,EAAE,QAAS,EACxE,EAAM,GAAY,EAAM,EAAE,IAAI,EACpC,GAAI,GAAiB,CAAG,EACtB,MAAO,IAAK,EAAM,MAAO,OAAO,CAAG,EAAE,KAAK,EAAG,OAAQ,SAAU,OAAQ,EAAM,EAE/E,IAAM,EAAI,EAAQ,EAAE,IAAI,EACxB,GAAI,EACF,MAAO,IAAK,EAAM,MAAO,EAAE,MAAO,OAAQ,SAAU,OAAQ,GAAM,OAAQ,EAAE,OAAQ,WAAY,EAAE,UAAW,EAE/G,MAAO,IAAK,EAAM,MAAO,GAAI,OAAQ,QAAS,OAAQ,EAAM,EAC7D,EAEK,EAAc,EAAK,OAAO,CAAC,IAAM,EAAE,SAAW,QAAQ,EAAE,OACxD,EAAc,EAAK,OAAO,CAAC,IAAM,EAAE,SAAW,QAAQ,EAAE,OACxD,EAAa,EAAK,OAAO,CAAC,IAAM,EAAE,SAAW,OAAO,EAAE,OAC5D,MAAO,CAAE,QAAS,GAAmB,OAAM,cAAa,cAAa,aAAY,SAAU,IAAe,CAAE,EC/cvG,SAAS,EAAY,CAAC,EAAyB,CACpD,GAAI,IAAU,MAAQ,IAAU,OAAY,MAAO,GACnD,GAAI,OAAO,IAAU,SAAU,CAC7B,IAAM,EAAI,EAAM,KAAK,EACrB,OAAO,IAAM,IAAM,GAAc,CAAC,EAEpC,MAAO,GAGT,SAAS,EAAW,CAAC,EAA+B,EAAuB,CACzE,IAAI,EAAe,EACnB,QAAW,KAAQ,EAAK,MAAM,GAAG,EAC/B,GAAI,GAAO,OAAO,IAAQ,UAAY,KAAS,EAC7C,EAAO,EAAgC,GAEvC,YAGJ,OAAO,EAMF,SAAS,EAAW,CAAC,EAAuB,CACjD,GAAI,IAAS,eAAiB,MAAO,GACrC,OAAO,GAAa,IAAI,CAAI,GAAG,WAAa,QAQvC,SAAS,EAAY,CAC1B,EACA,EAAuC,GAC7B,CACV,IAAM,EAAkB,CAAC,EACnB,EAAuB,CAAC,EAC9B,QAAW,KAAK,GAAW,CACzB,IAAM,EAAI,GAAY,EAAM,EAAE,IAAI,EAClC,GAAI,IAAM,cAAgB,SAC1B,GAAI,CAAC,EAAQ,CAAC,EAAI,UACjB,GAAY,EAAE,IAAI,EAAI,EAAQ,GAAY,KAAK,EAAE,IAAI,EAExD,MAAO,CAAE,QAAO,YAAW,EAStB,SAAS,EAAW,CACzB,EACA,EACA,EAAuC,GAC1B,CACb,IAAM,EAAO,GAAa,EAAM,CAAO,EACnC,EACJ,GAAI,GAAS,KAAQ,EAAK,MAAM,SAAW,GAAK,EAAK,WAAW,SAAW,EACzE,EAAS,OACJ,QAAI,EAAK,WAAW,OAAS,EAClC,EAAS,aAET,OAAS,cAEX,IAAM,EAAM,IAAW,cAAgB,GAAS,CAAI,EAAI,CAAC,EACzD,MAAO,CAAE,SAAQ,QAAO,OAAM,KAAI,EAKpC,SAAS,EAAQ,CAAC,EAA2D,CAC3E,OAAO,EAAK,MAAM,IAAI,CAAC,KAAU,CAAE,OAAM,SAAU,GAAgB,CAAI,CAAE,EAAE,EA6CtE,SAAS,EAAO,CAAC,EAAgB,EAAuB,CAAC,EAAkB,CAChF,IAAM,EAAY,KAAK,IAAI,EAAG,EAAK,WAAa,CAAC,EAC3C,EAAU,EAAK,SAAW,GAC1B,EAAoB,CAAC,EACvB,EAAS,EAGb,QAAS,EAAI,EAAG,GAAK,EAAW,IAAK,CACnC,IAAM,EAAO,EAAK,KAAK,EACvB,GAAI,CAAC,EAAO,MAAO,CAAE,OAAQ,SAAU,MAAO,EAAG,SAAQ,UAAS,IAAK,CAAC,CAAE,EAE1E,IAAM,EAAQ,EAAK,MAAM,EAAK,IAAI,EAClC,EAAQ,KAAK,CAAK,EAClB,IAAM,EAAU,GAAY,EAAO,EAAK,KAAM,CAAO,EAErD,GAAI,EAAQ,SAAW,OACrB,MAAO,CAAE,OAAQ,OAAQ,QAAO,SAAQ,UAAS,IAAK,CAAC,CAAE,EAE3D,GAAI,EAAQ,SAAW,cACrB,MAAO,CAAE,OAAQ,cAAe,QAAO,SAAQ,UAAS,IAAK,EAAQ,GAAI,EAI3E,GAAI,EAAQ,QAAU,GAAK,GAAS,EAAQ,EAAQ,OAAS,GAK3D,OAAO,EAAQ,KAAK,MAAM,OACtB,CAAE,OAAQ,cAAe,QAAO,SAAQ,UAAS,IAAK,GAAS,EAAQ,IAAI,CAAE,EAC7E,CAAE,OAAQ,QAAS,QAAO,SAAQ,UAAS,IAAK,CAAC,CAAE,EAGzD,GAAI,GAAU,EACZ,MAAO,CAAE,OAAQ,SAAU,QAAO,SAAQ,UAAS,IAAK,GAAS,EAAQ,IAAI,CAAE,EAGjF,EAAK,QAAQ,EACb,IAKF,MAAO,CAAE,OAAQ,SAAU,MADd,EAAQ,EAAQ,OAAS,IAAM,EACJ,SAAQ,UAAS,IAAK,CAAC,CAAE,ECzLnE,qBAAS,gBAUF,IAAM,GAAgB,cASvB,GAAoC,CACxC,eAAgB,8BAChB,eAAgB,+CAChB,wBAAyB,4CACzB,oBAAqB,2BACrB,qBAAsB,0BACtB,oBAAqB,+BACrB,sBAAuB,wCACvB,qBAAsB,kDACtB,oBAAqB,0BACvB,EAEA,SAAS,EAAW,CAAC,EAAc,EAA6B,CAC9D,OAAO,GAAU,IAAS,yBAAyB,EAAY,QAAQ,aAAc,EAAE,EAAE,YAAY,KAQhG,IAAM,GAA2B,CACtC,CAAC,aAAc,IAAI,EACnB,CAAC,aAAc,IAAI,EACnB,CAAC,SAAU,KAAM,SAAS,EAC1B,CAAC,OAAQ,SAAU,UAAW,SAAS,EACvC,CAAC,iBAAkB,aAAc,SAAS,EAC1C,CAAC,aAAc,WAAY,IAAI,EAC/B,CAAC,aAAc,KAAK,EACpB,CAAC,MAAO,cAAc,EACtB,CAAC,qBAAsB,aAAc,SAAS,EAC9C,CAAC,mBAAoB,YAAa,eAAe,CACnD,EAEM,GAAe,IAAI,IACzB,GAAa,QAAQ,CAAC,EAAO,IAAM,EAAM,QAAQ,CAAC,IAAM,GAAa,IAAI,EAAG,CAAC,CAAC,CAAC,EAE/E,IAAM,GAAY,IAAI,IAAI,CACxB,IAAK,KAAM,MAAO,MAAO,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,OAAQ,KACtE,KAAM,MAAO,QAAS,OAAQ,MAAO,KAAM,QAAS,MAAO,MAC7D,CAAC,EAEM,SAAS,EAAe,CAAC,EAAmB,CACjD,OAAO,EACJ,YAAY,EACZ,QAAQ,mBAAoB,GAAG,EAC/B,QAAQ,cAAe,GAAG,EAC1B,QAAQ,OAAQ,GAAG,EACnB,KAAK,EAGV,SAAS,EAAiB,CAAC,EAAqB,CAC9C,OAAO,GAAgB,CAAC,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC,IAAM,GAAK,CAAC,GAAU,IAAI,CAAC,CAAC,EASpE,SAAS,EAAY,CAAC,EAAkB,EAAwB,CACrE,IAAM,EAAI,GAAgB,CAAQ,EAC5B,EAAI,GAAgB,CAAK,EAC/B,GAAI,CAAC,GAAK,CAAC,EAAI,MAAO,GACtB,GAAI,IAAM,EAAI,MAAO,GACrB,IAAM,EAAK,GAAa,IAAI,CAAC,EAC7B,GAAI,IAAO,QAAa,GAAa,IAAI,CAAC,IAAM,EAAK,MAAO,GAC5D,IAAM,EAAO,GAAkB,CAAQ,EACvC,GAAI,EAAK,SAAW,EAAI,MAAO,GAC/B,IAAM,EAAO,IAAI,IAAI,GAAkB,CAAK,CAAC,EAC7C,OAAO,EAAK,MAAM,CAAC,IAAM,CACvB,GAAI,EAAK,IAAI,CAAC,EAAI,MAAO,GACzB,IAAM,EAAK,GAAa,IAAI,CAAC,EAC7B,OAAO,IAAO,QAAa,CAAC,GAAG,CAAI,EAAE,KAAK,CAAC,IAAM,GAAa,IAAI,CAAC,IAAM,CAAE,EAC5E,EAYI,SAAS,EAAiB,CAAC,EAA2B,CAC3D,IAAM,EAAS,GAAa,CAAI,EAC1B,EAAO,GAAU,CAAI,EAErB,EAA6B,CAAC,EAC9B,EAAkC,CAAC,EACrC,EAAI,EAER,QAAW,KAAQ,EAAO,CAExB,GAAI,EAAO,MAAM,EAAK,QAAU,YAAc,SAC9C,IAAM,EAAQ,GAAc,EAAM,CAAI,EACtC,GAAI,OAAO,IAAU,SAAW,SAChC,IAAM,EAAI,EAAM,KAAK,EACrB,GAAI,CAAC,GAAK,GAAa,IAAI,EAAE,YAAY,CAAC,EAAI,SAC9C,GAAK,EACL,EAAU,KAAK,CAAE,IAAG,KAAM,EAAK,KAAM,SAAU,GAAY,EAAK,KAAM,EAAK,WAAW,CAAE,CAAC,EACzF,EAAQ,GAAK,EAIf,IAAM,EAAa,KAAK,UAAU,CAChC,EAAG,GACH,EAAG,EAAU,IAAI,CAAC,IAAM,CAAC,EAAE,KAAM,EAAE,QAAQ,CAAC,CAC9C,CAAC,EACK,EAAW,GAAW,QAAQ,EAAE,OAAO,CAAU,EAAE,OAAO,KAAK,EAAE,MAAM,EAAG,EAAE,EAElF,MAAO,CAAE,QAAS,GAAe,WAAU,YAAW,SAAQ,EAUzD,SAAS,EAAe,CAAC,EAI9B,CACA,MAAO,CAAE,QAAS,EAAK,QAAS,SAAU,EAAK,SAAU,UAAW,EAAK,SAAU,EAU9E,SAAS,EAAY,CAAC,EAAmB,EAA4C,CAC1F,IAAM,EAAc,EAAK,UAAU,IAAI,CAAC,IAAM,CAC5C,IAAM,EAAM,EAAM,OAAO,EAAE,CAAC,IAAM,EAAM,EAAE,OAAS,GACnD,MAAO,CAAE,EAAG,EAAE,EAAG,KAAM,EAAE,KAAM,GAAI,OAAO,IAAQ,UAAY,EAAI,KAAK,IAAM,IAAM,GAAa,EAAK,QAAQ,EAAE,GAAI,CAAG,CAAE,EACzH,EACK,EAAS,EAAK,UAAU,OAAO,CAAC,IAAM,CAAC,EAAY,EAAE,EAAI,GAAG,EAAE,EACpE,MAAO,CAAE,QAAS,EAAY,OAAO,CAAC,IAAM,EAAE,EAAE,EAAE,OAAQ,MAAO,EAAK,UAAU,OAAQ,SAAQ,aAAY,EAsCvG,SAAS,EAAY,CAAC,EAAmB,EAAqD,CACnG,IAAM,EAAa,KAAK,UAAU,CAChC,EAAG,EAAM,QACT,KAAM,GAAQ,KACd,KAAM,EAAM,SACZ,SAAU,EAAM,SAChB,KAAM,EAAM,MAAQ,KACpB,IAAK,EAAM,KAAO,IACpB,CAAC,EACD,MAAO,CAAE,aAAY,KAAM,GAAW,QAAQ,EAAE,OAAO,CAAU,EAAE,OAAO,KAAK,CAAE,EC/NnF,qBAAS,kBAAY,mBAAa,YAClC,eAAS,cAAM,cAAS,cAAS,cC0E1B,IAAM,GAAkD,CAK7D,eAAgB,CACd,WAAY,CAAC,UAAW,aAAc,YAAY,EAClD,MAAO,CACL,eAAgB,gBAChB,aAAc,uBAChB,EACA,SAAU,GACV,aAAc,YAChB,EAEA,YAAa,CACX,WAAY,CAAC,EACb,MAAO,CACL,WAAY,aACZ,YAAa,wBACb,eAAgB,uBAClB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,eAAgB,MAChB,aAAc,QAChB,EACA,SAAU,GACV,aAAc,YAChB,EAEA,QAAW,CACT,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,eAAgB,SAChB,aAAc,QAChB,EACA,SAAU,GACV,aAAc,YAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,aAAc,SACd,QAAS,SACT,QAAS,QACX,EACA,SAAU,GACV,aAAc,YAChB,EAGA,QAAW,CACT,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,eAAgB,UAChB,aAAc,MAChB,EACA,SAAU,GACV,aAAc,YAChB,EACA,eAAgB,CACd,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,eAAgB,UAChB,aAAc,MAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,MAAO,UAAW,SAAS,EACxC,MAAO,CACL,eAAgB,WAChB,aAAc,KAChB,EACA,SAAU,GACV,aAAc,YAChB,EAEA,aAAc,CACZ,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,eAAgB,QAChB,aAAc,OACd,UAAW,OACb,EACA,SAAU,GACV,aAAc,YAChB,EAEA,SAAU,CAIR,WAAY,CAAC,IAAI,EACjB,MAAO,CACL,eAAgB,aAChB,aAAc,KACd,UAAW,UACb,EACA,SAAU,GACV,aAAc,YAChB,EAKA,WAAY,CACV,WAAY,CAAC,KAAM,MAAM,EACzB,MAAO,CACL,eAAgB,QAChB,aAAc,KACd,UAAW,QACb,EACA,SAAU,GACV,aAAc,YAChB,EAEA,eAAgB,CAKd,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,eAAgB,MAChB,aAAc,MAChB,EACA,SAAU,GACV,aAAc,YAChB,EAEA,UAAW,CAIT,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,eAAgB,QAChB,aAAc,OACd,UAAW,OACb,EACA,SAAU,GACV,aAAc,YAChB,EAEA,eAAgB,CAGd,WAAY,CAAC,OAAQ,QAAQ,EAC7B,MAAO,CACL,eAAgB,SAChB,aAAc,OACd,UAAW,QACb,EACA,SAAU,GACV,aAAc,YAChB,EAEA,kBAAmB,CACjB,WAAY,CAAC,OAAQ,QAAQ,EAC7B,MAAO,CACL,eAAgB,SAChB,aAAc,OACd,UAAW,QACb,EACA,SAAU,GACV,aAAc,MAChB,EAEA,sBAAuB,CACrB,WAAY,CAAC,SAAU,QAAQ,EAC/B,MAAO,CACL,eAAgB,SAChB,aAAc,SACd,UAAW,QACb,EACA,SAAU,GACV,aAAc,MAChB,EAMA,iBAAkB,CAChB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,UAAW,UACX,QAAS,UACT,UAAW,UACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,kBAAmB,CACjB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,UAAW,UACX,QAAS,UACT,UAAW,UACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,aAAa,EAC1B,MAAO,CACL,UAAW,cACX,QAAS,UACT,UAAW,UACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,UAAW,SACX,QAAS,UACT,UAAW,OACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,UAAW,SACX,QAAS,UACT,UAAW,OACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,WAAW,EACxB,MAAO,CACL,UAAW,YACX,UAAW,OACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,eAAgB,CACd,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,UAAW,UACX,UAAW,cACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAMA,gBAAiB,CACf,WAAY,CAAC,mBAAoB,mBAAmB,EACpD,MAAO,CACL,UAAW,mBACX,QAAS,iBACT,aAAc,aACd,QAAS,mBACT,QAAS,aACX,EACA,SAAU,GACV,aAAc,aACd,YAAa,CAAC,aAAc,gBAAiB,YAAY,CAC3D,EAEA,gBAAiB,CACf,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,UAAW,MACX,UAAW,UACX,aAAc,YAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,kBAAmB,CACjB,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,UAAW,QACX,QAAS,UACT,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,UAAW,SACX,UAAW,SACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,UAAW,SACX,UAAW,SACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,UAAW,QACX,UAAW,OACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,eAAgB,CACd,WAAY,CAAC,WAAW,EACxB,MAAO,CACL,UAAW,YACX,UAAW,UACX,aAAc,wBACd,OAAQ,UACR,SAAU,QACZ,EACA,SAAU,GACV,aAAc,MAChB,EAEA,kBAAmB,CACjB,WAAY,CAAC,UAAU,EACvB,MAAO,CACL,UAAW,WACX,UAAW,UACX,aAAc,aACd,OAAQ,UACR,SAAU,QACZ,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,UAAW,OACX,UAAW,OACX,aAAc,aACd,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAMA,YAAa,CACX,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,UAAW,SACX,QAAS,SACT,aAAc,SACd,OAAQ,SACR,QAAS,cACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,QAAW,CACT,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,UAAW,UACX,QAAS,UACT,aAAc,MACd,OAAQ,MACR,QAAS,gBACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,UAAW,CACT,WAAY,CAAC,UAAW,QAAQ,EAChC,MAAO,CACL,UAAW,UACX,QAAS,UACT,aAAc,SACd,OAAQ,MACV,EACA,SAAU,GACV,aAAc,MAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,UAAW,SACX,QAAS,SACT,aAAc,aACd,OAAQ,UACR,QAAS,UACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,QAAS,SACT,QAAS,WACT,SAAU,WACV,OAAQ,SACV,EACA,SAAU,GACV,aAAc,MAChB,EAMA,WAAc,CACZ,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,QAAS,SACT,WAAY,eACd,EACA,SAAU,GACV,aAAc,MAChB,EAEA,qBAAsB,CACpB,WAAY,CAAC,gBAAgB,EAC7B,MAAO,CACL,QAAS,SACT,WAAY,iBACd,EACA,SAAU,GACV,aAAc,MAChB,EAEA,sBAAuB,CACrB,WAAY,CAAC,gBAAgB,EAC7B,MAAO,CACL,QAAS,SACT,WAAY,iBACd,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,YAAY,EACzB,MAAO,CACL,QAAS,aACT,WAAY,cACd,EACA,SAAU,GACV,aAAc,MAChB,EAEA,WAAY,CACV,WAAY,CAAC,YAAY,EACzB,MAAO,CACL,QAAS,aACT,WAAY,cACd,EACA,SAAU,GACV,aAAc,MAChB,EAMA,cAAe,CACb,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,QAAS,SACT,KAAM,QACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,eAAgB,CACd,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,UACT,KAAM,SACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,cAAe,CACb,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,QAAS,SACT,KAAM,QACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,WAAY,CACV,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,QAAS,SACT,KAAM,QACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,eAAgB,CACd,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,UACT,KAAM,SACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,eAAgB,CACd,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,UACT,KAAM,SACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,WAAY,CACV,WAAY,CAAC,mBAAmB,EAChC,MAAO,CACL,QAAS,eACT,KAAM,cACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,SAAY,CACV,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,QAAS,SACT,KAAM,QACR,EACA,SAAU,GACV,aAAc,MAChB,EAMA,iBAAkB,CAChB,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,UAAW,MACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,UAAW,OACX,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,oBAAqB,CACnB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,UAAW,SACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,UAAW,QACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,oBAAqB,CACnB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,UAAW,SACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,UAAW,QACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,qBAAsB,CACpB,WAAY,CAAC,UAAU,EACvB,MAAO,CACL,UAAW,UACb,EACA,SAAU,GACV,aAAc,QAChB,EAMA,gBAAiB,CACf,WAAY,CAAC,YAAY,EACzB,MAAO,CACL,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,YAAY,EACzB,MAAO,CACL,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,kBAAmB,CACjB,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,UAAW,OACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,WAAY,CACV,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,UAAW,OACb,EACA,SAAU,GACV,aAAc,QAChB,EAMA,iBAAkB,CAChB,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,KAAM,MACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,KAAM,OACN,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,KAAM,SACN,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,oBAAqB,CACnB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,KAAM,SACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,uBAAwB,CACtB,WAAY,CAAC,YAAY,EACzB,MAAO,CACL,KAAM,aACN,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,KAAM,OACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,aAAc,CACZ,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,KAAM,OACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,SAAU,CACR,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,KAAM,QACN,aAAc,MAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,aAAc,CACZ,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,KAAM,SACN,aAAc,QAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,cAAe,CACb,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,KAAM,UACN,aAAc,KAChB,EACA,SAAU,GACV,aAAc,QAChB,EAMA,gBAAiB,CACf,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,SAAU,aACV,WAAY,QACd,EACA,SAAU,GACV,aAAc,QAChB,EAEA,oBAAqB,CACnB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,SAAU,cACV,WAAY,UACZ,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,eAAgB,CACd,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,SAAU,UACV,WAAY,SACd,EACA,SAAU,GACV,aAAc,QAChB,EAEA,cAAe,CACb,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,SAAU,UACV,WAAY,SACd,EACA,SAAU,GACV,aAAc,QAChB,EAEA,sBAAuB,CACrB,WAAY,CAAC,WAAW,EACxB,MAAO,CACL,SAAU,YACV,WAAY,WACd,EACA,SAAU,GACV,aAAc,QAChB,EAEA,cAAe,CACb,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,SAAU,UACV,aAAc,QAChB,EACA,SAAU,GACV,aAAc,QAChB,EAMA,oBAAqB,CACnB,WAAY,CAAC,gBAAgB,EAC7B,MAAO,CACL,KAAM,gBACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,WAAW,EACxB,MAAO,CACL,KAAM,WACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,YAAe,CACb,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,KAAM,SACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,uBAAwB,CACtB,WAAY,CAAC,UAAU,EACvB,MAAO,CACL,KAAM,UACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,cAAe,CACb,WAAY,CAAC,WAAW,EACxB,MAAO,CACL,KAAM,WACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,sBAAuB,CACrB,WAAY,CAAC,cAAc,EAC3B,MAAO,CACL,KAAM,cACR,EACA,SAAU,GACV,aAAc,QAChB,EAEA,0BAA2B,CACzB,WAAY,CAAC,qBAAqB,EAClC,MAAO,CACL,KAAM,qBACR,EACA,SAAU,GACV,aAAc,QAChB,EAMA,qBAAsB,CACpB,WAAY,CAAC,cAAc,EAC3B,MAAO,CACL,aAAc,cAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,qBAAsB,CACpB,WAAY,CAAC,cAAc,EAC3B,MAAO,CACL,aAAc,eACd,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,oBAAqB,CACnB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,aAAc,SAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,aAAc,SACd,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,8BAA+B,CAC7B,WAAY,CAAC,mBAAmB,EAChC,MAAO,CACL,aAAc,oBACd,UAAW,mBACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,oBAAqB,CACnB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,aAAc,UACd,UAAW,SACb,EACA,SAAU,GACV,aAAc,QAChB,EAMA,kBAAmB,CACjB,WAAY,CAAC,cAAc,EAC3B,MAAO,CACL,UAAW,eACX,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,UAAW,eACX,UAAW,MACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,WAAY,CACV,WAAY,CAAC,eAAgB,MAAM,EACnC,MAAO,CACL,UAAW,cACb,EACA,SAAU,GACV,aAAc,SACd,YAAa,CAAC,MAAM,CACtB,EAEA,sBAAuB,CACrB,WAAY,CAAC,WAAW,EACxB,MAAO,CACL,UAAW,YACX,aAAc,YAChB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,oBAAqB,CACnB,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,UAAW,QACX,UAAW,OACb,EACA,SAAU,GACV,aAAc,QAChB,EAMA,UAAW,CACT,WAAY,CAAC,IAAI,EACjB,MAAO,CACL,UAAW,IACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,aAAc,CACZ,WAAY,CAAC,WAAW,EACxB,MAAO,CACL,UAAW,WACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,aAAc,CACZ,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,UAAW,OACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,YAAa,CACX,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,UAAW,MACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,sBAAuB,CACrB,WAAY,CAAC,iBAAiB,EAC9B,MAAO,CACL,eAAgB,OAChB,UAAW,iBACb,EACA,SAAU,GACV,aAAc,QAChB,EAOA,WAAY,CACV,WAAY,CAAC,SAAU,WAAW,EAClC,MAAO,CACL,UAAW,QACb,EACA,SAAU,GACV,aAAc,KAChB,EAEA,QAAS,CACP,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,UAAW,KACb,EACA,SAAU,GACV,aAAc,KAChB,EAEA,QAAS,CACP,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,UAAW,QACX,aAAc,YAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,OAAQ,CACN,WAAY,CAAC,YAAY,EACzB,MAAO,CACL,aAAc,YAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,QAAS,CACP,WAAY,CAAC,QAAS,YAAY,EAClC,MAAO,CACL,UAAW,QACX,aAAc,YAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,OAAQ,CACN,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,aAAc,QAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,OAAQ,CACN,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,aAAc,MAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,QAAS,CACP,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,KAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,SAAU,CACR,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,aAAc,MAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,OAAQ,CACN,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,aAAc,QAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,UAAW,CACT,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,aAAc,OAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,OAAQ,CACN,WAAY,CAAC,IAAI,EACjB,MAAO,CACL,aAAc,IAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,OAAQ,CACN,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,aAAc,MAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,SAAU,CACR,WAAY,CAAC,UAAW,MAAM,EAC9B,MAAO,CACL,aAAc,MAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,OAAQ,CACN,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,aAAc,QAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,QAAS,CACP,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,aAAc,QAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,UAAW,CACT,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,aAAc,OAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,QAAS,CACP,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,aAAc,SAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,QAAS,CACP,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,KAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,MAAO,CACL,WAAY,CAAC,GAAG,EAChB,MAAO,CACL,aAAc,GAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,MAAO,CACL,WAAY,CAAC,GAAG,EAChB,MAAO,CACL,aAAc,GAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,OAAQ,CACN,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,aAAc,OAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,QAAS,CACP,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,KAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,QAAS,CACP,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,KAChB,EACA,SAAU,GACV,aAAc,KAChB,EAEA,YAAa,CACX,WAAY,CAAC,KAAK,EAClB,MAAO,CAEL,eAAgB,sBAChB,aAAc,MACd,UAAW,YACX,UAAW,MAEX,MAAO,WACT,EACA,SAAU,GACV,aAAc,YAChB,EAMA,eAAgB,CACd,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,WACT,QAAS,YACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,eAAgB,CACd,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,WACT,QAAS,YACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,eAAgB,CACd,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,WACT,QAAS,YACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,UACT,QAAS,gBACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,UACT,QAAS,gBACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,SACX,EACA,SAAU,GACV,aAAc,QAChB,EAMA,kBAAmB,CACjB,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,gBAAiB,OACnB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,gBAAiB,MACnB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,gBAAiB,OACjB,UAAW,KACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,kBAAmB,CACjB,WAAY,CAAC,OAAO,EACpB,MAAO,CACL,gBAAiB,QACjB,UAAW,KACb,EACA,SAAU,GACV,aAAc,QAChB,EAEA,oBAAqB,CACnB,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,gBAAiB,SACnB,EACA,SAAU,GACV,aAAc,QAChB,EAMA,eAAgB,CACd,WAAY,CAAC,QAAQ,EACrB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,KAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,QAAQ,EACrB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,KAChB,EAEA,cAAe,CACb,WAAY,CAAC,UAAU,EACvB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,KAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,UAAU,EACvB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,KAChB,EAEA,aAAc,CACZ,WAAY,CAAC,OAAO,EACpB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,KAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,cAAc,EAC3B,MAAO,CAAC,EACR,SAAU,GACV,aAAc,KAChB,EAMA,iBAAkB,CAChB,WAAY,CAAC,sBAAsB,EACnC,MAAO,CACL,QAAS,uBACT,QAAS,aACT,QAAS,aACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,kBAAmB,CACjB,WAAY,CAAC,sBAAsB,EACnC,MAAO,CACL,QAAS,uBACT,QAAS,aACT,QAAS,aACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,WAAY,CACV,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,QAAS,aACT,QAAS,UACT,KAAM,aACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,UAAW,gBAAgB,EACxC,MAAO,CACL,QAAS,MACT,QAAS,yBACT,KAAM,KACR,EACA,SAAU,GACV,aAAc,SACd,YAAa,CAAC,gBAAgB,CAChC,EAEA,cAAe,CACb,WAAY,CAAC,aAAa,EAC1B,MAAO,CACL,QAAS,cACT,QAAS,cACT,KAAM,aACR,EACA,SAAU,GACV,aAAc,MAChB,EAMA,QAAW,CACT,WAAY,CAAC,YAAa,KAAK,EAC/B,MAAO,CACL,eAAgB,YAChB,aAAc,oBACd,UAAW,YACb,EACA,SAAU,GACV,aAAc,MAChB,EAEA,mBAAoB,CAElB,WAAY,CAAC,SAAU,QAAQ,EAC/B,MAAO,CACL,eAAgB,SAChB,aAAc,SACd,UAAW,QACb,EACA,SAAU,GACV,aAAc,YAChB,EAMA,UAAW,CACT,WAAY,CAAC,UAAW,QAAQ,EAChC,MAAO,CACL,aAAc,SACd,UAAW,kBACb,EACA,SAAU,GACV,aAAc,MAChB,EAEA,UAAa,CACX,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,aAAc,SACd,UAAW,SACX,QAAS,SACT,KAAM,QACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,WAAY,CACV,WAAY,CAAC,MAAO,sBAAsB,EAC1C,MAAO,CACL,aAAc,SACd,UAAW,MACX,KAAM,eACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,WAAY,CACV,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,UAAW,KACb,EACA,SAAU,GACV,aAAc,QAChB,EAOA,gBAAiB,CACf,WAAY,CAAC,qBAAsB,YAAY,EAC/C,MAAO,CACL,QAAS,qBACT,QAAS,qBACT,QAAS,aACX,EACA,SAAU,GACV,aAAc,MAChB,EAGA,YAAa,CACX,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,QAAS,OACT,aAAc,aACd,eAAgB,MAClB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,YAAa,CACX,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,QAAS,MACT,eAAgB,MAChB,aAAc,uBAChB,EACA,SAAU,GACV,aAAc,MAChB,EAGA,cAAe,CACb,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,KAAM,SACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,aAAc,QAAQ,EACnC,MAAO,CACL,KAAM,YACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,UAAU,EACvB,MAAO,CACL,KAAM,UACR,EACA,SAAU,GACV,aAAc,MAChB,EAGA,SAAY,CACV,WAAY,CAAC,OAAQ,UAAU,EAC/B,MAAO,CACL,UAAW,MACb,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,QAAS,IAAK,KAAK,EAChC,MAAO,CACL,UAAW,QACX,aAAc,OAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,cAAe,CACb,WAAY,CAAC,QAAS,IAAK,KAAK,EAChC,MAAO,CACL,UAAW,QACX,aAAc,OAChB,EACA,SAAU,GACV,aAAc,MAChB,EAMA,MAAO,CACL,WAAY,CAAC,GAAG,EAChB,MAAO,CACL,aAAc,GAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,QAAS,CACP,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,KAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,OAAQ,CACN,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,KAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,QAAS,CACP,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,KAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,MAAO,CACL,WAAY,CAAC,IAAK,KAAK,EACvB,MAAO,CACL,aAAc,OAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,QAAS,CACP,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,KAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,QAAS,CACP,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,KAChB,EACA,SAAU,GACV,aAAc,QAChB,EAMA,OAAQ,CACN,WAAY,CAAC,EACb,MAAO,CAAC,EACR,SAAU,GACV,aAAc,QAChB,EAEA,eAAgB,CACd,WAAY,CAAC,EACb,MAAO,CAAC,EACR,SAAU,GACV,aAAc,MAChB,EAEA,aAAc,CACZ,WAAY,CAAC,EACb,MAAO,CAAC,EACR,SAAU,GACV,aAAc,QAChB,EAEA,mBAAoB,CAClB,WAAY,CAAC,EACb,MAAO,CAAC,EACR,SAAU,GACV,aAAc,QAChB,EAEA,kBAAmB,CACjB,WAAY,CAAC,EACb,MAAO,CAAC,EACR,SAAU,GACV,aAAc,QAChB,EAMA,gBAAiB,CACf,WAAY,CAAC,WAAY,YAAY,EACrC,MAAO,CACL,QAAS,aACT,KAAM,UACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,aAAc,CACZ,WAAY,CAAC,OAAQ,YAAY,EACjC,MAAO,CACL,QAAS,aACT,QAAS,MACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,cAAe,CACb,WAAY,CAAC,OAAQ,YAAY,EACjC,MAAO,CACL,QAAS,YACX,EACA,SAAU,GACV,aAAc,OACd,YAAa,CAAC,YAAY,CAC5B,EAEA,cAAe,CACb,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,QAAS,QACT,KAAM,QACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,cAAe,CACb,WAAY,CAAC,QAAQ,EACrB,MAAO,CACL,QAAS,QACT,KAAM,QACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,aAAc,WAAW,EACtC,MAAO,CACL,QAAS,QACT,KAAM,YACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,cAAe,CACb,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,KAAM,SACR,EACA,SAAU,GACV,aAAc,MAChB,EAEA,eAAgB,CACd,WAAY,CAAC,SAAS,EACtB,MAAO,CACL,KAAM,SACR,EACA,SAAU,GACV,aAAc,MAChB,EAMA,OAAQ,CACN,WAAY,CAAC,KAAM,OAAQ,OAAO,EAClC,MAAO,CACL,aAAc,IAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,MAAO,CACL,WAAY,CAAC,cAAe,KAAK,EACjC,MAAO,CACL,aAAc,aAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,SAAU,CACR,WAAY,CAAC,UAAW,KAAK,EAC7B,MAAO,CACL,QAAS,SACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,MAAM,EACnB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,MAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,OAAQ,OAAO,EAC5B,MAAO,CACL,aAAc,OACd,QAAS,MACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,kBAAmB,CACjB,WAAY,CAAC,SAAU,OAAO,EAC9B,MAAO,CACL,aAAc,SACd,QAAS,QACX,EACA,SAAU,GACV,aAAc,MAChB,EAEA,gBAAiB,CACf,WAAY,CAAC,QAAQ,EACrB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,QAChB,EAEA,iBAAkB,CAChB,WAAY,CAAC,KAAK,EAClB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,KAChB,EAEA,SAAU,CACR,WAAY,CAAC,MAAO,SAAS,EAC7B,MAAO,CACL,eAAgB,KAClB,EACA,SAAU,GACV,aAAc,QAChB,EAEA,2BAA4B,CAC1B,WAAY,CAAC,YAAa,YAAY,EACtC,MAAO,CACL,KAAM,WACR,EACA,SAAU,GACV,aAAc,MAChB,EAIA,OAAQ,CACN,WAAY,CAAC,KAAM,MAAM,EACzB,MAAO,CACL,aAAc,IAChB,EACA,SAAU,GACV,aAAc,MAChB,EAEA,OAAQ,CACN,WAAY,CAAC,gBAAiB,MAAO,OAAO,EAC5C,MAAO,CACL,aAAc,eAChB,EACA,SAAU,GACV,aAAc,MAChB,EAQA,gBAAiB,CACf,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,aAAc,MACd,eAAgB,sBAChB,UAAW,WACb,EACA,SAAU,GACV,aAAc,YAChB,EAGA,aAAc,CACZ,WAAY,CAAC,QAAS,OAAQ,QAAQ,EACtC,MAAO,CACL,aAAc,QACd,QAAS,OACT,eAAgB,OAClB,EACA,SAAU,GACV,aAAc,MAChB,EAGA,cAAe,CACb,WAAY,CAAC,KAAK,EAClB,MAAO,CACL,QAAS,MACT,eAAgB,MAChB,UAAW,KACb,EACA,SAAU,GACV,aAAc,MAChB,EAGA,YAAa,CACX,WAAY,CAAC,MAAM,EACnB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,MAChB,EAEA,aAAc,CACZ,WAAY,CAAC,MAAM,EACnB,MAAO,CAAC,EACR,SAAU,GACV,aAAc,MAChB,EAGA,gBAAiB,CACf,WAAY,CAAC,OAAQ,KAAK,EAC1B,MAAO,CAAC,EACR,SAAU,GACV,aAAc,OACd,YAAa,CAAC,OAAO,CACvB,EAGA,SAAY,CACV,WAAY,CAAC,MAAM,EACnB,MAAO,CACL,UAAW,MACb,EACA,SAAU,GACV,aAAc,MAChB,EAGA,0BAA2B,CACzB,WAAY,CAAC,YAAY,EACzB,MAAO,CACL,KAAM,YACR,EACA,SAAU,GACV,aAAc,MAChB,EAGA,YAAa,CACX,WAAY,CAAC,aAAa,EAC1B,MAAO,CAAC,EACR,SAAU,GACV,aAAc,OACd,YAAa,CAAC,SAAS,CACzB,CACF,ECvqEA,qBAAS,mBAAY,kBAAc,YACnC,eAAS,0xBAoCT,IAAM,GAAe,GAAK,YACpB,GAAW,GAAK,QAChB,GAAoB,GAAK,iBACzB,GAAa,GAAK,gBAClB,GAAU,GAAK,QAGrB,SAAS,EAAW,CAAC,EAA8B,CACjD,IAAM,EAAO,IAAI,IACb,EAAS,GACb,QAAW,KAAQ,EAAQ,MAAM;AAAA,CAAI,EAAG,CACtC,GAAI,6DAA6D,KAAK,CAAI,EAAG,CAC3E,EAAS,GACT,SAGF,GAAI,MAAM,KAAK,CAAI,EAAI,EAAS,GAChC,GAAI,EAAQ,CACV,IAAM,EAAI,EAAK,MAAM,wBAAwB,EAC7C,GAAI,EAAI,EAAK,IAAI,EAAE,GAAG,YAAY,CAAC,GAGvC,OAAO,EAIF,SAAS,EAAiB,CAAC,EAAiC,CACjE,IAAM,EAAO,GAAK,EAAK,cAAc,EACrC,GAAI,CAAC,GAAW,CAAI,EAAI,OAAO,KAC/B,IAAI,EACJ,GAAI,CACF,EAAU,GAAa,EAAM,OAAO,EACpC,KAAM,CACN,OAAO,KAGT,IAAM,EAAO,GAAY,CAAO,EAC1B,EAAM,CAAC,IAAc,EAAK,IAAI,EAAE,YAAY,CAAC,EAG7C,EAAY,GAAa,KAAK,CAAG,GAAK,iBAAiB,KAAK,CAAO,GAAK,qBAAqB,KAAK,CAAO,EAEzG,EAAS,GAAS,KAAK,CAAG,EAC1B,EAAS,GAAkB,KAAK,EAAE,KAAO,EAAI,CAAC,CAAC,EAC/C,EAAa,GAAW,KAAK,EAAE,KAAO,EAAI,CAAC,CAAC,EAC5C,EAAkB,EAAa,EAAW,GAAK,GAC/C,EAAa,GAAQ,KAAK,EAAE,KAAO,EAAI,CAAC,CAAC,EACzC,EAAU,EAAa,EAAW,GAAK,GACvC,EAAU,EAAI,cAAc,EAAI,eAAiB,EAAI,MAAM,EAAI,OAAS,GAGxE,EAAiB,qBAAqB,KAAK,CAAO,EACpD,EAAa,GACjB,GAAI,CACF,EAAa,GAAY,GAAK,EAAK,KAAK,CAAC,EAAE,KAAK,KAAK,EAAE,SAAS,OAAO,CAAC,EACxE,KAAM,EACR,IAAM,EAAQ,GAAkB,EAE5B,EACA,EAAY,GACZ,EAEJ,GAAI,EAKF,GAJA,EAAY,UAGE,GAAW,GAAK,EAAK,MAAO,WAAW,CAAC,GAAK,8BAA8B,KAAK,CAAO,EAEnG,EAAU,SACV,EAAQ,6BAER,OAAU,UACV,EAAQ,iCAEL,QAAI,EACT,EAAU,MACV,EAAQ,kBAAkB,sBACrB,QAAI,EACT,EAAU,UACV,EAAY,EAAO,GACnB,EAAQ,kBAAkB,EAAO,oBAC5B,QAAI,EACT,EAAU,MACV,EAAQ,EAAiB,uCAAyC,uCAElE,OAAU,UACV,EAAQ,8BAGV,MAAO,CAAE,UAAS,YAAW,YAAW,kBAAiB,UAAS,UAAS,OAAM,EC9HnF,qBAAS,mBAAY,kBAAc,eAAa,YAChD,eAAS,2gCA2BT,IAAM,GAAc,GAAK,WACnB,GAAoB,GAAK,iBACzB,GAAiB,GAAK,cAGrB,SAAS,EAAa,CAAC,EAA8B,CAC1D,IAAM,EAAO,IAAI,IACb,EAAU,GACd,QAAW,KAAO,EAAQ,MAAM;AAAA,CAAI,EAAG,CACrC,IAAM,EAAO,EAAI,QAAQ,UAAW,EAAE,EAAE,KAAK,EAC7C,GAAI,CAAC,EAAO,SACZ,GAAI,oBAAoB,KAAK,CAAI,EAAG,CAClC,EAAU,GACV,SAEF,GAAI,EAAS,CACX,GAAI,IAAS,IAAK,CAChB,EAAU,GACV,SAEF,IAAM,EAAI,EAAK,MAAM,QAAQ,EAC7B,GAAI,EAAI,EAAK,IAAI,EAAE,GAAG,YAAY,CAAC,EACnC,SAGF,IAAM,EAAS,EAAK,MAAM,kBAAkB,EAC5C,GAAI,GAAU,EAAO,KAAO,IAAM,EAAK,IAAI,EAAO,GAAG,YAAY,CAAC,EAEpE,OAAO,EAIT,SAAS,EAAS,CAAC,EAAmB,EAAsB,CAC1D,IAAM,EAAI,EAAI,YAAY,EAC1B,QAAW,KAAK,EACd,GAAI,IAAM,GAAK,EAAE,WAAW,GAAG,IAAI,EAAI,MAAO,GAEhD,MAAO,GAOT,SAAS,EAAW,CAClB,EACA,EAC8B,CAC9B,IAAI,EACJ,QAAW,KAAK,EAAS,CACvB,GAAI,CAAC,GAAU,EAAM,EAAE,EAAE,EAAI,SAC7B,GAAI,CAAC,GAAQ,EAAE,GAAG,OAAS,EAAK,GAAG,OAAS,EAAO,EAErD,OAAO,EAGT,SAAS,EAAe,CAAC,EAAmB,EAAqC,CAC/E,IAAI,EACJ,QAAW,KAAK,EAAO,CACrB,GAAI,CAAC,GAAU,EAAM,CAAC,EAAI,SAC1B,GAAI,CAAC,GAAQ,EAAE,OAAS,EAAK,OAAS,EAAO,EAE/C,OAAO,EAGT,SAAS,EAAiB,CAAC,EAAyB,CAClD,IAAM,EAAI,EAAQ,MAAM,kBAAkB,EAC1C,OAAO,EAAI,EAAE,GAAK,GAIpB,SAAS,EAAS,CAAC,EAAsB,CACvC,IAAM,EAAM,GAAK,EAAK,KAAK,EAC3B,GAAI,CAAC,GAAW,CAAG,EAAI,MAAO,GAC9B,GAAI,CACF,QAAW,KAAQ,GAAY,CAAG,EAAG,CACnC,IAAM,EAAI,GAAK,EAAK,CAAI,EACxB,GAAI,CACF,GAAI,GAAS,CAAC,EAAE,YAAY,GAE1B,GADc,GAAY,CAAC,EACjB,KAAK,KAAK,EAAE,SAAS,KAAK,CAAC,EAAI,MAAO,GAC3C,QAAI,EAAK,SAAS,KAAK,EAC5B,MAAO,GAET,KAAM,IAEV,KAAM,EACR,MAAO,GAIT,SAAS,EAAkB,CAAC,EAAsB,CAChD,IAAM,EAAI,GAAK,EAAK,SAAS,EAC7B,GAAI,CAAC,GAAW,CAAC,EAAI,MAAO,GAC5B,GAAI,CACF,IAAM,EAAO,GAAa,EAAG,OAAO,EACpC,MAAO,qBAAqB,KAAK,CAAI,EACrC,KAAM,CACN,MAAO,IAKJ,SAAS,EAAe,CAAC,EAA+B,CAC7D,IAAM,EAAO,GAAK,EAAK,QAAQ,EAC/B,GAAI,CAAC,GAAW,CAAI,EAAI,OAAO,KAC/B,IAAI,EACJ,GAAI,CACF,EAAU,GAAa,EAAM,OAAO,EACpC,KAAM,CACN,OAAO,KAGT,IAAM,EAAa,GAAkB,CAAO,EACtC,EAAO,GAAc,CAAO,EAE5B,EAAS,GAAgB,EAAM,EAAW,EAC1C,EAAS,GAAY,EAAM,EAAiB,EAC5C,EAAQ,GAAY,EAAM,EAAc,EACxC,EAAY,GAAU,CAAG,EACzB,EAAW,GAAmB,CAAG,EAEnC,EACA,EAAY,GACZ,EAIJ,GAAI,EACF,EAAU,MACV,EAAQ,YAAY,oBACf,QAAI,EACT,EAAU,UACV,EAAY,EAAO,GACnB,EAAQ,YAAY,EAAO,kBACtB,QAAI,EACT,EAAU,MACV,EAAY,EAAM,GAClB,EAAQ,YAAY,EAAM,cACrB,QAAI,EACT,EAAU,MACV,EAAQ,gCACH,QAAI,GAAY,CAAC,EAGtB,EAAU,MACV,EAAQ,yCAER,OAAU,UACV,EAAQ,qBAGV,MAAO,CAAE,UAAS,aAAY,YAAW,OAAM,ECpLjD,qBAAS,mBAAY,kBAAc,YACnC,eAAS,48BA+BT,IAAM,GAAgB,GAAK,YAAyB,IAAI,KAAK,EAAE,YAAY,CAAC,EACtE,GAAgB,GAAK,YAAwC,IACjE,EAAE,EAAI,KAAW,CAAC,EAAG,YAAY,EAAG,CAAK,CAC3C,EACM,GAAiB,GAAK,aAAyC,IACnE,EAAE,EAAI,KAAW,CAAC,EAAG,YAAY,EAAG,CAAK,CAC3C,EACM,GAAe,GAAK,mBAAgC,IAAI,KAAK,EAAE,YAAY,CAAC,EAC5E,GAAc,GAAK,gBACnB,GAAY,GAAK,QAAmB,YAAY,EAe/C,SAAS,EAAW,CAAC,EAA+B,CAEzD,IAAM,EAAU,EAAQ,MAAM,oDAAoD,EAE5E,EAAU,EAAQ,MAAM,oCAAoC,EAC5D,GAAO,IAAU,IAAM,IAAU,IAAM,IAAI,KAAK,EAEhD,GAAc,EAAQ,MAAM,2CAA2C,IAAI,IAAM,IAAI,KAAK,EAC1F,EAAW,EAAQ,MAAM,qDAAqD,IAAI,GAElF,GADU,EAAQ,MAAM,uDAAuD,IAAI,IACrD,GAAY,IAAI,KAAK,EAEnD,EAAgB,8CAA8C,KAAK,CAAO,EAC1E,EAAU,kCAAkC,KAAK,CAAO,EACxD,EAAS,gCAAgC,KAAK,CAAO,EACrD,EAAkB,kDAAkD,KAAK,CAAO,EAEhF,EAAW,IAAI,IACrB,QAAW,KAAK,EAAQ,SAAS,qDAAqD,EACpF,EAAS,IAAI,EAAE,GAAG,YAAY,CAAC,EAGjC,QAAW,KAAK,EAAQ,SAAS,+CAA+C,EAC9E,EAAS,IAAI,EAAE,GAAG,YAAY,CAAC,EAGjC,IAAM,EAAgB,IAAI,IAC1B,QAAW,KAAK,EAAQ,SAAS,uDAAuD,EACtF,EAAc,IAAI,EAAE,GAAG,YAAY,CAAC,EAGtC,MAAO,CACL,MACA,aACA,kBACA,gBACA,UACA,SACA,kBACA,WACA,eACF,EAGF,SAAS,EAAU,CAAC,EAAmB,EAAqB,CAC1D,IAAM,EAAI,EAAG,YAAY,EACzB,GAAI,EAAK,IAAI,CAAC,EAAI,MAAO,GAEzB,QAAW,KAAK,EACd,GAAI,IAAM,GAAK,EAAE,WAAW,GAAG,IAAI,EAAI,MAAO,GAEhD,MAAO,GAGT,SAAS,EAAgB,CAAC,EAAmB,EAAgE,CAC3G,IAAI,EACJ,QAAY,EAAI,KAAU,EAAS,CACjC,GAAI,CAAC,GAAW,EAAM,CAAE,EAAI,SAC5B,GAAI,CAAC,GAAQ,EAAG,OAAS,EAAK,GAAG,OAAS,EAAO,CAAC,EAAI,CAAK,EAE7D,OAAO,EAGT,SAAS,EAAc,CAAC,EAAuC,CAC7D,IAAI,EACJ,QAAW,KAAM,GAAc,CAC7B,GAAI,CAAC,GAAW,EAAM,CAAE,EAAI,SAC5B,GAAI,CAAC,GAAQ,EAAG,OAAS,EAAK,OAAS,EAAO,EAGhD,QAAW,KAAK,EACd,GAAI,IAAM,wBAA0B,EAAE,WAAW,uBAAuB,GACtE,GAAI,CAAC,GAAQ,EAAE,OAAS,EAAK,OAAS,EAAO,EAGjD,OAAO,EAGT,SAAS,EAAmB,CAAC,EAAmD,CAC9E,IAAM,EAAI,EAAI,YAAY,EAC1B,GAAI,CAAC,EAAI,OAET,IAAI,EACJ,QAAW,KAAO,GAAa,CAC7B,IAAM,EAAO,EAAI,GAAG,YAAY,EAChC,GAAI,IAAM,GAAQ,EAAE,WAAW,GAAG,IAAO,GACvC,GAAI,CAAC,GAAQ,EAAK,OAAS,EAAK,GAAG,OAAS,EAAO,GAGvD,OAAO,EAGT,SAAS,EAAK,CAAC,EAA6B,CAC1C,IAAM,EAAI,EAAW,YAAY,EACjC,OAAO,IAAM,OAAS,IAAM,SAI9B,SAAS,EAAI,CAAC,EAAwB,EAA2B,CAC/D,GAAI,IAAY,MAAQ,MAAO,GAC/B,GAAI,IAAY,SAAW,MAAO,GAClC,GAAI,IAAY,UAAY,MAAO,GACnC,GAAI,IAAY,MAAQ,MAAO,GAC/B,GAAI,GAAa,IAAc,GAAK,MAAO,GAC3C,MAAO,GAIF,SAAS,EAAc,CAC5B,EACA,EAC8D,CAC9D,IAAM,EAAO,EAAgB,QAAQ,aAAc,EAAE,GAC7C,MAAK,WAAU,gBAAe,cAAe,EAEjD,EACA,EAAY,GACZ,EAEE,EAAS,GAAe,CAAQ,EAChC,EAAc,GAAoB,CAAG,EACrC,EAAU,GAAiB,EAAU,EAAa,EAClD,EAAS,GAAiB,EAAU,EAAY,EAChD,EAAgB,GAAY,KAAK,KAAK,GAAW,EAAU,CAAC,CAAC,EAC7D,EAAe,EAAc,IAAI,0BAA0B,EAIjE,GAAI,EACF,EAAU,MACV,EAAY,MACZ,EAAQ,GAAG,OAAqB,oBAC3B,QAAI,EAAO,eAAiB,IAAc,KAAO,QAAU,EAChE,EAAU,UACV,EAAY,IAAU,KAAO,IAAc,KAAO,OAAS,EAAY,GAAK,QAC5E,EAAQ,GAAG,aAA2B,KACjC,QAAI,EAAO,QAChB,EAAU,SACV,EAAY,OACZ,EAAQ,GAAG,qBACN,QAAI,EAAO,QAAU,EAAO,gBACjC,EAAU,UACV,EAAY,EAAO,QAAU,EAAO,gBAChC,eACA,EAAO,OACL,MACA,gBACN,EAAQ,GAAG,OAAqB,IAC3B,QAAI,IAAc,KAAO,MAC9B,EAAU,UACV,EAAY,EAAgB,OAAS,EAAY,GACjD,EAAQ,GAAG,WAAyB,EAAY,KAAK,EAAgB,qBAAuB,oBACvF,QAAI,IAAc,KAAO,SAC9B,EAAU,UACV,EAAY,EAAY,GACxB,EAAQ,GAAG,WAAyB,EAAY,cAC3C,QAAI,IAAc,KAAO,cAC9B,EAAU,UACV,EAAY,EAAY,GACxB,EAAQ,GAAG,WAAyB,EAAY,mBAC3C,QAAI,IAAc,KAAO,SAC9B,EAAU,UACV,EAAY,EAAY,GACxB,EAAQ,GAAG,WAAyB,EAAY,cAC3C,QAAI,IAAc,KAAO,YAC9B,EAAU,UACV,EAAY,EAAY,GACxB,EAAQ,GAAG,WAAyB,EAAY,2BAC3C,QAAI,GAAgB,GAAM,CAAU,EAEzC,EAAU,UACV,EAAY,eACZ,EAAQ,GAAG,yDACN,QAAI,GAAgB,CAAC,GAAM,CAAU,EAC1C,EAAU,UACV,EAAY,eACZ,EAAQ,GAAG,gEACN,QAAI,IAAW,GAAM,CAAU,GAAK,CAAC,GAE1C,EAAU,MACV,EAAY,EAAO,GACnB,EAAQ,GAAG,OAAqB,EAAO,cAClC,QAAI,GAAM,CAAU,EACzB,EAAU,MACV,EAAQ,GAAG,kCACN,KACL,EAAU,UACV,IAAM,EAAU,EAAM,QAAQ,IAAQ,GAEtC,GADA,EAAQ,GAAG,IAAkB,uBAA6B,QAAQ,yBAA0B,EAAE,EAC1F,CAAC,GAAO,EAAI,YAAY,IAAM,IAAY,EAAI,YAAY,EAAE,WAAW,GAAG,KAAW,EACvF,EAAQ,GAAG,uBAIf,MAAO,CACL,UACA,YAAa,EACb,gBAAiB,EAAO,gBACxB,IAAK,GAAO,oBACZ,YACA,OACF,EAIK,SAAS,EAAe,CAAC,EAAuB,CACrD,GAAI,CAAC,GAAW,CAAG,EAAI,MAAO,CAAC,EAC/B,GAAI,CACF,OAAO,GAAY,CAAG,EAAE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,SAAS,CAAC,EAAE,KAAK,EAC9E,KAAM,CACN,MAAO,CAAC,GASL,SAAS,EAAmB,CAAC,EAAmC,CACrE,IAAM,EAAQ,GAAgB,CAAG,EACjC,GAAI,EAAM,SAAW,EAAI,OAAO,KAEhC,IAAI,EAA6B,KAC7B,EAAW,IAEf,QAAW,KAAQ,EAAO,CACxB,IAAM,EAAO,GAAK,EAAK,CAAI,EACvB,EACJ,GAAI,CACF,EAAU,GAAa,EAAM,OAAO,EACpC,KAAM,CACN,SAEF,IAAM,EAAS,GAAY,CAAO,EAC5B,EAAa,GAAe,EAAQ,CAAI,EACxC,EAAI,GAAK,EAAW,QAAS,EAAW,SAAS,EACvD,GAAI,CAAC,GAAQ,EAAI,EACf,EAAO,EACP,EAAW,EAIf,OAAO,EC3ST,qBAAS,mBAAY,kBAAc,eAAa,YAChD,eAAS,ijEAiDT,IAAM,GAAiB,EAAK,aAA0B,IAAI,KAAK,EAAE,YAAY,CAAC,EACxE,GAAe,EAAK,WAAuC,IAC/D,EAAE,EAAI,KAAW,CAAC,EAAG,YAAY,EAAG,CAAK,CAC3C,EACM,GAAe,EAAK,WAAuC,IAC/D,EAAE,EAAI,KAAW,CAAC,EAAG,YAAY,EAAG,CAAK,CAC3C,EACM,GAAiB,EAAK,aAAyC,IACnE,EAAE,EAAI,KAAW,CAAC,EAAG,YAAY,EAAG,CAAK,CAC3C,EACM,GAAmB,EAAK,eAA4B,IAAI,KAAK,EAAE,YAAY,CAAC,EAC5E,GAAe,EAAK,WAAwB,IAAI,KAAK,EAAE,YAAY,CAAC,EACpE,GAAsB,EAAK,iBAA8B,IAAI,KAAK,EAAE,YAAY,CAAC,EACjF,GAAe,EAAK,WAAuC,IAC/D,EAAE,EAAI,KAAW,CAAC,EAAG,YAAY,EAAG,CAAK,CAC3C,EACM,GAAiB,EAAK,aAAyC,IACnE,EAAE,EAAI,KAAW,CAAC,EAAG,YAAY,EAAG,CAAK,CAC3C,EACM,GAAmB,EAAK,eAA4B,IAAI,KAAK,EAAE,YAAY,CAAC,EAE5E,GAAmB,CACvB,UACA,eACA,mBACA,kBACA,qBACF,EAGO,SAAS,EAAS,CAAC,EAAsB,CAC9C,OAAO,GAAiB,KAAK,KAAK,GAAW,EAAK,EAAK,CAAC,CAAC,CAAC,EAG5D,SAAS,EAAQ,CAAC,EAA6B,CAC7C,GAAI,CACF,OAAO,GAAa,EAAM,OAAO,EACjC,KAAM,CACN,OAAO,MAKJ,SAAS,EAAmB,CAAC,EAA0B,CAC5D,IAAM,EAAU,IAAI,IACd,EAAY,IAAI,IAClB,EAAU,GAEd,QAAW,KAAO,EAAQ,MAAM;AAAA,CAAI,EAAG,CACrC,IAAM,EAAO,EAAI,QAAQ,OAAQ,EAAE,EAAE,KAAK,EAC1C,GAAI,CAAC,EAAO,SACZ,IAAM,EAAM,EAAK,MAAM,gBAAgB,EACvC,GAAI,EAAK,CACP,EAAU,EAAI,GAAG,KAAK,EAAE,YAAY,EACpC,SAIF,IAAM,EAAQ,EAAK,MAAM,sDAAsD,EAC/E,GAAI,IAAU,IAAY,WAAa,EAAQ,SAAS,UAAU,GAAI,CACpE,EAAQ,IAAI,EAAM,GAAG,QAAQ,KAAM,GAAG,EAAE,YAAY,EAAG,EAAM,GAAG,YAAY,CAAC,EAC7E,EAAQ,IAAI,EAAM,GAAG,YAAY,EAAG,EAAM,GAAG,YAAY,CAAC,EAC1D,SAGF,IAAM,EAAS,EAAK,MAAM,0DAA0D,EACpF,GAAI,IAAW,IAAY,aAAe,EAAQ,SAAS,YAAY,GAAI,CACzE,IAAM,EAAM,EAAO,GAAG,YAAY,EAClC,EAAU,IAAI,EAAK,EAAO,GAAG,YAAY,CAAC,EAC1C,EAAU,IAAI,EAAI,QAAQ,KAAM,GAAG,EAAG,EAAO,GAAG,YAAY,CAAC,EAC7D,SAEF,IAAM,EAAW,EAAK,MACpB,oFACF,EACA,GAAI,IAAa,IAAY,aAAe,EAAQ,SAAS,YAAY,GAAI,CAC3E,IAAM,EAAK,GAAG,EAAS,MAAM,EAAS,KAAK,YAAY,EACjD,EAAM,EAAS,GAAG,YAAY,EACpC,EAAU,IAAI,EAAK,CAAE,EACrB,EAAU,IAAI,EAAI,QAAQ,KAAM,GAAG,EAAG,CAAE,EACxC,SAGF,IAAM,EAAQ,EAAK,MAAM,oCAAoC,EAC7D,GAAI,EAAO,CACT,IAAM,EAAM,EAAM,GAAG,YAAY,EAC3B,EAAM,EAAM,GAClB,GAAI,IAAY,WAAa,EAAQ,SAAS,UAAU,EAAG,CACzD,IAAM,EAAK,EAAI,MAAM,GAAG,EAAE,GAAG,YAAY,EACzC,EAAQ,IAAI,EAAK,CAAE,EACnB,EAAQ,IAAI,EAAI,QAAQ,KAAM,GAAG,EAAG,CAAE,EACjC,QAAI,IAAY,aAAe,EAAQ,SAAS,YAAY,EAAG,CACpE,IAAM,EAAQ,EAAI,MAAM,GAAG,EAC3B,GAAI,EAAM,QAAU,EAAG,CACrB,IAAM,EAAK,GAAG,EAAM,MAAM,EAAM,KAAK,YAAY,EACjD,EAAU,IAAI,EAAK,CAAE,EACrB,EAAU,IAAI,EAAI,QAAQ,KAAM,GAAG,EAAG,CAAE,KAKhD,MAAO,CAAE,UAAS,WAAU,EAG9B,SAAS,EAAW,CAAC,EAAuB,CAC1C,IAAM,EAAO,EAAK,EAAM,SAAU,oBAAoB,EACtD,GAAI,CAAC,GAAW,CAAI,EAAI,MAAO,CAAE,QAAS,IAAI,IAAO,UAAW,IAAI,GAAM,EAC1E,IAAM,EAAO,GAAS,CAAI,EAC1B,GAAI,CAAC,EAAO,MAAO,CAAE,QAAS,IAAI,IAAO,UAAW,IAAI,GAAM,EAC9D,OAAO,GAAoB,CAAI,EAI1B,SAAS,EAAqB,CAAC,EAA2B,CAC/D,IAAM,EAAiB,CAAC,EAExB,QAAW,KAAK,EAAQ,SAAS,2BAA2B,EAC1D,QAAW,KAAQ,EAAE,GAAG,MAAM,GAAG,EAAG,CAClC,IAAM,EAAO,EAAK,QAAQ,WAAY,EAAE,EAAE,QAAQ,KAAM,EAAE,EAC1D,GAAI,EAAO,EAAK,KAAK,EAAK,QAAQ,KAAM,GAAG,CAAC,EAGhD,QAAW,KAAK,EAAQ,SAAS,0CAA0C,EACzE,QAAW,KAAQ,EAAE,GAAG,MAAM,GAAG,EAAG,CAClC,IAAM,EAAO,EAAK,QAAQ,WAAY,EAAE,EAAE,QAAQ,KAAM,EAAE,EAC1D,GAAI,EAAO,EAAK,KAAK,EAAK,QAAQ,KAAM,GAAG,CAAC,EAIhD,QAAW,KAAK,EAAQ,SACtB,+FACF,EACE,EAAK,KAAK,EAAE,GAAG,QAAQ,QAAS,EAAE,CAAC,EAErC,MAAO,CAAC,GAAG,IAAI,IAAI,CAAI,CAAC,EAG1B,SAAS,EAAoB,CAAC,EAAiB,EAA+B,CAC5E,IAAM,EAAU,IAAI,IAEpB,QAAW,KAAK,EAAQ,SAAS,oCAAoC,EACnE,EAAQ,IAAI,EAAE,GAAG,YAAY,CAAC,EAGhC,QAAW,KAAK,EAAQ,SAAS,0BAA0B,EACzD,EAAQ,IAAI,EAAE,GAAG,YAAY,CAAC,EAGhC,QAAW,KAAS,EAAQ,SAAS,2BAA2B,EAC9D,QAAW,KAAO,EAAM,GAAG,MAAM,OAAO,EAAG,CACzC,IAAM,EAAO,EAAI,QAAQ,UAAW,EAAE,EAAE,KAAK,EAC7C,GAAI,CAAC,GAAQ,EAAK,WAAW,IAAI,GAAK,EAAK,WAAW,QAAQ,GAAK,EAAK,WAAW,OAAO,EACxF,SAEF,IAAM,EAAO,EAAK,MAAM,sBAAsB,GAAK,EAAK,MAAM,4BAA4B,EAC1F,GAAI,EAAO,EAAQ,IAAI,EAAK,GAAG,YAAY,CAAC,EAIhD,QAAW,KAAK,EAAQ,SAAS,wCAAwC,EAAG,CAC1E,IAAM,EAAI,EAAE,GAAG,YAAY,EAC3B,GAAI,IAAM,MAAQ,EAAQ,IAAI,0BAA0B,EACnD,QAAI,IAAM,gBAAkB,EAAQ,IAAI,oCAAoC,EAC5E,QAAI,IAAM,UAAY,EAAQ,IAAI,8BAA8B,EAC/D,OAAQ,IAAI,wBAAwB,GAAG,EAG/C,QAAW,KAAK,EAAQ,SAAS,kCAAkC,EAAG,CACpE,IAAM,EAAQ,EAAE,GAAG,YAAY,EACzB,EACJ,EAAQ,QAAQ,IAAI,CAAK,GACzB,EAAQ,QAAQ,IAAI,EAAM,QAAQ,MAAO,GAAG,CAAC,GAC7C,EAAQ,QAAQ,IAAI,EAAM,QAAQ,KAAM,GAAG,CAAC,EAC9C,GAAI,EAAW,EAAQ,IAAI,CAAQ,EAGjC,QAAI,EAAM,SAAS,QAAQ,GAAK,EAAM,SAAS,MAAM,EACnD,EAAQ,IAAI,0BAA0B,EAK5C,QAAW,KAAK,EAAQ,SAAS,wCAAwC,EACvE,EAAQ,IAAI,EAAE,GAAG,YAAY,CAAC,EAEhC,OAAO,EAGT,SAAS,EAAsB,CAAC,EAAiB,EAA+B,CAC9E,IAAM,EAAO,IAAI,IAEjB,QAAW,KAAK,EAAQ,SAAS,wDAAwD,EACvF,EAAK,IAAI,EAAE,GAAG,YAAY,CAAC,EAG7B,QAAW,KAAK,EAAQ,SAAS,yBAAyB,EAAG,CAC3D,IAAM,EAAQ,EAAE,GAAG,YAAY,EAC/B,GAAI,EAAM,WAAW,UAAU,EAAI,SACnC,IAAM,EAAO,CACX,EACA,EAAM,QAAQ,MAAO,GAAG,EACxB,EAAM,QAAQ,KAAM,GAAG,CACzB,EACA,QAAW,KAAK,EAAM,CACpB,IAAM,EAAK,EAAQ,UAAU,IAAI,CAAC,EAClC,GAAI,EAAI,CACN,EAAK,IAAI,EAAG,SAAS,GAAG,EAAI,EAAG,MAAM,GAAG,EAAE,MAAM,EAAG,CAAC,EAAE,KAAK,GAAG,EAAI,CAAE,EACpE,QAIN,OAAO,EAGT,SAAS,EAAmB,CAAC,EAK3B,CACA,IAAM,GACH,EAAQ,MAAM,yCAAyC,IAAI,IAAM,OAAO,KAAK,EAAE,YAAY,EACxF,EAAU,IAAI,IACd,EAAc,EAAQ,MAAM,+BAA+B,EACjE,GAAI,EAAa,CACf,IAAM,EAAI,EAAY,GAAG,MAAM,qCAAqC,IAAI,IAAI,KAAK,EAC3E,EAAI,EAAY,GAAG,MAAM,2CAA2C,IAAI,IAAI,KAAK,EACvF,GAAI,GAAK,EAAI,EAAQ,IAAI,GAAG,KAAK,IAAI,YAAY,CAAC,EAEpD,IAAM,EAAY,IAAI,IACtB,QAAW,KAAK,EAAQ,SAAS,wCAAwC,EAAG,CAC1E,IAAM,EAAI,EAAE,GAAG,MAAM,qCAAqC,IAAI,IAAI,KAAK,EACjE,EAAI,EAAE,GAAG,MAAM,2CAA2C,IAAI,IAAI,KAAK,EAC7E,GAAI,GAAK,EAAI,EAAU,IAAI,GAAG,KAAK,IAAI,YAAY,CAAC,EAEtD,IAAM,EAAoB,CAAC,EAC3B,QAAW,KAAK,EAAQ,SAAS,oCAAoC,EACnE,EAAQ,KAAK,EAAE,GAAG,KAAK,CAAC,EAE1B,MAAO,CAAE,YAAW,UAAS,YAAW,SAAQ,EAGlD,SAAS,EAAS,CAAC,EAAsB,EAAqB,CAC5D,IAAM,EAAI,EAAG,YAAY,EACzB,GAAI,EAAQ,IAAI,CAAC,EAAI,MAAO,GAC5B,QAAW,KAAK,EACd,GAAI,IAAM,GAAK,EAAE,SAAS,IAAI,GAAG,GAAK,IAAM,EAAE,QAAQ,iBAAkB,EAAE,EAAI,MAAO,GAEvF,MAAO,GAGT,SAAS,EAAW,CAClB,EACA,EACA,EAC8B,CAC9B,IAAI,EACJ,QAAY,EAAI,KAAU,EAAS,CACjC,IAAI,EAAM,GACV,GAAI,IAAS,SAAW,EAAM,GAAU,EAAK,CAAE,EAI7C,QAFA,EAAM,EAAI,IAAI,CAAE,GAAK,CAAC,GAAG,CAAG,EAAE,KAAK,KAAK,IAAM,GAAM,EAAE,WAAW,GAAG,IAAK,GAAK,EAAE,WAAW,GAAG,IAAK,CAAC,EAEhG,CAAC,GAAO,IAAS,WACnB,EAAM,CAAC,GAAG,CAAG,EAAE,KAAK,KAAK,IAAM,GAAM,EAAE,WAAW,GAAG,GAAI,CAAC,EAG9D,GAAI,CAAC,EAAM,SACX,GAAI,CAAC,GAAQ,EAAG,OAAS,EAAK,GAAG,OAAS,EAAO,CAAC,EAAI,CAAK,EAE7D,OAAO,EAGT,SAAS,EAAM,CAAC,EAA4C,CAC1D,IAAI,EACJ,QAAW,KAAM,GACf,QAAW,KAAK,EAAW,CACzB,GAAI,IAAM,GAAM,EAAE,WAAW,GAAG,IAAK,GAAK,EAAE,WAAW,EAAG,QAAQ,QAAS,GAAG,CAAC,GAC7E,GAAI,CAAC,GAAQ,EAAG,OAAS,EAAK,OAAS,EAAO,EAGhD,GAAI,EAAE,WAAW,yBAAyB,GAAK,EAAE,SAAS,uBAAuB,GAAK,EAAE,SAAS,eAAe,GAC9G,GAAI,CAAC,GAAQ,EAAE,OAAS,EAAK,OAAS,EAAO,GAInD,OAAO,EAGT,SAAS,EAAY,CAAC,EAAqE,CACzF,IAAM,EAAQ,IAAI,IACd,EAAS,GACT,EAAO,GACL,EAAQ,CACZ,EAAK,EAAK,KAAK,EACf,EAAK,EAAK,MAAO,MAAM,CACzB,EACM,EAAO,CAAC,EAAW,IAAwB,CAC/C,GAAI,EAAQ,GAAK,CAAC,GAAW,CAAC,EAAI,OAClC,IAAI,EACJ,GAAI,CACF,EAAU,GAAY,CAAC,EACvB,KAAM,CACN,OAEF,QAAW,KAAQ,EAAS,CAC1B,GAAI,IAAS,eAAiB,IAAS,cAAgB,IAAS,WAAa,IAAS,UACpF,EAAM,IAAI,CAAI,EAEhB,IAAM,EAAO,EAAK,EAAG,CAAI,EACzB,GAAI,CAEF,GADW,GAAS,CAAI,EACjB,YAAY,EAAI,EAAK,EAAM,EAAQ,CAAC,EACtC,QAAI,EAAK,SAAS,KAAK,GAAK,EAAK,SAAS,MAAM,EAAI,EAAS,GAC7D,QAAI,EAAK,SAAS,OAAO,EAAI,EAAO,GACzC,KAAM,KAGZ,QAAW,KAAK,EAAQ,EAAK,EAAG,CAAC,EAEjC,MAAO,CAAE,SAAQ,OAAM,OAAM,EAG/B,SAAS,EAAc,CAAC,EAGtB,CACA,IAAM,EAAmB,CAAC,EACpB,EAAU,EAAI,QACd,EAAO,EAAI,UAEX,EAAQ,GAAY,KAAK,KAAK,GAAU,EAAS,CAAC,CAAC,GAAK,EAAI,YAAY,IAAI,YAAY,EACxF,EAAe,GAAU,EAAS,yBAAyB,EAC3D,EACJ,GAAU,EAAS,qBAAqB,GACxC,GAAU,EAAS,0CAA0C,EAC/D,GAAI,GAAgB,EAAe,EAAO,KAAK,SAAS,EACxD,GAAI,EAAQ,EAAO,KAAK,eAAe,EAEvC,IAAM,EAAM,GAAO,CAAI,EACjB,EAAU,GAAY,EAAS,GAAa,QAAQ,EACpD,EAAY,GAAY,EAAI,QAAS,GAAa,QAAQ,EAC1D,EAAS,GAAY,EAAM,GAAe,UAAU,EACpD,EAAU,GAAY,EAAS,GAAa,QAAQ,EACpD,EAAS,GAAY,EAAM,GAAe,UAAU,EACpD,EAAc,GAAgB,KAAK,KAAK,GAAU,EAAS,CAAC,CAAC,EAC7D,EAAe,EAAI,YAAc,MAEnC,EACA,EAAY,GACZ,EAGJ,GAAI,EACF,EAAU,SACV,EAAY,EAAQ,cAAgB,UACpC,EAAQ,GAAG,EAAI,MAAQ,qCAAqC,KACvD,QAAI,EACT,EAAU,MACV,EAAY,MACZ,EAAO,KAAK,KAAK,EACjB,EAAQ,GAAG,EAAI,MAAQ,YAAY,qBAC9B,QAAI,GAAW,GAAa,EAAQ,CACzC,EAAU,UACV,EAAY,IAAU,IAAM,IAAY,IAAM,IAAS,IAAM,MAC7D,IAAM,EAAM,IAAU,IAAM,IAAY,IAAM,IAAS,IAAM,MAC7D,EAAQ,GAAG,EAAI,MAAQ,YAAY,kBAC9B,QAAI,GAAS,CAAC,EAEnB,EAAU,UACV,EAAY,uBACZ,EAAQ,GAAG,EAAI,MAAQ,8CAClB,QAAI,EACT,EAAU,UACV,EAAY,EAAQ,cAAgB,UACpC,EAAQ,GAAG,EAAI,MAAQ,6BAA6B,KAC/C,QAAI,GAAW,EAAI,uBAAyB,EAAI,cAAgB,IAAc,GAAW,EAAI,aAClG,EAAU,MACV,EAAY,IAAS,IAAM,cAC3B,EAAQ,EACJ,GAAG,EAAI,MAAQ,YAAY,EAAO,eAClC,GAAG,EAAI,MAAQ,wCACd,QAAI,EAAI,sBAAwB,CAAC,EACtC,EAAU,MACV,EAAY,cACZ,EAAQ,GAAG,EAAI,MAAQ,wCAClB,QAAI,EACT,EAAU,UACV,EAAQ,GAAG,EAAI,MAAQ,gDAClB,KACL,EAAU,UACV,IAAM,EAAO,EAAI,eAAiB,CAAC,EAAI,YAAc,SAAW,MAEhE,GADA,EAAQ,GAAG,EAAI,MAAQ,WAAW,aAC9B,EAAc,EAAQ,GAAG,EAAI,MAAQ,sCAG3C,IAAI,EAAkD,OACtD,GAAI,EAAI,eAAiB,EAAI,YAAc,EAAe,cACrD,QAAI,EAAI,eAAiB,GAAmB,KAAK,KAAK,GAAU,EAAS,CAAC,CAAC,GAAK,EACnF,EAAe,SAIjB,IAAM,EAAa,CAAC,GAAG,IAAI,IAAI,CAAM,CAAC,EAEtC,MAAO,CACL,UACA,YACA,OAAQ,EACR,QACA,UAAW,EAAI,UACf,cACF,EAGF,SAAS,EAAI,CAAC,EAAqB,EAA0B,CAC3D,GAAI,IAAY,MAAQ,MAAO,GAC/B,GAAI,IAAY,SAAW,MAAO,GAClC,GAAI,EAAO,SAAS,eAAe,GAAK,IAAY,UAAY,MAAO,GACvE,GAAI,IAAY,UAAY,MAAO,GACnC,GAAI,IAAY,MAAQ,MAAO,GAC/B,GAAI,EAAO,SAAS,eAAe,EAAI,MAAO,GAC9C,GAAI,EAAO,SAAS,SAAS,EAAI,MAAO,GACxC,MAAO,GAGT,SAAS,EAAmB,CAAC,EAAc,EAAa,EAAwC,CAC9F,IAAM,EAAM,EAAM,EAAK,EAAM,CAAG,EAAI,EAC9B,EAAM,EAAK,EAAK,kBAAkB,EAClC,EAAS,EAAK,EAAK,cAAc,EACjC,EAAO,GAAW,CAAG,EAAI,EAAM,GAAW,CAAM,EAAI,EAAS,KACnE,GAAI,CAAC,EAAO,OAAO,KACnB,IAAM,EAAU,GAAS,CAAI,EAC7B,GAAI,CAAC,EAAU,OAAO,KACtB,IAAM,EAAU,GAAqB,EAAS,CAAO,EAC/C,EAAY,GAAuB,EAAS,CAAO,EACnD,EAAU,GAAa,CAAG,EAC1B,EACJ,mBAAmB,KAAK,CAAO,GAC/B,oBAAoB,KAAK,CAAO,GAChC,aAAa,KAAK,CAAO,EACrB,EACJ,GAAU,EAAS,aAAa,GAChC,GAAU,EAAS,wBAAwB,EAE7C,MAAO,CACL,KAAM,GAAO,eACb,UACA,YACA,UAAW,MACX,QAAS,IAAI,IACb,eACA,uBACA,YAAa,EAAQ,MACrB,cAAe,EAAQ,QAAU,EAAK,SAAS,MAAM,EACrD,YAAa,EAAQ,KACrB,UAAW,QACb,EAGF,SAAS,EAAkB,CAAC,EAAc,EAAmC,CAC3E,IAAM,EAAM,EAAM,EAAK,EAAM,CAAG,EAAI,EAC9B,EAAU,EAAK,EAAK,SAAS,EACnC,GAAI,CAAC,GAAW,CAAO,EAAI,OAAO,KAClC,IAAM,EAAU,GAAS,CAAO,EAChC,GAAI,CAAC,EAAU,OAAO,KACtB,IAAQ,YAAW,UAAS,aAAc,GAAoB,CAAO,EAC/D,EAAU,GAAa,CAAG,EAChC,MAAO,CACL,KAAM,EAAM,GAAG,YAAgB,UAC/B,QAAS,IAAI,IACb,YACA,YACA,UACA,aAAc,cAAc,KAAK,CAAO,EACxC,qBAAsB,GACtB,YAAa,EAAQ,MACrB,cAAe,EAAQ,OACvB,YAAa,EAAQ,KACrB,UAAW,OACb,EAOK,SAAS,EAAgB,CAAC,EAAgC,CAC/D,GAAI,CAAC,GAAU,CAAG,EAAI,OAAO,KAE7B,IAAM,EAAU,GAAY,CAAG,EACzB,EAA2B,CAAC,EAG9B,EAA8B,KAClC,QAAW,IAAK,CAAC,sBAAuB,iBAAiB,EAAG,CAC1D,IAAM,EAAI,EAAK,EAAK,CAAC,EACrB,GAAI,GAAW,CAAC,EAAG,CACjB,EAAe,GAAS,CAAC,EACzB,OAGJ,IAAM,EAAW,EAAe,GAAsB,CAAY,EAAI,CAAC,EAGjE,EAAa,GAAoB,EAAK,GAAI,CAAO,EACvD,GAAI,EAAa,EAAQ,KAAK,CAAU,EAExC,QAAW,KAAO,EAAU,CAC1B,IAAM,EAAI,GAAoB,EAAK,EAAK,CAAO,EAC/C,GAAI,EAAI,EAAQ,KAAK,CAAC,EAIxB,IAAM,EAAU,GAAmB,EAAK,EAAE,EAC1C,GAAI,EAAS,CACX,EAAQ,KAAK,CAAO,EACpB,IAAM,EAAa,GAAS,EAAK,EAAK,SAAS,CAAC,EAChD,GAAI,EAAY,CACd,IAAQ,QAAS,GAAY,GAAoB,CAAU,EAC3D,QAAW,KAAM,EAAS,CACxB,IAAM,EAAI,GAAmB,EAAK,CAAE,EACpC,GAAI,EAAI,EAAQ,KAAK,CAAC,IAM5B,GAAI,EAAQ,SAAW,GAAK,EAC1B,MAAO,CACL,QAAS,UACT,UAAW,GACX,UAAW,SACX,aAAc,cACd,OAAQ,CAAC,EACT,MAAO,6CACT,EAGF,GAAI,EAAQ,SAAW,EAAI,OAAO,KAElC,IAAI,EAA0B,KAC1B,EAAW,IACf,QAAW,KAAO,EAAS,CACzB,IAAM,EAAI,GAAe,CAAG,EACtB,EAAI,GAAK,EAAE,QAAS,EAAE,MAAM,EAClC,GAAI,CAAC,GAAQ,EAAI,EACf,EAAO,CACL,QAAS,EAAE,QACX,UAAW,EAAE,UACb,UAAW,EAAE,UACb,aAAc,EAAE,aAChB,OAAQ,EAAE,OACV,MAAO,EAAE,KACX,EACA,EAAW,EAMf,GAAI,GAAQ,EAAS,OAAS,GAAK,CAAC,EAAK,MAAM,SAAS,eAAe,EAAG,CAI1E,OAAO,ECvmBT,qBAAS,mBAAY,kBAAc,eAAa,YAChD,eAAS,2nBAyBT,IAAM,GAAY,GAAK,QAAqB,IAAI,KAAK,EAAE,YAAY,CAAC,EAC9D,GAAY,GAAK,QAAoC,IACzD,EAAE,EAAG,KAAW,CAAC,EAAE,YAAY,EAAG,CAAK,CACzC,EACM,GAAY,GAAK,QAAoC,IACzD,EAAE,EAAG,KAAW,CAAC,EAAE,YAAY,EAAG,CAAK,CACzC,EACM,GAAe,GAAK,iBAGnB,SAAS,EAAU,CAAC,EAAsB,CAC/C,OACE,GAAW,EAAK,EAAK,SAAS,CAAC,GAC/B,GAAW,EAAK,EAAK,SAAS,CAAC,GAC/B,GAAW,CAAG,EAIlB,SAAS,EAAU,CAAC,EAAsB,CACxC,GAAI,CACF,OAAO,GAAY,CAAG,EAAE,KAAK,KAAK,EAAE,SAAS,UAAU,CAAC,EACxD,KAAM,CACN,MAAO,IAIX,SAAS,EAAQ,CAAC,EAA6B,CAC7C,GAAI,CACF,OAAO,GAAa,EAAM,OAAO,EACjC,KAAM,CACN,OAAO,MAQJ,SAAS,EAAgB,CAAC,EAA8B,CAC7D,IAAM,EAAO,IAAI,IACjB,QAAW,KAAO,EAAQ,MAAM;AAAA,CAAI,EAAG,CAErC,IAAM,EAAO,EAAI,QAAQ,OAAQ,EAAE,EAAE,KAAK,EAC1C,GAAI,CAAC,EAAO,SAEZ,IAAM,EAAI,EAAK,MAAM,6BAA6B,GAC7C,EAAK,MAAM,+BAA+B,EAC/C,GAAI,EAAI,EAAK,IAAI,EAAE,GAAG,YAAY,CAAC,EAErC,OAAO,EAOF,SAAS,EAAoB,CAAC,EAA8B,CACjE,IAAM,EAAO,IAAI,IACb,EAAU,GACd,QAAW,KAAO,EAAQ,MAAM;AAAA,CAAI,EAAG,CACrC,IAAM,EAAO,EAAI,QAAQ,MAAO,EAAE,EAClC,GAAI,iBAAiB,KAAK,CAAI,EAAG,CAC/B,EAAU,GACV,SAGF,GAAI,EAAS,CACX,GAAI,SAAS,KAAK,CAAI,GAAK,EAAK,WAAW,WAAW,GAAK,EAAK,WAAW,cAAc,GACpF,EAAK,WAAW,SAAS,GAAK,EAAK,WAAW,cAAc,GAAK,EAAK,WAAW,WAAW,EAAG,CAClG,EAAU,GACV,SAGF,IAAM,EAAI,EAAK,MAAM,+BAA+B,EACpD,GAAI,EAAI,EAAK,IAAI,EAAE,GAAG,YAAY,CAAC,GAGvC,OAAO,EAIF,SAAS,EAAgB,CAAC,EAA8B,CAC7D,IAAM,EAAO,IAAI,IACjB,QAAW,KAAO,EAAQ,MAAM;AAAA,CAAI,EAAG,CAGrC,IAAM,EAFO,EAAI,QAAQ,OAAQ,EAAE,EAEpB,MAAM,oEAAoE,EACzF,GAAI,EAAI,EAAK,IAAI,EAAE,GAAG,YAAY,CAAC,EAErC,OAAO,EAGT,SAAS,EAAW,CAAC,EAAuD,CAC1E,IAAM,EAAO,IAAI,IACX,EAAoB,CAAC,EAE3B,QAAW,IAAQ,CAAC,UAAW,SAAS,EAAG,CACzC,IAAM,EAAI,EAAK,EAAK,CAAI,EAClB,EAAO,GAAS,CAAC,EACvB,GAAI,EAAM,CACR,QAAW,KAAK,GAAiB,CAAI,EAAI,EAAK,IAAI,CAAC,EACnD,EAAQ,KAAK,CAAI,GAIrB,IAAM,EAAO,GAAS,EAAK,EAAK,cAAc,CAAC,GAAK,GAAS,EAAK,EAAK,aAAa,CAAC,EACrF,GAAI,EAAM,CACR,QAAW,KAAK,GAAqB,CAAI,EAAI,EAAK,IAAI,CAAC,EACvD,EAAQ,KAAK,cAAc,EAG7B,GAAI,CACF,QAAW,KAAK,GAAY,CAAG,EAAG,CAChC,GAAI,CAAC,EAAE,SAAS,UAAU,EAAI,SAC9B,IAAM,EAAO,GAAS,EAAK,EAAK,CAAC,CAAC,EAClC,GAAI,EAAM,CACR,QAAW,KAAK,GAAiB,CAAI,EAAI,EAAK,IAAI,CAAC,EACnD,EAAQ,KAAK,CAAC,IAGlB,KAAM,EAER,MAAO,CAAE,OAAM,SAAQ,EAGzB,SAAS,EAAM,CAAC,EAAmB,EAAuB,CACxD,IAAM,EAAI,EAAK,YAAY,EAC3B,GAAI,EAAK,IAAI,CAAC,EAAI,MAAO,GAEzB,MAAO,GAGT,SAAS,EAAW,CAClB,EACA,EAC8B,CAC9B,IAAI,EACJ,QAAY,EAAI,KAAU,EAAS,CACjC,GAAI,CAAC,GAAO,EAAM,CAAE,EAAI,SAExB,GAAI,CAAC,GAAQ,EAAG,OAAS,EAAK,GAAG,OAAS,EAAO,CAAC,EAAI,CAAK,EAE7D,OAAO,EAGT,SAAS,EAAO,CAAC,EAAuC,CACtD,IAAI,EACJ,QAAW,KAAM,GACf,GAAI,GAAO,EAAM,CAAE,IAAM,CAAC,GAAQ,EAAG,OAAS,EAAK,QAAU,EAAO,EAEtE,OAAO,EAGT,SAAS,EAAc,CAAC,EAAiC,CACvD,QAAW,KAAO,GAChB,GAAI,GAAW,EAAK,EAAK,CAAG,CAAC,EAAI,OAAO,EAE1C,OAIF,SAAS,EAAW,CAAC,EAAa,EAAkD,CAClF,IAAM,EAAM,GAAY,EAAM,EAAQ,EACtC,GAAI,EAAM,MAAO,CAAE,IAAK,GAAM,IAAK,EAAI,EAAG,EAE1C,GAAI,CACF,QAAW,KAAK,GAAY,CAAG,EAAG,CAChC,GAAI,CAAC,EAAE,SAAS,UAAU,EAAI,SAC9B,IAAM,EAAO,GAAS,EAAK,EAAK,CAAC,CAAC,EAClC,GAAI,GAAQ,kBAAkB,KAAK,CAAI,GAAK,CAAC,4BAA4B,KAAK,CAAI,EAChF,MAAO,CAAE,IAAK,GAAM,IAAK,GAAG,eAAgB,GAGhD,KAAM,EAER,IAAM,EAAS,EAAK,EAAK,KAAK,EAC9B,GAAI,GAAW,CAAM,EACnB,GAAI,CAUF,IAAM,EATO,GAAY,CAAM,EAAE,OAAO,KAAK,CAC3C,GAAI,IAAM,SAAW,IAAM,WAAa,IAAM,OAAS,MAAO,GAC9D,GAAI,CACF,OAAO,GAAS,EAAK,EAAQ,CAAC,CAAC,EAAE,OAAO,EACxC,KAAM,CACN,MAAO,IAEV,EAEqB,OAAO,KAAK,IAAM,OAAO,EAC/C,GAAI,EAAS,OAAS,GAAK,CAAC,GAAO,EAAM,OAAO,GAAK,CAAC,GAAe,CAAG,EACtE,MAAO,CAAE,IAAK,GAAM,IAAK,OAAO,EAAS,IAAK,EAEhD,KAAM,EAGV,MAAO,CAAE,IAAK,GAAO,IAAK,EAAG,EAOxB,SAAS,EAAiB,CAAC,EAAiC,CACjE,GAAI,CAAC,GAAW,CAAG,EAAI,OAAO,KAE9B,IAAQ,OAAM,WAAY,GAAY,CAAG,EACnC,EAAW,EAAQ,IAAM,UACzB,EACJ,EAAQ,KAAK,KAAK,IAAM,WAAa,IAAM,WAAa,EAAE,SAAS,MAAM,CAAC,EACtE,UACA,WAEA,EAAM,GAAQ,CAAI,EAClB,EAAM,GAAY,EAAM,EAAQ,EAChC,EAAc,GAAe,CAAG,EAChC,EAAc,GAAO,EAAM,OAAO,GAAK,GAAO,EAAM,UAAU,EAC9D,EAAW,GAAY,EAAK,CAAI,EAChC,EAAc,GAAW,EAAK,EAAK,WAAW,CAAC,EAI/C,EAAU,GAAe,CAAC,CAAC,EAG3B,EACJ,GACA,EAAI,KAAO,SACX,EAAE,EAAI,KAAO,QAAU,CAAC,GACpB,EACA,OAEF,EACA,EAAY,GACZ,EAIJ,GAAI,EACF,EAAU,MACV,EAAY,MACZ,EAAQ,GAAG,WAAkB,eACxB,QAAI,EAGT,GAFA,EAAU,UACV,EAAY,QACR,GAAe,EACjB,EAAQ,GAAG,eAAsB,YAC5B,QAAI,EACT,EAAQ,GAAG,wBAEX,OAAQ,GAAG,mBAER,QAAI,EACT,EAAU,UACV,EAAY,EAAU,GACtB,EAAQ,GAAG,WAAkB,EAAU,oBAClC,QAAI,EAAS,IAClB,EAAU,MACV,EAAY,GAAY,EAAM,EAAQ,IAAI,IAAM,GAChD,EAAQ,GAAG,OAAc,EAAS,iBAElC,OAAU,UACV,EAAQ,GAAG,mBAGb,MAAO,CAAE,UAAS,YAAW,iBAAgB,OAAM,EN3QrD,IAAM,GAAS,IAAI,IAAI,CACrB,eAAgB,OAAQ,OAAQ,QAAS,OAAQ,QAAS,cAC1D,SAAU,WAAY,QAAS,cAAe,QAChD,CAAC,EACK,GAAY,IAAI,IAAI,CACxB,MAAO,MAAO,OAAQ,MAAO,OAAQ,UAAW,OAChD,MAAO,MAAO,MAAO,OAAQ,QAAS,MAAO,QAC/C,CAAC,EAGK,GAA6D,CACjE,aAAc,CAAC,UAAW,eAAe,EAAG,cAAe,CAAC,UAAW,eAAe,EACtF,UAAW,CAAC,QAAS,UAAU,EAC/B,aAAc,CAAC,QAAS,eAAe,EAAG,IAAK,CAAC,QAAS,eAAe,EACxE,UAAW,CAAC,QAAS,YAAY,EAAG,WAAY,CAAC,QAAS,YAAY,EACtE,gBAAiB,CAAC,QAAS,kBAAkB,EAAG,MAAO,CAAC,QAAS,kBAAkB,EACnF,QAAS,CAAC,QAAS,SAAS,EAC5B,QAAS,CAAC,QAAS,UAAU,EAAG,IAAK,CAAC,QAAS,UAAU,EACzD,QAAS,CAAC,QAAS,SAAS,EAC5B,SAAU,CAAC,QAAS,UAAU,EAAG,GAAI,CAAC,QAAS,UAAU,EACzD,WAAY,CAAC,QAAS,YAAY,EAClC,QAAS,CAAC,QAAS,SAAS,EAC5B,UAAW,CAAC,QAAS,OAAO,EAAG,WAAY,CAAC,QAAS,OAAO,EAAG,MAAO,CAAC,QAAS,OAAO,EACvF,eAAgB,CAAC,QAAS,iBAAiB,EAAG,YAAa,CAAC,QAAS,iBAAiB,EACtF,KAAM,CAAC,QAAS,MAAM,CACxB,EA+BM,GAA4D,CAChE,CAAC,iBAAkB,iBAAiB,EACpC,CAAC,cAAe,iBAAiB,EACjC,CAAC,eAAgB,UAAU,EAC3B,CAAC,gBAAiB,UAAU,EAC5B,CAAC,YAAa,WAAW,EACzB,CAAC,UAAW,SAAS,EACrB,CAAC,WAAY,UAAU,EACvB,CAAC,KAAM,UAAU,EACjB,CAAC,OAAQ,OAAO,EAChB,CAAC,UAAW,SAAS,EACrB,CAAC,YAAa,OAAO,EACrB,CAAC,aAAc,OAAO,EACtB,CAAC,QAAS,OAAO,EACjB,CAAC,UAAW,SAAS,EACrB,CAAC,eAAgB,KAAK,EACtB,CAAC,MAAO,KAAK,EACb,CAAC,YAAa,YAAY,EAC1B,CAAC,kBAAmB,kBAAkB,EACtC,CAAC,UAAW,KAAK,EACjB,CAAC,MAAO,KAAK,CACf,EAEA,SAAS,EAAW,CAAC,EAA+B,EAA8B,CAChF,QAAY,EAAM,KAAa,GAC7B,GAAI,KAAQ,EAAQ,OAAO,EAE7B,OAAO,EAAW,OAAS,EAAI,YAAc,SAkB/C,SAAS,EAAoB,CAAC,EAAsC,CAClE,GAAI,CACF,IAAM,EAAI,KAAK,MAAM,GAAa,EAAU,OAAO,CAAC,EAC9C,EAAc,CAAC,aAAc,kBAAmB,SAAU,iBAAkB,aAAa,EAC5F,KAAK,CAAC,KAAM,KAAK,EAAC,EACrB,GAAI,OAAO,EAAE,mBAAqB,UAAY,EAAc,MAAO,SACnE,MAAO,QACP,KAAM,CACN,MAAO,SAKX,SAAS,EAAe,CAAC,EAAmC,CAC1D,IAAM,EAAuB,CAAC,EAC1B,EAAM,GAAQ,CAAU,EACtB,EAAS,GAAW,GAAK,EAAY,MAAM,CAAC,EAE5C,EAAc,IAAI,IACxB,QAAS,EAAI,EAAG,EAAI,GAAI,IAAK,CAC3B,IAAI,EACJ,GAAI,CACF,EAAQ,GAAY,CAAG,EACvB,KAAM,CACN,MAEF,QAAW,KAAK,EAAO,CAGrB,GAAI,EAAE,YAAY,EAAE,SAAS,SAAS,EAAG,CACvC,IAAM,EAAK,GAAoB,CAAG,EAClC,GAAI,EAAI,CACN,IAAM,EAAgC,CACpC,aAAc,KACd,eAAgB,QAChB,UAAW,QACb,EACA,GAAI,EAAG,UAAY,WAAa,EAAG,UACjC,EAAM,QAAU,EAAG,UACd,QAAI,EAAG,UAAY,OAAS,EAAG,UACpC,EAAM,UAAY,EAAG,UAChB,QAAI,EAAG,UAAY,MACxB,EAAM,QAAU,MACX,QAAI,EAAG,UAAY,UAAY,EAAG,UACvC,EAAM,UAAY,EAAG,UAEvB,GAAI,EAAG,gBACL,EAAM,QAAU,EAAG,gBAErB,IAAM,EAAa,EAAG,UAAY,CAAC,EAAG,UAAW,KAAM,MAAM,EAAI,CAAC,KAAM,MAAM,EAC9E,EAAM,KAAK,CAAE,QAAO,SAAU,GAAI,aAAY,SAAU,CAAE,CAAC,EAE7D,SAGF,IAAM,EAAI,GAAe,GACzB,GAAI,CAAC,EAAI,SAGT,GAAI,IAAM,iBAAmB,GAAqB,GAAK,EAAK,CAAC,CAAC,IAAM,SAAW,SAI/E,GAAI,IAAM,eAAgB,CACxB,IAAM,EAAK,GAAkB,CAAG,EAChC,GAAI,EAAI,CACN,IAAM,EAAgC,CAAE,aAAc,OAAQ,eAAgB,KAAM,EACpF,GAAI,EAAG,WAEL,GADA,EAAM,UAAY,UACd,EAAG,gBAAkB,EAAM,gBAAkB,EAAG,gBAC/C,QAAI,EAAG,UAAY,WAAa,EAAG,UACxC,EAAM,QAAU,EAAG,UACd,QAAI,EAAG,UAAY,MACxB,EAAM,QAAU,MAElB,EAAM,KAAK,CAAE,QAAO,SAAU,EAAE,SAAU,WAAY,EAAG,UAAY,CAAC,UAAW,MAAM,EAAI,CAAC,MAAM,EAAG,SAAU,CAAE,CAAC,EAClH,UAIJ,GAAI,IAAM,SAAU,CAClB,IAAM,EAAK,GAAgB,CAAG,EAC9B,GAAI,EAAI,CACN,IAAM,EAAgC,CACpC,aAAc,KACd,eAAgB,aAChB,UAAW,UACb,EACA,GAAI,EAAG,UAAY,WAAa,EAAG,UACjC,EAAM,QAAU,EAAG,UACd,QAAI,EAAG,UAAY,OAAS,EAAG,UACpC,EAAM,UAAY,EAAG,UAChB,QAAI,EAAG,UAAY,MACxB,EAAM,QAAU,MAElB,IAAM,EAAa,EAAG,UAAY,CAAC,EAAG,UAAW,IAAI,EAAI,CAAC,IAAI,EAC9D,EAAM,KAAK,CAAE,QAAO,SAAU,EAAE,SAAU,aAAY,SAAU,CAAE,CAAC,EACnE,UAIJ,GAAI,IAAM,WAAa,IAAM,gBAAkB,IAAM,UAAW,CAC9D,IAAM,EAAK,GAAkB,CAAG,EAChC,GAAI,EAAI,CACN,IAAM,EAAgC,CACpC,aAAc,OACd,eAAgB,EAAG,cACrB,EACA,GAAI,EAAG,UAAY,WAAa,EAAG,UACjC,EAAM,QAAU,EAAG,UACd,QAAI,EAAG,UAAY,OAAS,EAAG,UACpC,EAAM,UAAY,EAAG,UAChB,QAAI,EAAG,UAAY,MACxB,EAAM,QAAU,MAElB,IAAM,EAAa,EAAG,UAAY,CAAC,EAAG,UAAW,MAAM,EAAI,CAAC,MAAM,EAClE,EAAM,KAAK,CACT,QACA,SAAU,EAAE,UAAY,GACxB,aACA,SAAU,CACZ,CAAC,EACD,UAKJ,GACE,IAAM,WACN,IAAM,gBACN,IAAM,oBACN,IAAM,mBACN,IAAM,sBACN,CACA,GAAI,EAAY,IAAI,CAAG,EAAI,SAC3B,EAAY,IAAI,CAAG,EACnB,IAAM,EAAK,GAAiB,CAAG,EAC/B,GAAI,EAAI,CACN,IAAM,EAAgC,CACpC,aAAc,EAAG,eAAiB,cAAgB,SAAW,EAAG,aAChE,eAAgB,EAAG,YAAc,QAAU,QAAU,SACrD,UAAW,EAAG,SAChB,EACA,GAAI,EAAG,UAAY,WAAa,EAAG,UACjC,EAAM,QAAU,EAAG,UACd,QAAI,EAAG,UAAY,OAAS,EAAG,UACpC,EAAM,UAAY,EAAG,UAChB,QAAI,EAAG,UAAY,MACxB,EAAM,QAAU,MACX,QAAI,EAAG,UAAY,SACxB,EAAM,UAAY,EAAG,WAAa,UAEpC,GAAI,EAAG,OAAO,SAAS,eAAe,EACpC,EAAM,UAAY,EAAG,WAAa,uBAEpC,IAAM,EAAa,EAAG,UAClB,CAAC,EAAG,UAAW,MAAO,EAAG,eAAiB,SAAW,SAAW,MAAM,EACtE,CAAC,MAAO,EAAG,eAAiB,SAAW,SAAW,MAAM,EAC5D,EAAM,KAAK,CACT,QACA,SAAU,EAAE,UAAY,GACxB,aACA,SAAU,CACZ,CAAC,EACD,UAGJ,EAAM,KAAK,CAAE,MAAQ,EAAE,OAAoC,CAAC,EAAG,SAAU,EAAE,SAAU,WAAY,EAAE,WAAY,SAAU,CAAE,CAAC,EAE9H,GAAI,GAAU,IAAM,EAAI,MACxB,IAAM,EAAS,GAAQ,CAAG,EAC1B,GAAI,IAAW,EAAM,MACrB,EAAM,EAER,OAAO,EAMT,SAAS,EAAc,CAAC,EAAmC,CACzD,IAAM,EAAuB,CAAC,EAC9B,QAAW,KAAO,GAAkB,EAAY,EAAG,CAAE,MAAO,CAAE,CAAC,EAAG,CAChE,IAAM,EAAI,GAAe,IAAI,KACvB,EAAQ,GAAG,OAA8C,aAC/D,GAAI,EAAO,EAAM,KAAK,CAAE,MAAO,CAAE,aAAc,CAAK,EAAG,SAAU,EAAE,SAAU,WAAY,EAAE,UAAW,CAAC,EAEzG,OAAO,EAIF,SAAS,EAAY,CAAC,EAAoC,CAC/D,IAAM,EAAQ,CAAC,GAAG,GAAgB,CAAU,EAAG,GAAG,GAAe,CAAU,CAAC,EAKtE,EAAoC,CAAC,EACrC,EAAmC,CAAC,EACpC,EAAK,IAAI,IACf,QAAW,KAAQ,EAAO,CACxB,EAAK,WAAW,QAAQ,CAAC,IAAM,EAAG,IAAI,CAAC,CAAC,EACxC,QAAY,EAAM,KAAQ,OAAO,QAAQ,EAAK,KAAK,EACjD,GAAI,GAAO,CAAC,EAAI,SAAS,GAAG,IAAM,EAAE,KAAQ,IAAc,EAAK,SAAW,EAAS,IACjF,EAAU,GAAQ,EAClB,EAAS,GAAQ,EAAK,SAM5B,IAAM,EAAO,IAAI,IACjB,QAAW,KAAQ,EAAO,CACxB,GAAI,CAAC,EAAK,SAAW,SACrB,GAAI,CAAC,EAAK,IAAI,EAAK,QAAQ,EACzB,EAAK,IAAI,EAAK,SAAU,CACtB,SAAU,EAAK,SACf,SAAU,GAAY,EAAK,MAAO,EAAK,UAAU,EACjD,SAAU,EAAK,QACjB,CAAC,EAGL,IAAM,EAAoB,CAAC,GAAG,EAAK,OAAO,CAAC,EAAE,KAC3C,CAAC,EAAG,IAAM,EAAE,SAAW,EAAE,UAAY,EAAE,SAAS,cAAc,EAAE,QAAQ,CAC1E,EAGM,EAAqB,CAAC,EAC5B,GAAI,EAAU,aAAe,EAAS,KAAK,EAAU,aAAa,YAAY,CAAC,EAC/E,GAAI,EAAU,UAAY,EAAS,KAAK,EAAU,UAAU,YAAY,CAAC,EACzE,IAAM,EAAiB,EAAS,OAAS,EAAI,EAAS,KAAK,GAAG,EAAI,gBAElE,MAAO,CAAE,YAAW,WAAY,CAAC,GAAG,CAAE,EAAG,eAAgB,EAAM,OAAQ,oBAAmB,gBAAe,EAIpG,SAAS,EAAa,CAAC,EAA0F,CACtH,IAAQ,aAAc,GAAa,CAAU,EACvC,EAA4E,CAAC,EACnF,QAAY,EAAK,KAAU,OAAO,QAAQ,CAAS,EAAG,CACpD,IAAM,EAAS,GAAS,GACxB,GAAI,CAAC,GAAU,CAAC,EAAQ,SACxB,IAAO,EAAS,GAAS,EACzB,GAAI,IAAY,WAAa,EAAI,UAAY,CAAC,GAAG,GAAS,EACpD,KAAC,EAAI,QAAU,CAAC,GAAG,GAAS,EAEpC,OAAO,EAGT,SAAS,EAAiB,CAAC,EAAa,EAAe,EAAwC,CAC7F,IAAM,EAAO,IAAI,IACjB,GAAI,EAAQ,GAAK,EAAO,MAAQ,IAAM,OAAO,EAC7C,IAAI,EACJ,GAAI,CACF,EAAU,GAAY,EAAK,CAAE,cAAe,EAAK,CAAC,EAClD,KAAM,CACN,OAAO,EAET,QAAW,KAAK,EAAS,CACvB,GAAI,EAAO,QAAU,IAAM,MAC3B,GAAI,CAAC,EAAE,YAAY,EAAG,CACpB,IAAM,EAAM,GAAQ,EAAE,IAAI,EAC1B,GAAI,GAAU,IAAI,CAAG,EAAI,EAAK,IAAI,CAAG,EACrC,SAEF,GAAI,GAAO,IAAI,EAAE,IAAI,GAAK,EAAE,KAAK,WAAW,GAAG,EAAI,SACnD,QAAW,KAAK,GAAkB,GAAK,EAAK,EAAE,IAAI,EAAG,EAAQ,EAAG,CAAM,EAAI,EAAK,IAAI,CAAC,EAEtF,OAAO,EOzXT,qBAAS,mBAAY,YACrB,eAAS,cA2CT,IAAM,EAAK,CAAC,EAAe,EAAgB,KAAsC,CAAE,QAAO,SAAQ,YAAW,GAOtG,SAAS,EAAyB,CAAC,EAAoC,CAC5E,IAAM,EAAM,GAAQ,CAAG,EACjB,EAAS,GAAY,CAAG,EACxB,EAA6B,CAAC,EAC9B,EAAM,CAAC,EAAgC,IAAiC,CAC5E,GAAI,EAAI,EAAI,GAAK,GAUnB,OAPA,EAAI,OAAQ,GAAY,EAAK,CAAM,CAAC,EACpC,EAAI,MAAO,GAAW,CAAM,CAAC,EAC7B,EAAI,MAAO,GAAW,CAAM,CAAC,EAC7B,EAAI,QAAS,GAAa,EAAK,CAAM,CAAC,EACtC,EAAI,OAAQ,GAAY,CAAM,CAAC,EAC/B,EAAI,MAAO,GAAW,EAAK,CAAM,CAAC,EAE3B,EASF,SAAS,EAAiB,CAAC,EAA4B,CAC5D,IAAM,EAAW,GAA0B,CAAG,EACxC,EAAsB,CAAC,EAK7B,OAJC,OAAO,KAAK,CAAQ,EAAsC,QAAQ,CAAC,IAAM,CACxE,IAAM,EAAU,EAAS,GACzB,GAAI,EAAU,EAAK,GAAK,EAAQ,MACjC,EACM,EAGT,SAAS,EAAO,CAAC,EAA6B,CAC5C,IAAM,EAAI,GAAK,EAAK,cAAc,EAClC,GAAI,CAAC,GAAW,CAAC,EAAI,OAAO,KAC5B,GAAI,CACF,OAAO,KAAK,MAAM,GAAa,EAAG,OAAO,CAAC,EAC1C,KAAM,CACN,OAAO,MAKX,SAAS,EAAW,CAAC,EAAqB,CACxC,IAAM,EAAI,GAAK,EAAK,WAAW,EAC/B,GAAI,CAAC,GAAW,CAAC,EAAI,MAAO,GAC5B,IAAI,EACJ,GAAI,CACF,EAAM,GAAa,EAAG,OAAO,EAC7B,KAAM,CACN,MAAO,GAET,OAAO,EACJ,MAAM;AAAA,CAAI,EACV,OAAO,CAAC,IAAM,CAAC,YAAY,KAAK,CAAC,GAAK,CAAC,UAAU,KAAK,CAAC,CAAC,EACxD,KAAK;AAAA,CAAI,EACT,QAAQ,WAAY,EAAE,EACtB,QAAQ,wBAAyB,EAAE,EACnC,KAAK,EAGV,SAAS,EAAK,CAAC,EAAsB,CACnC,OAAO,EAAK,QAAQ,OAAQ,GAAG,EAAE,QAAQ,UAAW,EAAE,EAAE,KAAK,EAAE,MAAM,EAAG,GAAG,EAK7E,SAAS,EAAO,CAAC,EAAgB,EAAyD,CACxF,IAAM,EAAK,IAAI,OAAO,WAAW,4CAAiD,GAAG,EAC/E,EAAI,EAAO,MAAM,CAAE,EACzB,OAAO,GAAK,EAAE,IAAM,EAAE,GAAG,KAAK,EAAE,OAAS,GAAK,CAAE,KAAM,GAAM,EAAE,EAAE,EAAG,QAAS,EAAE,GAAG,KAAK,CAAE,EAAI,KAI9F,SAAS,EAAU,CAAC,EAAc,EAAoB,EAAS,GAAmB,CAChF,QAAW,KAAM,EAAU,CACzB,IAAM,EAAI,EAAK,MAAM,CAAE,EACvB,GAAI,GAAK,EAAE,IAAM,EAAE,GAAG,KAAK,EAAE,QAAU,EAAS,OAAO,GAAM,EAAE,EAAE,EAEnE,OAAO,KAGT,SAAS,EAAW,CAAC,EAAqB,EAAqC,CAC7E,GAAI,GAAK,aAAe,EAAI,YAAY,OAAS,GAAK,OAAO,EAAG,GAAM,EAAI,WAAW,EAAG,2BAA4B,IAAI,EACxH,IAAM,EAAM,GAAQ,EAAQ,yCAAyC,EACrE,GAAI,EAAM,OAAO,EAAG,EAAI,KAAM,aAAa,EAAI,UAAW,GAAG,EAC7D,IAAM,EAAY,EACf,MAAM,SAAS,EACf,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EACnB,KAAK,CAAC,IAAM,EAAE,OAAS,IAAM,CAAC,EAAE,WAAW,GAAG,CAAC,EAClD,GAAI,EAAY,OAAO,EAAG,GAAM,CAAS,EAAG,yBAA0B,GAAG,EACzE,IAAM,EAAK,GAAW,EAAQ,CAC5B,gFACA,yDACF,CAAC,EACD,OAAO,EAAK,EAAG,EAAI,2BAA4B,GAAG,EAAI,KAGxD,SAAS,EAAU,CAAC,EAAqC,CACvD,IAAM,EAAM,GAAQ,EAAQ,2CAA2C,EACvE,GAAI,EAAM,OAAO,EAAG,EAAI,KAAM,aAAa,EAAI,UAAW,GAAG,EAC7D,IAAM,EAAK,GACT,EACA,CAGE,6HACA,kGACF,EACA,CACF,EACA,OAAO,EAAK,EAAG,EAAI,4BAA6B,GAAG,EAAI,KAGzD,SAAS,EAAU,CAAC,EAAqC,CACvD,IAAM,EAAM,GAAQ,EAAQ,yCAAyC,EACrE,GAAI,EAAM,OAAO,EAAG,EAAI,KAAM,aAAa,EAAI,UAAW,GAAG,EAI7D,IAAM,EAAK,GAAW,EAAQ,CAC5B,mEACA,kDACA,8DACF,CAAC,EACD,OAAO,EAAK,EAAG,EAAI,2BAA4B,GAAG,EAAI,KAGxD,SAAS,EAAY,CAAC,EAAqB,EAAqC,CAC9E,IAAM,EAAO,OAAO,GAAK,aAAe,SAAW,EAAI,WAAa,GAAK,YAAY,IACrF,GAAI,EAAO,OAAO,EAAG,GAAM,EAAK,QAAQ,SAAU,EAAE,EAAE,QAAQ,SAAU,EAAE,CAAC,EAAG,0BAA2B,IAAI,EAC7G,GAAI,GAAK,SAAW,OAAO,EAAG,GAAM,EAAI,QAAQ,EAAG,wBAAyB,GAAG,EAC/E,IAAM,EAAK,GACT,EAGA,CAAC,6EAA6E,EAC9E,CACF,EACA,OAAO,EAAK,EAAG,EAAI,0BAA2B,GAAG,EAAI,KAGvD,SAAS,EAAW,CAAC,EAAqC,CACxD,IAAM,EAAM,GAAQ,EAAQ,iCAAiC,EAC7D,GAAI,EAAM,OAAO,EAAG,EAAI,KAAM,aAAa,EAAI,UAAW,GAAG,EAC7D,IAAM,EAAK,GACT,EACA,CACE,yCACA,8EACA,kDACF,EACA,CACF,EACA,OAAO,EAAK,EAAG,EAAI,yBAA0B,GAAG,EAAI,KAGtD,SAAS,EAAU,CAAC,EAAqB,EAAqC,CAC5E,IAAM,EAAU,GAAK,QAAU,OAAO,KAAK,EAAI,OAAO,EAAI,CAAC,EACrD,EAAM,CAAC,QAAS,MAAO,OAAO,EAAE,OAAO,CAAC,IAAM,EAAQ,SAAS,CAAC,CAAC,EACvE,GAAI,EAAI,OAAS,OAAO,EAAG,GAAM,EAAI,IAAI,CAAC,IAAM,WAAW,GAAG,EAAE,KAAK,IAAI,CAAC,EAAG,uBAAwB,GAAG,EACxG,IAAM,EAAQ,GAAQ,EAAQ,wDAAwD,EACtF,GAAI,EAAQ,OAAO,EAAG,EAAM,KAAM,aAAa,EAAM,UAAW,GAAG,EACnE,IAAM,EAAO,GAAQ,EAAQ,oDAAoD,EACjF,OAAO,EAAO,EAAG,EAAK,KAAM,aAAa,EAAK,UAAW,GAAG,EAAI,KC9N3D,IAAM,GAAc,MCT3B,qBAAS,kBAAY,iBAAc,YACnC,eAAS,aCEF,IAAM,GAAmC,CAE9C,CAAE,KAAM,UAAW,KAAM,SAAU,SAAU,WAAY,QAAS,CAChE,CAAE,KAAM,aAAc,IAAK,MAAO,EAClC,CAAE,KAAM,OAAQ,QAAS,eAAgB,CAC3C,CAAC,EACD,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,WAAY,QAAS,CAC7D,CAAE,KAAM,aAAc,IAAK,OAAQ,CACrC,CAAC,EACD,CAAE,KAAM,YAAa,KAAM,YAAa,SAAU,WAAY,QAAS,CACrE,CAAE,KAAM,aAAc,IAAK,eAAgB,EAC3C,CAAE,KAAM,OAAQ,QAAS,iBAAkB,CAC7C,CAAC,EACD,CAAE,KAAM,SAAU,KAAM,SAAU,SAAU,WAAY,QAAS,CAC/D,CAAE,KAAM,aAAc,IAAK,QAAS,EACpC,CAAE,KAAM,gBAAiB,IAAK,QAAS,CACzC,CAAC,EACD,CAAE,KAAM,SAAU,KAAM,MAAO,SAAU,WAAY,QAAS,CAC5D,CAAE,KAAM,aAAc,IAAK,KAAM,CACnC,CAAC,EACD,CAAE,KAAM,OAAQ,KAAM,OAAQ,SAAU,WAAY,QAAS,CAC3D,CAAE,KAAM,aAAc,IAAK,MAAO,EAClC,CAAE,KAAM,OAAQ,QAAS,eAAgB,CAC3C,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,WAAY,QAAS,CACjE,CAAE,KAAM,aAAc,IAAK,eAAgB,EAC3C,CAAE,KAAM,OAAQ,QAAS,cAAe,CAC1C,CAAC,EACD,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,WAAY,QAAS,CAC7D,CAAE,KAAM,aAAc,IAAK,OAAQ,EACnC,CAAE,KAAM,OAAQ,QAAS,gBAAiB,CAC5C,CAAC,EACD,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,WAAY,QAAS,CAC7D,CAAE,KAAM,aAAc,IAAK,UAAW,CACxC,CAAC,EACD,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,WAAY,QAAS,CAC7D,CAAE,KAAM,aAAc,IAAK,kBAAmB,CAChD,CAAC,EACD,CAAE,KAAM,SAAU,KAAM,SAAU,SAAU,WAAY,QAAS,CAC/D,CAAE,KAAM,aAAc,IAAK,QAAS,EACpC,CAAE,KAAM,OAAQ,QAAS,iBAAkB,CAC7C,CAAC,EACD,CAAE,KAAM,OAAQ,KAAM,OAAQ,SAAU,WAAY,QAAS,CAC3D,CAAE,KAAM,aAAc,IAAK,kBAAmB,CAChD,CAAC,EAGD,CAAE,KAAM,qBAAsB,KAAM,iBAAkB,SAAU,UAAW,QAAS,CAClF,CAAE,KAAM,aAAc,IAAK,0BAA2B,EACtD,CAAE,KAAM,gBAAiB,IAAK,0BAA2B,CAC3D,CAAC,EACD,CAAE,KAAM,mBAAoB,KAAM,eAAgB,SAAU,UAAW,QAAS,CAC9E,CAAE,KAAM,aAAc,IAAK,wBAAyB,EACpD,CAAE,KAAM,gBAAiB,IAAK,wBAAyB,CACzD,CAAC,EACD,CAAE,KAAM,qBAAsB,KAAM,iBAAkB,SAAU,UAAW,QAAS,CAClF,CAAE,KAAM,aAAc,IAAK,0BAA2B,EACtD,CAAE,KAAM,gBAAiB,IAAK,0BAA2B,CAC3D,CAAC,EACD,CAAE,KAAM,yBAA0B,KAAM,qBAAsB,SAAU,UAAW,QAAS,CAC1F,CAAE,KAAM,aAAc,IAAK,8BAA+B,EAC1D,CAAE,KAAM,gBAAiB,IAAK,8BAA+B,CAC/D,CAAC,EACD,CAAE,KAAM,sBAAuB,KAAM,kBAAmB,SAAU,UAAW,QAAS,CACpF,CAAE,KAAM,aAAc,IAAK,2BAA4B,EACvD,CAAE,KAAM,gBAAiB,IAAK,2BAA4B,CAC5D,CAAC,EAGD,CAAE,KAAM,eAAgB,KAAM,WAAY,SAAU,MAAO,QAAS,CAClE,CAAE,KAAM,aAAc,IAAK,aAAc,EACzC,CAAE,KAAM,gBAAiB,IAAK,aAAc,EAC5C,CAAE,KAAM,OAAQ,QAAS,mBAAoB,CAC/C,CAAC,EACD,CAAE,KAAM,YAAa,KAAM,YAAa,SAAU,MAAO,QAAS,CAChE,CAAE,KAAM,aAAc,IAAK,WAAY,CACzC,CAAC,EACD,CAAE,KAAM,oBAAqB,KAAM,oBAAqB,SAAU,MAAO,QAAS,CAChF,CAAE,KAAM,aAAc,IAAK,mBAAoB,CACjD,CAAC,EAGD,CAAE,KAAM,YAAa,KAAM,SAAU,SAAU,KAAM,QAAS,CAC5D,CAAE,KAAM,OAAQ,QAAS,iBAAkB,EAC3C,CAAE,KAAM,aAAc,IAAK,wBAAyB,CACtD,CAAC,EACD,CAAE,KAAM,cAAe,KAAM,MAAO,SAAU,KAAM,QAAS,CAC3D,CAAE,KAAM,aAAc,IAAK,eAAgB,CAC7C,CAAC,EACD,CAAE,KAAM,YAAa,KAAM,SAAU,SAAU,KAAM,QAAS,CAC5D,CAAE,KAAM,aAAc,IAAK,kBAAmB,CAChD,CAAC,EACD,CAAE,KAAM,aAAc,KAAM,OAAQ,SAAU,KAAM,QAAS,CAC3D,CAAE,KAAM,aAAc,IAAK,MAAO,CACpC,CAAC,EAGD,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,QAAS,QAAS,CAC1D,CAAE,KAAM,aAAc,IAAK,kBAAmB,CAChD,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,QAAS,QAAS,CAC9D,CAAE,KAAM,aAAc,IAAK,SAAU,CACvC,CAAC,EACD,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,QAAS,QAAS,CAC1D,CAAE,KAAM,aAAc,IAAK,OAAQ,CACrC,CAAC,EACD,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,QAAS,QAAS,CAC1D,CAAE,KAAM,aAAc,IAAK,OAAQ,CACrC,CAAC,EAGD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,UAAW,QAAS,CAChE,CAAE,KAAM,aAAc,IAAK,SAAU,CACvC,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,UAAW,QAAS,CAChE,CAAE,KAAM,aAAc,IAAK,SAAU,CACvC,CAAC,EACD,CAAE,KAAM,OAAQ,KAAM,OAAQ,SAAU,UAAW,QAAS,CAC1D,CAAE,KAAM,aAAc,IAAK,MAAO,CACpC,CAAC,EACD,CAAE,KAAM,SAAU,KAAM,SAAU,SAAU,UAAW,QAAS,CAC9D,CAAE,KAAM,aAAc,IAAK,QAAS,CACtC,CAAC,EACD,CAAE,KAAM,SAAU,KAAM,SAAU,SAAU,UAAW,QAAS,CAC9D,CAAE,KAAM,aAAc,IAAK,cAAe,CAC5C,CAAC,EACD,CAAE,KAAM,MAAO,KAAM,MAAO,SAAU,UAAW,QAAS,CACxD,CAAE,KAAM,aAAc,IAAK,KAAM,CACnC,CAAC,EACD,CAAE,KAAM,SAAU,KAAM,SAAU,SAAU,UAAW,QAAS,CAC9D,CAAE,KAAM,OAAQ,QAAS,WAAY,EACrC,CAAE,KAAM,OAAQ,QAAS,aAAc,CACzC,CAAC,EACD,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,UAAW,QAAS,CAC5D,CAAE,KAAM,OAAQ,QAAS,QAAS,CACpC,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,UAAW,QAAS,CAChE,CAAE,KAAM,OAAQ,QAAS,SAAU,CACrC,CAAC,EAED,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,UAAW,QAAS,CAC5D,CAAE,KAAM,UAAW,QAAS,UAAW,IAAK,OAAQ,EACpD,CAAE,KAAM,UAAW,QAAS,eAAgB,IAAK,SAAU,EAC3D,CAAE,KAAM,OAAQ,QAAS,uBAAwB,EACjD,CAAE,KAAM,OAAQ,QAAS,kBAAmB,CAC9C,CAAC,EAGD,CAAE,KAAM,cAAe,KAAM,SAAU,SAAU,UAAW,QAAS,CACnE,CAAE,KAAM,UAAW,QAAS,UAAW,IAAK,aAAc,EAC1D,CAAE,KAAM,UAAW,QAAS,eAAgB,IAAK,sBAAuB,EACxE,CAAE,KAAM,UAAW,QAAS,mBAAoB,IAAK,sBAAuB,EAC5E,CAAE,KAAM,UAAW,QAAS,4BAA6B,IAAK,sBAAuB,CACvF,CAAC,EAGD,CAAE,KAAM,SAAU,KAAM,SAAU,SAAU,WAAY,QAAS,CAC/D,CAAE,KAAM,aAAc,IAAK,QAAS,EACpC,CAAE,KAAM,gBAAiB,IAAK,QAAS,EACvC,CAAE,KAAM,OAAQ,QAAS,sBAAuB,CAClD,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,WAAY,QAAS,CACjE,CAAE,KAAM,aAAc,IAAK,aAAc,EACzC,CAAE,KAAM,OAAQ,QAAS,kBAAmB,CAC9C,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,WAAY,QAAS,CACjE,CAAE,KAAM,aAAc,IAAK,SAAU,CACvC,CAAC,EACD,CAAE,KAAM,WAAY,KAAM,WAAY,SAAU,WAAY,QAAS,CACnE,CAAE,KAAM,aAAc,IAAK,UAAW,CACxC,CAAC,EAGD,CAAE,KAAM,OAAQ,KAAM,OAAQ,SAAU,QAAS,QAAS,CACxD,CAAE,KAAM,aAAc,IAAK,MAAO,EAClC,CAAE,KAAM,gBAAiB,IAAK,MAAO,EACrC,CAAE,KAAM,OAAQ,QAAS,eAAgB,CAC3C,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,QAAS,QAAS,CAC9D,CAAE,KAAM,aAAc,IAAK,SAAU,EACrC,CAAE,KAAM,gBAAiB,IAAK,SAAU,EACxC,CAAE,KAAM,OAAQ,QAAS,kBAAmB,CAC9C,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,QAAS,QAAS,CAC9D,CAAE,KAAM,aAAc,IAAK,SAAU,EACrC,CAAE,KAAM,gBAAiB,IAAK,SAAU,CAC1C,CAAC,EACD,CAAE,KAAM,YAAa,KAAM,YAAa,SAAU,QAAS,QAAS,CAClE,CAAE,KAAM,OAAQ,QAAS,YAAa,CACxC,CAAC,EAGD,CAAE,KAAM,OAAQ,KAAM,OAAQ,SAAU,UAAW,QAAS,CAC1D,CAAE,KAAM,gBAAiB,IAAK,MAAO,EACrC,CAAE,KAAM,OAAQ,QAAS,eAAgB,CAC3C,CAAC,EACD,CAAE,KAAM,SAAU,KAAM,SAAU,SAAU,UAAW,QAAS,CAC9D,CAAE,KAAM,gBAAiB,IAAK,QAAS,CACzC,CAAC,EACD,CAAE,KAAM,aAAc,KAAM,aAAc,SAAU,UAAW,QAAS,CACtE,CAAE,KAAM,gBAAiB,IAAK,kBAAmB,EACjD,CAAE,KAAM,OAAQ,QAAS,qBAAsB,CACjD,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,UAAW,QAAS,CAChE,CAAE,KAAM,gBAAiB,IAAK,SAAU,EACxC,CAAE,KAAM,OAAQ,QAAS,kBAAmB,CAC9C,CAAC,EAGD,CAAE,KAAM,YAAa,KAAM,YAAa,SAAU,WAAY,QAAS,CACrE,CAAE,KAAM,gBAAiB,IAAK,OAAQ,EACtC,CAAE,KAAM,OAAQ,QAAS,YAAa,CACxC,CAAC,EACD,CAAE,KAAM,KAAM,KAAM,KAAM,SAAU,WAAY,QAAS,CACvD,CAAE,KAAM,gBAAiB,IAAK,IAAK,EACnC,CAAE,KAAM,OAAQ,QAAS,SAAU,CACrC,CAAC,EACD,CAAE,KAAM,QAAS,KAAM,QAAS,SAAU,WAAY,QAAS,CAC7D,CAAE,KAAM,gBAAiB,IAAK,OAAQ,EACtC,CAAE,KAAM,OAAQ,QAAS,YAAa,CACxC,CAAC,EAGD,CAAE,KAAM,UAAW,KAAM,MAAO,SAAU,KAAM,QAAS,CACvD,CAAE,KAAM,aAAc,IAAK,2BAA4B,CACzD,CAAC,EACD,CAAE,KAAM,gBAAiB,KAAM,YAAa,SAAU,KAAM,QAAS,CACnE,CAAE,KAAM,aAAc,IAAK,mBAAoB,CACjD,CAAC,EACD,CAAE,KAAM,aAAc,KAAM,SAAU,SAAU,KAAM,QAAS,CAC7D,CAAE,KAAM,aAAc,IAAK,QAAS,CACtC,CAAC,EACD,CAAE,KAAM,YAAa,KAAM,YAAa,SAAU,KAAM,QAAS,CAC/D,CAAE,KAAM,aAAc,IAAK,WAAY,CACzC,CAAC,EAGD,CAAE,KAAM,SAAU,KAAM,SAAU,SAAU,UAAW,QAAS,CAC9D,CAAE,KAAM,OAAQ,QAAS,aAAc,CACzC,CAAC,EACD,CAAE,KAAM,UAAW,KAAM,UAAW,SAAU,UAAW,QAAS,CAChE,CAAE,KAAM,OAAQ,QAAS,cAAe,CAC1C,CAAC,EACD,CAAE,KAAM,SAAU,KAAM,SAAU,SAAU,UAAW,QAAS,CAC9D,CAAE,KAAM,OAAQ,QAAS,YAAa,EACtC,CAAE,KAAM,OAAQ,QAAS,oBAAqB,CAChD,CAAC,EACD,CAAE,KAAM,qBAAsB,KAAM,aAAc,SAAU,UAAW,QAAS,CAC9E,CAAE,KAAM,OAAQ,QAAS,eAAgB,EACzC,CAAE,KAAM,aAAc,IAAK,UAAW,CACxC,CAAC,EAGD,CAAE,KAAM,iBAAkB,KAAM,iBAAkB,SAAU,OAAQ,QAAS,CAC3E,CAAE,KAAM,OAAQ,QAAS,yBAA0B,CACrD,CAAC,EAGD,CAAE,KAAM,eAAgB,KAAM,YAAa,SAAU,MAAO,QAAS,CACnE,CAAE,KAAM,aAAc,IAAK,WAAY,CACzC,CAAC,CACH,ED3OA,SAAS,EAAa,CAAC,EAA4B,CACjD,IAAM,EAAO,EAAK,EAAK,YAAY,EACnC,GAAI,CAAC,EAAW,CAAI,EAAI,OAAO,KAC/B,GAAI,CAEF,IAAM,EADU,EAAa,EAAM,OAAO,EACxB,MAAM,kDAAkD,EAC1E,OAAO,EAAI,EAAE,GAAK,KAClB,KAAM,CACN,OAAO,MAKX,SAAS,EAAW,CAAC,EAAsB,CACzC,IAAM,EAAO,EAAK,EAAK,YAAY,EACnC,GAAI,CAAC,EAAW,CAAI,EAAI,MAAO,GAC/B,GAAI,CACF,IAAM,EAAU,EAAa,EAAM,OAAO,EAC1C,MAAO,mBAAmB,KAAK,CAAO,EACtC,KAAM,CACN,MAAO,IAMX,SAAS,EAAe,CAAC,EAAa,EAAwC,CAE5E,GAAI,GAAK,UAAU,KAAK,KAAK,wBAAwB,KAAK,CAAC,CAAC,EAC1D,MAAO,uCAGT,GAAI,GAAK,MAAQ,6BAA6B,KAAK,EAAI,IAAI,EACzD,MAAO,sBAAsB,EAAI,cAGnC,IAAM,EAAY,GAAc,CAAG,EACnC,GAAI,GAAa,2BAA2B,KAAK,CAAS,EACxD,MAAO,oBAAoB,WAE7B,OAAO,KAOT,SAAS,EAAqB,CAAC,EAA4B,CACzD,IAAM,EAAa,CACjB,gBACA,uBACA,oBACA,oBACA,0BACA,oBACF,EACA,QAAW,KAAO,EAAY,CAC5B,IAAM,EAAO,EAAK,EAAK,CAAG,EAC1B,GAAI,CAAC,EAAW,CAAI,EAAI,SACxB,GAAI,CACF,IAAM,EAAS,KAAK,MAAM,EAAa,EAAM,OAAO,CAAC,EACrD,GAAI,OAAO,EAAO,mBAAqB,SACrC,MAAO,GAAG,sBAAwB,EAAO,uCAE3C,KAAM,GAEV,OAAO,KAIT,SAAS,EAAuB,CAAC,EAA4B,CAC3D,IAAM,EAAa,mFACb,EAAY,EAAK,EAAK,gBAAgB,EAC5C,GAAI,EAAW,CAAS,EACtB,GAAI,CAEF,IAAM,EADU,EAAa,EAAW,OAAO,EACzB,MAAM,CAAU,EACtC,GAAI,EAAQ,MAAO,6BAA6B,EAAM,KACtD,KAAM,EAEV,IAAM,EAAO,EAAK,EAAK,kBAAkB,EACzC,GAAI,EAAW,CAAI,EACjB,GAAI,CAEF,IAAM,EADU,EAAa,EAAM,OAAO,EACpB,MAAM,CAAU,EACtC,GAAI,EAAQ,MAAO,6BAA6B,EAAM,KACtD,KAAM,EAEV,OAAO,KAKT,SAAS,EAAkB,CAAC,EAAa,EAAwC,CAC/E,IAAM,EAAa,CAAC,eAAgB,OAAQ,kBAAmB,aAAa,EAC5E,GAAI,GACF,QAAW,KAAO,EAChB,GAAI,EAAI,eAAe,IAAQ,EAAI,kBAAkB,GACnD,MAAO,GAAG,eAIhB,GAAI,EAAW,EAAK,EAAK,KAAK,CAAC,GAAK,EAAW,EAAK,EAAK,SAAS,CAAC,EACjE,MAAO,uBAET,OAAO,KAIT,SAAS,EAAgB,CAAC,EAAa,EAAwC,CAC7E,IAAM,EAAY,EAAK,EAAK,YAAY,EACxC,GAAI,EAAW,CAAS,EACtB,GAAI,CACF,IAAM,EAAU,EAAa,EAAW,OAAO,EAE/C,GAAI,oCAAoC,KAAK,CAAO,EAClD,MAAO,qCAGT,GAAI,0BAA0B,KAAK,CAAO,EACxC,MAAO,oCAET,KAAM,EAGV,IAAM,EAAW,EAAK,EAAK,WAAW,EACtC,GAAI,EAAW,CAAQ,EACrB,GAAI,CACF,IAAM,EAAU,EAAa,EAAU,OAAO,EAC9C,GAAI,2CAA2C,KAAK,CAAO,EACzD,MAAO,wBAET,KAAM,EAGV,GAAI,GAAK,UAAU,KAAK,KAAK,4BAA4B,KAAK,CAAC,CAAC,EAC9D,MAAO,wCAET,OAAO,KAIT,SAAS,EAAgB,CAAC,EAAa,EAAwC,CAE7E,GAAI,CAAC,EAAW,EAAK,EAAK,YAAY,CAAC,EAAI,OAAO,KAElD,GAAI,GAAK,cAAgB,GAAK,gBAAiB,CAC7C,IAAM,EAAU,IAAM,EAAI,cAAgB,CAAC,KAAQ,EAAI,iBAAmB,CAAC,CAAG,EAE9E,GADqB,CAAC,QAAS,MAAO,SAAU,gBAAiB,OAAQ,OAAQ,QAAS,SAAU,WAAY,MAAM,EACrG,KAAK,KAAK,EAAQ,EAAE,EAAI,OAAO,KAElD,MAAO,8CAIT,SAAS,EAAyB,CAAC,EAAa,EAAwC,CAEtF,GAAI,GAAK,MAAQ,4BAA4B,KAAK,EAAI,IAAI,EACxD,MAAO,iBAAiB,EAAI,wBAE9B,GAAI,GAAK,UAAU,KAAK,KAAK,0CAA0C,KAAK,CAAC,CAAC,EAC5E,MAAO,4CAOT,GAAI,GAAK,IACP,OAAO,KAGT,GAAI,GAAK,OAAS,EAAI,MAAM,OAAS,EAAG,CAEtC,IAAM,EACJ,4GACI,EAAY,EAAI,MAAM,KAAK,KAAK,EAAe,KAAK,CAAC,CAAC,EACtD,EAAU,EAAI,MAAM,KAAK,KAAK,yBAAyB,KAAK,CAAC,GAAK,IAAM,aAAe,IAAM,QAAU,IAAM,OAAO,EAC1H,GAAI,CAAC,GAAa,EAChB,MAAO,sDAGX,OAAO,KAIT,SAAS,EAAmB,CAAC,EAAa,EAAyB,EAAgD,CAEjH,IAAM,EAAgB,EAAW,KAAK,KAAK,EAAE,OAAS,SAAW,EAAE,OAAS,QAAQ,EACpF,GAAI,EAAgB,MAAO,GAAG,EAAc,+BAE5C,GAAI,GAAK,UAAU,KAAK,KAAK,oDAAoD,KAAK,CAAC,CAAC,EACtF,MAAO,4DAET,OAAO,KAIT,SAAS,EAAgB,CAAC,EAAa,EAAwC,CAC7E,GAAI,CAAC,EAAM,OAAO,KAClB,IAAM,EAAU,IAAM,EAAI,cAAgB,CAAC,KAAQ,EAAI,iBAAmB,CAAC,CAAG,EACxE,EAAW,CAAC,gBAAiB,qBAAsB,YAAa,aAAc,QAAS,qBAAqB,EAC5G,EAAc,CAAC,SAAU,oBAAqB,cAAc,EAC5D,EAAU,EAAS,KAAK,KAAK,EAAQ,EAAE,EACvC,EAAa,EAAY,KAAK,KAAK,EAAQ,EAAE,EACnD,GAAI,GAAW,EACb,MAAO,8BAET,OAAO,KAIT,SAAS,EAAkB,CAAC,EAAa,EAAyB,EAAgD,CAEhH,GAAI,GAAK,UAAU,KAAK,KAAK,UAAU,KAAK,CAAC,CAAC,EAC5C,MAAO,qCAGT,GAAI,GAAK,MAAQ,UAAU,KAAK,EAAI,IAAI,EACtC,MAAO,iBAAiB,EAAI,iBAG9B,IAAM,EAAS,EAAW,KAAK,KAAK,EAAE,OAAS,KAAK,EAC9C,EAAQ,EAAW,KAAK,KAAK,EAAE,WAAa,UAAU,EAC5D,GAAI,GAAU,GAAS,GAAK,cAAgB,OAAO,KAAK,EAAI,YAAY,EAAE,OAAS,GACjF,MAAO,iDAET,OAAO,KAIT,SAAS,EAAwB,CAAC,EAAa,EAAwC,CACrF,GAAI,CAAC,GAAK,QAAU,OAAO,KAE3B,GAAI,EADkB,CAAC,CAAC,EAAI,YAAc,EAAW,EAAK,EAAK,qBAAqB,CAAC,GAChE,OAAO,KAC5B,MAAO,oCAIF,SAAS,EAAe,CAAC,EAAiC,CAC/D,IAAM,EAAU,EAAK,EAAK,cAAc,EACxC,GAAI,CAAC,EAAW,CAAO,EAAI,OAAO,KAClC,GAAI,CACF,OAAO,KAAK,MAAM,EAAa,EAAS,OAAO,CAAC,EAChD,KAAM,CACN,OAAO,MAKX,SAAS,EAAU,CAAC,EAAa,EAA0B,CAEzD,GAAI,CAAC,EAAQ,SAAS,GAAG,EACvB,OAAO,EAAW,EAAK,EAAK,CAAO,CAAC,EAItC,IAAM,EAAQ,EAAQ,MAAM,GAAG,EAC/B,GAAI,EAAM,SAAW,EAAG,CAEtB,IAAM,EAAS,EAAQ,MAAM,GAAG,EAAE,GAClC,GAAI,CACF,OAAO,GAAY,CAAG,EAAE,KAAK,KAAK,EAAE,WAAW,CAAM,CAAC,EACtD,KAAM,CACN,MAAO,IAKX,IAAM,EAAS,EAAK,EAAK,GAAG,EAAM,MAAM,EAAG,EAAE,CAAC,EACxC,EAAc,EAAM,EAAM,OAAS,GACnC,EAAS,EAAY,MAAM,GAAG,EAAE,GAChC,EAAS,EAAY,MAAM,GAAG,EAAE,IAAM,GAC5C,GAAI,CACF,OAAO,GAAY,CAAM,EAAE,KAAK,KAAK,EAAE,WAAW,CAAM,GAAK,EAAE,SAAS,CAAM,CAAC,EAC/E,KAAM,CACN,MAAO,IAKX,SAAS,EAAW,CAAC,EAAgB,EAAyB,EAAsB,CAClF,OAAQ,EAAO,UACR,aACH,MAAO,CAAC,CAAE,GAAK,eAAe,EAAO,SAClC,gBACH,MAAO,CAAC,CAAE,GAAK,kBAAkB,EAAO,SACrC,OACH,OAAO,GAAW,EAAK,EAAO,OAAQ,MACnC,UAAW,CAGd,GAAI,CAAC,EAAO,SAAW,CAAC,EAAO,IAAM,MAAO,GAC5C,GAAI,CAAC,GAAW,EAAK,EAAO,OAAO,EAAI,MAAO,GAC9C,GAAI,CAEF,IAAM,EAAO,EAAK,EAAK,EAAO,OAAO,EACrC,GAAI,CAAC,EAAW,CAAI,EAElB,MAAO,GAGT,OADa,EAAa,EAAM,OAAO,EAAE,YAAY,EACzC,SAAS,EAAO,IAAI,YAAY,CAAC,EAC7C,KAAM,CACN,MAAO,GAEX,SAEE,MAAO,IAKN,SAAS,EAAgB,CAAC,EAAkC,CACjE,IAAM,EAAM,GAAgB,CAAG,EAE/B,OAAO,GACJ,IAAI,KAAM,CAET,IAAM,EADU,EAAG,QAAQ,OAAO,KAAK,GAAY,EAAG,EAAK,CAAG,CAAC,EACpC,OAAS,EAAG,QAAQ,OAC/C,MAAO,CAAE,KAAM,EAAG,KAAM,KAAM,EAAG,KAAM,SAAU,EAAG,SAAU,YAAW,EAC1E,EACA,OAAO,KAAM,EAAG,WAAa,CAAC,EAC9B,KAAK,CAAC,EAAG,IAAM,EAAE,WAAa,EAAE,UAAU,EAIxC,SAAS,EAAc,CAAC,EAAqB,CAClD,IAAM,EAAM,GAAgB,CAAG,EAG/B,GAAI,GAAK,iBAAiB,YAAc,GAAK,cAAc,WAAa,MAAO,aAC/E,GAAI,EAAW,EAAK,EAAK,eAAe,CAAC,EAAI,MAAO,aAGpD,GAAI,EAAW,EAAK,EAAK,YAAY,CAAC,EAAI,MAAO,OACjD,GAAI,EAAW,EAAK,EAAK,QAAQ,CAAC,EAAI,MAAO,KAC7C,GAAI,GAAgB,CAAG,EAAE,OAAS,EAAI,MAAO,KAC7C,GAAI,EAAW,EAAK,EAAK,gBAAgB,CAAC,GAAK,EAAW,EAAK,EAAK,UAAU,CAAC,EAAI,MAAO,SAC1F,GAAI,EAAW,EAAK,EAAK,SAAS,CAAC,EAAI,MAAO,OAC9C,GAAI,GAAU,CAAG,EAAG,CAClB,IAAM,EAAM,GAAiB,CAAG,EAChC,GAAI,EAAM,OAAO,EAAI,eAAiB,cAAgB,SAAW,EAAI,aACrE,MAAO,OAET,GAAI,EAAW,EAAK,EAAK,eAAe,CAAC,EAAI,MAAO,QACpD,GAAI,EAAW,EAAK,EAAK,WAAW,CAAC,EAAI,MAAO,MAChD,GAAI,EAAW,EAAK,EAAK,cAAc,CAAC,EAAI,MAAO,OAGnD,GAAI,EAAM,MAAO,aAEjB,MAAO,UAoBF,SAAS,EAA8B,CAAC,EAAmC,CAChF,IAAM,EAAM,GAAgB,CAAG,EACzB,EAAa,GAAiB,CAAG,EACjC,EAAkB,CAAC,EAGnB,EAAY,GAA0B,EAAK,CAAG,EACpD,GAAI,EAEF,OADA,EAAM,KAAK,CAAS,EACb,CAAE,KAAM,gBAAiB,OAAM,EAQxC,IAAM,EAAY,GAAgB,EAAK,CAAG,EAC1C,GAAI,EAEF,OADA,EAAM,KAAK,CAAS,EACb,CAAE,KAAM,MAAO,OAAM,EAO9B,IAAM,EAAkB,GAAsB,CAAG,EACjD,GAAI,EAEF,OADA,EAAM,KAAK,CAAe,EACnB,CAAE,KAAM,YAAa,OAAM,EAIpC,IAAM,EAAe,GAAmB,EAAK,EAAK,CAAU,EAC5D,GAAI,EAEF,OADA,EAAM,KAAK,CAAY,EAChB,CAAE,KAAM,SAAU,OAAM,EAIjC,IAAM,EAAa,GAAiB,EAAK,CAAG,EAC5C,GAAI,EAEF,OADA,EAAM,KAAK,CAAU,EACd,CAAE,KAAM,OAAQ,OAAM,EAI/B,IAAM,EAAa,GAAiB,EAAK,CAAG,EAC5C,GAAI,EAEF,OADA,EAAM,KAAK,CAAU,EACd,CAAE,KAAM,OAAQ,OAAM,EAO/B,IAAM,EAAO,GAAkB,CAAG,EAClC,GAAI,EAEF,OADA,EAAM,KAAK,EAAK,KAAK,EACd,CAAE,KAAM,EAAK,QAAS,OAAM,EAKrC,IAAM,EAAK,GAAgB,CAAG,EAC9B,GAAI,EAEF,OADA,EAAM,KAAK,EAAG,KAAK,EACZ,CAAE,KAAM,EAAG,QAAS,OAAM,EAKnC,IAAM,EAAS,GAAoB,CAAG,EACtC,GAAI,EAEF,OADA,EAAM,KAAK,EAAO,KAAK,EAChB,CAAE,KAAM,EAAO,QAAS,OAAM,EAKvC,IAAM,EAAM,GAAiB,CAAG,EAChC,GAAI,EAEF,OADA,EAAM,KAAK,EAAI,KAAK,EACb,CAAE,KAAM,EAAI,QAAS,OAAM,EAKpC,IAAM,EAAO,GAAkB,CAAG,EAClC,GAAI,EAEF,OADA,EAAM,KAAK,EAAK,KAAK,EACd,CAAE,KAAM,EAAK,QAAS,OAAM,EAIrC,IAAM,EAAe,GAAmB,EAAK,CAAG,EAChD,GAAI,EAEF,OADA,EAAM,KAAK,CAAY,EAChB,CAAE,KAAM,SAAU,OAAM,EAKjC,GADe,EAAW,KAAK,KAAK,EAAE,OAAS,KAAK,EAGlD,OADA,EAAM,KAAK,gBAAgB,EACpB,CAAE,KAAM,MAAO,OAAM,EAI9B,GAAI,GAAK,IAEP,OADA,EAAM,KAAK,kBAAkB,EACtB,CAAE,KAAM,MAAO,OAAM,EAE9B,GAAI,GAAY,CAAG,EAEjB,OADA,EAAM,KAAK,oBAAoB,EACxB,CAAE,KAAM,MAAO,OAAM,EAM9B,GAAI,EAAW,EAAK,EAAK,WAAW,CAAC,EAAG,CAEtC,GADA,EAAM,KAAK,WAAW,EAClB,EAAW,EAAK,EAAK,cAAc,CAAC,EAEtC,OADA,EAAM,KAAK,cAAc,EAClB,CAAE,KAAM,MAAO,OAAM,EAE9B,GAAI,EAAW,EAAK,EAAK,cAAc,CAAC,EAEtC,OADA,EAAM,KAAK,cAAc,EAClB,CAAE,KAAM,UAAW,OAAM,EAKpC,IAAM,EAAY,EAAW,KAAK,KAAK,EAAE,OAAS,UAAY,EAAE,OAAS,WAAW,EAKpF,GAJ2B,GAAK,UAAY,KAC1C,EAAW,EAAK,EAAK,qBAAqB,CAAC,GAC3C,GAAK,aAAe,SAEI,EAExB,OADA,EAAM,KAAK,oBAAqB,QAAQ,EACjC,CAAE,KAAM,YAAa,OAAM,EAIpC,GAAI,EAEF,OADA,EAAM,KAAK,kBAAkB,EACtB,CAAE,KAAM,SAAU,OAAM,EAKjC,IAAM,EAAgB,EAAW,KAAK,KAAK,EAAE,WAAa,UAAU,EAC9D,EAAe,EAAW,KAAK,KAAK,EAAE,WAAa,SAAS,EAClE,GACE,GAAK,UACJ,EAAI,YAAc,EAAW,EAAK,EAAK,qBAAqB,CAAC,IAC9D,GAAiB,EAGjB,OADA,EAAM,KAAK,mDAAmD,EACvD,CAAE,KAAM,aAAc,OAAM,EAIrC,IAAM,EAAa,GAAyB,EAAK,CAAG,EACpD,GAAI,EAEF,OADA,EAAM,KAAK,CAAU,EACd,CAAE,KAAM,gBAAiB,OAAM,EAIxC,IAAM,EAAgB,GAAoB,EAAK,EAAK,CAAU,EAC9D,GAAI,EAEF,OADA,EAAM,KAAK,CAAa,EACjB,CAAE,KAAM,UAAW,OAAM,EAKlC,GADsB,EAAW,KAAK,KAAK,EAAE,OAAS,UAAY,EAAE,OAAS,MAAM,EAGjF,OADA,EAAM,KAAK,EAAW,KAAK,KAAK,EAAE,OAAS,QAAQ,EAAI,UAAY,MAAM,EAClE,CAAE,KAAM,YAAa,OAAM,EAGpC,IAAM,EAAc,EAAW,KAAK,KAAK,EAAE,WAAa,UAAU,EAC5D,EAAa,EAAW,KAAK,KAAK,EAAE,WAAa,SAAS,EAChE,GAAI,GAAe,EAEjB,OADA,EAAM,KAAK,qBAAsB,mBAAmB,EAC7C,CAAE,KAAM,YAAa,OAAM,EAIpC,GAAI,EAEF,OADA,EAAM,KAAK,oBAAoB,EACxB,CAAE,KAAM,WAAY,OAAM,EAInC,GAAI,EAEF,OADA,EAAM,KAAK,mBAAmB,EACvB,CAAE,KAAM,UAAW,OAAM,EAIlC,IAAM,EAAW,GAAwB,CAAG,EAC5C,GAAI,EAEF,OADA,EAAM,KAAK,CAAQ,EACZ,CAAE,KAAM,eAAgB,OAAM,EAIvC,IAAM,EAAa,GAAiB,EAAK,CAAG,EAC5C,GAAI,EAEF,OADA,EAAM,KAAK,CAAU,EACd,CAAE,KAAM,OAAQ,OAAM,EAI/B,GAAI,GAAK,MAAQ,CAAC,GAAK,IAErB,OADA,EAAM,KAAK,4BAA4B,EAChC,CAAE,KAAM,UAAW,OAAM,EAKlC,OADA,EAAM,KAAK,mCAAkC,EACtC,CAAE,KAAM,UAAW,OAAM,EAW3B,SAAS,EAAa,CAAC,EAAqB,CACjD,GAAI,EAAW,EAAK,EAAK,aAAa,CAAC,EAAI,MAAO,MAClD,GAAI,EAAW,EAAK,EAAK,WAAW,CAAC,GAAK,EAAW,EAAK,EAAK,YAAY,CAAC,EAAI,MAAO,OACvF,GAAI,GAAgB,CAAG,EAAI,MAAO,UAClC,GAAI,EAAW,EAAK,EAAK,YAAY,CAAC,EAAI,MAAO,OACjD,GAAI,EAAW,EAAK,EAAK,QAAQ,CAAC,EAAI,MAAO,KAC7C,GAAI,GAAgB,CAAG,EAAE,OAAS,EAAI,MAAO,OAC7C,GAAI,EAAW,EAAK,EAAK,cAAc,CAAC,EAAI,MAAO,OACnD,MAAO,UAIF,SAAS,EAAoB,CAAC,EAAqB,CACxD,GAAI,EAAW,EAAK,EAAK,cAAc,CAAC,EAAI,MAAO,MACnD,GAAI,EAAW,EAAK,EAAK,QAAQ,CAAC,EAAI,MAAO,aAC7C,GAAI,GAAgB,CAAG,EAAE,OAAS,EAAI,MAAO,QAC7C,GAAI,EAAW,EAAK,EAAK,SAAS,CAAC,EAAI,MAAO,QAC9C,GACE,EAAW,EAAK,EAAK,cAAc,CAAC,GACpC,EAAW,EAAK,EAAK,kBAAkB,CAAC,GACxC,EAAW,EAAK,EAAK,iBAAiB,CAAC,GACvC,EAAW,EAAK,EAAK,qBAAqB,CAAC,EAC1C,MAAO,SACV,GAAI,EAAW,EAAK,EAAK,WAAW,CAAC,GAAK,EAAW,EAAK,EAAK,UAAU,CAAC,EAAI,MAAO,MACrF,GAAI,EAAW,EAAK,EAAK,gBAAgB,CAAC,EAAI,MAAO,OACrD,GAAI,EAAW,EAAK,EAAK,WAAW,CAAC,EAAI,MAAO,OAChD,GAAI,EAAW,EAAK,EAAK,mBAAmB,CAAC,EAAI,MAAO,MACxD,MAAO,MAIF,SAAS,EAAU,CAAC,EAA4B,CACrD,GAAI,EAAW,EAAK,EAAK,mBAAmB,CAAC,EAAI,MAAO,iBACxD,GAAI,EAAW,EAAK,EAAK,gBAAgB,CAAC,EAAI,MAAO,YACrD,GAAI,EAAW,EAAK,EAAK,WAAW,CAAC,EAAI,MAAO,WAChD,GAAI,EAAW,EAAK,EAAK,aAAa,CAAC,EAAI,MAAO,UAClD,OAAO,KAIF,SAAS,EAAa,CAAC,EAA4B,CACxD,GAAI,EAAW,EAAK,EAAK,aAAa,CAAC,EAAI,MAAO,SAClD,GAAI,EAAW,EAAK,EAAK,cAAc,CAAC,EAAI,MAAO,UACnD,GAAI,EAAW,EAAK,EAAK,eAAe,CAAC,EAAI,MAAO,aACpD,GAAI,EAAW,EAAK,EAAK,YAAY,CAAC,EAAI,MAAO,SACjD,GAAI,EAAW,EAAK,EAAK,UAAU,CAAC,EAAI,MAAO,SAC/C,GAAI,EAAW,EAAK,EAAK,aAAa,CAAC,EAAI,MAAO,SAClD,OAAO,KAIF,SAAS,EAAmB,CAAC,EAA4B,CAC9D,IAAM,EAAa,EAAK,EAAK,kBAAkB,EAC/C,GAAI,CAAC,EAAW,CAAU,EAAI,OAAO,KACrC,GAAI,CAKF,IAAM,EAJU,EAAa,EAAY,OAAO,EAInB,MAAM,0BAA0B,EAC7D,GAAI,EAAc,CAChB,IAAM,EAAU,EAAa,GAC7B,OAAQ,OACD,SAAU,MAAO,aACjB,OAAQ,MAAO,WACf,SAAU,MAAO,aACjB,aAAc,MAAO,iBACrB,UAAW,MAAO,cAClB,OAAQ,MAAO,eACX,OAAO,GAGpB,OAAO,KACP,KAAM,CACN,OAAO,MAKJ,SAAS,EAAe,CAAC,EAA4B,CAC1D,IAAM,EAAM,GAAgB,CAAG,EAC/B,GAAI,GAAK,iBAAiB,MAAQ,GAAK,cAAc,KAAO,MAAO,OACnE,GAAI,GAAK,iBAAiB,SAAW,GAAK,cAAc,QAAU,MAAO,UACzE,GAAI,GAAK,iBAAiB,SAAW,GAAK,cAAc,QAAU,MAAO,UACzE,GAAI,EAAW,EAAK,EAAK,eAAe,CAAC,GAAK,GAAK,iBAAiB,WAAa,MAAO,mBACxF,OAAO,KAaF,SAAS,EAAc,CAAC,EAAuB,CAoBpD,MAnBmB,CAEjB,eAAgB,aAAc,iBAAkB,SAChD,YAAa,gBAEb,eAAgB,eAAgB,cAAe,aAE/C,cAAe,aAEf,eAAgB,eAEhB,kBAAmB,UAAW,cAE9B,UAAW,cAEX,YAAa,mBAAoB,mBAEjC,gBAAiB,gBAAiB,aACpC,EACkB,OAAO,KAAK,EAAW,EAAK,EAAK,CAAC,CAAC,CAAC,EAKjD,SAAS,EAAc,CAAC,EAAa,EAAiD,CAC3F,IAAM,EAAmC,CAAC,EAG1C,GAAI,GAAK,SACP,QAAW,IAAO,CAAC,QAAS,OAAQ,OAAQ,MAAO,OAAO,EACxD,GAAI,EAAI,QAAQ,GAAM,CAEpB,IAAM,EAAS,EAAW,EAAK,EAAK,UAAU,CAAC,GAAK,EAAW,EAAK,EAAK,WAAW,CAAC,EACjF,UACA,UACJ,EAAS,GAAO,GAAG,KAAU,KAMnC,GAAI,EAAW,EAAK,EAAK,YAAY,CAAC,EAAG,CACvC,GAAI,CAAC,EAAS,MAAQ,EAAS,MAAQ,wBACvC,GAAI,CAAC,EAAS,KAAO,EAAS,KAAO,aACrC,GAAI,CAAC,EAAS,KAAO,EAAS,KAAO,eAIvC,GAAI,EAAW,EAAK,EAAK,WAAW,CAAC,EAAG,CACtC,GAAI,CAAC,EAAS,MAAQ,EAAS,MAAQ,YACvC,GAAI,CAAC,EAAS,KAAO,EAAS,KAAO,iBAIvC,GAAI,EAAW,EAAK,EAAK,QAAQ,CAAC,EAAG,CACnC,GAAI,CAAC,EAAS,MAAQ,EAAS,MAAQ,iBACvC,GAAI,CAAC,EAAS,KAAO,EAAS,KAAO,gBAIvC,GAAI,EAAW,EAAK,EAAK,gBAAgB,CAAC,GAAK,EAAW,EAAK,EAAK,YAAY,CAAC,GAC/E,GAAI,CAAC,EAAS,KAAO,EAAS,KAAO,SAGvC,OAAO,EAMF,SAAS,EAAe,CAC7B,EACA,EACA,EACA,EACU,CACV,IAAM,EAAkB,CAAC,EAGzB,GAAI,GAAY,IAAa,UAAY,EAAM,KAAK,CAAQ,EAG5D,IAAM,EAAoB,IAAI,IAAI,CAAC,WAAY,UAAW,WAAY,QAAS,MAAO,QAAS,UAAU,CAAC,EAC1G,QAAW,KAAM,EACf,GAAI,EAAkB,IAAI,EAAG,QAAQ,EACnC,EAAM,KAAK,EAAG,IAAI,EAKtB,GAAI,EAAW,EAAK,EAAK,aAAa,CAAC,EAAI,EAAM,KAAK,KAAK,EACtD,QAAI,EAAW,EAAK,EAAK,WAAW,CAAC,GAAK,EAAW,EAAK,EAAK,YAAY,CAAC,EAAI,EAAM,KAAK,MAAM,EAGtG,GAAI,EAAM,OAAS,GAAK,GAAK,aAAc,CACzC,IAAM,EAAU,OAAO,KAAK,EAAI,YAAY,EAAE,MAAM,EAAG,CAAC,EACxD,QAAW,KAAO,EAChB,GAAI,CAAC,EAAM,KAAK,KAAK,EAAE,YAAY,EAAE,SAAS,EAAI,YAAY,CAAC,CAAC,EAC9D,EAAM,KAAK,CAAG,EAKpB,OAAO,EErzBF,SAAS,EAAW,CAAC,EAAsB,CAChD,IAAM,EAAM,GAAgB,CAAG,EACzB,EAAa,GAAiB,CAAG,EACjC,EAAW,GAAe,CAAG,EAC7B,EAAY,GAA+B,CAAG,EAC9C,EAAc,EAAU,KACxB,EAAU,GAAc,CAAG,EAC3B,EAAa,GAAqB,CAAG,EACrC,EAAO,GAAW,CAAG,EACrB,EAAU,GAAc,CAAG,EAC3B,EAAY,GAAgB,CAAG,EAG/B,EAAa,EAAW,KAAK,KAAK,EAAE,WAAa,UAAU,EAC3D,EAAQ,EAAW,KAAK,KAAK,EAAE,WAAa,KAAK,EACjD,EAAO,EAAW,KAAK,KAAK,EAAE,WAAa,IAAI,EAC/C,EAAU,EAAW,KAAK,KAAK,EAAE,WAAa,OAAO,EACrD,EAAY,EAAW,KAAK,KAAK,EAAE,WAAa,SAAS,EACzD,EAAO,EAAW,KAAK,KAAK,EAAE,WAAa,UAAU,EAGrD,EAAmB,GAAoB,IAAgB,GAAoB,QAG3E,EAAc,IAAgB,YAC9B,EAAkB,EAAW,KAAK,KAAK,EAAE,OAAS,UAAY,EAAE,OAAS,WAAW,EACpF,EAAmB,GAAe,EAAkB,SAAY,EAAc,KAAO,KAGrF,EAAW,IAAgB,UAAY,IAAqB,SAC5D,EAAgB,EAAW,GAAoB,CAAG,EAAI,KACtD,EAAe,GAAY,EAAW,KAAK,KAAK,EAAE,OAAS,WAAW,EAGtE,EAAwB,IAAI,IAAI,CAAC,gBAAiB,aAAc,WAAY,aAAc,SAAS,CAAC,EAGpG,EAAgC,CAAC,EACjC,EAAa,EAAM,OAAO,KAAK,EAAE,KAAK,WAAW,QAAQ,CAAC,EAEhE,QAAW,KAAQ,EAAY,CAC7B,IAAM,EAAQ,EAAK,KAAK,QAAQ,SAAU,EAAE,EAC5C,GAAI,CAAC,EAAiB,SAAS,EAAK,QAAQ,EAAG,CAC7C,EAAM,GAAS,cACf,SAIF,GAAI,GAAe,EAAsB,IAAI,CAAK,EAAG,CACnD,EAAM,GAAS,cACf,SAIF,OAAQ,OACD,WAAY,EAAM,GAAS,GAAY,OAAS,IAAgB,MAAQ,MAAQ,IAAK,UACrF,gBAAiB,EAAM,GAAS,GAAO,MAAQ,GAAI,UACnD,aAAc,EAAM,GAAS,GAAM,MAAQ,GAAI,UAC/C,mBAEH,EAAM,GAAS,EAAY,GAAS,MAAQ,QAAY,GAAS,MAAQ,GACzE,UACG,UAEH,EAAM,GAAS,EAAY,EAAe,YAAe,GAAW,MAAQ,GAAQ,GAAW,MAAQ,GACvG,UACG,WAEH,EAAM,GAAS,EAAe,gBAAkB,GAChD,UACG,UAAW,EAAM,GAAS,IAAY,UAAY,EAAU,GAAI,UAChE,WAEH,EAAM,GAAS,GAAM,MAAQ,GAC7B,UACG,aACH,EAAM,GAAS,GAAM,MAAQ,GAC7B,UACG,UAEH,GAAI,GAAY,EACd,EAAM,GAAS,EAEf,OAAM,GAAS,GAAW,GAE5B,UACG,QAEH,EAAM,GAAS,EAAW,OAAU,GAAa,GACjD,UACG,OAAQ,EAAM,GAAS,GAAQ,GAAI,UACnC,kBAAmB,EAAM,GAAS,EAAY,cAC1C,EAAM,GAAS,GAAI,OAKhC,IAAM,EAAmC,CAAC,EACpC,EAAgB,EAAM,OAAO,KAAK,EAAE,KAAK,WAAW,WAAW,CAAC,EACtE,QAAW,KAAQ,EAAe,CAChC,IAAM,EAAQ,EAAK,KAAK,QAAQ,YAAa,EAAE,EAC/C,GAAI,CAAC,EAAiB,SAAS,EAAK,QAAQ,EAC1C,EAAS,GAAS,cAElB,OAAS,GAAS,GAKtB,IAAM,GAAkC,CACtC,KAAM,GAAK,MAAQ,EAAI,MAAM,GAAG,EAAE,IAAI,GAAK,UAC3C,KAAM,GAAK,aAAe,GAC1B,cAAe,EACf,KAAM,CACR,EACA,GAAI,GAAe,EACjB,GAAQ,UAAY,EAStB,IAAM,GAAY,GAAgB,EAAK,EAAK,EAAY,CAAQ,EAC1D,GAAW,GAAe,CAAG,EAC7B,GAAW,GAAe,EAAK,CAAG,EAElC,GAAkB,CACtB,YAAa,GACb,WACA,QACA,cAAe,CACb,IAAK,GACL,KAAM,GAAK,aAAe,GAC1B,IAAK,GACL,MAAO,GACP,KAAM,GACN,IAAK,EACP,EACA,WAIA,MAAO,CAAE,MAAO,EAAU,KAAM,CAClC,EAGA,GAAI,GAAU,OAAS,EAAI,GAAO,WAAa,GAC/C,GAAI,GAAS,OAAS,EAAI,GAAO,UAAY,GAC7C,GAAI,OAAO,KAAK,EAAQ,EAAE,OAAS,EAAI,GAAO,SAAW,GAEzD,OAAO,GCpKT,qBAAS,mBAAY,YACrB,eAAS,cC+BF,IAAM,GAAoB,CAE/B,WAAY,EAEZ,WAAY,GACd,EAGa,GAAmC,CAC9C,8BACA,qCACA,kEACA,uCACA,sCACA,kBACA,wBACF,EAGO,SAAS,CAAiB,CAAC,EAAuB,CACvD,IAAM,EAAU,EAAK,KAAK,EAC1B,GAAI,EAAQ,OAAS,GAAkB,WAAa,MAAO,GAC3D,GAAI,EAAQ,OAAS,GAAkB,WAAa,MAAO,GAC3D,GAAI,GAAc,KAAK,CAAC,IAAO,EAAG,KAAK,CAAO,CAAC,EAAI,MAAO,GAE1D,GAAI,aAAa,KAAK,CAAO,EAAI,MAAO,GACxC,GAAI,EAAQ,MAAM;AAAA,CAAI,EAAE,OAAS,EAAI,MAAO,GAC5C,MAAO,GDtDT,SAAS,EAAa,CAAC,EAAyB,CAC9C,IAAM,EAAQ,EAAQ,MAAM;AAAA,CAAI,EAC5B,EAAI,EAER,MAAO,EAAI,EAAM,QAAU,WAAW,KAAK,EAAM,GAAG,KAAK,CAAC,EAAI,IAC9D,MAAO,EAAI,EAAM,OAAQ,CACvB,IAAM,EAAO,EAAM,GAAG,KAAK,EAE3B,GAAI,SAAS,KAAK,CAAI,EAAG,CAAE,IAAK,SAEhC,GAAI,OAAO,KAAK,CAAI,EAAG,CAAE,IAAK,SAE9B,GAAI,WAAW,KAAK,CAAI,EAAG,CAAE,IAAK,SAElC,GAAI,IAAS,GAAI,CAAE,IAAK,SACxB,MAEF,OAAO,EAAM,MAAM,CAAC,EAAE,KAAK;AAAA,CAAI,EAIjC,SAAS,EAAmB,CAAC,EAAgC,CAE3D,IAAM,EADW,GAAc,CAAO,EACf,MAAM;AAAA,CAAI,EAC3B,EAAgB,CAAC,EACvB,QAAW,KAAO,EAAO,CACvB,IAAM,EAAO,EAAI,KAAK,EACtB,GAAI,IAAS,GAAI,CACf,GAAI,EAAI,OAAS,EAAI,MACrB,SAGF,GAAI,uCAAuC,KAAK,CAAI,EAAI,MAGxD,GAAI,qBAAqB,KAAK,CAAI,GAAK,EAAI,SAAW,EAAI,SAC1D,EAAI,KAAK,CAAI,EAEf,GAAI,EAAI,SAAW,EAAI,OAAO,KAC9B,OAAO,EAAI,KAAK,GAAG,EAAE,KAAK,EAI5B,SAAS,EAAc,CAAC,EAAiB,EAAgC,CACvE,IAAM,EAAQ,EAAQ,MAAM;AAAA,CAAI,EAC5B,EAAI,EACR,MAAO,EAAI,EAAM,OAAQ,CAEvB,IAAM,EADO,EAAM,GAAG,KAAK,EACZ,MAAM,mBAAmB,EACxC,GAAI,GAAK,EAAQ,KAAK,EAAE,EAAE,EAAG,CAC3B,IAAM,EAAe,EAAE,GAAG,OAEpB,EAAgB,CAAC,EACvB,IACA,MAAO,EAAI,EAAM,OAAQ,CACvB,IAAM,EAAO,EAAM,GAAG,KAAK,EACrB,EAAc,EAAK,MAAM,cAAc,EAC7C,GAAI,GAAe,EAAY,GAAG,QAAU,EAAe,MAC3D,GAAI,IAAS,GAAI,CAAE,GAAI,EAAI,OAAS,EAAI,MAAQ,IAAK,SAErD,GAAI,qCAAqC,KAAK,CAAI,EAAI,MACtD,EAAI,KAAK,CAAI,EACb,IAEF,GAAI,EAAI,SAAW,EAAI,OAAO,KAC9B,OAAO,EAAI,KAAK,GAAG,EAAE,KAAK,EAE5B,IAEF,OAAO,KAIF,SAAS,EAAW,CAAC,EAAqC,CAE/D,IAAM,EAAW,GAAe,EAAS,yBAAyB,EAClE,GAAI,GAAY,EAAkB,CAAQ,EAAI,OAAO,EAGrD,IAAM,EAAU,GAAoB,CAAO,EAC3C,GAAI,GAAW,EAAkB,CAAO,EAAI,OAAO,EAEnD,OAIK,SAAS,EAAW,CAAC,EAAqC,CAC/D,IAAM,EAAO,GAAe,EAAS,sDAAsD,EAC3F,GAAI,GAAQ,EAAkB,CAAI,EAAI,OAAO,EAC7C,OAIK,SAAS,EAAU,CAAC,EAAqC,CAC9D,IAAM,EAAO,GAAe,EAAS,2DAA2D,EAChG,GAAI,GAAQ,EAAkB,CAAI,EAAI,OAAO,EAC7C,OAIK,SAAS,EAAU,CAAC,EAAqC,CAC9D,IAAM,EAAO,GAAe,EAAS,wCAAwC,EAC7E,GAAI,GAAQ,EAAkB,CAAI,EAAI,OAAO,EAC7C,OAIK,SAAS,EAAY,CAAC,EAAqC,CAEhE,IAAM,EAAW,GAAe,EAAS,+CAA+C,EACxF,GAAI,GAAY,EAAkB,CAAQ,EAAI,OAAO,EACrD,OAIK,SAAS,EAAW,CAAC,EAAqC,CAC/D,IAAM,EAAO,GAAe,EAAS,8CAA8C,EACnF,GAAI,GAAQ,EAAkB,CAAI,EAAI,OAAO,EAC7C,OAIK,SAAS,EAAU,CAAC,EAAqC,CAC9D,IAAM,EAAO,GAAe,EAAS,wDAAwD,EAC7F,GAAI,GAAQ,EAAkB,CAAI,EAAI,OAAO,EAC7C,OAIK,SAAS,EAAiB,CAAC,EAA+B,CAC/D,IAAM,EAAa,CAAC,YAAa,YAAa,YAAa,WAAW,EAClE,EAAsB,KAC1B,QAAW,KAAQ,EAAY,CAC7B,IAAM,EAAO,GAAK,EAAK,CAAI,EAC3B,GAAI,GAAW,CAAI,EAAG,CAAE,EAAO,EAAM,OAEvC,GAAI,CAAC,EAAO,MAAO,CAAC,EAEpB,IAAI,EACJ,GAAI,CACF,EAAU,GAAa,EAAM,OAAO,EACpC,KAAM,CACN,MAAO,CAAC,EAGV,IAAM,EAA2B,CAAC,EAE5B,EAAO,GAAY,CAAO,EAChC,GAAI,EAAO,EAAO,QAAU,CAAE,MAAK,EAEnC,IAAM,EAAwD,CAAC,EACzD,EAAO,GAAY,CAAO,EAAG,GAAI,EAAO,EAAM,KAAO,EAC3D,IAAM,EAAM,GAAW,CAAO,EAAG,GAAI,EAAM,EAAM,IAAM,EACvD,IAAM,EAAM,GAAW,CAAO,EAAG,GAAI,EAAM,EAAM,IAAM,EACvD,IAAM,EAAQ,GAAa,CAAO,EAAG,GAAI,EAAQ,EAAM,MAAQ,EAC/D,IAAM,EAAO,GAAY,CAAO,EAAG,GAAI,EAAO,EAAM,KAAO,EAC3D,IAAM,EAAM,GAAW,CAAO,EAAG,GAAI,EAAM,EAAM,IAAM,EAEvD,GAAI,OAAO,KAAK,CAAK,EAAE,OAAS,EAAI,EAAO,cAAgB,EAE3D,OAAO,EEtKT,qBAAS,mBAAY,YACrB,eAAS,cAMT,SAAS,EAAgB,CAAC,EAAiB,EAA8B,CACvE,IAAM,EAAQ,EAAQ,MAAM;AAAA,CAAI,EAC5B,EAAmB,GACvB,QAAW,KAAQ,EAAO,CACxB,IAAM,EAAU,EAAK,KAAK,EAE1B,GAAI,MAAM,KAAK,CAAO,EAAG,CACvB,EAAmB,IAAY,YAC/B,SAEF,GAAI,CAAC,EAAmB,SAExB,IAAM,EAAI,EAAQ,MAAM,IAAI,OAAO,IAAI,iBAAqB,CAAC,EAC7D,GAAI,EAAG,CACL,IAAI,EAAQ,EAAE,GAAG,KAAK,EAEtB,EAAQ,EAAM,QAAQ,UAAW,EAAE,EAAE,KAAK,EAE1C,IAAM,EAAS,EAAM,MAAM,uBAAuB,GAAK,EAAM,MAAM,uBAAuB,EAC1F,GAAI,EAAS,OAAO,EAAO,GAC3B,OAAO,GAGX,OAAO,KAIF,SAAS,EAAgB,CAAC,EAA+B,CAC9D,IAAM,EAAO,GAAK,EAAK,YAAY,EACnC,GAAI,CAAC,GAAW,CAAI,EAAI,MAAO,CAAC,EAEhC,IAAI,EACJ,GAAI,CACF,EAAU,GAAa,EAAM,OAAO,EACpC,KAAM,CACN,MAAO,CAAC,EAGV,IAAM,EAAc,GAAiB,EAAS,aAAa,EAC3D,GAAI,GAAe,EAAkB,CAAW,EAC9C,MAAO,CAAE,QAAS,CAAE,KAAM,CAAY,CAAE,EAG1C,MAAO,CAAC,ECtCV,SAAS,EAAc,CAAC,EAAqB,EAAuC,CAClF,IAAM,EAAwB,CAC5B,QAAS,IAAM,EAAE,SAAW,CAAC,KAAQ,EAAE,SAAW,CAAC,CAAG,EACtD,cAAe,IAAM,EAAE,eAAiB,CAAC,KAAQ,EAAE,eAAiB,CAAC,CAAG,CAC1E,EAEA,GAAI,EAAI,SAAW,OAAO,KAAK,EAAI,OAAO,EAAE,SAAW,EAAI,OAAO,EAAI,QACtE,GAAI,EAAI,eAAiB,OAAO,KAAK,EAAI,aAAa,EAAE,SAAW,EAAI,OAAO,EAAI,cAClF,OAAO,EAIF,SAAS,EAAe,CAAC,EAA+B,CAE7D,OAAO,GAAe,GAAkB,CAAG,EAAG,GAAiB,CAAG,CAAC,EClB9D,SAAS,EAAgB,CAAC,EAAsC,CACrE,IAAM,EAAW,GAAY,CAAG,EAC1B,EAAe,GAAgB,CAAG,EAElC,EAAS,GAAY,EAAU,CAAY,EACjD,GAAgB,CAAM,EACtB,IAAM,EAAc,GAAY,EAAQ,GAAc,CAAG,CAA4B,EACrF,OAAO,GAAY,EAAa,CAAE,cAAe,GAAkB,CAAG,CAAE,CAA4B,EAItG,SAAS,EAAe,CAAC,EAAuC,CAC9D,IAAM,EAAe,EAAO,SAA2C,MAAQ,UACzE,EAAmB,GAAoB,IAAgB,GAAoB,QACjF,QAAW,KAAQ,EAAO,CACxB,GAAI,EAAiB,SAAS,EAAK,QAAQ,EAAI,SAC/C,IAAO,EAAS,GAAS,EAAK,KAAK,MAAM,GAAG,EAC5C,GAAI,IAAY,SAAW,EAAO,MAC/B,EAAO,MAAiC,GAAS,cAEpD,GAAI,IAAY,YAAc,EAAO,SAClC,EAAO,SAAoC,GAAS,eAUpD,SAAS,EAAW,CACzB,EACA,EACyB,CACzB,IAAM,EAAS,IAAK,CAAO,EAC3B,QAAY,EAAK,KAAU,OAAO,QAAQ,CAAM,EAAG,CACjD,IAAM,EAAW,EAAO,GACxB,GAAI,GAAc,CAAQ,EACxB,EAAO,GAAO,EACT,QACL,OAAO,IAAU,UACjB,IAAU,MACV,CAAC,MAAM,QAAQ,CAAK,GACpB,OAAO,IAAa,UACpB,IAAa,MACb,CAAC,MAAM,QAAQ,CAAQ,EAEvB,EAAO,GAAO,GACZ,EACA,CACF,EAGJ,OAAO",
111
- "debugId": "EEB05AB26DCE292364756E2164756E21",
113
+ "mappings": "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",
114
+ "debugId": "4E2087397DFEC9B764756E2164756E21",
112
115
  "names": []
113
116
  }