@optionfactory/fml 9.0.0-rc2 → 9.0.0-rc20

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.
Files changed (44) hide show
  1. package/README.md +16 -89
  2. package/dist/client-errors.iife.js +23 -37
  3. package/dist/client-errors.iife.js.map +1 -1
  4. package/dist/client-errors.iife.min.js +1 -1
  5. package/dist/client-errors.iife.min.js.map +1 -1
  6. package/dist/custom-elements.json +459 -36
  7. package/dist/fml.css +24 -19
  8. package/dist/fml.css.map +1 -1
  9. package/dist/fml.iife.js +4646 -1779
  10. package/dist/fml.iife.js.map +1 -1
  11. package/dist/fml.iife.min.js +1 -1
  12. package/dist/fml.iife.min.js.map +1 -1
  13. package/dist/ftl.d.mts +395 -224
  14. package/dist/ftl.iife.js +402 -332
  15. package/dist/ftl.iife.js.map +1 -1
  16. package/dist/ftl.iife.min.js +1 -1
  17. package/dist/ftl.iife.min.js.map +1 -1
  18. package/dist/ftl.min.mjs +1 -1
  19. package/dist/ftl.min.mjs.map +1 -1
  20. package/dist/ftl.mjs +402 -332
  21. package/dist/ftl.mjs.map +1 -1
  22. package/dist/ful.css +24 -19
  23. package/dist/ful.css.map +1 -1
  24. package/dist/ful.d.mts +2801 -519
  25. package/dist/ful.iife.js +4096 -1275
  26. package/dist/ful.iife.js.map +1 -1
  27. package/dist/ful.iife.min.js +1 -1
  28. package/dist/ful.iife.min.js.map +1 -1
  29. package/dist/ful.min.mjs +1 -1
  30. package/dist/ful.min.mjs.map +1 -1
  31. package/dist/ful.mjs +4093 -1277
  32. package/dist/ful.mjs.map +1 -1
  33. package/dist/httpc.d.mts +139 -121
  34. package/dist/httpc.iife.js +137 -166
  35. package/dist/httpc.iife.js.map +1 -1
  36. package/dist/httpc.iife.min.js +1 -1
  37. package/dist/httpc.iife.min.js.map +1 -1
  38. package/dist/httpc.min.mjs +1 -1
  39. package/dist/httpc.min.mjs.map +1 -1
  40. package/dist/httpc.mjs +137 -166
  41. package/dist/httpc.mjs.map +1 -1
  42. package/dist/vscode.html-custom-data.json +215 -27
  43. package/dist/web-types.json +463 -36
  44. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fml.iife.js","sources":["../src/ftl/cache.mjs","../src/ftl/ast.mjs","../src/ftl/expressions-parser.peggy","../src/ftl/expressions.mjs","../src/ftl/dom.mjs","../src/ftl/template.mjs","../src/ftl/registry.mjs","../src/ftl/templates.mjs","../src/ftl/rendering.mjs","../src/ftl/parsed-element.mjs","../src/ftl/l10n.mjs","../src/httpc/failure.mjs","../src/httpc/encodings.mjs","../src/httpc/http-client.mjs","../src/ful/storage.mjs","../src/ful/events/async.mjs","../src/ful/claims.mjs","../src/ful/timing.mjs","../src/ful/forms/bindings.mjs","../src/ful/forms/field.mjs","../src/ful/forms/form.mjs","../src/ful/forms/input.mjs","../src/ful/forms/temporals.mjs","../src/ful/forms/files.mjs","../src/ful/disclosures/anchors.mjs","../src/ful/forms/select.mjs","../src/ful/forms/radio.mjs","../src/ful/forms/checkbox.mjs","../src/ful/navigation/table.mjs","../src/ful/forms/choice-button.mjs","../src/ful/forms/filters.mjs","../src/ful/events/sections.mjs","../src/ful/disclosures/targets.mjs","../src/ful/disclosures/info.mjs","../src/ful/disclosures/drawer.mjs","../src/ful/disclosures/toast.mjs","../src/ful/navigation/tabs.mjs","../src/ful/disclosures/accordion.mjs","../src/ful/navigation/wizard.mjs","../src/ful/l10n/en.mjs","../src/ful/l10n/it.mjs","../src/ful/l10n/es.mjs","../src/ful/l10n/fr.mjs","../src/ful/plugin.mjs","../src/index.mjs"],"sourcesContent":["/**\n * A Map bounded by entry count, evicting in insertion order: not an LRU (a hit\n * does not refresh an entry), just a cap keeping unbounded key spaces (parsed\n * expressions, compiled masks, formatter instances) from growing forever. The\n * capacity is sized so eviction never happens on a sane page: hitting it means\n * dynamically generated keys, where FIFO's worst case (evicting a hot entry)\n * costs one recomputation.\n */\nclass BoundedCache {\n #max;\n #entries = new Map();\n /** @param {number} max */\n constructor(max) {\n this.#max = max;\n }\n /**\n * The cached value for the key, computing and caching it on a miss. A\n * computed null or undefined is cached like any value; a throwing compute\n * caches nothing.\n * @template K, V\n * @param {K} key\n * @param {(key: K) => V} compute\n * @returns {V}\n */\n getOrCompute(key, compute) {\n if (this.#entries.has(key)) {\n return this.#entries.get(key);\n }\n const value = compute(key);\n if (this.#entries.size >= this.#max) {\n this.#entries.delete(this.#entries.keys().next().value);\n }\n this.#entries.set(key, value);\n return value;\n }\n get size() {\n return this.#entries.size;\n }\n}\n\nexport { BoundedCache };\n","const nodes = {\n ter: Symbol('ternary'),\n elv: Symbol('elvis'),\n nullc: Symbol('null-coalescence'),\n or: Symbol('or'),\n and: Symbol('and'),\n eq: Symbol('eq'),\n cmp: Symbol('cmp'),\n not: Symbol('not'),\n access: Symbol('access'),\n member: Symbol('access-member'),\n subscript: Symbol('access-subscript'),\n method: Symbol('access-method-call'),\n call: Symbol('module-function-call'),\n tstring: Symbol('tstring'),\n literal: Symbol('literal'),\n array: Symbol('array-literal'),\n dict: Symbol('dict-literal'),\n function: Symbol('module-function'),\n symbol: Symbol('symbol'),\n templated: {\n ten: Symbol('templated-node'),\n teh: Symbol('templated-html'),\n tet: Symbol('templated-text'),\n tel: Symbol('templated-literal'),\n },\n dom: {\n t: Symbol('text'),\n h: Symbol('html'),\n n: Symbol('node'),\n },\n};\n\nexport { nodes };\n","{{\n import { nodes } from \"./ast.mjs\";\n //keyword classification lives here, not in the grammar's ordered choice: the\n //identifier rule consumes the whole word and the action decides, so no keyword\n //can grab a longer identifier's prefix. A Map, not a plain object: `in` on the\n //latter would classify inherited names such as `constructor` as keywords\n const keywords = new Map([\n ['true', true],\n ['false', false],\n ['null', null],\n ['undefined', undefined],\n ]);\n}}\n\nTemplatedRoot = TemplatedExpression*\n\nTemplatedExpression = value:(BeginNode @ExpressionRoot EndNode) { return {type:nodes.templated.ten, value}}\n\t/ value:(BeginHtml @ExpressionRoot EndHtml) { return {type:nodes.templated.teh, value}}\n\t/ value:(BeginText @ExpressionRoot EndText) { return {type:nodes.templated.tet, value}} \n\t/ value:TemplatedText { return {type:nodes.templated.tel, value}}\n\nBeginNode = '{{{{'\nEndNode = '}}}}'\t\nBeginHtml = '{{{'\nEndHtml = '}}}'\nBeginText = '{{'\nEndText = '}}'\n\nTemplatedText\n //the text grammar's one escape rule: a backslash drops itself and hands the\n //next character through verbatim, whatever it is, so `\\{` writes a literal\n //brace and a trailing lone backslash is a parse error. The quoting literals\n //('...', \"...\") carry no escapes at all; only template strings do\n = parts:(\n $( [^\\\\{]+ ) // normal text\n / '\\\\' c:. { return c; } //escaped\n / $('{' !'{') // single brace that isn't a delimiter\n )+ { return parts.join(''); }\n\nExpressionRoot\n = _ r:Expression _ { return r; }\n\nExpression = TernaryExpression\n\nTernaryExpression \n = cond:ElvisExpression _ \"?\" _ ifTrue:TernaryExpression _ \":\" _ ifFalse:TernaryExpression { return {type:nodes.ter, cond, ifTrue, ifFalse}; }\n / ElvisExpression\n\nElvisExpression\n = cond:NullCoalescingExpression _ \"?:\" _ ifFalse:ElvisExpression {return {type:nodes.elv, cond, ifFalse}; }\n / NullCoalescingExpression\n\nNullCoalescingExpression\n = lhs:OrExpression _ \"??\" _ rhs:NullCoalescingExpression { return {type:nodes.nullc, lhs, rhs}; } \n / OrExpression\n\nOrExpression \n = head:AndExpression tail:(_ \"||\" _ @rhs:AndExpression)* {\n let result = head;\n for (const rhs of tail) {\n result = {type: nodes.or, lhs: result, rhs};\n }\n return result;\n }\n\nAndExpression\n = head:EqExpression tail:(_ \"&&\" _ @rhs:EqExpression)* { \n let result = head;\n for (const rhs of tail) {\n result = {type: nodes.and, lhs: result, rhs};\n }\n return result;\n }\n\nEqExpression\n = head:RelExpression tail:(_ op:EqualityOp _ rhs:RelExpression {return {op, rhs};})* { \n let result = head;\n for (const element of tail) {\n result = {type: nodes.eq, op: element.op, lhs: result, rhs: element.rhs};\n }\n return result;\n }\n\nRelExpression\n = head:NotExpression tail:(_ op:RelationalOp _ rhs:NotExpression {return {op, rhs};})* {\n let result = head;\n for (const element of tail) {\n result = {type: nodes.cmp, op: element.op, lhs: result, rhs: element.rhs};\n }\n return result;\n }\n\n\nNotExpression\n = \"!\" _ expr:NotExpression { return {type:nodes.not, expr} }\n / Access\n\n\nAccess \n = lhs:GroupingExpression _ rhs:(@AccessExpression _)+ { return {type: nodes.access, lhs, rhs} } \n / GroupingExpression\n\n\nAccessExpression \n = AccessMember\n / AccessSubscript \n / AccessMethodCall\n \nAccessMember \"member\"\n = op:(\"?.\"/\".\") _ rhs:Word {\n return {type: nodes.member, ns: op === '?.', rhs: rhs};\n }\n\nAccessSubscript \"subscript\" \n = op:\"?.\"? \"[\" _ rhs:Expression _ \"]\" { \n return {type: nodes.subscript, ns: op !== null, rhs}; \n } \n\nAccessMethodCall \"method-call\" \n = op:\"?.\"? \"(\" _ h:(@Expression _)? t:(\",\" _ @Expression _)* \")\" { \n return {type: nodes.method, ns: op !== null, args: h === null ? [] : [h, ...t]}; \n }\n\nGroupingExpression\n = \"(\" _ e:Expression _ \")\" { return e }\n / ModuleFunctionCall\n / AnyLiteral\n / Identifier\n\n\nModuleFunctionCall \"module-function-call\" \n = fn:ModuleFunction \"(\" _ h:(@Expression _)? t:(\",\" _ @Expression _)* \")\" {\n const args = h === null ? [] : [h, ...t];\n return {type: nodes.call, value: fn, args};\n }\n\nAnyLiteral\n = NumberLiteral\n / StringLiteral\n / ArrayLiteral\n / DictLiteral\n\nNumberLiteral \"number-literal\" \n = value:$( '-'? ([0-9]+ ('.' [0-9]*)? / '.' [0-9]+ ) ) {\n return { type: nodes.literal, value: parseFloat(value) };\n }\n\nStringLiteral \"string-literal\"\n = \"'\" value:$[^']* \"'\" { return {type: nodes.literal, value}; }\n / '\"' value:$[^\"]* '\"' { return {type: nodes.literal, value}; }\n / \"`\" parts:(TemplateStringExpression / TemplateStringLiteral)* \"`\" { \n return {type: nodes.tstring, parts}; \n }\n\nTemplateStringExpression \"tstring-expression\"\n = \"{\" _ expr:Expression _ \"}\" { \n return expr; \n }\n\nTemplateStringLiteral \"tstring-literal\"\n = parts:(\n $([^\\\\`{]+)\n / \"\\\\\" c:. { return c; }\n )+ {\n return { type: nodes.literal, value: parts.join('') };\n }\n / char:$(\"{\") { \n return { type: nodes.literal, value: char }; \n }\n\nArrayLiteral \"array-literal\" \n = \"[\" _ h:(Expression)? _ t:(\",\" _ @Expression _)* \"]\" { \n const value = h === null ? [] : [h, ...t];\n return {type: nodes.array, value};\n }\n\nDictLiteral \"dict-literal\" \n = \"{\" _ h:(@StringLiteral _ \":\" _ @Expression)? _ t:(\",\" _ @StringLiteral _ \":\" _ @Expression _)* \"}\" {\n var value = []\n if (h !== null){\n value.push(h);\n }\n value.push.apply(value, t);\n return {type: nodes.dict, value}; \n }\n\nModuleFunction \"module-function\"\n = '#' module:(@Word ':')? v:Word {\n return {type: nodes.function, module, value: v}\n }\n\nWord\n = $([a-zA-Z$_][a-zA-Z$_0-9]*)\n\nIdentifier \"identifier-or-keyword\"\n = s:Word {\n return keywords.has(s)\n ? {type: nodes.literal, value: keywords.get(s)}\n : {type: nodes.symbol, value: s};\n }\n\nEqualityOp\n = \"==\"\n / \"!=\"\n\nRelationalOp\n = \">=\"\n / \">\"\n / \"<=\"\n / \"<\"\n\n_ \"whitespaces\"\n = [ \\t\\n\\r]*\n\n","import { parse } from './expressions-parser.peggy';\nimport { nodes } from './ast.mjs';\nimport { BoundedCache } from './cache.mjs';\n\n/**\n * The one lookup against a data stack: the innermost overlay carrying the name\n * wins, `self` is the innermost overlay itself, and a function overlay counts\n * like an object one. Every lookup that resolves a name goes through this, so the\n * imperative facades cannot drift from what a template sees.\n * @param {any[]} dataStack\n * @param {string|symbol} prop\n */\nconst resolveInStack = (dataStack, prop) => {\n if (prop === 'self') {\n return dataStack[dataStack.length - 1];\n }\n for (let i = dataStack.length - 1; i >= 0; i--) {\n const overlay = dataStack[i];\n if (overlay != null && (typeof overlay === 'object' || typeof overlay === 'function')) {\n if (prop in overlay) {\n return overlay[prop];\n }\n }\n }\n return undefined;\n};\n\n/**\n * Evaluates a parsed expression against a scope. One instance per evaluation:\n * it holds the modules and the data stack that names resolve against, and keeps\n * no state between visits.\n */\nclass EvaluatingVisitor {\n #modules;\n #dataStack;\n constructor(modules, dataStack) {\n this.#modules = modules;\n this.#dataStack = dataStack;\n }\n #resolve(prop) {\n return resolveInStack(this.#dataStack, prop);\n }\n /**\n * The name a missing-method report can carry: the called symbol for a bare\n * `boom()`, the member for a dotted `a.boom()`, nothing for anything else\n * (a subscript or a grouped left-hand side has no static name).\n */\n #reportableName(node, index) {\n const source = index === 0 ? node.lhs : node.rhs[index - 1];\n if (source.type === nodes.symbol) {\n return source.value;\n }\n if (source.type === nodes.member) {\n return source.rhs;\n }\n return null;\n }\n\n #cached_resolve_proxy;\n #resolve_proxy() {\n if (!this.#cached_resolve_proxy) {\n this.#cached_resolve_proxy = new Proxy(this.#dataStack, {\n get: (target, prop) => this.#resolve(prop),\n });\n }\n return this.#cached_resolve_proxy;\n }\n [nodes.and](node) {\n return this.visit(node.lhs) && this.visit(node.rhs);\n }\n [nodes.or](node) {\n return this.visit(node.lhs) || this.visit(node.rhs);\n }\n [nodes.nullc](node) {\n const lhs = this.visit(node.lhs);\n return lhs !== null && lhs !== undefined ? lhs : this.visit(node.rhs);\n }\n [nodes.not](node) {\n return !this.visit(node.expr);\n }\n [nodes.eq](node) {\n const lhs = this.visit(node.lhs);\n const rhs = this.visit(node.rhs);\n const eq = lhs === rhs;\n return node.op === '==' ? eq : !eq;\n }\n [nodes.cmp](node) {\n const lhs = this.visit(node.lhs);\n const rhs = this.visit(node.rhs);\n switch (node.op) {\n case '>':\n return lhs > rhs;\n case '<':\n return lhs < rhs;\n case '>=':\n return lhs >= rhs;\n case '<=':\n return lhs <= rhs;\n default:\n throw new Error(`unknown cmp op ${node.op}`);\n }\n }\n [nodes.call](node) {\n const fnRef = node.value;\n const module = fnRef.module === null ? this.#modules : this.#modules?.[fnRef.module];\n if (!module) {\n throw new Error(`Module \"${fnRef.module}\" not found`);\n }\n const fn = module[fnRef.value];\n if (!fn) {\n throw new Error(`Function \"#${fnRef.module === null ? '' : `${fnRef.module}:`}${fnRef.value}\" not found`);\n }\n const args = node.args.map((arg) => this.visit(arg));\n return fn.apply(this.#resolve_proxy(), args);\n }\n [nodes.literal](node) {\n return node.value;\n }\n [nodes.tstring](node) {\n let result = '';\n const parts = node.parts;\n for (let i = 0, len = parts.length; i < len; i++) {\n const evaluated = this.visit(parts[i]);\n if (evaluated !== null && evaluated !== undefined) {\n result += evaluated;\n }\n }\n return result;\n }\n [nodes.symbol](node) {\n return this.#resolve(node.value);\n }\n [nodes.dict](node) {\n return Object.fromEntries(node.value.map((entry) => [this.visit(entry[0]), this.visit(entry[1])]));\n }\n [nodes.array](node) {\n return node.value.map((v) => this.visit(v));\n }\n [nodes.ter](node) {\n return this.visit(node.cond) ? this.visit(node.ifTrue) : this.visit(node.ifFalse);\n }\n [nodes.elv](node) {\n const cond = this.visit(node.cond);\n return cond ? cond : this.visit(node.ifFalse);\n }\n [nodes.access](node) {\n let prev;\n let cur = this.visit(node.lhs);\n for (let i = 0; i !== node.rhs.length; ++i) {\n const rhs = node.rhs[i];\n if (rhs.ns && cur == null) {\n return undefined;\n }\n let value;\n switch (rhs.type) {\n case nodes.member: {\n value = cur[rhs.rhs];\n break;\n }\n case nodes.subscript: {\n value = cur[this.visit(rhs.rhs)];\n break;\n }\n case nodes.method: {\n if (!cur) {\n const name = this.#reportableName(node, i);\n throw new Error(name === null ? 'Method missing' : `Method missing \"${name}\"`);\n }\n const args = rhs.args.map((arg) => this.visit(arg));\n value = cur.apply(prev, args);\n break;\n }\n }\n prev = cur;\n cur = value;\n }\n return cur;\n }\n visit(node, ...args) {\n return this[node.type](node, ...args);\n }\n visitRoot(ast, templated) {\n return !templated\n ? this.visit(ast)\n : ast.map((node) => {\n switch (node.type) {\n case nodes.templated.tel:\n return { type: nodes.dom.t, value: node.value };\n case nodes.templated.tet:\n return { type: nodes.dom.t, value: this.visit(node.value) };\n case nodes.templated.teh:\n return { type: nodes.dom.h, value: this.visit(node.value) };\n case nodes.templated.ten:\n return { type: nodes.dom.n, value: this.visit(node.value) };\n default:\n throw new Error(`unknown node type ${node.type.toString()}`);\n }\n });\n }\n}\n\n/**\n * The expression language: parsing to an ast, caching the parses, and\n * interpreting one against a scope. Member access and calls are unfiltered, so\n * an expression can do whatever the page's own javascript can. Expressions are\n * written by the page author; untrusted data is passed in as data and never\n * spliced into the expression text.\n */\nclass Expressions {\n static MODE_EXPRESSION = Symbol('MODE_EXPRESSION');\n static MODE_TEMPLATED = Symbol('MODE_TEMPLATED');\n\n static #astCache = new BoundedCache(1000);\n\n /**\n * Parses an expression.\n * @param {string} expression\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode]\n * @returns the ast\n */\n static parse(expression, mode) {\n const key = mode?.toString() + expression;\n return this.#astCache.getOrCompute(key, () =>\n parse(expression, {\n startRule: mode === Expressions.MODE_TEMPLATED ? 'TemplatedRoot' : 'ExpressionRoot',\n }),\n );\n }\n /**\n * Evaluates an expression.\n * @param {{[k: string]: any } | null | undefined } modules\n * @param {any[]} dataStack\n * @param {any} ast\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode]\n * @returns the result\n */\n static evaluate(modules, dataStack, ast, mode) {\n return new EvaluatingVisitor(modules, dataStack).visitRoot(ast, mode === Expressions.MODE_TEMPLATED);\n }\n /**\n * Parses and evaluates an expression.\n * @param {{ [x: string]: any; } | null | undefined} modules\n * @param {any[]} dataStack\n * @param {string} expression\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode]\n * @returns the result\n */\n static interpret(modules, dataStack, expression, mode) {\n return Expressions.evaluate(modules, dataStack, Expressions.parse(expression, mode), mode);\n }\n}\n\n/**\n * A scope: the modules that `#name:fn()` resolves against and the data stack\n * that a bare identifier resolves against, as a single value. Adding an overlay\n * returns a new evaluator instead of modifying this one, so a template can add\n * data for one subtree without affecting the rest of the render.\n */\nclass ExpressionEvaluator {\n #modules;\n #dataStack;\n constructor(modules, dataStack) {\n this.#modules = modules;\n this.#dataStack = dataStack;\n }\n withModule(name, value) {\n const module = name ? { [name]: value } : value;\n return new ExpressionEvaluator({ ...this.#modules, ...module }, this.#dataStack);\n }\n withOverlay(...data) {\n return new ExpressionEvaluator(\n this.#modules,\n data.length === 0 ? this.#dataStack : [...this.#dataStack, ...data],\n );\n }\n /**\n * Resolves a name against the data stack, with no parse round trip: the\n * lookup a template's bare identifier makes, for an imperative caller.\n * @param {string} name\n */\n resolve(name) {\n return resolveInStack(this.#dataStack, name);\n }\n /** Evaluates an expression against this scope. */\n evaluateExpression(expression) {\n return Expressions.interpret(this.#modules, this.#dataStack, expression, Expressions.MODE_EXPRESSION);\n }\n /** Evaluates a templated text, the `{{ }}` form, against this scope. */\n evaluateTemplated(text) {\n return Expressions.interpret(this.#modules, this.#dataStack, text, Expressions.MODE_TEMPLATED);\n }\n}\n\nexport { Expressions, ExpressionEvaluator };\n","/** Creates and inspects the DocumentFragments a Template renders into. */\nclass Fragments {\n /**\n * Creates a DocumentFragment from an string.\n * @param {...string} html\n * @returns {DocumentFragment} the fragment\n */\n static fromHtml(...html) {\n const el = document.createElement('template');\n el.innerHTML = html.map((h) => h.trim()).join('');\n return document.adoptNode(el.content);\n }\n /**\n * Creates a string representation (HTML) of a DocumentFragment, consuming it:\n * the nodes are moved out, not copied, and the fragment is left empty. Pass\n * `fragment.cloneNode(true)` to keep the original usable.\n * @param {DocumentFragment} fragment\n * @returns {string} the html\n */\n static toHtml(fragment) {\n var el = document.createElement('template');\n el.content.appendChild(fragment);\n return el.innerHTML;\n }\n /**\n * Checks if a fragment contains only blank text nodes\n * @param {DocumentFragment} fragment\n * @returns {boolean} true if the fragment is blank\n */\n static isBlank(fragment) {\n return fragment.childElementCount === 0 && fragment.textContent.trim() === '';\n }\n /**\n * Creates a DocumentFragment from nodes.\n * @param {...Node} nodes\n * @returns {DocumentFragment} the fragment\n */\n static from(...nodes) {\n const fragment = new DocumentFragment();\n for (const node of nodes) {\n fragment.appendChild(node);\n }\n return fragment;\n }\n /**\n * Creates a DocumentFragment from childNodes of an element.\n * @param {Node} el\n * @returns {DocumentFragment} the fragment\n */\n static fromChildNodes(el) {\n const fragment = new DocumentFragment();\n while (el.firstChild) {\n fragment.appendChild(el.firstChild);\n }\n return fragment;\n }\n}\n\n/** Attribute reads and writes where a nullish value removes the attribute instead of setting it to the string 'null'. */\nclass Attributes {\n static id = 0;\n /**\n * Creates a unique id with the given prefix.\n * @param {string} prefix\n * @returns\n */\n static uid(prefix) {\n return `${prefix}-${++Attributes.id}`;\n }\n /**\n * Sets an attribute if not present.\n * @param {Element} el\n * @param {string} k\n * @param {string} v\n * @returns\n */\n static defaultValue(el, k, v) {\n if (!el.hasAttribute(k)) {\n el.setAttribute(k, v);\n }\n return el.getAttribute(k);\n }\n /**\n * Forwards prefixed attributes from an element to another (removing the prefix).\n * @param {string} prefix\n * @param {Element} from\n * @param {Element} to\n */\n static forward(prefix, from, to) {\n from.getAttributeNames()\n .filter((a) => a.startsWith(prefix))\n .forEach((a) => {\n const target = a.substring(prefix.length);\n if (target === 'class') {\n const classes =\n from\n .getAttribute(`${prefix}class`)\n ?.split(/\\s+/)\n .filter((a) => a.length) ?? [];\n to.classList.add(...classes);\n return;\n }\n to.setAttribute(target, /** @type {string} */ (from.getAttribute(a)));\n });\n }\n /**\n * Sets the value of an attribute. nullish values remove the attribute.\n * @param {Element} el\n * @param {string} attr\n * @param {string | null | undefined} value\n */\n static set(el, attr, value) {\n if (value == null) {\n el.removeAttribute(attr);\n } else {\n el.setAttribute(attr, value);\n }\n }\n}\n\n/**\n * Reads an element's light-dom slots: the named `<template slot=…>` and\n * `[slot=…]` children are removed and collected by name, and the remaining\n * children become the default slot. fml renders into the light dom, so this\n * replaces the slotting a shadow root would do.\n */\nclass LightSlots {\n /**\n * Extracts light slots from an element. For non default slots in a template tag, the content is extracted.\n * @param {Element} el\n * @returns the slots\n */\n static from(el) {\n //the platform reads slot=\"\" as the default slot: such children stay in\n //the document order of the default content, their claim stripped like any named one\n for (const child of el.children) {\n if (child.matches('[slot=\"\"]')) {\n child.removeAttribute('slot');\n }\n }\n /** @type [string, Element|DocumentFragment][] */\n const namedSlots = Array.from(el.children)\n .filter((el) => el.matches('[slot]'))\n .map((el) => {\n el.remove();\n const slot = /** @type {string} */ (el.getAttribute('slot'));\n el.removeAttribute('slot');\n return [slot, LightSlots.slotFromNode(el)];\n });\n const slots = {};\n slots.default = new DocumentFragment();\n slots.default.append(...el.childNodes);\n for (const [name, el] of namedSlots) {\n if (!(name in slots)) {\n slots[name] = new DocumentFragment();\n }\n slots[name].append(el);\n }\n return slots;\n }\n static slotFromNode(el) {\n if (el instanceof HTMLTemplateElement) {\n return document.adoptNode(el.content);\n }\n if (el instanceof HTMLScriptElement && el.type === 'text/html') {\n return Fragments.fromHtml(el.innerHTML);\n }\n return el;\n }\n}\n\n/** Waits for the parser and for the document, for elements that upgrade before their own markup is complete. */\nclass Nodes {\n /**\n * Checks if an element is already parsed.\n * @param {Element} el\n * @returns\n */\n static isParsed(el) {\n for (let c = /** @type {Node | null} */ (el); c; c = c.parentNode) {\n if (c.nextSibling) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Waits for the document's DOMContentLoaded, resolving immediately when\n * that moment already passed. 'interactive' alone cannot tell a document\n * still waiting for deferred scripts (the event comes, however late) from\n * a module imported past it (the event is gone): the two events order\n * themselves, DOMContentLoaded always precedes load, so racing the two\n * resolves with DCL whenever it is still coming and with load otherwise,\n * never early.\n */\n static waitDomContentLoaded(doc) {\n if (doc.readyState === 'loading') {\n return new Promise((resolve) => {\n doc.addEventListener('DOMContentLoaded', () => resolve(undefined), { once: true });\n });\n }\n if (doc.readyState === 'complete') {\n return Promise.resolve();\n }\n const win = doc.defaultView;\n if (win === null) {\n //a viewless document can receive no event at all\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n const done = () => {\n win.removeEventListener('DOMContentLoaded', done);\n win.removeEventListener('load', done);\n resolve(undefined);\n };\n win.addEventListener('DOMContentLoaded', done);\n win.addEventListener('load', done);\n });\n }\n\n /**\n * Waits for the element's closing tag to be parsed: one MutationObserver\n * resolves once the element, or any of its ancestors, gains a next sibling,\n * which is the parser having moved past this subtree. The document's\n * DOMContentLoaded is the deadline. Resolves immediately for an element\n * that is already parsed.\n *\n * Every ancestor is watched, not only the parent, because that is what the\n * predicate reads: an element last among its siblings becomes parsed when\n * an ancestor gains one, and a childList observer on the parent never sees\n * that. Formatted markup usually hides the difference, the whitespace\n * before a closing tag being a text node the parent does gain, so the gap\n * shows on whitespace-free markup, where the wait fell back to the\n * deadline. One observer takes many targets, so the cost is one observe()\n * per level, and it is disconnected at the first checkpoint past the\n * element either way.\n * @param {any} el\n * @returns {Promise<any>}\n */\n static waitParsed(el) {\n if (Nodes.isParsed(el)) {\n return Promise.resolve(el);\n }\n return new Promise((resolve) => {\n const observer = new MutationObserver(() => {\n if (!Nodes.isParsed(el)) {\n return;\n }\n observer.disconnect();\n resolve(el);\n });\n for (let c = el.parentNode; c; c = c.parentNode) {\n observer.observe(c, { childList: true });\n }\n Nodes.waitDomContentLoaded(el.ownerDocument).then(() => {\n observer.disconnect();\n resolve(el);\n });\n });\n }\n\n /**\n * Returns the first child of the element element (if exists) matching the selector.\n * @param {Element} el\n * @param {string} selector\n * @returns\n */\n static queryChildren(el, selector) {\n for (const c of el.children) {\n if (c.matches(selector)) {\n return c;\n }\n }\n return null;\n }\n /**\n * Returns all children of the element matching the selector.\n * @param {Element} el\n * @param {string} selector\n * @returns\n */\n static queryChildrenAll(el, selector) {\n const r = [];\n for (const c of el.children) {\n if (c.matches(selector)) {\n r.push(c);\n }\n }\n return r;\n }\n}\n\nexport { Fragments, Attributes, LightSlots, Nodes };\n","import { nodes } from './ast.mjs';\nimport { BoundedCache } from './cache.mjs';\nimport { Fragments } from './dom.mjs';\nimport { ExpressionEvaluator } from './expressions.mjs';\n\n/**\n * Collects the changes a render makes to the tree it is traversing, deferring\n * those that would break the traversal: a node marked for removal stays in\n * place until the render finishes, so the iteration containing it completes.\n */\nclass NodeOperations {\n #forRemoval = new Set();\n removed(node) {\n return this.#forRemoval.has(node);\n }\n remove(node) {\n node.replaceChildren?.();\n Object.keys(node.dataset || {})\n .filter((k) => k.startsWith('tpl'))\n .forEach((k) => {\n delete node.dataset[k];\n });\n this.#forRemoval.add(node);\n }\n popData(node, key) {\n const v = node.dataset[key];\n delete node.dataset[key];\n return v;\n }\n prepend(ref, node) {\n ref.parentNode.insertBefore(node, ref);\n }\n append(ref, node) {\n ref.parentNode.insertBefore(node, ref.nextSibling);\n }\n replace(ref, node) {\n this.prepend(ref, node);\n this.remove(ref);\n }\n cleanup() {\n for (const node of this.#forRemoval) {\n node.remove();\n }\n this.#forRemoval.clear();\n }\n}\n\n/** The `data-tpl-*` commands, each taking the node it is written on and the scope it evaluates in. */\nclass CommandsHandler {\n //the order is the semantics: each command sees the node as the ones before\n //it left it, so tplIf gates before tplWith/tplEach push their overlay and\n //tplWhen gates after (inside the sub-render, where the overlay is in scope)\n static ORDERED_COMMANDS = [\n 'tplIf',\n 'tplWith',\n 'tplEach',\n 'tplWhen',\n 'tplClassAppend',\n 'tplAttrAppend',\n 'tplRemove',\n 'tplVerbatim',\n ];\n //same body as tplWhen: the two differ only in ORDERED_COMMANDS position,\n //if evaluates in the outer scope, before with/each\n static tplIf(node, expression, ops, evaluator) {\n const accept = evaluator.evaluateExpression(expression);\n if (!accept) {\n ops.remove(node);\n }\n }\n static tplWith(node, expression, ops, evaluator) {\n const evaluated = evaluator.evaluateExpression(expression);\n const varName = ops.popData(node, 'tplVar');\n const newNode = new Template(node, evaluator)\n .withOverlay(varName ? { [varName]: evaluated } : evaluated)\n .render();\n ops.replace(node, newNode);\n }\n static tplEach(node, expression, ops, evaluator) {\n const varName = ops.popData(node, 'tplVar');\n const statName = ops.popData(node, 'tplStat');\n const template = new Template(node, evaluator);\n const evaluated = evaluator.evaluateExpression(expression);\n //keyed collections iterate as {key, value} entries: a Map in its own\n //order, a non-iterable plain dict in Object.entries order. Plain alone:\n //a class instance or a response wrapper standing where an array was\n //expected still fails loudly below, and any other iterable (a Set, a\n //generator, an entries() iterator) iterates as itself\n const proto = evaluated === null || typeof evaluated !== 'object' ? undefined : Object.getPrototypeOf(evaluated);\n const keyed =\n evaluated instanceof Map\n ? [...evaluated]\n : !evaluated?.[Symbol.iterator] && (proto === Object.prototype || proto === null)\n ? Object.entries(evaluated)\n : null;\n const entries = keyed === null ? evaluated : keyed.map(([key, value]) => ({ key, value }));\n if (!entries?.[Symbol.iterator]) {\n throw new Error(`Expected an iterable got '${evaluated}'`);\n }\n if (!statName) {\n for (const v of entries) {\n ops.prepend(node, template.withOverlay(varName ? { [varName]: v } : v).render());\n }\n ops.remove(node);\n return;\n }\n //the stat rides grouped under its declared name, overlaid below the\n //item, so data can never collide with its fields and an item property\n //sharing the stat's very name wins, as data always does. The size is\n //read where the collection already knows it (arrays and keyed entries\n //by length, sets and the like by size): an arbitrary iterator is never\n //consumed to learn it, so its size and last read null, the unknown\n const size = Array.isArray(entries)\n ? entries.length\n : typeof entries.length === 'number'\n ? entries.length\n : typeof entries.size === 'number'\n ? entries.size\n : null;\n let index = 0;\n for (const v of entries) {\n const stat = {\n index,\n count: index + 1,\n size,\n first: index === 0,\n last: size === null ? null : index === size - 1,\n even: index % 2 === 0,\n odd: index % 2 === 1,\n };\n ops.prepend(\n node,\n template.withOverlay({ [statName]: stat }, varName ? { [varName]: v } : v).render(),\n );\n ++index;\n }\n ops.remove(node);\n }\n //same body as tplIf: the two differ only in ORDERED_COMMANDS position,\n //when evaluates after with/each, in the scope their overlay opened\n static tplWhen(node, expression, ops, evaluator) {\n const accept = evaluator.evaluateExpression(expression);\n if (!accept) {\n ops.remove(node);\n }\n }\n static tplVerbatim(node, expression, ops, evaluator) {\n const newNode = node.cloneNode(true);\n ops.replace(node, newNode);\n }\n static tplRemove(node, value, ops, evaluator) {\n switch (value.toLowerCase()) {\n case 'tag': {\n const fragment = new DocumentFragment();\n while (node.firstChild) {\n fragment.appendChild(node.firstChild);\n }\n if ('tplVerbatim' in node.dataset) {\n //we are removing the parent element so we have to handle the lower priority commands\n ops.popData(node, 'tplVerbatim');\n ops.replace(node, fragment);\n } else {\n ops.append(node, fragment);\n ops.remove(node);\n }\n break;\n }\n case 'body':\n node.replaceChildren();\n break;\n case 'all':\n ops.remove(node);\n break;\n }\n }\n static tplClassAppend(node, expression, ops, evaluator) {\n const classes = evaluator.evaluateExpression(expression);\n if (!classes) {\n return;\n }\n const classesAsArray = Array.isArray(classes) ? classes : [classes];\n const cleanClasses = classesAsArray.flatMap((c) => (typeof c === 'string' ? c.split(' ') : c)).filter(Boolean);\n if (cleanClasses.length === 0) {\n return;\n }\n node.classList.add(...cleanClasses);\n }\n static tplAttrAppend(node, expression, ops, evaluator) {\n const attributesAndValues = evaluator.evaluateExpression(expression);\n if (!attributesAndValues || attributesAndValues.length === 0) {\n return;\n }\n const tuples = Array.isArray(attributesAndValues[0]) ? attributesAndValues : [attributesAndValues];\n tuples.forEach(([k, v]) => {\n node.setAttribute(k, v);\n });\n }\n static textNode(node, expression, ops, evaluator) {\n for (const v of evaluator.evaluateTemplated(expression)) {\n if (v.value == null) {\n continue;\n }\n switch (v.type) {\n case nodes.dom.t:\n ops.prepend(node, document.createTextNode(v.value));\n break;\n case nodes.dom.h:\n ops.prepend(node, Fragments.fromHtml(typeof v.value === 'string' ? v.value : String(v.value)));\n break;\n case nodes.dom.n:\n if (!(v.value instanceof Node)) {\n throw new TypeError(`Expected a Node, got '${typeof v.value}'`);\n }\n ops.prepend(node, v.value);\n break;\n }\n }\n ops.remove(node);\n }\n}\n\n// Module-isolated string cache for dataset-to-attribute conversions\nconst attributeCache = new BoundedCache(1000);\n\n/**\n * Converts a tpl camelCase dataset key into a kebab-case attribute name.\n * Uses a cache lookup to avoid repetitive regex/string splitting.\n * @param {string} dataSetKey\n * @returns {string}\n */\nfunction toAttr(dataSetKey) {\n return attributeCache.getOrCompute(dataSetKey, (k) =>\n k\n .substring(3)\n .split(/(?=[A-Z])/)\n .join('-')\n .toLowerCase(),\n );\n}\n\n/**\n * A compiled fragment together with the scope it renders in. Both are\n * immutable: adding data or replacing the scope returns a new Template, so one\n * piece of compiled markup can be rendered against any number of scopes and a\n * registry can reuse a single template for every element that requests it.\n */\nclass Template {\n /**\n * Creates a template from a string.\n * @param {string} html\n * @param {{ [k: string] : any }?} [modules]\n * @param {...*} data\n * @returns the template\n */\n static fromHtml(html, modules, ...data) {\n return new Template(Fragments.fromHtml(html), new ExpressionEvaluator(modules, data));\n }\n\n /**\n * Creates a template from the content of the first template element matching the selector.\n * @param {string} selector for an HTMLTemplateElement\n * @param {{ [k: string] : any }?} [modules]\n * @param {...*} data\n * @returns the template\n */\n static fromSelector(selector, modules, ...data) {\n const templateEl = document.querySelector(selector);\n if (!(templateEl instanceof HTMLTemplateElement)) {\n throw new Error('template selector does not match any template tag');\n }\n const fragment = document.adoptNode(templateEl.content);\n return new Template(fragment, new ExpressionEvaluator(modules, data));\n }\n\n /**\n * Creates a template from the content of an HTMLTemplateElement.\n * @param {HTMLTemplateElement} templateEl\n * @param {{ [k: string] : any }?} [modules]\n * @param {...*} data\n * @returns the template\n */\n static fromTemplate(templateEl, modules, ...data) {\n const fragment = document.adoptNode(templateEl.content);\n return new Template(fragment, new ExpressionEvaluator(modules, data));\n }\n\n /**\n * Creates a template from a DocumentFragment.\n * @param {DocumentFragment} fragment\n * @param { { [k: string] : any }? } [modules]\n * @param {...*} data\n * @returns the template\n */\n static fromFragment(fragment, modules, ...data) {\n return new Template(fragment, new ExpressionEvaluator(modules, data));\n }\n #fragment;\n #evaluator;\n /**\n * Creates a template: a fragment plus the scope it renders in.\n * @param {DocumentFragment} fragment\n * @param {ExpressionEvaluator} evaluator the modules and data stack the expressions resolve against\n */\n constructor(fragment, evaluator) {\n this.#fragment = fragment;\n this.#evaluator = evaluator;\n }\n /**\n * Creates a new Template rendering in another scope: the one way to rebind\n * a compiled template to a registry's modules and data.\n * @param {ExpressionEvaluator} evaluator\n */\n withEvaluator(evaluator) {\n return new Template(this.#fragment, evaluator);\n }\n /**\n * Creates a new Template replacing the fragment.\n * @param {DocumentFragment} fragment\n */\n withFragment(fragment) {\n return new Template(fragment, this.#evaluator);\n }\n /**\n * Creates a new Template with a new module added.\n * @param {string?} name\n * @param {{[k: string]: any}} value\n */\n withModule(name, value) {\n return new Template(this.#fragment, this.#evaluator.withModule(name, value));\n }\n /**\n * Creates a new Template with new a data overlay added to the stack.\n * @param {...*} data\n */\n withOverlay(...data) {\n return new Template(this.#fragment, this.#evaluator.withOverlay(...data));\n }\n /**\n * Evaluates an expression in this template's scope, widened by the overlays.\n * @param {string} expression\n * @param {...*} data\n * @returns the evaluated expression result\n */\n evaluateExpression(expression, ...data) {\n return this.#evaluator.withOverlay(...data).evaluateExpression(expression);\n }\n /**\n * Evaluates a templated text, the `{{ }}` form, in this template's scope.\n * @param {string} text\n * @param {...*} data\n * @returns the parts the text evaluates to\n */\n evaluateTemplated(text, ...data) {\n return this.#evaluator.withOverlay(...data).evaluateTemplated(text);\n }\n /**\n * Returns an expression evaluator with bound modules and dataStack.\n */\n evaluator() {\n return this.#evaluator;\n }\n /**\n * Renders the template.\n * @returns a DocumentFragment\n */\n render() {\n try {\n const ops = new NodeOperations();\n const imported = document.importNode(this.#fragment, true);\n const fragment =\n imported.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ? imported\n : (() => {\n const d = new DocumentFragment();\n d.appendChild(imported);\n return d;\n })();\n const iterator = document.createNodeIterator(\n fragment,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n Template.#NODE_FILTER,\n );\n let node;\n while ((node = iterator.nextNode()) !== null) {\n ops.cleanup();\n if (node.nodeType === Node.TEXT_NODE) {\n try {\n CommandsHandler.textNode(node, node.nodeValue, ops, this.#evaluator);\n } catch (ex) {\n throw RenderError.wrap('Error evaluating text node', node, ex);\n }\n continue;\n }\n const el = /** @type {HTMLElement} */ (node);\n for (const command of CommandsHandler.ORDERED_COMMANDS) {\n if (!(command in el.dataset)) {\n continue;\n }\n const value = ops.popData(el, command);\n try {\n CommandsHandler[command](el, value, ops, this.#evaluator);\n } catch (ex) {\n //the directive is popped before it runs, so the open tag no\n //longer carries it: the frame names it and its expression\n throw RenderError.wrap(`Error evaluating data-tpl-${toAttr(command)}=\"${value}\"`, el, ex);\n }\n if (ops.removed(el)) {\n break;\n }\n }\n for (const dataSetKey of Object.keys(el.dataset || {})) {\n if (!dataSetKey.startsWith('tpl')) {\n continue;\n }\n const attributeName = toAttr(dataSetKey);\n const expression = ops.popData(el, dataSetKey);\n try {\n const evaluated = this.#evaluator.evaluateExpression(expression);\n if (typeof evaluated === 'boolean') {\n el.toggleAttribute(attributeName, evaluated);\n continue;\n }\n if (evaluated !== null && evaluated !== undefined) {\n el.setAttribute(attributeName, evaluated);\n }\n } catch (ex) {\n throw RenderError.wrap(`Error evaluating data-tpl-${toAttr(dataSetKey)}=\"${expression}\"`, el, ex);\n }\n }\n }\n ops.cleanup();\n return fragment;\n } catch (ex) {\n //a command, a text node or a nested render already named the node it\n //failed on: wrapping again would add a frame for the fragment that\n //contains it, one per level, serializing the whole template into the\n //message that survives. Only a failure outside those is framed here\n if (ex instanceof RenderError) {\n throw ex;\n }\n throw new RenderError('Error rendering template', this.#fragment, ex);\n }\n }\n /**\n * Renders this template on the Element (replacing children).\n * @param {Element} el\n */\n renderTo(el) {\n el.replaceChildren(this.render());\n }\n /**\n * Renders this template appending the resulting fragment to the Element.\n * @param {Element} el\n */\n appendTo(el) {\n el.appendChild(this.render());\n }\n /**\n * Renders this template on the first Element matching the selector (replacing children), if exists.\n * @param {string} selector\n */\n renderToSelector(selector) {\n const el = document.querySelector(selector);\n if (el) {\n this.renderTo(el);\n }\n }\n /**\n * Renders this template appending the resulting fragment to the Element matching the selector, if exists.\n * @param {string} selector\n */\n appendToSelector(selector) {\n const el = document.querySelector(selector);\n if (el) {\n this.appendTo(el);\n }\n }\n static #NODE_FILTER(node) {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.nodeValue.includes('{{') && node.nodeValue.includes('}}')\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_REJECT;\n }\n for (const attr of node.attributes) {\n if (attr.name.startsWith('data-tpl-')) {\n return NodeFilter.FILTER_ACCEPT;\n }\n }\n return NodeFilter.FILTER_SKIP;\n }\n}\n\n/**\n * A render failure, one frame per nesting level. Each frame names the node it\n * failed on and what was being evaluated there, so the chain reads as the path\n * from the template's root down to the offending expression. The frame carries\n * the node's identification only, an open tag rather than its whole subtree:\n * the markup is serialized on demand through `html`, and the live node stays on\n * `node`, so a failure costs no clone and a nested failure does not embed the\n * page in its own message.\n */\nclass RenderError extends Error {\n /**\n * How many frames a chain keeps. The innermost are the specific ones, so a\n * deeper nesting drops the outer context rather than the failure site: three\n * frames name the offending node and the two levels that hold it, which is\n * the path a reader follows without the page arriving with it.\n */\n static FRAMES = 3;\n #node;\n #depth;\n /** true when the budget dropped the outer frames of this chain */\n truncated = false;\n /**\n * Frames a failure, unless the chain already spent its budget: then the\n * cause travels on, marked so a report can say the outer context was\n * dropped.\n */\n static wrap(message, nodeOrFragment, cause) {\n if (cause instanceof RenderError && cause.depth >= RenderError.FRAMES) {\n cause.truncated = true;\n return cause;\n }\n return new RenderError(message, nodeOrFragment, cause);\n }\n constructor(message, nodeOrFragment, cause) {\n super(`${message} in \\`${RenderError.describe(nodeOrFragment)}\\``, { cause });\n this.name = 'RenderError';\n this.#node = nodeOrFragment;\n this.#depth = (cause instanceof RenderError ? cause.depth : 0) + 1;\n }\n /** How many frames this chain carries, this one included. */\n get depth() {\n return this.#depth;\n }\n /** The node the render failed on, live: it keeps its place in the fragment being built. */\n get node() {\n return this.#node;\n }\n /** The node's markup, serialized when asked for rather than on every failure. */\n get html() {\n return RenderError.stringify(this.#node);\n }\n /**\n * What identifies a node in a frame: an element by its open tag, a text node\n * by its source, a fragment by the open tags of the elements it holds.\n */\n static describe(nodeOrFragment) {\n if (nodeOrFragment.nodeType === Node.TEXT_NODE) {\n return RenderError.#ellipsize(String(nodeOrFragment.nodeValue).trim());\n }\n if (nodeOrFragment.nodeType === Node.ELEMENT_NODE) {\n const el = /** @type Element */ (nodeOrFragment);\n const attrs = Array.from(el.attributes, (a) => ` ${a.name}=\"${a.value}\"`).join('');\n return RenderError.#ellipsize(`<${el.localName}${attrs}>`);\n }\n const children = Array.from(nodeOrFragment.childNodes)\n .filter((n) => n.nodeType === Node.ELEMENT_NODE || String(n.nodeValue ?? '').trim().length > 0)\n .map((n) => RenderError.describe(n));\n return RenderError.#ellipsize(children.join(''));\n }\n static #ellipsize(text) {\n return text.length > 120 ? `${text.slice(0, 120)}…` : text;\n }\n static stringify(nodeOrFragment) {\n const t = document.createElement('template');\n t.content.appendChild(RenderError.#cleanup(nodeOrFragment.cloneNode(true)));\n return t.innerHTML;\n }\n static #cleanup(node) {\n if (node.nodeType === Node.TEXT_NODE) {\n node.nodeValue = node.nodeValue.trim();\n }\n for (let n = 0; n < node.childNodes.length; n++) {\n const child = node.childNodes[n];\n if (child.nodeType === Node.TEXT_NODE) {\n child.nodeValue = child.nodeValue.trim();\n if (child.nodeValue.length === 0) {\n node.removeChild(child);\n n--;\n }\n } else if (child.nodeType === Node.ELEMENT_NODE) {\n RenderError.#cleanup(child);\n }\n }\n return node;\n }\n}\n\nexport { Template, RenderError };\n","import { Nodes } from './dom.mjs';\nimport { ExpressionEvaluator } from './expressions.mjs';\nimport { Template } from './template.mjs';\n\n/**\n * Tracks the elements waiting to render. `ready` resolves once the queue has\n * drained and never rejects; the promise kept per element resolves when that\n * element has rendered and rejects with whatever its upgrade threw.\n */\nclass UpgradeQueue {\n #q = new Map();\n #readyResolve;\n #ready = new Promise((resolve) => {\n this.#readyResolve = resolve;\n });\n constructor() {\n Nodes.waitDomContentLoaded(document).then(() => {\n this.#start();\n });\n }\n /**\n * Waits for the page's readiness: the promise resolves right after the\n * ftl:ready event is dispatched, and immediately when that moment already\n * passed.\n * @returns {Promise<void>}\n */\n ready() {\n return this.#ready;\n }\n async #start() {\n await this.settled();\n document.dispatchEvent(\n new CustomEvent('ftl:ready', {\n bubbles: false,\n cancelable: false,\n }),\n );\n this.#readyResolve();\n }\n enqueue(el) {\n if (this.#q.has(el)) {\n //already upgrading, can happen when disconnecting an element\n //while it's already queued for upgrade (e.g.: ful-form)\n return;\n }\n //one entry, two signals: readiness waits on a signal that only ever\n //resolves, so nothing here attaches a rejection handler to the upgrade\n //itself and a component that fails is still reported the way it always was\n const { promise: finished, resolve: markFinished } = /** @type {PromiseWithResolvers<void>} */ (\n Promise.withResolvers()\n );\n const upgrade = Nodes.waitParsed(el)\n .then(() => el.upgrade())\n .finally(() => {\n this.#q.delete(el);\n markFinished();\n });\n this.#q.set(el, { upgrade, finished });\n }\n /**\n * The one fixed-point loop: drains the accepted entries, including the ones\n * enqueued while waiting, since a component is only queued once its parent\n * connects it and a single pass would miss everything nested.\n */\n async #drain(accept, pick) {\n for (;;) {\n const pending = Array.from(this.#q)\n .filter(([el]) => accept(el))\n .map(([, entry]) => pick(entry));\n if (pending.length === 0) {\n return;\n }\n await Promise.all(pending);\n }\n }\n /**\n * Waits for the whole queue to drain. Never rejects: a component that fails\n * does not hold the others back, and readiness means the queue drained rather\n * than that everything worked.\n */\n settled() {\n return this.#drain(() => true, (entry) => entry.finished);\n }\n /** Waits for the accepted upgrades, rejecting with the first that failed. */\n upgraded(accept) {\n return this.#drain(accept, (entry) => entry.upgrade);\n }\n /** The pending upgrade of one element, undefined when it is not queued. */\n whenUpgraded(el) {\n return this.#q.get(el)?.upgrade;\n }\n /** The elements whose upgrade is still pending, in queue order. */\n pending() {\n return Array.from(this.#q.keys());\n }\n}\n\n/**\n * The page's single source of truth for elements, modules, data, components\n * and attribute mappers. Elements defined before configure() are deferred and\n * defined by it; from then on every defineElement takes effect immediately.\n * The exported `registry` singleton is the page's own; a `new Registry()` is a\n * separate instance, and Rendering and the ftl:ready machinery wait on the\n * singleton alone.\n */\nclass Registry {\n #tagToClass = {};\n #configured = false;\n #mappers = {\n string: {\n unmarshal(str, name, el) {\n return str;\n },\n marshal(value, name, el) {\n return value == null ? null : String(value);\n },\n },\n number: {\n unmarshal(str, name, el) {\n return str === null ? null : Number(str);\n },\n marshal(value, name, el) {\n return value == null ? null : String(value);\n },\n },\n presence: {\n unmarshal(str, name, el) {\n return str !== null;\n },\n marshal(value, name, el) {\n return value ? '' : null;\n },\n },\n bool: {\n unmarshal(str, name, el) {\n return str === 'true';\n },\n marshal(value, name, el) {\n return value == null ? null : String(value === true);\n },\n },\n json: {\n unmarshal(str, name, el) {\n return str === null ? null : JSON.parse(str);\n },\n marshal(value, name, el) {\n return value == null ? null : JSON.stringify(value);\n },\n },\n csv: {\n unmarshal(str, name, el) {\n return str === null\n ? []\n : str\n .split(',')\n .map((e) => e.trim())\n .filter((e) => e);\n },\n marshal(value, name, el) {\n return value == null ? null : value.join(',');\n },\n },\n };\n #components = {};\n #modules;\n #data = [];\n #evaluator = new ExpressionEvaluator(undefined, []);\n #upgradeQueue = new UpgradeQueue();\n /**\n * Registers a custom element under its tag: the class is augmented with its\n * BITS (observed attributes, mappers, templates) and handed to the platform.\n * Before configure() the definition is deferred, so import order never\n * matters.\n * @param {string} tag\n * @param {*} klass a ParsedElement subclass\n */\n defineElement(tag, klass) {\n if (!this.#configured) {\n this.#tagToClass[tag] = klass;\n return this;\n }\n this.#augmentAndDefineElement(tag, klass);\n return this;\n }\n /**\n * The attribute declarations a class composes along its inheritance chain,\n * base first: `observed` stay live after the upgrade and drive the property\n * `propertyOf` names, `attributes` are the configuration read once at it and\n * drive no property at all. A subclass's entry for a name overrides its\n * ancestors', so a base class declares what every subclass keeps observing\n * (a protocol attribute such as Field's disabled claim) and a leaf refines a\n * mapping, or moves a name's position, without repeating the whole list.\n *\n * The walk stops where the platform's own class hierarchy begins: no earlier\n * stop can work, since a registered ancestor carries an own BITS of its own,\n * and nothing above the elements declares anything.\n *\n * Everything deriving a component's attribute vocabulary reads it here, so\n * the runtime and whatever documents it cannot walk the chain differently.\n * @param {*} klass a ParsedElement subclass\n * @returns {{ observed: string[], attributes: string[] }}\n */\n static declarationsOf(klass) {\n const chain = [];\n for (let c = klass; c !== null && c !== HTMLElement; c = Object.getPrototypeOf(c)) {\n chain.unshift(c);\n }\n const own = (name) => chain.flatMap((c) => Object.getOwnPropertyDescriptor(c, name)?.value ?? []);\n return { observed: own('observed'), attributes: own('attributes') };\n }\n /**\n * The property an observed attribute drives, by the platform's own\n * dash-to-camel rule: the one `dataset` applies, so `clear-invalid-on-change`\n * would reach `clearInvalidOnChange` the way `data-clear-invalid-on-change`\n * reaches `dataset.clearInvalidOnChange`. A single-word name is returned\n * unchanged, which is what every observed attribute in the library is.\n *\n * It exists because the observed tier is the one that becomes properties:\n * without it an attribute could only be observed if its name happened to be\n * a usable identifier, which is why every multiword observed attribute here\n * used to be squashed into one word while the configuration tier, which\n * never becomes a property, spelled the same idea with a dash.\n *\n * Only this direction is mapped. A property never derives its attribute: a\n * setter reflects through `reflectTo`, naming the attribute it writes.\n * @param {string} attribute\n * @returns {string}\n */\n static propertyOf(attribute) {\n return attribute.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n }\n #augmentAndDefineElement(tag, klass) {\n const { observed, attributes } = Registry.declarationsOf(klass);\n const { template, templates, slots, mappers, config } = klass;\n //a name a subclass re-declares takes the subclass's position, which is\n //how a field whose value setter reads its own shape attributes declares\n //that its value lands after them: the order the declarations compose in\n //is the order the base applies them\n const declaredNames = observed.map((a) => a.split(':')[0]);\n const observedNames = [...new Set(declaredNames.reverse())].reverse();\n const attrToMapper = [...attributes, ...observed].reduce((acc, a) => {\n const [attr, maybeType] = a.split(':');\n const type = maybeType ?? 'string';\n if (!(type in this.#mappers) && !(type in (mappers ?? {}))) {\n throw new Error(`unsupported attribute type: ${type}`);\n }\n acc[attr] = mappers?.[type] ?? this.#mappers[type];\n return acc;\n }, {});\n\n const namesAndTemplates = Object.entries(\n Object.assign({}, templates, template ? { default: template } : {}),\n ).map(([k, v]) => [k, Template.fromHtml(v)]);\n const nameToTemplate = Object.fromEntries(namesAndTemplates);\n\n klass.BITS = {\n //the defining registry travels with the definition: an element resolves\n //its templates and its components through the registry that defined it,\n //not through whichever one a module happened to import\n registry: this,\n enqueue: (el) => this.#upgradeQueue.enqueue(el),\n SLOTS: slots,\n //the class's own constants, overlaid on its templates as `config`:\n //read here with the rest of the declaration, so a page replacing them\n //does it before configure() like every other definition-time choice\n CONFIG: config,\n OBSERVED: observedNames,\n DECLARED: [...new Set([...observedNames, ...attributes.map((a) => a.split(':')[0])])],\n ATTR_TO_MAPPER: attrToMapper,\n //resolved once here rather than at every attribute write\n ATTR_TO_PROPERTY: Object.fromEntries(observedNames.map((a) => [a, Registry.propertyOf(a)])),\n TEMPLATES: nameToTemplate,\n };\n customElements.define(tag, klass);\n }\n /**\n * Merges one module under its name, its functions resolving as\n * `#name:fn`; an empty name merges a whole map, whose keys resolve bare,\n * as `#fn`.\n * @param {string} name\n * @param {object} value\n */\n defineModule(name, value) {\n const module = name ? { [name]: value } : value;\n this.#modules = { ...this.#modules, ...module };\n this.#rebind();\n return this;\n }\n /**\n * Replaces the whole module map.\n * @param {object} ms\n */\n defineModules(ms) {\n this.#modules = ms;\n this.#rebind();\n return this;\n }\n /**\n * Registers a named component (a loader, a response mapper), fetched back\n * through component().\n * @param {string} name\n * @param {*} value\n */\n defineComponent(name, value) {\n this.#components[name] = value;\n return this;\n }\n /**\n * Replaces the data stack the templates evaluate over.\n * @param {...any} data\n */\n defineData(...data) {\n this.#data = data;\n this.#rebind();\n return this;\n }\n /**\n * Appends to the data stack, the later entry winning a shared name.\n * @param {...any} data\n */\n defineOverlay(...data) {\n this.#data = [...this.#data, ...data];\n this.#rebind();\n return this;\n }\n /**\n * Registers a custom attribute mapper type, available to every later\n * `name:type` declaration.\n * @param {string} k\n * @param {{ unmarshal(str: string|null, name: string, el: Element): any, marshal(value: any, name: string, el: Element): string|null }} v\n */\n defineMapper(k, v) {\n this.#mappers[k] = v;\n return this;\n }\n /**\n * Hands the registry over to the plugin's configure.\n * @param {{ configure(registry: Registry): void }} p\n */\n plugin(p) {\n p.configure(this);\n return this;\n }\n /**\n * Defines every element deferred so far; from then on, defineElement takes\n * effect immediately.\n */\n configure() {\n for (const [tag, klass] of Object.entries(this.#tagToClass)) {\n this.#augmentAndDefineElement(tag, klass);\n delete this.#tagToClass[tag];\n }\n this.#configured = true;\n return this;\n }\n /**\n * Waits for the queued upgrades the filter accepts, rejecting with the first\n * that failed: the rejecting barrier Rendering is a facade over.\n * @param {(el: Element) => boolean} accept\n */\n settle(accept) {\n return this.#upgradeQueue.upgraded(accept);\n }\n /** The pending upgrade of one element, undefined when it is not queued. */\n whenUpgraded(el) {\n return this.#upgradeQueue.whenUpgraded(el);\n }\n /** The elements whose upgrade is still pending, in queue order. */\n pending() {\n return this.#upgradeQueue.pending();\n }\n /**\n * Waits for the page's readiness: the same moment the ftl:ready event is\n * dispatched at, resolving immediately when that moment already passed.\n * @returns {Promise<void>}\n */\n ready() {\n return this.#upgradeQueue.ready();\n }\n #rebind() {\n this.#evaluator = new ExpressionEvaluator(this.#modules, this.#data);\n }\n /**\n * The scope every template on this registry renders in: the modules and the\n * data stack, as one value. Replaced whenever either is defined, so a holder\n * of an older one keeps rendering against what it was handed.\n */\n evaluator() {\n return this.#evaluator;\n }\n /** The component registered under the name, undefined when none is. */\n component(name) {\n return this.#components[name];\n }\n}\n\nconst registry = new Registry();\n\nexport { Registry, registry };\n","import { registry } from './registry.mjs';\nimport { Template } from './template.mjs';\n\n/** The Template factories, each bound to the page registry's scope. */\n/** The Template factories bound to the page's own registry: the same four sources, with its modules and data already applied. */\nclass Templates {\n static fromHtml(html) {\n return Template.fromHtml(html).withEvaluator(registry.evaluator());\n }\n static fromSelector(selector) {\n return Template.fromSelector(selector).withEvaluator(registry.evaluator());\n }\n static fromTemplate(templateEl) {\n return Template.fromTemplate(templateEl).withEvaluator(registry.evaluator());\n }\n static fromFragment(fragment) {\n return Template.fromFragment(fragment).withEvaluator(registry.evaluator());\n }\n}\n\nexport { Templates };\n","import { registry } from './registry.mjs';\n\n/**\n * Awaitable rendering barriers over the registry's upgrade queue. These are\n * the rejecting waits: a failed upgrade among the awaited components rejects\n * the wait, where registry.ready() only ever means the queue drained and\n * leaves a failed component to its own unhandled-rejection report.\n */\nclass Rendering {\n static waitFor(el) {\n return registry.settle((child) => el.contains(child));\n }\n static waitForChildren(el) {\n return registry.settle((child) => el !== child && el.contains(child));\n }\n}\n\nexport { Rendering };\n","import { Attributes, LightSlots } from './dom.mjs';\nimport { registry } from './registry.mjs';\n\n/**\n * An attribute Mapper.\n *\n * @typedef {object} Mapper\n * @property {(val: string|null|undefined, name: string, el: Element) => any} unmarshal\n * @property {(val: any, name: string, el: Element) => string|null} marshal\n */\n\nclass ParsedElement extends HTMLElement {\n static BITS = {\n //an element the registry never defined still answers the page's own\n registry,\n enqueue: (el) => {},\n SLOTS: false,\n /** @type {object|undefined} */\n CONFIG: undefined,\n /** @type {string[]} */\n OBSERVED: [],\n /** @type {string[]} */\n DECLARED: [],\n /** @type {Record<string, Mapper>} */\n ATTR_TO_MAPPER: {},\n /** @type {Record<string, string>} */\n ATTR_TO_PROPERTY: {},\n TEMPLATES: {},\n };\n static get observedAttributes() {\n return this.BITS.OBSERVED;\n }\n constructor() {\n super();\n this.internals = this.attachInternals();\n }\n /**\n * The platform's window into the element's own state. The base attaches it\n * for every element, so a subclass never calls attachInternals itself: the\n * platform allows it once, and a second call throws. Form association is a\n * property of the definition rather than of who attached, so a subclass\n * declaring `static formAssociated` still gets the form apis here.\n *\n * A subclass must not redeclare it: a class field with no initializer\n * assigns undefined after super() returns, which would wipe it.\n */\n internals;\n #parsed = false;\n #started = false;\n /** the attributes whose own reflection is in flight */\n #reflecting = new Set();\n /** the observed snapshot between the upgrade's start and its render's end */\n #pending = /** @type {{ [k: string]: any } | null} */ (null);\n /** the configuration tier, read once at the upgrade and kept for the element's life */\n #frozen = /** @type {{ [k: string]: any }} */ ({});\n #bits() {\n return /** @type {typeof ParsedElement} */ (this.constructor).BITS;\n }\n #mapper(attr) {\n const mapper = this.#bits().ATTR_TO_MAPPER[attr];\n if (!mapper) {\n //an attribute the class never declared has no type to read it as:\n //say so rather than dying on the missing mapper. Content this\n //element does not own, such as a custom loader's own configuration,\n //is read with getAttribute, the platform's own answer\n throw new Error(\n `${this.constructor.name} declares no attribute '${attr}': declare it in static observed or static attributes, or read it with getAttribute`,\n );\n }\n return mapper;\n }\n unmarshal(attr, str) {\n return this.#mapper(attr).unmarshal(str, attr, this);\n }\n marshal(attr, value) {\n return this.#mapper(attr).marshal(value, attr, this);\n }\n /**\n * @param {string} [name] - The name of the template target, defaults to 'default'\n */\n /** The registry that defined this element, the page's own for an undefined one. */\n get _registry() {\n return this.#bits().registry;\n }\n /**\n * The component registered under the name on this element's registry, the\n * one every ful loader and mapper resolves through.\n * @param {string} name\n */\n component(name) {\n return this.#bits().registry.component(name);\n }\n template(name) {\n const target = this.#bits().TEMPLATES[name ?? 'default'];\n if (!target) {\n throw new Error(`no template named '${name ?? 'default'}' on ${this.constructor.name}`);\n }\n const t = target.withEvaluator(this.#bits().registry.evaluator());\n const config = this.#bits().CONFIG;\n return config ? t.withOverlay({ config }) : t;\n }\n connectedCallback() {\n if (this.#started) {\n return;\n }\n this.#bits().enqueue(this);\n }\n attributeChangedCallback(attr, oldValue, newValue) {\n if (oldValue === newValue) {\n return;\n }\n //the mute is the attribute being reflected, not the element: a component\n //that legitimately changes another observed attribute while one reflects\n //is a change like any other, and used to be swallowed\n if (this.#reflecting.has(attr)) {\n return;\n }\n //the properties go live only once the render is done: before that, an\n //attribute write lands in the observed snapshot and the base applies it\n //with the rest of the declared state\n if (!this.#parsed) {\n if (this.#pending !== null && attr in this.#pending) {\n this.#pending[attr] = this.unmarshal(attr, newValue);\n }\n return;\n }\n this[this.#bits().ATTR_TO_PROPERTY[attr]] = this.unmarshal(attr, newValue);\n }\n /**\n * Upgrades once: reads the declared attributes, keeps the observed half open\n * to writes made while the render is pending, applies them to the properties\n * when the render returns, and only then lets an attribute write forward.\n *\n * An observed attribute drives the property the registry's `propertyOf`\n * names, so a hyphenated attribute is authored with its dashes and read as\n * a camelCase property. A single-word attribute is its own property name,\n * which is what every observed attribute in the library is.\n */\n async upgrade() {\n if (this.#started) {\n return;\n }\n this.#started = true;\n const slots = this.#bits().SLOTS ? LightSlots.from(this) : undefined;\n //both tiers are read here: the observed ones forward to a property once\n //the render is done, the rest are the element's configuration, read the\n //one time and never again\n const declared = Object.fromEntries(\n this.#bits().DECLARED.map((attribute) => [\n attribute,\n this.unmarshal(attribute, this.getAttribute(attribute)),\n ]),\n );\n const observedNames = new Set(this.#bits().OBSERVED);\n this.#frozen = Object.fromEntries(Object.entries(declared).filter(([name]) => !observedNames.has(name)));\n this.#pending = declared;\n try {\n await this.render({ slots });\n //the declared state reaches the properties once the dom the setters\n //drive exists, in the order the registry composed the declarations:\n //a base class's attributes before the subclass's own\n const properties = this.#bits().ATTR_TO_PROPERTY;\n for (const name of this.#bits().OBSERVED) {\n this[properties[name]] = declared[name];\n }\n //the properties go live once the render is done: from here on, an\n //attribute write forwards to the property. A render that threw\n //leaves it shut, so a later attribute write cannot reach setters\n //that assume pieces the failed render never adopted\n this.#parsed = true;\n //the same moment, said to css. :defined is true from the constructor,\n //which is before the dom exists, so a guard written against it reveals\n //an element that has nothing in it yet\n this.internals.states.add('rendered');\n } finally {\n this.#pending = null;\n }\n }\n /**\n * Renders the element from its slots alone: it builds the dom its setters\n * drive, and the base applies the declared state onto the properties as\n * soon as it returns. A render needing a declared value while it builds\n * reads it through `declared(name)`. The slots are undefined for an element\n * declaring no slots.\n * @param {{ slots: any }} c\n */\n render(c) {}\n /**\n * The declared value of an attribute, unmarshalled through its mapper.\n *\n * A `static attributes` name is the configuration tier: read once when the\n * upgrade starts and answered unchanged for the element's life, so a later\n * attribute write does not quietly change how the element behaves. An\n * observed name answers the snapshot while the render is pending, kept\n * open to attribute writes landing in that window, and the live attribute\n * afterwards, the property being live by then.\n *\n * The snapshot exists rather than a read of the dom because an element may\n * write its own observed attributes while it renders, whether a reflection\n * or a value the platform normalizes on the way in, and what the author\n * declared is what the base applies, not what the render left behind.\n * @param {string} name\n */\n declared(name) {\n if (name in this.#frozen) {\n return this.#frozen[name];\n }\n if (this.#pending !== null && name in this.#pending) {\n return this.#pending[name];\n }\n return this.unmarshal(name, this.getAttribute(name));\n }\n /** Whether the element's render completed: the moment its properties went live. */\n get rendered() {\n return this.#parsed;\n }\n /**\n * Projects a property back onto its observed attribute, marshalled through\n * the mapper the attribute was declared with: the one place a property\n * reaches its attribute, so a setter never has to know how its own type\n * serializes.\n *\n * A value the attribute already carries is not written at all, so reflecting\n * what an attribute write just delivered ends there rather than looping, and\n * only the attribute being written is muted while it happens.\n * @param {string} attr\n * @param {any} value\n */\n reflectTo(attr, value) {\n const marshalled = this.marshal(attr, value);\n if (marshalled === this.getAttribute(attr)) {\n return;\n }\n this.#reflecting.add(attr);\n try {\n Attributes.set(this, attr, marshalled);\n } finally {\n this.#reflecting.delete(attr);\n }\n }\n}\n\nexport { ParsedElement };\n","import { BoundedCache } from './cache.mjs';\nimport { registry } from './registry.mjs';\n\n/**\n * A flat translations map: dotted keys pointing to a message, or to a plural\n * leaf carrying a CLDR plural category for each of its forms ('other' is\n * required, the missing categories of a language fall back to it).\n *\n * @typedef {Record<string, string | Record<string, string>>} Messages\n */\n\n/**\n * The receiver contract of the module functions: bound to a proxy over the\n * data stack when called from a template, or to a plain object by Localization.of().\n *\n * @typedef {{ l10n?: Messages, locale?: string }} Receiver\n */\n\nconst PLACEHOLDER = /\\{(\\w+)\\}/g;\nconst POSITIONAL = /\\{(\\d+)\\}/g;\n/** @param {any} v @returns {v is Record<string, string>} */\nconst isPlainObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);\n\n/** every l10n problem is reported once per session: a missing key in a row template must not flood the console */\nconst warned = new Set();\nconst warnOnce = (problem) => {\n if (!warned.has(problem)) {\n warned.add(problem);\n console.warn(`l10n: ${problem}`);\n }\n};\n\nconst formatters = new BoundedCache(100);\n/**\n * Intl construction is the expensive part of formatting (locale parsing, CLDR\n * lookups), while formatting on a built instance is near free: a list rendering\n * a size per row must not rebuild a NumberFormat per cell, so instances are\n * memoized by constructor, locale and options.\n *\n * @param {{ new (locale: string | undefined, options: any): any }} ctor\n * @param {string | undefined} locale\n * @param {any} [options]\n */\nconst formatter = (ctor, locale, options) => {\n const key = `${ctor.name}|${locale ?? ''}|${options === undefined ? '' : JSON.stringify(options)}`;\n return formatters.getOrCompute(key, () => new ctor(locale, options));\n};\n\n/**\n * The translations as a template module: `#l10n:t()` for messages, plus date,\n * number and bytes formatting in the page's locale. The template form and the\n * imperative `of()` facade both resolve through the registry's scope, so they\n * always produce the same result for the same key.\n */\nclass Localization {\n /**\n * Resolves a message from the translations and interpolates its arguments.\n * A single plain object argument interpolates named placeholders\n * ({name}); anything else interpolates positional ones ({0}).\n * A plural leaf selects its form through Intl.PluralRules over the\n * numeric {count} named argument.\n *\n * @param {string} key\n * @param {...any} args\n * @this {Receiver}\n * @returns {string} the message, or the key itself when the translations do not carry it\n */\n static t(key, ...args) {\n const messages = this.l10n ?? {};\n let message = messages[key];\n if (message === undefined) {\n warnOnce(`missing message \"${key}\"`);\n return key;\n }\n if (isPlainObject(message)) {\n const named = args.length === 1 && isPlainObject(args[0]) ? args[0] : {};\n if (typeof named.count !== 'number') {\n warnOnce(`plural message \"${key}\" needs a numeric {count}`);\n message = message.other;\n } else {\n const locale = this.locale ?? navigator?.language ?? 'en';\n const category = formatter(Intl.PluralRules, locale).select(named.count);\n message = message[category] ?? message.other;\n }\n }\n if (message === undefined || typeof message === 'object') {\n warnOnce(`plural message \"${key}\" has no \"other\" form`);\n return key;\n }\n if (args.length === 1 && isPlainObject(args[0])) {\n const named = args[0];\n return message.replace(PLACEHOLDER, (literal, name) => {\n if (!(name in named)) {\n warnOnce(`message \"${key}\" wants {${name}}`);\n return literal;\n }\n return String(named[name]);\n });\n }\n if (args.length > 0) {\n return message.replace(POSITIONAL, (literal, index) => {\n const i = Number(index);\n if (i >= args.length) {\n warnOnce(`message \"${key}\" wants {${index}}`);\n return literal;\n }\n return String(args[i]);\n });\n }\n return message;\n }\n\n /**\n * Formats a date through Intl.DateTimeFormat in the receiver's locale.\n *\n * @param {Date | number} value\n * @param {Intl.DateTimeFormatOptions} [options]\n * @this {Receiver}\n */\n static date(value, options) {\n return formatter(Intl.DateTimeFormat, this.locale, options).format(value);\n }\n\n /**\n * Formats a number through Intl.NumberFormat in the receiver's locale.\n *\n * @param {number} value\n * @param {Intl.NumberFormatOptions} [options]\n * @this {Receiver}\n */\n static number(value, options) {\n return formatter(Intl.NumberFormat, this.locale, options).format(value);\n }\n\n /**\n * Formats a byte size with binary thresholds and literal unit suffixes:\n * the digits honor the locale, the units are the near-universal KiB/MiB/GiB.\n * A size exactly on a threshold takes the larger unit: 1024 is 1KiB.\n *\n * @param {number} value\n * @this {Receiver}\n */\n static bytes(value) {\n const format = formatter(Intl.NumberFormat, this.locale, { maximumFractionDigits: 2 }).format;\n if (value >= 1024 * 1024 * 1024) {\n return `${format(value / 1024 / 1024 / 1024)}GiB`;\n }\n if (value >= 1024 * 1024) {\n return `${format(value / 1024 / 1024)}MiB`;\n }\n if (value >= 1024) {\n return `${format(value / 1024)}KiB`;\n }\n return `${format(value)}B`;\n }\n\n /**\n * An imperative facade over the module functions, resolving the translations\n * and the locale from the registry overlays on every call.\n *\n * @param {{ locale?: string }} [overrides] an explicit locale, winning over the registry one\n */\n static of(overrides = {}) {\n //resolved per call, not per facade: a module-scope `Localization.of()` is\n //bound before the plugin configures. The registry's own evaluator does the\n //lookup, so this cannot drift from what a template sees\n const resolve = (prop) => registry.evaluator().resolve(prop);\n /** @param {any} fn */\n const bind =\n (fn) =>\n (...args) =>\n fn.apply({ l10n: resolve('l10n'), locale: overrides.locale ?? resolve('locale') }, args);\n return {\n t: bind(Localization.t),\n date: bind(Localization.date),\n number: bind(Localization.number),\n bytes: bind(Localization.bytes),\n };\n }\n}\n\nexport { Localization };\n","/**\n * @typedef {{ type: string; context: string?; reason: string; details: any?; }} Problem\n */\n/**\n * An error carrying a list of problems rather than one message. A problem's\n * `context` names the field it belongs to, which is what lets a form show each\n * one beside its own input instead of in a banner.\n */\nclass Failure extends Error {\n /**\n *\n * @param {string} message\n * @param {Problem[]} problems\n * @param {*} cause\n */\n constructor(message, problems, cause) {\n super(message, { cause });\n this.name = 'Failure';\n this.problems = problems;\n }\n /**\n * Returns a copy whose problems' contexts have the prefix removed, so a\n * caller can rethrow namespaced problems as its own.\n * @param {string} prefix\n * @returns {Failure}\n */\n dropping(prefix) {\n return new Failure(this.message, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n /**\n * @param {Problem[]} problems\n * @param {string} prefix\n * @returns {Problem[]}\n */\n static dropProblemsContext(problems, prefix) {\n return problems.map(({ type, context, reason, details }) => {\n const nctx = context?.startsWith(prefix) ? context.substring(prefix.length) : context;\n return { type, context: nctx, reason, details };\n });\n }\n /**\n * The one reading of a failure: its problems' reasons, one per line, or\n * the fallback when the value carries none. An empty problems array\n * carries nothing: the failure's own message reads instead.\n *\n * @param {any} cause\n * @param {string|null} [fallback]\n * @returns {string}\n */\n static problemsText(cause, fallback = null) {\n if (cause?.problems?.length) {\n return cause.problems.map((p) => `${p.reason}`).join('\\n');\n }\n return fallback ?? `${cause?.message ?? cause}`;\n }\n}\n\nexport { Failure };\n","/**\n * Base64 encoding and decoding over ArrayBuffers, in the STANDARD and URL_SAFE\n * alphabets. The encoder never emits padding; the decoder accepts both padded\n * and unpadded input, and rejects anything it cannot decode faithfully instead\n * of corrupting silently.\n */\nclass Base64 {\n /**\n * @param {ArrayBuffer} arrayBuffer\n * @param {string} [dialect] one of Base64.STANDARD or Base64.URL_SAFE, URL_SAFE by default\n * @returns {string} the unpadded encoding\n */\n static encode(arrayBuffer, dialect) {\n const d = dialect || Base64.URL_SAFE;\n const len = arrayBuffer.byteLength;\n const view = new Uint8Array(arrayBuffer);\n let res = '';\n for (let i = 0; i < len; i += 3) {\n const v1 = d[view[i] >> 2];\n const v2 = d[((view[i] & 3) << 4) | (view[i + 1] >> 4)];\n const v3 = d[((view[i + 1] & 15) << 2) | (view[i + 2] >> 6)];\n const v4 = d[view[i + 2] & 63];\n res += v1 + v2 + v3 + v4;\n }\n if (len % 3 === 2) {\n res = res.substring(0, res.length - 1);\n } else if (len % 3 === 1) {\n res = res.substring(0, res.length - 2);\n }\n return res;\n }\n /**\n * @param {string} str\n * @param {string} [dialect] one of Base64.STANDARD or Base64.URL_SAFE, URL_SAFE by default\n * @returns {ArrayBuffer}\n */\n static decode(str, dialect) {\n const d = dialect || Base64.URL_SAFE;\n //padding belongs at the tail only, two at most, and nothing outside the\n //dialect decodes: reject instead of corrupting silently\n let end = str.length;\n while (end > 0 && str.charAt(end - 1) === '=') {\n --end;\n }\n const unpadded = str.substring(0, end);\n if (str.length - end > 2 || unpadded.includes('=') || (unpadded.length === 0 && str.length > 0)) {\n throw new Error('invalid padding');\n }\n if (unpadded.length % 4 === 1) {\n throw new Error('invalid length');\n }\n for (const c of unpadded) {\n if (d.indexOf(c) === -1) {\n throw new Error(`invalid character '${c}'`);\n }\n }\n const nbytes = Math.floor(unpadded.length * 0.75);\n const view = new Uint8Array(nbytes);\n\n let vi = 0;\n let si = 0;\n //every group yields three bytes, but a padded input stops short of the last\n //one or two: writing them anyway would rely on typed arrays dropping writes\n //past their length\n while (vi < nbytes) {\n const v1 = d.indexOf(unpadded.charAt(si++));\n const v2 = d.indexOf(unpadded.charAt(si++));\n const v3 = d.indexOf(unpadded.charAt(si++));\n const v4 = d.indexOf(unpadded.charAt(si++));\n view[vi++] = (v1 << 2) | (v2 >> 4);\n if (vi === nbytes) {\n break;\n }\n view[vi++] = ((v2 & 15) << 4) | (v3 >> 2);\n if (vi === nbytes) {\n break;\n }\n view[vi++] = ((v3 & 3) << 6) | v4;\n }\n\n return view.buffer;\n }\n}\n\nBase64.STANDARD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nBase64.URL_SAFE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n/**\n * Hex encoding and decoding over byte sequences, lowercase by default.\n */\nclass Hex {\n /**\n * @param {string} hex\n * @returns {Uint8Array}\n */\n static decode(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error('invalid length');\n }\n if (!/^[0-9a-fA-F]*$/.test(hex)) {\n throw new Error('invalid character');\n }\n const lenInBytes = hex.length / 2;\n return new Uint8Array(lenInBytes).map((e, i) => {\n const offset = i * 2;\n const octet = hex.substring(offset, offset + 2);\n return parseInt(octet, 16);\n });\n }\n /**\n * @param {Iterable<number>} bytes\n * @param {boolean} [upper]\n * @returns {string}\n */\n static encode(bytes, upper) {\n return Array.from(bytes)\n .map((b) => b.toString(16))\n .map((b) => (upper ? b.toUpperCase() : b))\n .map((o) => o.padStart(2, '0'))\n .join('');\n }\n}\n\nexport { Base64, Hex };\n","import { Failure } from './failure.mjs';\n\n/** A parsed `Content-Type`: the type and subtype without the parameters, so a comparison is not defeated by a charset. */\nclass MediaType {\n #type;\n #subtype;\n constructor(type, subtype) {\n this.#type = type;\n this.#subtype = subtype;\n }\n get normalized() {\n return `${this.#type}/${this.#subtype}`;\n }\n get type() {\n return this.#type;\n }\n get subtype() {\n return this.#subtype;\n }\n /**\n * Parses a Content-Type header value into its type/subtype pair, dropping any parameter.\n * @param {string|null|undefined} v\n * @returns\n */\n static parse(v) {\n if (!v) {\n return new MediaType('unknown', 'unknown');\n }\n const [prefix, _] = v.split(';');\n const [ptype, psubtype] = prefix.trim().toLowerCase().split('/');\n if (!ptype || !psubtype) {\n return new MediaType('unknown', 'unknown');\n }\n return new MediaType(ptype, psubtype);\n }\n}\n\n/**\n * @typedef {Int8Array| Uint8Array| Uint8ClampedArray| Int16Array| Uint16Array| Int32Array| Uint32Array| Float32Array| Float64Array| BigInt64Array| BigUint64Array} TypedArray\n */\n/**\n * @typedef {object} HttpInterceptor\n * @property {(url: URL, init: RequestInit|undefined, chain: HttpInterceptorChain) => Promise<Response>} intercept\n */\n\n/**\n * A Failure from an http exchange, carrying the status that was served. Status\n * 0 means no response was served at all: the transport failed, or a body the\n * server did send could not be read.\n */\nclass HttpClientError extends Failure {\n /**\n * @param {string} message\n * @param {number} status\n * @param {{ type: string; context: string?; reason: string; details: any?; }[]} problems\n * @param {Error|undefined} [cause]\n */\n constructor(message, status, problems, cause) {\n super(message, problems, cause);\n this.name = 'HttpClientError';\n this.status = status;\n }\n /**\n * Returns a copy whose problems' contexts have the prefix removed, keeping\n * this error's status.\n * @param {string} prefix\n * @returns {HttpClientError}\n */\n dropping(prefix) {\n return new HttpClientError(this.message, this.status, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n /**\n * One problem of the client's own making: the four the client mints are the\n * same shape, and the server's arrive already shaped from the wire.\n * @param {string} type\n * @param {string} reason\n */\n static problem(type, reason) {\n return { type, context: null, reason, details: null };\n }\n /**\n * Creates a client failure carrying no status, wrapping the cause and its message.\n * @param {string} type\n * @param {any} cause\n * @returns\n */\n static of(type, cause) {\n const reason = String(cause?.message ?? cause ?? 'unknown failure');\n return new HttpClientError(reason, 0, [HttpClientError.problem(type, reason)], cause);\n }\n /**\n * Creates an HttpClientError from a Response.\n * @param {Response} response\n * @returns an HttpClientError\n */\n static async fromResponse(response) {\n switch (MediaType.parse(response.headers.get('Content-Type')).normalized) {\n case 'application/failures+json': {\n const data = await response.json().catch(() => HttpClientError.#unreadable);\n if (data === HttpClientError.#unreadable) {\n return HttpClientError.#undecodable(response);\n }\n if (!Array.isArray(data)) {\n return HttpClientError.#undecodable(response, 'as a failures array');\n }\n const message = `${response.status} ${response.statusText}: ${data.length} failures`;\n return new HttpClientError(message, response.status, data);\n }\n case 'application/problem+json': {\n const data = await response.json().catch(() => HttpClientError.#unreadable);\n if (data === HttpClientError.#unreadable) {\n return HttpClientError.#undecodable(response);\n }\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\n return HttpClientError.#undecodable(response, 'as a problem object');\n }\n const message = `${response.status} ${response.statusText}: ${data.title} ${data.detail}`;\n return new HttpClientError(\n message,\n response.status,\n data.problems || [HttpClientError.problem('GENERIC_PROBLEM', message)],\n );\n }\n default: {\n return HttpClientError.#generic(response);\n }\n }\n }\n /** marks a body whose json() rejected, telling it apart from a body decoding to json null */\n static #unreadable = Symbol('unreadable body');\n /**\n * A json body that failed to decode, or that decoded to something other than\n * the declared contract, has consumed its stream: there is no text left to\n * embed, the status, the declared media type and the shape are the report.\n * @param {Response} response\n * @param {string} [as] - what the body does not decode as\n */\n static #undecodable(response, as = 'as json') {\n const mediaType = MediaType.parse(response.headers.get('Content-Type')).normalized;\n const message = `${response.status} ${response.statusText}: the ${mediaType} body does not decode ${as}`;\n return new HttpClientError(message, response.status, [HttpClientError.problem('GENERIC_PROBLEM', message)]);\n }\n static async #generic(response) {\n //a body that cannot be read (the connection cut mid-body) must not\n //masquerade as a connection problem: the response was served, its\n //status is the report\n const text = await response.text().catch(() => null);\n const message =\n text === null\n ? `${response.status} ${response.statusText}: the body could not be read`\n : `${response.status} ${response.statusText}: ${text}`;\n return new HttpClientError(message, response.status, [HttpClientError.problem('GENERIC_PROBLEM', message)]);\n }\n}\n\nconst metaContent = (name) =>\n globalThis.document?.querySelector(`meta[name=\"${name}\"]`)?.getAttribute('content') ?? undefined;\n\n/**\n * @implements {HttpInterceptor}\n */\n/**\n * Sends the csrf header named by the page's `_csrf_header` meta, with the token\n * from `_csrf`. Both are read per request, so metas replaced after the client\n * was built are honoured, and the header is sent to the page's own origin only.\n */\nclass CsrfTokenInterceptor {\n async intercept(url, request, chain) {\n //the token is the page's own: it travels to the page's origin only, and it\n //is read at request time, so metas landed after the client was built (a\n //login flow) are honored without a rebuild\n if (url.origin !== (globalThis.window?.location?.origin ?? url.origin)) {\n return await chain.proceed(url, request);\n }\n const csrfHeader = metaContent('_csrf_header');\n const csrfToken = metaContent('_csrf');\n if (csrfHeader && csrfToken) {\n request.headers.set(csrfHeader, csrfToken);\n }\n return await chain.proceed(url, request);\n }\n}\n/**\n * @implements {HttpInterceptor}\n */\n/**\n * Navigates to a login url when a response comes back 401. The promise it\n * returns never settles, so callers keep waiting while the page unloads\n * instead of showing a failure nobody will be present to read.\n */\nclass RedirectOnUnauthorizedInterceptor {\n #redirectUri;\n /**\n * @param {string} redirectUri\n */\n constructor(redirectUri) {\n this.#redirectUri = redirectUri;\n }\n async intercept(url, request, chain) {\n const response = await chain.proceed(url, request);\n if (response.status === 401) {\n window.location.href = this.#redirectUri;\n //the page is navigating away: a promise that never settles keeps the\n //callers' spinners up instead of flashing a failure nobody will read.\n //Where the navigation is blocked (a beforeunload gate), they stay\n //pending until the page actually leaves\n return new Promise(() => {});\n }\n return response;\n }\n}\n\n/** Collects the interceptors an HttpClient will run, in the order they are added. */\nclass HttpClientBuilder {\n /**\n * @type {HttpInterceptor[]}\n */\n #interceptors;\n constructor() {\n this.#interceptors = [];\n }\n withCsrfToken() {\n this.#interceptors.push(new CsrfTokenInterceptor());\n return this;\n }\n withRedirectOnUnauthorized(redirectUri) {\n this.#interceptors.push(new RedirectOnUnauthorizedInterceptor(redirectUri));\n return this;\n }\n /**\n * @param {...HttpInterceptor} interceptors\n */\n withInterceptors(...interceptors) {\n this.#interceptors.push(...interceptors);\n return this;\n }\n build() {\n return new HttpClient(this.#interceptors);\n }\n}\n\n/**\n * @implements {HttpInterceptor}\n */\n/** The last interceptor in every chain: the one that performs the request. */\nclass HttpCall {\n async intercept(url, request, chain) {\n try {\n return await fetch(url, request);\n } catch (ex) {\n //the one place a connection problem is a connection problem: the\n //transport itself refused to deliver. Everything above this is code,\n //and code that throws has a different story to tell\n throw HttpClientError.of('CONNECTION_PROBLEM', ex);\n }\n }\n}\n\n/** One request's position in the interceptor list: `proceed` runs the next interceptor, the last of which performs the request. */\nclass HttpInterceptorChain {\n #interceptors;\n #current;\n /**\n *\n * @param {HttpInterceptor[]} interceptors\n * @param {number} current\n */\n constructor(interceptors, current) {\n this.#interceptors = interceptors;\n this.#current = current;\n }\n /**\n *\n * @param {URL} url\n * @param {RequestInit} request\n * @returns {Promise<Response>} the response\n */\n async proceed(url, request) {\n const interceptor = this.#interceptors[this.#current];\n return await interceptor.intercept(\n url,\n request,\n new HttpInterceptorChain(this.#interceptors, this.#current + 1),\n );\n }\n}\n\n/**\n * Performs http requests through a fixed list of interceptors. The verbs\n * return a request builder; `exchange` is the lower-level entry that returns\n * the Response itself without treating an error status as a failure.\n */\nclass HttpClient {\n #interceptors;\n /**\n * Creates a builder for an HttpClient.\n * @returns {HttpClientBuilder} the client builder\n */\n static builder() {\n return new HttpClientBuilder();\n }\n /**\n * Creates an HttpClient.\n * @param {HttpInterceptor[]|undefined} interceptors - a list of interceptors to be registered for every request performed by the created client.\n */\n constructor(interceptors) {\n this.#interceptors = interceptors || [];\n }\n /**\n * Performs an HTTP exchange.\n * @async\n * @param {string} uri - the (possibly relative) request url\n * @param {RequestInit|undefined} options - fetch options\n * @param {HttpInterceptor[]|undefined} interceptors - the HttpInterceptors to be registered for this exchange.\n * @returns {Promise<Response>} the response\n */\n async exchange(uri, options, interceptors) {\n const is = [...this.#interceptors, ...(interceptors || []), new HttpCall()];\n const chain = new HttpInterceptorChain(is, 0);\n const url = new URL(new Request(uri).url);\n const request = { ...options, headers: new Headers(options?.headers) };\n return await chain.proceed(url, request);\n }\n /**\n * Creates a request builder.\n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n request(method, uri) {\n return HttpRequestBuilder.create(this, method, uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n get(uri) {\n return HttpRequestBuilder.create(this, 'GET', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n head(uri) {\n return HttpRequestBuilder.create(this, 'HEAD', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n post(uri) {\n return HttpRequestBuilder.create(this, 'POST', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n put(uri) {\n return HttpRequestBuilder.create(this, 'PUT', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n patch(uri) {\n return HttpRequestBuilder.create(this, 'PATCH', uri);\n }\n /**\n * Creates a request builder.\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the request builder\n */\n delete(uri) {\n return HttpRequestBuilder.create(this, 'DELETE', uri);\n }\n}\n\n/**\n * Reads the response body as the given type, wrapping a failed read as an UNMARSHALING_PROBLEM.\n * @param {Response} response\n * @param {'text'|'json'|'blob'|'arrayBuffer'} type\n * @returns\n */\nconst unmarshal = async (response, type) => {\n try {\n return await response[type]();\n } catch (ex) {\n throw HttpClientError.of('UNMARSHALING_PROBLEM', ex);\n }\n};\n\n/**\n * Yields the entries of a headers or params initializer preserving nullish values:\n * normalizing through `Headers`/`URLSearchParams` first would stringify them to\n * \"null\"/\"undefined\" instead of removing the key.\n * @param {any} source\n * @returns {Iterable<[string, any]>}\n */\nconst rawEntries = (source) => {\n if (source == null) {\n return [];\n }\n if (typeof source === 'string') {\n return new URLSearchParams(source);\n }\n if (typeof source[Symbol.iterator] === 'function') {\n return source;\n }\n return Object.entries(source);\n};\n\n/**\n * One request under construction: method, url, parameters, headers and body,\n * with a `fetch*` method per body type. Every configuration method returns the\n * builder, and a `fetch*` rejects with an HttpClientError for any status\n * outside 200-299.\n */\nclass HttpRequestBuilder {\n #client;\n #method;\n #uri;\n #params;\n #headers;\n #body;\n #options;\n #interceptors;\n #fragment;\n /**\n * Creates an HttpRequestBuilder.\n * @param {HttpClient} client\n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @returns {HttpRequestBuilder} the builder\n */\n static create(client, method, uri) {\n //'/a#frag?p=1' parses as hash '#frag?p=1' with an empty query, and a '?'\n //may appear in a query itself: only the first of each splits\n const hashIndex = uri.indexOf('#');\n const fragment = hashIndex === -1 ? '' : uri.slice(hashIndex);\n const withoutFragment = hashIndex === -1 ? uri : uri.slice(0, hashIndex);\n const queryIndex = withoutFragment.indexOf('?');\n return new HttpRequestBuilder(\n client,\n method,\n queryIndex === -1 ? withoutFragment : withoutFragment.slice(0, queryIndex),\n new URLSearchParams(queryIndex === -1 ? '' : withoutFragment.slice(queryIndex + 1)),\n new Headers(),\n undefined,\n {},\n [],\n fragment,\n );\n }\n /**\n * Creates an HttpRequestBuilder.\n * @param {HttpClient} client\n * @param {string} method - the HTTP method to be used\n * @param {string} uri - the (possibly relative) request url\n * @param {URLSearchParams} params\n * @param {Headers} headers\n * @param {any} body\n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} options\n * @param {HttpInterceptor[]} interceptors\n * @param {string} [fragment]\n */\n constructor(client, method, uri, params, headers, body, options, interceptors, fragment = '') {\n this.#client = client;\n this.#method = method;\n this.#uri = uri;\n this.#params = params;\n this.#body = body;\n this.#headers = headers;\n this.#options = options;\n this.#interceptors = interceptors;\n this.#fragment = fragment;\n }\n /**\n * Add all passed headers to the request, overriding existing ones if that key already exists. Null and undefined values cause the key to be removed.\n * @param {HeadersInit|Record<string,string|null|undefined>} hs\n * @returns {HttpRequestBuilder} this builder\n */\n headers(hs) {\n for (const [k, v] of rawEntries(hs)) {\n if (v == null) {\n this.#headers.delete(k);\n } else {\n this.#headers.set(k, v);\n }\n }\n return this;\n }\n /**\n * Adds an header to the request, overriding it if it already exists. Null and undefined values cause the key to be removed\n * @param {string} k\n * @param {string} v\n * @returns {HttpRequestBuilder} this builder\n */\n header(k, v) {\n if (v == null) {\n this.#headers.delete(k);\n } else {\n this.#headers.set(k, v);\n }\n return this;\n }\n /**\n * Add all query parameters to the request, overriding existing ones if that key already exists. Null and undefined values cause the key to be removed\n * @param {URLSearchParams|Record<string,string|null|undefined>|string[][]|string} ps\n * @returns {HttpRequestBuilder} this builder\n */\n params(ps) {\n for (const [k, v] of rawEntries(ps)) {\n if (v == null) {\n this.#params.delete(k);\n } else {\n this.#params.set(k, v);\n }\n }\n return this;\n }\n /**\n * Adds a query parameter to the request, overriding it if it already exists. An empty list, or one carrying only null and undefined values, causes the key to be removed; nullish entries among real values are skipped.\n * @param {string} k\n * @param {...string} vs\n * @returns {HttpRequestBuilder} this builder\n */\n param(k, ...vs) {\n //overriding, as header, headers and params all do: pass every value in one\n //call to get a multi valued parameter\n this.#params.delete(k);\n const values = vs.filter((v) => v != null);\n if (values.length === 0) {\n return this;\n }\n for (const v of values) {\n this.#params.append(k, v);\n }\n return this;\n }\n /**\n * Sets the request body.\n * `Content-Type: multipart/form-data` header is automatically added by fetch when data is a FormData instance if not explicitly set.\n * `Content-Type: application/x-www-form-urlencoded` header is automatically added by fetch when data is an URLSearchParams instance if not explicitly set.\n * `Content-Type: text/plain` header is automatically added by fetch when data is a string instance if not explicitly set.\n * @param {string|ArrayBuffer|Blob|DataView|File|FormData|TypedArray|URLSearchParams|ReadableStream} data\n * @returns {HttpRequestBuilder} this builder\n */\n body(data) {\n this.#body = data;\n return this;\n }\n /**\n * Sets the request body that will be serialized as json. Calling this method adds the `Content-Type application/json` header for the request.\n * @param {any} body - the body to be serialized as json\n * @returns {HttpRequestBuilder} this builder\n */\n json(body) {\n if (body === undefined) {\n return this;\n }\n const serialized = JSON.stringify(body);\n this.#headers.set('Content-Type', 'application/json');\n this.#body = serialized;\n return this;\n }\n /**\n * Sets the request body as a FormData configured using the callback.\n * `Content-Type: multipart/form-data` header is automatically added by fetch if not explicitly set.\n * @param {(c: HttpMultipartRequestCustomizer) => void} callback\n */\n multipart(callback) {\n const formData = new FormData();\n const builder = new HttpMultipartRequestCustomizer(formData);\n callback(builder);\n this.#body = formData;\n return this;\n }\n /**\n * Sets a fetch options for the request.\n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} kvs\n * @returns {HttpRequestBuilder} this builder\n */\n options(kvs) {\n for (const [k, v] of Object.entries(kvs)) {\n this.#options[k] = v;\n }\n return this;\n }\n /**\n * Sets a fetch option for the request.\n * @param {keyof Omit<RequestInit,\"headers\"|\"method\"|\"body\">} k\n * @param {*} v\n * @returns {HttpRequestBuilder} this builder\n */\n option(k, v) {\n this.#options[k] = v;\n return this;\n }\n /**\n * Adds interceptors to the request.\n * @param {[HttpInterceptor]} is - the interceptor to be registered\n * @returns {HttpRequestBuilder} this builder\n */\n interceptors(is) {\n for (const i of is) {\n this.#interceptors.push(i);\n }\n return this;\n }\n /**\n * Adds an interceptor to the request.\n * @param {HttpInterceptor} i - the interceptor to be registered\n * @returns {HttpRequestBuilder} this builder\n */\n interceptor(i) {\n this.#interceptors.push(i);\n return this;\n }\n /**\n * Performs an HTTP exchange using the configured client, request and interceptors.\n * @returns {Promise<Response>} the response\n */\n async exchange() {\n const query = this.#params.size ? `?${this.#params}` : '';\n const opts = {\n ...this.#options,\n headers: this.#headers,\n method: this.#method,\n body: this.#body,\n };\n return await this.#client.exchange(`${this.#uri}${query}${this.#fragment}`, opts, this.#interceptors);\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptors throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<Response>} the response\n */\n async fetch() {\n try {\n const response = await this.exchange();\n if (!response.ok) {\n throw await HttpClientError.fromResponse(response);\n }\n return response;\n } catch (ex) {\n if (ex instanceof Failure) {\n throw ex;\n }\n //fetch() answers a Failure whatever happened, so a caller reading\n //`problems` never has to test the shape first. What reaches here is\n //not the transport, which labels its own failure below the chain: it\n //is a throw from the chain's own code, carried as the cause\n throw HttpClientError.of('UNEXPECTED_PROBLEM', ex);\n }\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptors throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<string>} the response body, as text\n */\n async fetchText() {\n const response = await this.fetch();\n return await unmarshal(response, 'text');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptors throwing a failure when response status is not in the 200-299 range.\n * A 204 yields null without reading the body; any other empty body is an unmarshaling failure.\n * @returns {Promise<any>} the response body, deserialized as JSON\n */\n async fetchJson() {\n const response = await this.fetch();\n if (response.status === 204) {\n //a 204 declares no content: there is no body to decode\n return null;\n }\n return await unmarshal(response, 'json');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptors throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<Blob>} the response body, as a Blob\n */\n async fetchBlob() {\n const response = await this.fetch();\n return await unmarshal(response, 'blob');\n }\n /**\n * Performs an HTTP exchange using the configured client request, and interceptors throwing a failure when response status is not in the 200-299 range.\n * @returns {Promise<ArrayBuffer>} the response body, as an ArrayBuffer\n */\n async fetchArrayBuffer() {\n const response = await this.fetch();\n return await unmarshal(response, 'arrayBuffer');\n }\n}\n\n/** Builds a multipart body: text fields, json parts, and single or repeated blobs. */\nclass HttpMultipartRequestCustomizer {\n #formData;\n /**\n *\n * @param {FormData} formData\n */\n constructor(formData) {\n this.#formData = formData;\n }\n /**\n * Appends a value to the FormData.\n * @param {string} name\n * @param {*} value\n * @returns this builder\n */\n field(name, value) {\n this.#formData.append(name, value);\n return this;\n }\n /**\n * Appends a Blob to the FormData.\n * If `filename` is omitted, FormData defaults are applied:\n * The default filename for Blob objects is \"blob\";\n * The default filename for File objects is the file's filename.\n * @param {string} name\n * @param {Blob} value\n * @param {string|undefined} filename\n * @returns this builder\n */\n blob(name, value, filename) {\n this.#formData.append(name, value, filename);\n return this;\n }\n /**\n * Appends multiple Blobs to the FormData with the same name.\n * The default filename for Blob objects is \"blob\";\n * The default filename for File objects is the file's filename.\n * @param {string} name\n * @param {Blob[]} values\n * @returns this builder\n */\n blobs(name, values) {\n for (const v of values) {\n this.#formData.append(name, v);\n }\n return this;\n }\n /**\n * Appends a JSON serialized blob to the FormData.\n * @param {string} name\n * @param {any} value\n * @param {string|undefined} filename\n * @returns this builder\n */\n json(name, value, filename) {\n const blob = new Blob([JSON.stringify(value)], { type: 'application/json' });\n this.#formData.append(name, blob, filename);\n return this;\n }\n}\n\n//every type a caller can end up holding is nameable: the builder `builder()`\n//answers, the request builder every verb answers, the chain an interceptor is\n//handed and the customizer a multipart callback is handed. They were reachable\n//and unnameable, so a consumer could write the call but not annotate the\n//function it lives in. The interceptors stay unexported: they are page policy the\n//builder installs, not a type anything hands back\nexport {\n MediaType,\n HttpClient,\n HttpClientBuilder,\n HttpClientError,\n HttpInterceptorChain,\n HttpRequestBuilder,\n HttpMultipartRequestCustomizer,\n};\n","/**\n * Builds a json-encoding wrapper over one of the page's storages. The backing\n * is deferred (an accessor, not the storage itself): where storage is denied\n * (blocked cookies, some embedded or private contexts) the accessor itself\n * throws, and must do so per call, never at module load. The methods are bound\n * to nothing: destructuring keeps them working.\n * @param {() => globalThis.Storage} backing\n */\nconst storage = (backing) => {\n const remove = (k) => {\n try {\n backing().removeItem(k);\n } catch {\n //nothing to remove where storage is unreachable\n }\n };\n const load = (k) => {\n let got;\n try {\n got = backing().getItem(k);\n } catch {\n //storage can be unreachable altogether (blocked cookies, embedded or\n //private contexts): a read that cannot reach it is a miss, not a failure\n return undefined;\n }\n if (got === null) {\n return undefined;\n }\n try {\n return JSON.parse(got);\n } catch {\n //not what save wrote: drop it, otherwise every later read fails the same way\n remove(k);\n return undefined;\n }\n };\n const save = (k, v) => {\n backing().setItem(k, JSON.stringify(v));\n };\n const pop = (k) => {\n const decoded = load(k);\n remove(k);\n return decoded;\n };\n return { save, load, remove, pop };\n};\n\n/**\n * Builds a revision-guarded view over a storage wrapper: a load under a\n * revision other than the stored one is a miss that also evicts the entry.\n * @param {ReturnType<typeof storage>} store\n */\nconst versioned = (store) => ({\n save(key, revision, data) {\n store.save(key, { revision, data });\n },\n load(key, revision) {\n const stored = store.load(key);\n if (stored == null || typeof stored !== 'object' || stored.revision !== revision) {\n store.remove(key);\n return undefined;\n }\n return stored.data;\n },\n});\n\nconst LocalStorage = storage(() => localStorage);\nconst SessionStorage = storage(() => sessionStorage);\nconst VersionedLocalStorage = versioned(LocalStorage);\nconst VersionedSessionStorage = versioned(SessionStorage);\n\nexport { LocalStorage, VersionedLocalStorage, SessionStorage, VersionedSessionStorage };\n","/**\n * @typedef {Object} AsyncExtension\n * @property {Promise<any>[]} promises\n * @typedef {Event & { async?: AsyncExtension }} AsyncEvent\n */\n/**\n * Dispatching an event and waiting for what its listeners answer. A listener\n * registered through `asyncOn` attaches its promise to the event, and\n * `fireAsync` resolves once they have all settled: `broadcast` collects every\n * answer, `pipeline` allows at most one, `delegate` requires exactly one.\n */\nclass AsyncEvents {\n /**\n * Dispatches an event and handles asynchronous resolution based on the execution mode.\n * @param {HTMLElement} el - The target element dispatching the event.\n * @param {AsyncEvent} evt - The event instance.\n * @param {{mode?: 'broadcast' | 'pipeline' | 'delegate'}} [options] - Configuration options (defaults to 'broadcast').\n * @returns {Promise<any>} Resolves with an array of values for broadcasts, a single value for pipelines/delegates, or undefined.\n */\n static async fireAsync(el, evt, options) {\n el.dispatchEvent(evt);\n const promises = evt.async?.promises ?? [];\n const mode = options?.mode ?? 'broadcast';\n if ((mode === 'pipeline' && promises.length > 1) || (mode === 'delegate' && promises.length !== 1)) {\n //the listeners ran under a broken configuration: nothing legitimately\n //awaits their outcome, and their failures are not page errors\n Promise.all(promises).catch(() => {});\n throw new Error(\n mode === 'pipeline'\n ? `[AsyncEvents] Event \"${evt.type}\" is configured in 'pipeline' mode and expects at most one async listener, but ${promises.length} listeners were triggered on this element.`\n : `[AsyncEvents] Event \"${evt.type}\" is configured in 'delegate' mode and requires exactly one async listener, but ${promises.length} were registered.`,\n );\n }\n return mode === 'broadcast' ? Promise.all(promises) : Promise.resolve(promises[0]);\n }\n\n /**\n * Registers an asynchronous event listener wrapper.\n * @param {HTMLElement} el - The target element.\n * @param {string} type - The event name/type.\n * @param {Function} fn - The async listener middleware function returning the execution result.\n * @param {AddEventListenerOptions} [options] - Native addEventListener options.\n * @returns {EventListener} The underlying proxy listener function needed for cleanup via asyncOff.\n */\n static asyncOn(el, type, fn, options) {\n /** @type {(evt: Event) => Promise<void>} */\n const listener = async (event) => {\n const ae = /** @type {AsyncEvent} */ (event);\n if (!ae.async) {\n ae.async = { promises: [] };\n }\n const { promise, resolve, reject } = Promise.withResolvers();\n ae.async.promises.push(promise);\n try {\n resolve(await fn(ae));\n } catch (e) {\n reject(e);\n }\n };\n\n el.addEventListener(type, listener, options);\n return listener;\n }\n\n /**\n * Unregisters an asynchronous event listener proxy.\n * @param {HTMLElement} el - The target element.\n * @param {string} type - The event name/type.\n * @param {EventListener} listener - The proxy listener instance previously returned by asyncOn.\n * @param {EventListenerOptions} [options] - Native removeEventListener options.\n */\n static asyncOff(el, type, listener, options) {\n el.removeEventListener(type, listener, options);\n }\n /**\n * Mixes the asynchronous execution engine extensions into target class prototypes.\n * @param {...Function} classes - The target class constructors to decorate.\n */\n static mixInto(...classes) {\n for (const k of classes) {\n Object.assign(k.prototype, {\n /**\n * @this {HTMLElement}\n * @param {AsyncEvent} evt\n * @param {{mode?: 'broadcast' | 'pipeline' | 'delegate'}} [options]\n * @returns {Promise<any>}\n */\n async fireAsync(evt, options) {\n return await AsyncEvents.fireAsync(this, evt, options);\n },\n\n /**\n * @this {HTMLElement}\n * @param {string} type\n * @param {Function} fn\n * @param {AddEventListenerOptions} [options]\n * @returns {EventListener}\n */\n asyncOn(type, fn, options) {\n return AsyncEvents.asyncOn(this, type, fn, options);\n },\n\n /**\n * @this {HTMLElement}\n * @param {string} type\n * @param {EventListener} listener\n * @param {EventListenerOptions} [options]\n * @returns {void}\n */\n asyncOff(type, listener, options) {\n AsyncEvents.asyncOff(this, type, listener, options);\n },\n });\n }\n }\n}\n\nexport { AsyncEvents };\n","/**\n * @typedef {{ readonly stale: boolean }} Claim\n */\n/**\n * The generations of claims over one contended resource. Every take() starts a\n * new generation, superseding every claim before it, and a holder asks its\n * claim `stale` before painting chrome, storing state or throwing towards a\n * caller: a superseded outcome owns nothing. hold() joins the current\n * generation without superseding it (a fetch that any later reconfiguration\n * must detach), and invalidate() supersedes without claiming (a hide ending\n * every pending show). One Claims per contended resource: a component whose\n * dropdown, value labels and loader configuration contend separately holds one\n * each.\n */\nclass Claims {\n #generation = 0;\n /**\n * Starts a new generation, superseding every earlier claim, and holds it.\n * @returns {Claim}\n */\n take() {\n ++this.#generation;\n return this.hold();\n }\n /**\n * Holds the current generation without superseding anything.\n * @returns {Claim}\n */\n hold() {\n const held = this.#generation;\n const claims = this;\n return {\n /** true once a later take() or invalidate() superseded this claim */\n get stale() {\n return held !== claims.#generation;\n },\n };\n }\n /** Supersedes every claim without holding a new one. */\n invalidate() {\n ++this.#generation;\n }\n}\n\nexport { Claims };\n","/**\n * Sleeping, debouncing and throttling. Debounce and throttle both return the\n * wrapped function together with a cancel function.\n */\nclass Timing {\n /** Resolves after the given milliseconds. @param {number} ms */\n static sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n /**\n * Executes only after a period of inactivity (pause in events).\n * Respond to the \"end\" of a series of events.\n * @param {number} timeoutMs\n * @param {function} func\n * @param {{ immediate?: boolean }} [options] - immediate fires on the leading edge instead of the trailing one\n * @returns {[function, function]}\n */\n static debounce(timeoutMs, func, options) {\n const immediate = options?.immediate ?? false;\n let tid = /** @type {number | null} */ (null);\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n const elapsed = performance.now() - previousTimestamp;\n if (timeoutMs > elapsed) {\n tid = setTimeout(later, timeoutMs - elapsed);\n return;\n }\n tid = null;\n if (!immediate) {\n func(...args);\n }\n //func may have called debounced again, arming a new timer with new args:\n //clearing them then would drop the call that is now pending\n if (tid === null) {\n args = [];\n }\n };\n\n const debounced = (...called) => {\n args = called;\n previousTimestamp = performance.now();\n if (tid === null) {\n tid = setTimeout(later, timeoutMs);\n if (immediate) {\n func(...args);\n }\n }\n };\n const abort = () => {\n clearTimeout(tid ?? undefined);\n tid = null;\n args = [];\n };\n return [debounced, abort];\n }\n /**\n * Executes at most once per specified time interval, regardless of ongoing events.\n * @param {number} timeoutMs\n * @param {function} func\n * @param {{ leading?: boolean, trailing?: boolean }} [options] - which edges of the interval call, both by default\n * @returns {[function, function]}\n */\n static throttle(timeoutMs, func, options) {\n const leading = options?.leading ?? true;\n const trailing = options?.trailing ?? true;\n let tid = /** @type {number | null} */ (null);\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n previousTimestamp = leading ? performance.now() : 0;\n tid = null;\n func(...args);\n if (tid === null) {\n args = [];\n }\n };\n const throttled = (...called) => {\n const now = performance.now();\n if (!previousTimestamp && !leading) {\n previousTimestamp = now;\n }\n const remaining = previousTimestamp === 0 ? 0 : timeoutMs - (now - previousTimestamp);\n args = called;\n if (remaining <= 0 || remaining > timeoutMs) {\n if (tid !== null) {\n clearTimeout(tid);\n tid = null;\n }\n previousTimestamp = now;\n func(...args);\n if (tid === null) {\n args = [];\n }\n } else if (tid === null && trailing) {\n tid = setTimeout(later, remaining);\n }\n };\n const abort = () => {\n clearTimeout(tid ?? undefined);\n tid = null;\n args = [];\n };\n return [throttled, abort];\n }\n}\n\nexport { Timing };\n","/** Field wiring: extracting and filling values, pinning problems to the fields they name. */\nclass Bindings {\n /**\n * Flattens a nested object into dotted keys, stopping wherever `stops` names\n * a key: a field named `address` takes the whole object, while one named\n * `address.city` takes the leaf.\n * @param {{ [x: string]: any; }} obj\n * @param {string} prefix\n * @param {Set<String>} stops - the names the form actually has fields for\n * @return {{ [x: string]: any; }}\n */\n static flatten(obj, prefix, stops) {\n return Object.keys(obj).reduce((acc, k) => {\n const pre = prefix.length ? `${prefix}.${k}` : k;\n if (!stops.has(pre) && typeof obj[k] === 'object' && obj[k] !== null) {\n Object.assign(acc, Bindings.flatten(obj[k], pre, stops));\n } else {\n acc[pre] = obj[k];\n }\n return acc;\n }, {});\n }\n\n /**\n * Walking a dotted name would otherwise descend into `Object.prototype`:\n * `__proto__` passes the `typeof === 'object'` test below and becomes the\n * walk's target, so `providePath({}, '__proto__.x', v)` would write on every\n * object in the page. A field name reaching here is author markup, but it can\n * be bound from data through `data-tpl-name` and `providePath` is public, so\n * the segments that can reach the prototype chain are refused outright rather\n * than left to the caller to prove unreachable.\n */\n static #FORBIDDEN = new Set(['__proto__', 'prototype', 'constructor']);\n /**\n * Writes a value into an object at a dotted path, creating the intermediate\n * objects and arrays the path implies. A numeric segment makes an array.\n * @param {any} result\n * @param {string} path - a field name, `a.b` or `a[0].b`\n * @param {any} value\n */\n static providePath(result, path, value) {\n const keys = path.split('.').map((k) => (/^[0-9]+$/.test(k) ? +k : k));\n for (const key of keys) {\n if (Bindings.#FORBIDDEN.has(/** @type any */ (key))) {\n throw new Error(`unsupported name segment '${key}' in '${path}'`);\n }\n }\n let current = result ?? {};\n let previous = /** @type {any} */ (null);\n for (let i = 0; ; ++i) {\n const ckey = keys[i];\n const pkey = keys[i - 1];\n if (Number.isInteger(ckey) && !Array.isArray(current)) {\n if (previous !== null) {\n previous[pkey] = current = [];\n } else {\n result = current = [];\n }\n }\n if (i === keys.length - 1) {\n //an undefined value declares the path without filling it: an entry\n //already there is left alone, a missing one is created null\n current[ckey] = value !== undefined ? value : ckey in current ? current[ckey] : null;\n return result;\n }\n //an overlapping name (a before a.b) leaves a scalar or a null here:\n //the later, more specific name rebuilds the container, exactly as the\n //reverse order always replaced the container with the scalar\n if (typeof current[ckey] !== 'object' || current[ckey] === null) {\n current[ckey] = {};\n }\n previous = current;\n current = current[ckey];\n }\n }\n /**\n * Reads one control's value the way its kind demands: an unchecked radio\n * answers undefined so it contributes nothing, a checkbox answers its\n * checked state, a multiple select answers its selected values, and a blank\n * native control answers null rather than an empty string.\n * @param {Element & {dataset?: any} & {checked?: boolean} & {value?: any}} el\n * @returns {any} the value, or undefined where the control contributes none\n */\n static extract(el) {\n if (el.getAttribute('type') === 'radio') {\n if (!el.checked) {\n return undefined;\n }\n return el.dataset.fulBindType === 'boolean' ? el.value === 'true' : el.value;\n }\n if (el.getAttribute('type') === 'checkbox') {\n return el.checked;\n }\n if (el.dataset.fulBindType === 'boolean') {\n return !el.value ? null : el.value === 'true';\n }\n if (el.tagName === 'SELECT' && /** @type {HTMLSelectElement} */ (el).multiple) {\n return Array.from(/** @type {HTMLSelectElement} */ (el).selectedOptions).map((o) => o.value);\n }\n if (el.tagName === 'INPUT' || el.tagName === 'SELECT' || el.tagName === 'TEXTAREA') {\n return el.value === '' || el.value === undefined ? null : el.value;\n }\n return el.value;\n }\n\n /**\n * Reads every named, enabled control of a form into a nested object, the\n * dotted field names deciding its shape.\n * @param {HTMLFormElement} form\n * @param {HTMLElement} [submitter]\n * @returns\n */\n /**\n * Whether a control is one of a form's buttons, whose name travels only when it\n * is the one that submitted.\n * @param {Element & {type?: string}} el\n */\n static #submits(el) {\n return el.type === 'submit' || el.type === 'reset' || el.type === 'button';\n }\n static extractFrom(form, submitter) {\n let result = {};\n for (const el of form.elements) {\n if (!el.hasAttribute('name')) {\n continue;\n }\n //a form submits the name of the button that submitted it and of no other,\n //which is the platform's own rule. It used to fall out of the spinner\n //having disabled every button by the time the values were read, so the\n //affordance was quietly load-bearing for the payload\n if (Bindings.#submits(el) && el !== submitter) {\n continue;\n }\n //the submitter is exempt from the disabled check: a form holds its buttons\n //off while submitting, and its own submitter still names a value\n if (el.matches(':disabled') && el !== submitter) {\n continue;\n }\n result = Bindings.providePath(\n result,\n /** @type {string} */ (el.getAttribute('name')),\n Bindings.extract(el),\n );\n }\n return result;\n }\n\n /**\n * Writes a value into one control, the inverse of `extract`: a radio is\n * checked when its own value matches, a checkbox takes the value as its\n * checked state, and a multiple select selects the options the list names.\n * @param {Element & {dataset?: any} & {checked?: boolean} & {value?: any}} el\n * @param {any} raw the value as it arrived, coerced per control kind\n */\n static mutate(el, raw) {\n if (el.getAttribute('type') === 'radio') {\n //values are matched as strings, as ful-radio-group does: extract decodes\n //boolean radios, and payloads carry numbers where the attribute is text\n el.checked = raw != null && el.getAttribute('value') === String(raw);\n return;\n }\n if (el.getAttribute('type') === 'checkbox') {\n el.checked = raw;\n return;\n }\n if (el.tagName === 'SELECT' && /** @type {HTMLSelectElement} */ (el).multiple) {\n const values = Array.isArray(raw) ? raw.map(String) : raw == null ? [] : [String(raw)];\n Array.from(/** @type {HTMLSelectElement} */ (el).options).forEach((o) => {\n o.selected = values.includes(o.value);\n });\n return;\n }\n el.value = raw;\n }\n\n static mutateIn(form, values) {\n const names = Array.from(form.elements)\n .map((el) => el.getAttribute('name'))\n .filter((n) => n);\n for (const [flattenedKey, value] of Object.entries(Bindings.flatten(values, '', new Set(names)))) {\n for (const el of form.querySelectorAll(`[name='${CSS.escape(flattenedKey)}']`)) {\n Bindings.mutate(el, value);\n }\n }\n }\n\n static errors(form, es, scrollOnError) {\n //focus management announces the error of the field it lands on through\n //aria-describedby: a live region on top of that would read everything twice,\n //so the polite announcement exists only when nothing takes the focus\n form.querySelectorAll('ful-field-error').forEach((el) => {\n el.setAttribute('aria-live', scrollOnError ? 'off' : 'polite');\n });\n const pinned = (e) => (e.type === 'FIELD_ERROR' || e.type === 'INVALID_FORMAT') && e.context;\n const fieldErrors = es.filter(pinned);\n const globalErrors = es.filter((e) => !pinned(e));\n form.querySelectorAll(`[name]`).forEach((el) => {\n el.setCustomValidity?.('');\n });\n form.querySelectorAll('ful-errors').forEach((el) => {\n el.setAttribute('role', 'alert');\n el.replaceChildren();\n el.setAttribute('hidden', '');\n });\n const unmatched = [];\n fieldErrors.forEach((e) => {\n const name = e.context.replace(/\\[/g, '.').replace(/\\]\\./g, '.').replace(/\\]/g, '');\n const parts = name.split('.');\n for (let i = parts.length; i !== 0; --i) {\n const prefix = parts.slice(0, i).join('.');\n const targets = form.querySelectorAll(`[name='${CSS.escape(prefix)}']`);\n if (targets.length === 0) {\n continue;\n }\n //the most specific name wins: the walk exists so a composite field\n //owning a whole subtree catches its inner contexts, not so an outer\n //field doubles a problem an exact one already shows. The remaining\n //path rides along ('' on an exact match), so a composite can route\n //the problem to the inner control it names\n const context = parts.slice(i).join('.');\n targets.forEach((input) => {\n input.setCustomValidity?.(e.reason, context);\n });\n return;\n }\n //a context naming no field must not vanish: it reads in the banner\n unmatched.push(e);\n });\n const bannered = [...globalErrors, ...unmatched];\n form.querySelectorAll('ful-errors').forEach((el) => {\n const hel = /** @type HTMLElement} */ (el);\n if (bannered.length === 0) {\n hel.innerText = '';\n return;\n }\n //revealed before it is filled: a live region mutated while hidden and\n //shown afterwards is announced unreliably, the change having happened\n //where nothing was watching\n el.removeAttribute('hidden');\n hel.innerText = bannered.map((e) => e.reason).join('\\n');\n });\n if (es.length === 0 || !scrollOnError) {\n return;\n }\n Array.from(form.querySelectorAll(`:invalid`))\n .sort((a, b) => a.getBoundingClientRect().y - b.getBoundingClientRect().y)[0]\n ?.focus();\n }\n}\n\nexport { Bindings };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\n\n/**\n * The base of every form-associated ful field: a form-associated custom element\n * carrying the validity protocol, the field error live region, focus\n * delegation, the label chrome and the disabled, readonly and required claims.\n *\n * A subclass owns its template, its value semantics and its change events. It\n * implements `_build(conf)`, which builds its dom and returns the pieces the\n * base drives: the control, the error region, the label, and the optional\n * `claims`, `announces`, `freeze` and `also`. The base does the wiring,\n * the mounting and the application of the declared state. Nothing in the base\n * is there to be called from a subclass's build.\n *\n * The pieces are the contract: the claim setters, the validity protocol and\n * the aria wiring all act on them, so a field with no native control returns a\n * focusable piece of its own chrome as the control. The getters and `focus()`\n * are the only members that tolerate a not-yet-rendered element, where page\n * code may read a claim or ask for the focus before the upgrade; the\n * properties go live only after the render, as ParsedElement documents. The\n * base references no ful vocabulary, only what its subclasses return to it.\n */\nclass Field extends ParsedElement {\n static formAssociated = true;\n /**\n * The claim attributes and the value are observed here so every field,\n * including the custom ones, keeps them live after the upgrade: the\n * attribute is a third way to author a claim, beside the markup and the\n * property,\n * exactly as a native input's. The value defaults to the string mapper and\n * every field with its own vocabulary overrides it (`value:bool`,\n * `value:csv`, `value:json`).\n */\n static observed = ['disabled:presence', 'readonly:presence', 'required:presence', 'value'];\n /** the role the element internals carry, 'presentation' unless the control is its own */\n static ROLE = 'presentation';\n #control;\n #fieldError;\n #claims;\n #announces;\n #also = [];\n constructor() {\n super();\n //the base attached the internals: the platform allows one call per element\n this.internals.role = /** @type {typeof Field} */ (this.constructor).ROLE;\n }\n /** every element the claims mirror onto: the claim target, then the extra controls */\n #mirrors() {\n return [this.#claims ?? this.#control, ...this.#also].filter((el) => el);\n }\n /**\n * Takes what the build produced: keeps the pieces the base drives, wires the\n * aria and the label, and mounts the fragment.\n * @param {{fragment: any, control: any, error?: any, label?: any, described?: any,\n * claims?: any, announces?: any, freeze?: any, also?: any[]}} pieces\n */\n #wire({\n fragment,\n control,\n error,\n label = null,\n described = null,\n claims = null,\n announces = control,\n freeze = null,\n also = [],\n }) {\n this.#control = control;\n this.#fieldError = error;\n this.#claims = claims;\n this.#announces = announces;\n this.#also = also;\n if (freeze) {\n //a field with no usable native readOnly freezes by refusing the\n //gesture, not by inerting its subtree: inert takes the whole thing out\n //of the accessibility tree, so a readonly checkbox, radio group, filter\n //or file list was on screen and unreadable. Capturing, so it lands\n //before the control's own handlers and the platform's activation\n freeze.addEventListener(\n 'click',\n (evt) => {\n if (this.readonly) {\n evt.preventDefault();\n }\n },\n true,\n );\n }\n //the error region describes the control, or the host where there is no\n //single control to describe (a radio group's legend names its fieldset)\n if (error) {\n (described ?? control).ariaDescribedByElements = [error];\n }\n if (label) {\n control.ariaLabelledByElements = [label];\n //a label that does not natively target the control still focuses it\n label.addEventListener('click', () => this.focus());\n }\n //the platform's implicit submission, stood in for where the field's own\n //protocol took it away: the inner controls carry form=\"\", so Enter in one\n //of them reaches no form and the platform submits nothing. Listening on the\n //host rather than the control means every listener the control has already\n //ran, so preventDefault is what it says: a ful-select accepting the\n //highlighted entry has consumed the key and no submit follows\n this.addEventListener('keydown', (evt) => {\n if (evt.key !== 'Enter' || evt.defaultPrevented || evt.isComposing) {\n return;\n }\n const target = /** @type {HTMLInputElement} */ (evt.target);\n //only where the platform cannot: a control still associated with the\n //form, an author's own input in a slot among them, submits on its own\n //and would otherwise submit twice\n if (target.form === this.internals.form || !Field.#submitsOnEnter(target)) {\n return;\n }\n this._requestSubmit();\n });\n this.replaceChildren(fragment);\n }\n /**\n * The platform's own rule for which control Enter submits from, measured on\n * Chromium, Firefox and WebKit: every input but the file picker and the\n * button-shaped ones, the checkbox and the radio included. A textarea takes\n * the newline, a select takes the key for its own list, and a button is\n * activated by it.\n */\n static #submitsOnEnter(el) {\n return el instanceof HTMLInputElement && !['file', 'button', 'submit', 'reset', 'image'].includes(el.type);\n }\n focus(options) {\n this.#control?.focus(options);\n }\n /**\n * Clears or reports one validation problem: the text lands on the field's\n * live region and the state on the element internals, driving `:invalid`\n * styling. Validation is the server's: the submit travels regardless, and\n * the problems come back pinned here. The error mapping pins on the most\n * specific field name a problem's context reaches, handing over the\n * remaining path ('' on an exact match): the base ignores it, a composite\n * field owning a whole subtree overrides to route the problem to the inner\n * control it names.\n * @param {string} [error]\n * @param {string} [context] the path below this field's name, '' when exact\n */\n setCustomValidity(error, context) {\n //the state rides the control the reader focuses, not only the element\n //internals: the host's role is presentation for most fields, so a\n //validity set there announces nothing where the caret actually is\n Attributes.set(this.#announces ?? this.#control, 'aria-invalid', error ? 'true' : null);\n if (!error) {\n this.internals.setValidity({});\n this.#fieldError.innerText = '';\n return;\n }\n this.internals.setValidity({ customError: true }, ' ');\n this.#fieldError.innerText = error;\n }\n /** Submits the associated form through its first submitter, as Enter on a native control would. */\n _requestSubmit() {\n const form = this.internals.form;\n if (!form) {\n return;\n }\n const candidates = /** @type {NodeListOf<HTMLButtonElement|HTMLInputElement>} */ (\n form.querySelectorAll('button:not(:disabled), input:not(:disabled)')\n );\n form.requestSubmit([...candidates].find((el) => el.type === 'submit' && el.form === form));\n }\n /**\n * Dispatches the field's change event: bubbling, not cancelable, the value\n * in the detail. Every field announces through this one method, and the detail\n * always carries the field's own `value`, so a listener can rely on\n * `el.value === evt.detail.value` whatever the field is. A field with more to\n * say adds keys beside it; none can replace it.\n * @param {Record<string, any>} [extras]\n */\n _notifyChange(extras = {}) {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { value: this.value, ...extras },\n }),\n );\n }\n /**\n * Whether the field's chrome should answer a gesture. Badges, dropzones,\n * menus and labels are not form controls, so their handlers must ask the\n * effective state: matches(':disabled') covers the fieldset ancestry the\n * disabled property deliberately does not reflect, readonly the field's\n * own claim.\n */\n _interactive() {\n return !this.matches(':disabled') && !this.readonly;\n }\n /**\n * The field's value: every concrete field owns its semantics and overrides\n * this pair. The base pair exists so the form integration (the reset\n * protocol among others) has a member to write through; a custom field\n * forgetting its own keeps the base's inert one.\n * @type {any}\n */\n get value() {\n return undefined;\n }\n set value(v) {}\n /**\n * A reset restores the field's declared value, as a native control's reset\n * restores its markup default: the `value` attribute goes back through the\n * element's own mapper and value setter, so every field resets through its\n * own semantics. A field whose value is not attribute backed overrides this.\n */\n formResetCallback() {\n this.value = this.unmarshal('value', this.getAttribute('value'));\n }\n /**\n * The disabled protocol follows the semantics of a native form control:\n *\n * - the `disabled` attribute on the host is the field's own claim, and nothing\n * but its author ever writes or removes it, in markup or through the\n * property. The framework never claims on the form's behalf, so there is\n * nothing to unclaim and nothing to lose: a field declared disabled inside\n * a disabled `<fieldset>` stays disabled when the fieldset comes back,\n * exactly like a native input keeps its attribute.\n * - the effective state is the claim OR a disabled fieldset ancestry, which\n * the platform maintains on its own: `:disabled` matches both, a disabled\n * field is left out of the submitted values, and the inner native controls\n * are reached by the ancestry as descendants of the fieldset.\n * - the property reflects the claim only, like a native input's: a field\n * disabled by its ancestry reads `false` while `matches(':disabled')`\n * tells the effective state. Un-claiming inside a disabled fieldset\n * cannot enable the field.\n * - the inner controls mirror the claim and nothing else: the ancestry state\n * is never written anywhere, so it can never go stale, and the browser\n * composes the two on its own when it disables and re-enables a fieldset's\n * descendants. Subclass setters call super for the claim, then reach their\n * own controls, which mirror the claim like a native input's would.\n *\n * Because of this, formDisabledCallback carries nothing the framework needs\n * to apply, and the protocol does not define it.\n */\n get disabled() {\n //the claim only, like a native input: the effective state, claim or disabled\n //ancestry, is what :disabled matches\n return this.hasAttribute('disabled');\n }\n set disabled(d) {\n //the claim belongs to the author alone, nothing else ever writes it\n this.reflectTo('disabled', d);\n //the adopted pieces mirror the claim as a native input would: a disabled\n //fieldset ancestry is left to the browser, which reaches them as\n //descendants of the fieldset and re-enables them on its own\n for (const el of this.#mirrors()) {\n el.toggleAttribute('disabled', d);\n }\n }\n /**\n * A field is readonly through its control's native readOnly when it has one:\n * the control stays focusable and its text selectable, only editing is off.\n * Fields whose chrome must freeze too (popovers, buttons, label clicks) name\n * a `freeze` piece instead, whose gestures the base refuses while the claim\n * holds; the claim reflects on the host either way.\n */\n get readonly() {\n //the host attribute is the claim, as it is for disabled: every setter\n //reflects it, so one read answers however the field freezes\n return this.hasAttribute('readonly');\n }\n set readonly(v) {\n for (const el of this.#mirrors()) {\n el.readOnly = v;\n }\n //announced on the element whose role accepts it, not on whatever the\n //claims happen to ride: aria-readonly on a fieldset is dropped as invalid\n if (this.#announces) {\n Attributes.set(this.#announces, 'aria-readonly', v ? 'true' : null);\n }\n this.reflectTo('readonly', v);\n }\n /**\n * A field is required through aria: the claim reflects on the host, the\n * announcement lives on the adopted control.\n */\n get required() {\n //the claim, like disabled and readonly: the host attribute rather than\n //the projection, which a field with no role to announce on never carries\n return this.hasAttribute('required');\n }\n set required(d) {\n if (this.#announces) {\n Attributes.set(this.#announces, 'aria-required', d ? 'true' : null);\n }\n this.reflectTo('required', d);\n }\n /**\n * The field's render is the base's: the subclass builds its dom in `_build`\n * and hands back what it built, the base wiring the pieces, mounting the\n * fragment and applying the declared state. Nothing in the base is there to\n * be called from a subclass's build. `_build` may be async (a select\n * awaiting its prefetch); a field that builds synchronously stays so.\n */\n render(conf) {\n const built = /** @type {any} */ (this._build(conf));\n if (built instanceof Promise) {\n return built.then((pieces) => this.#settle(pieces));\n }\n this.#settle(built);\n return undefined;\n }\n #settle(pieces) {\n this.#wire(pieces);\n }\n /**\n * Builds the field's dom and answers the pieces the base drives. The one\n * method a concrete field implements beside its value pair, and the only\n * place its dom is created; the base does the wiring and the mounting.\n *\n * - `fragment` is mounted on the host\n * - `control` is the focusable target: focus, the aria and, by default, all\n * three claims reach it\n * - `error` is the field's live region\n * - `label`, when given, names the control and focuses it on click\n * - `described` moves the error's description off the control and onto\n * another element, the host where no single control can carry it\n * - `claims` moves the three claims onto a wrapper the field disables as a\n * whole, leaving focus and aria on the control\n * - `announces` is the element whose role carries `aria-readonly` and\n * `aria-required`, the host where the widget role lives there; `null` for a\n * field whose control has no role that accepts them\n * - `freeze` is for a field with no usable native readOnly: the readonly\n * claim refuses the gestures inside it, leaving it focusable and readable\n * - `also` are further controls mirroring disabled and readOnly beside the\n * first\n *\n * A subclass extending another field's build spreads the pieces it answered\n * and overrides the keys it owns.\n * @param {{slots: any}} conf\n * @returns {any}\n */\n _build(conf) {\n throw new Error(`${this.constructor.name} must implement _build`);\n }\n}\n\nexport { Field };\n","import { Attributes, Localization, ParsedElement } from '../../ftl/index.mjs';\nimport { Failure } from '../../httpc/index.mjs';\nimport { Bindings } from './bindings.mjs';\nimport { AsyncEvents } from '../events/async.mjs';\n\n/** Submits a form's values as json to a url, mapping the request and the response through the configured mappers. */\nclass RemoteJsonFormLoader {\n #http;\n #url;\n #method;\n #requestMapper;\n #responseMapper;\n constructor(http, url, method, requestMapper, responseMapper) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#requestMapper = requestMapper;\n this.#responseMapper = responseMapper;\n }\n prepare(values, form) {\n return this.#requestMapper(values, form);\n }\n async submit(request, form) {\n return await this.#http.request(this.#method, this.#url).json(request).fetch();\n }\n transform(response, form) {\n return this.#responseMapper(response, form);\n }\n}\n\n/** Submits a form without a request: the request mapper produces the result the response mapper then reads, for a form handled entirely on the page. */\nclass LocalFormLoader {\n #requestMapper;\n #responseMapper;\n constructor(requestMapper, responseMapper) {\n this.#requestMapper = requestMapper;\n this.#responseMapper = responseMapper;\n }\n async prepare(values, form) {\n return await this.#requestMapper(values, form);\n }\n async submit(request, form, response) {\n //nothing to send: whatever a submit:requested listener answered is the response\n return response;\n }\n async transform(response, form) {\n return await this.#responseMapper(response, form);\n }\n}\n\n/**\n * Builds the form's loader from its attributes: a local one when no action is\n * declared, a json post to it otherwise.\n *\n * A component registered under the `loader` attribute replaces this one and\n * must implement three methods, called in this order:\n *\n * - `prepare(values, form)` turns the extracted values into the request to send\n * - `submit(request, form, response)` performs it and returns the response. The\n * third argument is whatever a `submit:requested` listener already answered,\n * which is how a loader with nothing to send returns it unchanged\n * - `transform(response, form)` turns that response into the detail of the\n * `submit:success` event\n *\n * A rejection from any of the three is reported as a `submit:failure`.\n */\nclass FormLoader {\n static create(el, conf) {\n const http = el.component('http-client');\n const requestMapper = el.declared('request-mapper') ? el.component(el.declared('request-mapper')) : (v) => v;\n const responseMapper = el.declared('response-mapper') ? el.component(el.declared('response-mapper')) : (v) => v;\n const url = el.declared('action');\n if (!url) {\n return new LocalFormLoader(requestMapper, responseMapper);\n }\n const method = el.declared('method') ?? 'POST';\n return new RemoteJsonFormLoader(http, url, method, requestMapper, responseMapper);\n }\n}\n\n/**\n * Wraps its fields in a native form, extracts their values on submit and hands\n * them to a loader (loaders:form, or the action url as a json post),\n * announcing failures through the errors setter.\n */\nclass Form extends ParsedElement {\n //every one of these says how the form is built and submits, not what it holds:\n //the loader is named the same way ful-select and ful-table name theirs\n static attributes = [\n 'action',\n 'method',\n 'loader',\n 'request-mapper',\n 'response-mapper',\n 'clear-invalid-on-change:presence',\n 'scroll-on-error:presence',\n 'autocomplete',\n ];\n form;\n render() {\n const form = document.createElement('form');\n this.form = form;\n //the submit must travel regardless of validity: the server is the validation\n //authority, and the browser's own gate would block a resubmit behind\n //internals messages custom elements have no default UI for\n form.setAttribute('novalidate', '');\n Attributes.forward('form-', this, form);\n //the fields read it off whichever of the two they reach first, which depends\n //on whether they upgraded before or after this render: they cannot read it\n //off their own control, which carries form=\"\" and so has no form owner\n Attributes.set(form, 'autocomplete', this.declared('autocomplete'));\n form.replaceChildren(...this.childNodes);\n form.addEventListener('submit', async (e) => {\n e.preventDefault();\n e.stopPropagation();\n await this.submit(e.submitter ?? undefined);\n });\n //an aria-disabled control keeps its focus and its name, so the platform still\n //activates it: the refusal has to be ours, and capturing puts it ahead of\n //every listener the author registered on the button itself\n this.addEventListener(\n 'click',\n (evt) => {\n const target = /** @type Element */ (evt.target);\n if (!target.closest?.('[aria-disabled=\"true\"]')) {\n return;\n }\n evt.preventDefault();\n evt.stopImmediatePropagation();\n },\n true,\n );\n if (this.declared('clear-invalid-on-change')) {\n this.addEventListener('change', (/** @type any */ evt) => {\n evt.target.setCustomValidity?.('');\n });\n }\n this.replaceChildren(form);\n }\n #submitting = false;\n /**\n * Submits once: a submit while one is in flight is dropped before the\n * values are even extracted, so nothing fires and nothing travels; the\n * settled exchange re-arms the form. A write must not double behind a\n * second Enter or a programmatic call racing the first.\n * @param {HTMLElement} [submitter]\n * @returns\n */\n async submit(submitter) {\n if (this.#submitting) {\n return;\n }\n this.#submitting = true;\n this.spinner(true);\n //one try: building the loader and preparing the request are as much part of a\n //submit as sending it, and a mapper that throws is how a caller reports a\n //problem with the values\n let values;\n let request;\n try {\n const loader = this.component(this.declared('loader') ?? 'loaders:form').create(this);\n values = Bindings.extractFrom(this.form, submitter);\n request = await loader.prepare(values, this);\n const se = new CustomEvent('submit', {\n bubbles: true,\n cancelable: true,\n detail: { submitter, values, request },\n });\n if (!this.dispatchEvent(se)) {\n return;\n }\n this.errors = [];\n const sre = new CustomEvent('submit:requested', {\n bubbles: true,\n cancelable: false,\n detail: { submitter, values: se.detail.values, request: se.detail.request },\n });\n let response = await AsyncEvents.fireAsync(this, sre, { mode: 'pipeline' });\n request = sre.detail.request;\n\n response = await loader.submit(request, this, response);\n const mapped = await loader.transform(response, this);\n this.dispatchEvent(\n new CustomEvent('submit:success', {\n bubbles: true,\n cancelable: false,\n detail: { submitter, values, request, response: mapped },\n }),\n );\n } catch (e) {\n this.dispatchEvent(\n new CustomEvent('submit:failure', {\n bubbles: true,\n cancelable: false,\n detail: { submitter, values, request, exception: e },\n }),\n );\n if (e instanceof Failure) {\n this.errors = e.problems;\n }\n console.warn('failed to submit form', this, 'reason:', e);\n } finally {\n this.#submitting = false;\n this.spinner(false);\n }\n }\n /** The native reset, routing every field through its own value semantics. */\n reset() {\n this.form.reset();\n }\n #spinning = 0;\n /**\n * Reveals a spinner and gives it something to read. A spinner is a style-only\n * tag: the glyph is its own pseudo-element and the text is the author's, so one\n * carrying no text is a live region with nothing to announce. The label is\n * appended only where the author wrote none, and it is filled after the reveal,\n * a region mutated while hidden being announced unreliably.\n * @param {HTMLElement} el\n */\n #announce(el) {\n Attributes.defaultValue(el, 'role', 'status');\n el.hidden = false;\n if (el.textContent.trim() !== '') {\n return;\n }\n const label = document.createElement('span');\n label.className = 'ful-sr-only';\n label.dataset.ref = 'spinner-label';\n el.append(label);\n label.textContent = Localization.of().t('spinner.loading');\n }\n /** Shows the spinners and holds the submit buttons off, overlapping spins sharing one claim. */\n spinner(spin) {\n //spins can overlap (a caller's own spin may wrap a submit): only the\n //outermost one saves and restores the button states\n if (spin) {\n ++this.#spinning;\n if (this.#spinning !== 1) {\n return;\n }\n } else {\n this.#spinning = Math.max(0, this.#spinning - 1);\n if (this.#spinning !== 0) {\n return;\n }\n }\n //the form is the busy region: the table and the async sections say so the\n //same way, and a form that only dimmed its button said it to no one\n Attributes.set(this, 'aria-busy', spin ? 'true' : null);\n this.querySelectorAll('ful-spinner').forEach((el) => {\n const hel = /** @type HTMLElement */ (el);\n if (spin) {\n this.#announce(hel);\n return;\n }\n hel.hidden = true;\n hel.querySelector(':scope > [data-ref=spinner-label]')?.remove();\n });\n this.querySelectorAll('input,button').forEach((el) => {\n const hel = /** @type HTMLButtonElement|HTMLInputElement */ (el);\n if (hel.type !== 'submit' && hel.type !== 'reset') {\n return;\n }\n if (spin) {\n //aria-disabled, not disabled: the submitter is almost always the\n //focused element when a submit starts, and disabling what holds the\n //focus drops it to the body, losing the user's place mid transaction.\n //The refusal is the capturing handler below, and #submitting is the\n //guard that actually makes a second submit a no-op\n hel.dataset.wd = hel.getAttribute('aria-disabled') ?? '';\n hel.setAttribute('aria-disabled', 'true');\n } else {\n //a button that joined mid-spin was never saved: its authored state stands\n if (hel.dataset.wd === undefined) {\n return;\n }\n Attributes.set(hel, 'aria-disabled', hel.dataset.wd || null);\n delete hel.dataset.wd;\n }\n });\n }\n /** The values of the fields the form contains, extracted and filled back through Bindings. */\n set values(vs) {\n Bindings.mutateIn(this.form, vs);\n }\n get values() {\n return Bindings.extractFrom(this.form);\n }\n /** Pins problems to the fields they name, the banner taking the nameless ones. */\n set errors(es) {\n Bindings.errors(this.form, es, this.declared('scroll-on-error'));\n }\n}\n\nexport { FormLoader, Form };\n","import { Attributes, BoundedCache } from '../../ftl/index.mjs';\nimport { Field } from './field.mjs';\n\n//a null entry is a pattern that did not compile: cached like any other so the\n//warning is printed once rather than on every keystroke\nconst patternCache = new BoundedCache(100);\nconst compiled = (attr, pattern) =>\n patternCache.getOrCompute(`${attr}:${pattern}`, () => {\n try {\n return new RegExp(pattern, 'g');\n } catch (/** @type any */ e) {\n console.warn(`invalid ${attr} attribute`, pattern, e);\n return null;\n }\n });\n\n/**\n * The keystroke filter an input declares, as one function of the text.\n *\n * `keep` names the characters that survive and `reject` the ones that do not,\n * which are the same statement from either side: `keep=\"[0-9]\"` and\n * `reject=\"[^0-9]\"` both leave the digits. Keeping is the one worth reaching for,\n * the rejecting spelling of an allowed set being a double negative.\n */\n/**\n * The autofill token a field inherits from the form around it.\n *\n * A control is rendered with `form=\"\"` so that the host is the only thing that\n * submits, which also leaves it without a form owner, and the platform resolves\n * `autocomplete` through the form owner. So a form declaring it reaches nothing\n * on its own and the field reads the setting off the form element instead.\n *\n * The `form` a `ful-form` renders answers here, the host copying its token onto\n * it, and a plain `form` around ful fields answers too: the platform meant the\n * same thing by it, and its inheritance is broken here for the same reason. An\n * ancestor always upgrades before its descendants, so the rendered form is in\n * place by the time a field of its own builds.\n */\nconst inheritedAutocomplete = (el) => el.closest('form')?.getAttribute('autocomplete') ?? null;\n\nconst warnedBoth = new WeakSet();\nconst filterOf = (el) => {\n const keep = el.declared('keep');\n const reject = el.declared('reject');\n if (keep !== null && reject !== null && !warnedBoth.has(el)) {\n //the filter is read per keystroke, so the complaint is held per element\n warnedBoth.add(el);\n console.warn('a ful-input declares both keep and reject: keep is applied, reject is ignored', el);\n }\n if (keep !== null) {\n const re = compiled('keep', keep);\n //every match, concatenated: the attribute is a pattern rather than a\n //character class, so the kept text cannot be found by negating it\n return re && ((v) => (v.match(re) ?? []).join(''));\n }\n if (reject !== null) {\n const re = compiled('reject', reject);\n return re && ((v) => v.replace(re, ''));\n }\n return null;\n};\n\n/** A labelled text input over any native type or textarea; the temporal inputs are its subclasses. */\nclass Input extends Field {\n static observed = ['placeholder'];\n //configuration: the control is built from them and the value getter reads them,\n //but none of them is meant to change once the element is up\n static attributes = [\n 'type',\n 'v-type',\n 'keep',\n 'reject',\n 'uppercase:presence',\n 'trim:presence',\n 'autocomplete',\n ];\n static slots = true;\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <input data-tpl-if=\"type != 'textarea'\" data-tpl-type=\"type\" placeholder=\" \" form=\"\">\n <textarea data-tpl-if=\"type == 'textarea'\" placeholder=\" \" form=\"\"></textarea>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _input;\n _type() {\n //a numeric value wants the numeric widget (decimal normalization, the\n //right keyboard): v-type=number defaults the type, a declared one wins\n return this.declared('type') ?? (this.declared('v-type') === 'number' ? 'number' : 'text');\n }\n _build({ slots }) {\n const type = this._type();\n const fragment = this.template().withOverlay({ type, slots }).render();\n this._input = fragment.querySelector('input,textarea');\n\n //the browser reads autocomplete off the control it is classifying, so the\n //field's own token, or the form's where it declares none, is put there.\n //Set before the passthrough, which stays the last word\n Attributes.set(\n this._input,\n 'autocomplete',\n this.declared('autocomplete') ?? inheritedAutocomplete(this),\n );\n Attributes.forward('input-', this, this._input);\n this._input.addEventListener('input', (evt) => {\n const strip = filterOf(this);\n if (!strip) {\n return;\n }\n const before = evt.target.value;\n const after = strip(before);\n if (before === after) {\n return;\n }\n const start = evt.target.selectionStart;\n evt.target.value = after;\n if (start === null) {\n //email, number and the date types have no selection to restore\n return;\n }\n //the caret keeps its place among the characters that survived, so only the\n //ones stripped before it count\n const caret = strip(before.slice(0, start)).length;\n evt.target.setSelectionRange(caret, caret);\n });\n this._input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this._notifyChange();\n });\n return {\n fragment,\n control: this._input,\n error: fragment.querySelector('ful-field-error'),\n label: fragment.querySelector('label'),\n };\n }\n get value() {\n const uppercase = this.declared('uppercase');\n const trim = this.declared('trim');\n const v = this._input.value;\n const uppercased = uppercase ? v.toUpperCase() : v;\n const trimmed = trim ? uppercased.trim() : uppercased;\n if (trimmed === '') {\n return null;\n }\n if (this.declared('v-type') === 'number') {\n //typed values are an explicit opt in, as the select's k-type: blank\n //stays null, and a value that does not decode is kept as it is\n const n = Number(trimmed);\n return Number.isNaN(n) ? trimmed : n;\n }\n return trimmed;\n }\n set value(value) {\n this._input.value = value === '' || value === undefined ? null : value;\n }\n get placeholder() {\n const v = this._input.getAttribute('placeholder');\n return v === ' ' ? null : v;\n }\n set placeholder(d) {\n //without a placeholder :placeholder-shown never matches, and floating labels\n //rely on it, so a blank one stands in for none\n Attributes.set(this._input, 'placeholder', d ?? ' ');\n this.reflectTo('placeholder', d);\n }\n}\n\nexport { Input };\n","import { ParsedElement, Localization } from '../../ftl/index.mjs';\nimport { Input } from './input.mjs';\n\n/** Formats the yyyy-mm-dd date in its content in the page's locale, or the one its locale attribute names. */\nclass LocalDate extends ParsedElement {\n static attributes = ['locale', 'default'];\n render() {\n const content = this.textContent.trim();\n const [y, m, d] = content.split('-').map(Number);\n const parsed = content === '' ? null : new Date(y, m - 1, d);\n //content that does not name a date renders like none: formatting an\n //invalid date would throw and fail the upgrade over a template hole\n if (parsed === null || Number.isNaN(parsed.getTime())) {\n this.replaceChildren(this.declared('default') ?? '');\n return;\n }\n //the attribute wins, then the page's locale, then the platform default\n const { date } = Localization.of({ locale: this.declared('locale') ?? undefined });\n this.replaceChildren(date(parsed, { year: 'numeric', month: 'numeric', day: 'numeric' }));\n }\n}\n\n/** Formats the ISO instant in its content in the page's locale and timezone. */\nclass Instant extends ParsedElement {\n static attributes = ['locale', 'default'];\n render() {\n const content = this.textContent.trim();\n const parsed = content === '' ? null : new Date(Instant.isoToLocal(content));\n //content that does not name an instant renders like none, as ful-local-date\n if (parsed === null || Number.isNaN(parsed.getTime())) {\n this.replaceChildren(this.declared('default') ?? '');\n return;\n }\n const { date } = Localization.of({ locale: this.declared('locale') ?? undefined });\n this.replaceChildren(\n date(parsed, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n hour12: false,\n }),\n );\n }\n //a date-only value names a calendar day, not a utc midnight: it is read in\n //the page's timezone, so the day it names is the day it lands on\n static #parse(v) {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(v) ? new Date(`${v}T00:00:00`) : new Date(v);\n }\n static isoToLocal(iso) {\n const d = Instant.#parse(iso);\n const pad = (n, v) => String(v).padStart(n, '0');\n const date = `${d.getFullYear()}-${pad(2, d.getMonth() + 1)}-${pad(2, d.getDate())}`;\n const time = `${pad(2, d.getHours())}:${pad(2, d.getMinutes())}:${pad(2, d.getSeconds())}.${pad(3, d.getMilliseconds())}`;\n return `${date}T${time}`;\n }\n static localToIso(local) {\n const d = Instant.#parse(local);\n return Number.isNaN(d.getTime()) ? null : d.toISOString();\n }\n}\n\n/** A date input whose bounds accept a date, now, or an offset such as +1d. */\nclass InputLocalDate extends Input {\n //declaration order is the application order: step first, since on a time\n //input min and max are snapped to its grid\n static observed = ['step', 'min', 'max'];\n _type() {\n return 'date';\n }\n get min() {\n const v = this._input.min;\n return v === '' ? null : v;\n }\n set min(v) {\n this._input.min = InputLocalDate.#fromIsoOrOffset(v);\n }\n get max() {\n const v = this._input.max;\n return v === '' ? null : v;\n }\n set max(v) {\n this._input.max = InputLocalDate.#fromIsoOrOffset(v);\n }\n get step() {\n const v = this._input.step;\n return v === '' ? null : v;\n }\n set step(v) {\n this._input.step = v ?? '';\n }\n static #fromIsoOrOffset(v) {\n if (!v) {\n return '';\n }\n //the offset is subtracted before formatting so the iso date is the local\n //calendar day, which toISOString alone would shift to utc\n const formatLocalDate = (date) =>\n new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString().split('T')[0];\n if (v === 'now') {\n return formatLocalDate(new Date());\n }\n const re = /^([+-])(\\d+)([dmy])$/;\n const match = re.exec(v);\n if (!match) {\n return v;\n }\n const sign = match[1] === '-' ? -1 : 1;\n const offset = +match[2];\n const r = new Date();\n r.setHours(0, 0, 0, 0);\n switch (match[3]) {\n case 'd':\n r.setDate(r.getDate() + offset * sign);\n break;\n case 'm': {\n const originalDay = r.getDate();\n r.setMonth(r.getMonth() + offset * sign);\n if (r.getDate() !== originalDay) {\n r.setDate(0);\n }\n break;\n }\n case 'y':\n r.setFullYear(r.getFullYear() + offset * sign);\n break;\n }\n return formatLocalDate(r);\n }\n}\n\n/** A time input whose bounds accept a time, now, or an hour or minute offset, snapped to the step grid. */\nclass InputLocalTime extends InputLocalDate {\n _type() {\n return 'time';\n }\n get min() {\n const v = this._input.min;\n return v === '' ? null : v;\n }\n set min(v) {\n this._input.min = this.#fromNowOrOffset(v);\n }\n get max() {\n const v = this._input.max;\n return v === '' ? null : v;\n }\n set max(v) {\n this._input.max = this.#fromNowOrOffset(v);\n }\n /**\n * Resolves `now` and hour or minute offsets against the current time, wrapping\n * around midnight. `m` is minutes here, unlike the date offsets of the parent where\n * it is months: months mean nothing on a time. Anything else is passed through.\n */\n #fromNowOrOffset(v) {\n if (!v) {\n return '';\n }\n const resolved = new Date();\n if (v !== 'now') {\n const re = /^([+-])(\\d+)([hm])$/;\n const match = re.exec(v);\n if (!match) {\n return v;\n }\n const sign = match[1] === '-' ? -1 : 1;\n const offset = +match[2] * sign;\n if (match[3] === 'h') {\n resolved.setHours(resolved.getHours() + offset);\n } else {\n resolved.setMinutes(resolved.getMinutes() + offset);\n }\n }\n return InputLocalTime.#snapped(resolved, Number(this._input.step) || 60);\n }\n /**\n * Truncates a time to the step grid: min anchors that grid, so a bound that is not\n * on it makes every value on it invalid.\n */\n static #snapped(date, stepSeconds) {\n const pad = (n) => String(n).padStart(2, '0');\n const seconds = date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds();\n const snapped = Math.floor(seconds / stepSeconds) * stepSeconds;\n const hh = pad(Math.floor(snapped / 3600));\n const mm = pad(Math.floor((snapped % 3600) / 60));\n return stepSeconds % 60 === 0 ? `${hh}:${mm}` : `${hh}:${mm}:${pad(snapped % 60)}`;\n }\n}\n\n/** A datetime input whose value is read and written as an ISO instant. */\nclass InputInstant extends Input {\n //declaration order is the application order: step first, since on a time\n //input min and max are snapped to its grid\n static observed = ['step', 'min', 'max'];\n _type() {\n return 'datetime-local';\n }\n get value() {\n return Instant.localToIso(this._input.value);\n }\n set value(v) {\n this._input.value = v ? Instant.isoToLocal(v) : '';\n }\n get min() {\n return Instant.localToIso(this._input.min);\n }\n set min(v) {\n this._input.min = v ? Instant.isoToLocal(v) : '';\n }\n get max() {\n return Instant.localToIso(this._input.max);\n }\n set max(v) {\n this._input.max = v ? Instant.isoToLocal(v) : '';\n }\n get step() {\n const v = this._input.step;\n return v === '' ? null : v;\n }\n set step(v) {\n this._input.step = v ?? '';\n }\n}\n\nexport { Instant, LocalDate, InputLocalDate, InputLocalTime, InputInstant };\n","import { Fragments, Localization, Templates } from '../../ftl/index.mjs';\nimport { Input } from './input.mjs';\n\n/** A file input with an optional dropzone and item list, enforcing the size and count limits it declares. */\nclass InputFile extends Input {\n /** how long a warning stands before the field retires it, matching the css fade */\n static WARNING_TIMEOUT = 5000;\n /**\n * A FileList holding exactly these files. The platform gives no way to\n * build one but through a DataTransfer, and every place that narrows a\n * selection rebuilt it by hand: five loops and three empty ones.\n * @param {Iterable<File>} [files]\n */\n static list(files = []) {\n const dt = new DataTransfer();\n for (const file of files) {\n dt.items.add(file);\n }\n return dt.files;\n }\n static observed = [\n 'placeholder',\n 'accept:csv',\n 'multiple:presence',\n 'item-list:presence',\n 'dropzone:presence',\n 'max-files:number',\n 'max-file-size:number',\n 'max-total-size:number',\n //re-declared so it lands after the constraints: assigning a value\n //validates the selection against them\n 'value',\n ];\n #accept;\n #items;\n #dropzone;\n #warnings;\n #group;\n _type() {\n return 'file';\n }\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <input data-tpl-type=\"type\" placeholder=\" \" form=\"\">\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <div data-ref=\"dropzone\" class=\"dropzone\" data-tpl-if=\"slots.dropzone\">\n {{{{ slots.dropzone }}}}\n </div>\n <div data-ref=\"dropzone\" class=\"default-dropzone\" data-tpl-if=\"!slots.dropzone\">\n {{ #l10n:t('files.dropzone-label') }}\n </div>\n <ful-item-list></ful-item-list>\n <ful-field-warnings role=\"status\" aria-live=\"polite\"></ful-field-warnings>\n <ful-field-error></ful-field-error>\n `;\n static templates = {\n items: `\n <ful-item data-tpl-each=\"files\" data-tpl-var=\"file\" data-tpl-data-name=\"file.name\">\n <div><span>{{ file.name }}</span><span>{{ #l10n:bytes(file.size) }}</span><button type=\"button\" data-tpl-aria-label=\"#l10n:t('files.remove')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button></div>\n </ful-item>\n `,\n warning: `<ful-field-warning>{{ #l10n:t(key, args) }}</ful-field-warning>`,\n };\n #itemstemplate;\n _build(conf) {\n const pieces = super._build(conf);\n const fragment = pieces.fragment;\n this.#items = fragment.querySelector('ful-item-list');\n //a slotted template replaces the stock item, the way a select's does: the\n //overlay is the same, so a custom item still reads the File it renders\n this.#itemstemplate =\n conf.slots?.items && !Fragments.isBlank(conf.slots.items) ? Templates.fromFragment(conf.slots.items) : null;\n this.#dropzone = fragment.querySelector('[data-ref=dropzone]');\n this.#warnings = fragment.querySelector('ful-field-warnings');\n this.#group = fragment.querySelector('ful-control-group');\n this.#warnings.addEventListener('animationend', (e) => {\n e.target.remove();\n });\n this.#items.addEventListener('click', (e) => {\n if (!e.target.closest('button')) {\n return;\n }\n if (!this._interactive()) {\n return;\n }\n const idx = [...this.#items.children].indexOf(e.target.closest('ful-item'));\n if (idx === -1) {\n return;\n }\n this.files = InputFile.list([...this.files].filter((f, i) => i !== idx));\n //the removal is the user's own gesture: it reports through change as the\n //picker's selection does, while the files setter stays silent like a native one\n this._notifyChange();\n });\n this.#dropzone.addEventListener('click', (e) => {\n if (!this._interactive()) {\n return;\n }\n this.querySelector('input')?.click();\n });\n\n this.#dropzone.addEventListener('dragover', (e) => {\n e.preventDefault();\n this.toggleAttribute('dragover', true);\n });\n this.#dropzone.addEventListener('dragleave', () => {\n this.toggleAttribute('dragover', false);\n });\n this.#dropzone.addEventListener('drop', (e) => {\n e.preventDefault();\n this.toggleAttribute('dragover', false);\n //the drop's default stays suppressed whatever the claims say: a\n //disabled field must not turn into a navigation target\n if (!this._interactive()) {\n return;\n }\n const dropped = [...e.dataTransfer.items].filter((i) => i.kind === 'file');\n const files = dropped.map((i) => i.getAsFile()).filter((f) => f !== null);\n if (files.length === 0 || (files.length > 1 && !this.multiple)) {\n return;\n }\n this.files = InputFile.list(files);\n //a drop is the user's own gesture too: a native file input receiving\n //one fires change on its own\n this._notifyChange();\n });\n this._input.addEventListener('change', (e) => {\n this.#update();\n });\n //a file input has no native freeze: readOnly does nothing to it, so the\n //control group is the frozen piece and the base's refusal of the click is\n //what keeps the picker shut. The dropzone and the item removals are\n //guarded on their own handlers\n return { ...pieces, freeze: this.#group };\n }\n /**\n * Re-reads the selection: the constraints run in order over what is there,\n * each dropping what it refuses, and the warnings and the item list are\n * rendered from what survives. Every path that changes the files ends here.\n */\n #update() {\n this.setCustomValidity();\n this.#warnings.replaceChildren();\n this.#ensureAcceptable();\n this.#ensureFileSizes();\n this.#ensureTotalSize();\n this.#ensureFilesCount();\n (this.#itemstemplate ?? this.template('items')).withOverlay({ files: this.files }).renderTo(this.#items);\n }\n warning(key, args) {\n this.template('warning').withOverlay({ key, args }).appendTo(this.#warnings);\n //the field retires its own warnings: the css fade is decoration, and a\n //theme that drops the keyframe, or a host stylesheet disabling animations,\n //used to leave them on screen until the next selection\n const warning = /** @type HTMLElement */ (this.#warnings.lastElementChild);\n setTimeout(() => warning.remove(), InputFile.WARNING_TIMEOUT);\n }\n /**\n * The native accept vocabulary: a dot-prefixed extension matches the file\n * name's suffix, a mime type (parameters stripped) matches the file's type,\n * and image/*, audio/*, video/* match their whole family. Anything else\n * matches nothing, as the native attribute ignores it.\n */\n #acceptable(file) {\n const name = file.name.toLowerCase();\n return this.#accept.some((token) => {\n const t = token.toLowerCase().split(';')[0].trim();\n if (t.startsWith('.')) {\n return name.endsWith(t);\n }\n if (t.endsWith('/*')) {\n return file.type.startsWith(`${t.slice(0, -1)}`);\n }\n return t.includes('/') && file.type === t;\n });\n }\n #ensureAcceptable() {\n if (!this.#accept.length) {\n return;\n }\n const unacceptable = [...this.files].filter((file) => !this.#acceptable(file));\n\n if (unacceptable.length === 0) {\n return;\n }\n this.warning('files.unacceptable-file-type', { types: this.#accept.join(', ') });\n this._input.files = InputFile.list([...this.files].filter((f) => !unacceptable.includes(f)));\n }\n #ensureFilesCount() {\n if (this.#maxFiles === null) {\n return;\n }\n if (this.files.length <= this.#maxFiles) {\n return;\n }\n this.warning('files.max-files-exceeded', { count: this.#maxFiles });\n this._input.files = InputFile.list();\n }\n\n #ensureFileSizes() {\n if (this.#maxFileSize === null) {\n return;\n }\n const oversized = [...this.files].filter((file) => file.size > this.#maxFileSize);\n if (oversized.length === 0) {\n return;\n }\n this.warning('files.max-file-size-exceeded', { size: Localization.of().bytes(this.#maxFileSize) });\n this._input.files = InputFile.list([...this.files].filter((f) => !oversized.includes(f)));\n }\n #ensureTotalSize() {\n if (this.#maxTotalSize === null) {\n return;\n }\n const totalSize = [...this.files].reduce((acc, file) => acc + file.size, 0);\n if (totalSize <= this.#maxTotalSize) {\n return;\n }\n this.warning('files.max-total-size-exceeded', { size: Localization.of().bytes(this.#maxTotalSize) });\n this._input.files = InputFile.list();\n }\n\n get accept() {\n return this.#accept;\n }\n set accept(vs) {\n this._input.accept = vs.join(',');\n this.#accept = vs;\n this.reflectTo('accept', vs);\n }\n get multiple() {\n return this._input.multiple;\n }\n set multiple(v) {\n this._input.multiple = v;\n this.reflectTo('multiple', v);\n }\n get files() {\n return this._input.files;\n }\n set files(vs) {\n this._input.files = vs;\n this.#update();\n }\n get file() {\n return this.files[0] ?? null;\n }\n set file(v) {\n this.files = InputFile.list(v ? [v] : []);\n }\n get value() {\n const names = Array.from(this._input.files).map((f) => f.name);\n return this.multiple ? names : (names[0] ?? null);\n }\n set value(v) {\n if (v) {\n return;\n }\n this.files = InputFile.list();\n }\n formResetCallback() {\n //a file selection's default is empty, as the platform's own reset: a\n //declared filename cannot be restored programmatically\n this.value = null;\n }\n get totalsize() {\n return Array.from(this.files).reduce((a, f) => a + f.size, 0);\n }\n #maxFiles;\n get maxFiles() {\n return this.#maxFiles;\n }\n set maxFiles(v) {\n this.#maxFiles = v;\n this.reflectTo('max-files', v);\n }\n #maxFileSize;\n get maxFileSize() {\n return this.#maxFileSize;\n }\n set maxFileSize(v) {\n this.#maxFileSize = v;\n this.reflectTo('max-file-size', v);\n }\n #maxTotalSize;\n get maxTotalSize() {\n return this.#maxTotalSize;\n }\n set maxTotalSize(v) {\n this.#maxTotalSize = v;\n this.reflectTo('max-total-size', v);\n }\n #useItemList;\n get itemList() {\n return this.#useItemList;\n }\n set itemList(v) {\n this.#useItemList = v;\n this.reflectTo('item-list', v);\n }\n #useDropzone;\n get dropzone() {\n return this.#useDropzone;\n }\n set dropzone(v) {\n this.#useDropzone = v;\n this.reflectTo('dropzone', v);\n }\n}\n\nexport { InputFile };\n","/**\n * The anchored popovers' fallback: where the platform lacks CSS anchor\n * positioning, the popovers ful wires on an invoker are placed beside it\n * by hand, the geometry the anchor css draws on its own. Where the\n * platform carries the css the wiring is a no-op: the stylesheet does\n * the work alone.\n */\n\nimport { Attributes } from '../../ftl/index.mjs';\n\n/** the viewport's breathing room when clamping, in pixels */\nconst PAD = 8;\nconst open = new Map();\nlet frame = 0;\nlet reflowWired = false;\n\nconst platformAnchors = () =>\n CSS.supports('anchor-name: --ful-probe') &&\n CSS.supports('position-anchor: --ful-probe') &&\n CSS.supports('position-area: bottom') &&\n CSS.supports('top: anchor(bottom)') &&\n CSS.supports('width: anchor-size(width)');\n\nconst clamp = (value, low, high) => Math.min(Math.max(value, low), Math.max(low, high));\n\n/** a note is the popover that draws a callout, and the only one these offsets serve */\nconst isNote = (popover) => popover.matches('ful-note, .ful-note, [placement]');\n\n/**\n * Reports where the invoker's centre falls inside the popover, which is what a\n * callout points at. The two are the same spot until the viewport pushes the\n * popover off its invoker, which the platform's own placement does as readily\n * as the hand placement below, so this is measured in both.\n */\nconst reportCallout = (popover, invoker) => {\n const box = invoker.getBoundingClientRect();\n const here = popover.getBoundingClientRect();\n //against the padding box, which is what a percentage inset resolves against\n popover.style.setProperty('--ful-note-callout-inline', `${box.left + box.width / 2 - here.left - popover.clientLeft}px`);\n popover.style.setProperty('--ful-note-callout-block', `${box.top + box.height / 2 - here.top - popover.clientTop}px`);\n};\n\nconst place = (popover, anchored) => {\n const { invoker, stretch } = anchored;\n const box = invoker.getBoundingClientRect();\n const viewport = document.documentElement;\n const vw = viewport.clientWidth;\n const vh = viewport.clientHeight;\n //the css gap lives in the margins, and the computed style is live: the\n //inline zero a previous placing left behind is dropped first so the numbers\n //read below are the stylesheet's own, not this function's own zero. Reading\n //them afterwards left every popover flush against its invoker\n popover.style.removeProperty('margin');\n const computed = getComputedStyle(popover);\n const gap = {\n top: parseFloat(computed.marginTop) || 0,\n right: parseFloat(computed.marginRight) || 0,\n bottom: parseFloat(computed.marginBottom) || 0,\n left: parseFloat(computed.marginLeft) || 0,\n };\n popover.style.right = 'auto';\n popover.style.bottom = 'auto';\n popover.style.margin = '0';\n if (stretch) {\n const width = Math.min(box.width, vw - 2 * PAD);\n popover.style.width = `${width}px`;\n popover.style.left = `${clamp(box.left, PAD, vw - width - PAD)}px`;\n const height = popover.getBoundingClientRect().height;\n popover.style.top = `${clamp(box.bottom + gap.top, PAD, vh - height - PAD)}px`;\n return;\n }\n //a popover wraps against the spot it lands on: the width is measured\n //wide open, the left clamped so it still fits, the vertical placed\n //against the height that width renders\n const note = isNote(popover);\n const placement = note ? (popover.getAttribute('placement') ?? 'bottom') : 'bottom';\n popover.style.removeProperty('max-width');\n const cap = Math.min(parseFloat(computed.maxWidth) || vw, vw - 2 * PAD);\n popover.style.maxWidth = `${cap}px`;\n popover.style.left = `${PAD}px`;\n const wide = popover.getBoundingClientRect().width;\n let left =\n placement === 'right'\n ? box.right + gap.left\n : placement === 'left'\n ? box.left - gap.right - wide\n : note\n ? box.left + box.width / 2 - wide / 2\n : box.left;\n left = clamp(left, PAD, vw - wide - PAD);\n popover.style.left = `${left}px`;\n popover.style.maxWidth = `${Math.min(cap, vw - PAD - left)}px`;\n const height = popover.getBoundingClientRect().height;\n const top =\n placement === 'top'\n ? box.top - gap.bottom - height\n : placement === 'right' || placement === 'left'\n ? box.top + box.height / 2 - height / 2\n : box.bottom + gap.top;\n popover.style.top = `${clamp(top, PAD, vh - height - PAD)}px`;\n if (note) {\n reportCallout(popover, invoker);\n }\n};\n\nconst unplace = (popover) => {\n for (const property of [\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'margin',\n 'max-width',\n 'width',\n '--ful-note-callout-inline',\n '--ful-note-callout-block',\n ]) {\n popover.style.removeProperty(property);\n }\n};\n\nconst reflow = () => {\n frame = 0;\n for (const [popover, anchored] of open) {\n //the platform hides a popover removed while open without firing the\n //toggle that would have dropped its entry, so the pass that places the\n //open ones is also where a gone one is forgotten: it is the moment\n //anybody cares, and it needs no callback on either element's life\n if (!popover.isConnected || !anchored.invoker.isConnected) {\n open.delete(popover);\n continue;\n }\n place(popover, anchored);\n }\n};\n\nconst schedule = () => {\n if (!frame && open.size > 0) {\n frame = requestAnimationFrame(reflow);\n }\n};\n\n/**\n * Wires an invoker/popover pair ful anchors through css: where the\n * platform lacks anchor positioning the popover is placed beside its\n * invoker whenever it opens, stretched to the invoker's width when\n * asked, and cleaned up when it closes. Where the css works the call\n * is a no-op.\n *\n * `handPlace` takes the placement here on every platform, which a popover\n * asks for when it needs to know where its invoker ended up: the note's\n * callout points at the invoker, and a pseudo-element cannot read an anchor\n * that is not inside its own containing block, so the note is measured rather\n * than placed by the css. Its stylesheet declares no position-area to match.\n */\nconst wireAnchoredPopover = (\n invoker,\n popover,\n { prefix = 'ful-anchor', invoke = false, expanded = false, stretch = false, handPlace = false } = {},\n) => {\n const uid = Attributes.uid(prefix);\n if (invoke) {\n //popovertarget needs a target that can be named\n popover.id = popover.id || uid;\n invoker.setAttribute('popovertarget', popover.id);\n }\n const anchor = `--${uid}`;\n invoker.style.anchorName = anchor;\n popover.style.positionAnchor = anchor;\n if (expanded) {\n invoker.setAttribute('aria-expanded', 'false');\n popover.addEventListener('toggle', (/** @type any */ evt) => {\n invoker.setAttribute('aria-expanded', evt.newState === 'open' ? 'true' : 'false');\n });\n }\n //the naming above is what the stylesheet reads, so it happens either way:\n //only the hand placement below is the fallback, and only for a popover that\n //did not ask to be placed here whatever the platform offers\n if (!handPlace && platformAnchors()) {\n return;\n }\n const anchored = { invoker, stretch };\n popover.addEventListener('beforetoggle', (/** @type any */ evt) => {\n //placed before the showing, refined once laid out: the platform's\n //centered or corner spot never paints\n if (evt.newState === 'open') {\n place(popover, anchored);\n }\n });\n popover.addEventListener('toggle', (/** @type any */ evt) => {\n if (evt.newState === 'open') {\n open.set(popover, anchored);\n place(popover, anchored);\n } else {\n open.delete(popover);\n unplace(popover);\n }\n });\n if (!reflowWired) {\n reflowWired = true;\n document.addEventListener('scroll', schedule, true);\n window.addEventListener('resize', schedule);\n }\n};\n\nexport { wireAnchoredPopover };\n","import { Attributes, Fragments, ParsedElement, Templates } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\nimport { wireAnchoredPopover } from '../disclosures/anchors.mjs';\nimport { Field } from './field.mjs';\nimport { VersionedLocalStorage } from '../storage.mjs';\nimport { Timing } from '../timing.mjs';\n\n/**\n * Fetches a select's whole vocabulary from a url and serves every later read\n * from it. Concurrent callers share one request, the options may be cached in\n * local storage under a revision, and reconfiguring the url discards both.\n */\nclass RemoteLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n #prefetch;\n #revision;\n #data;\n #inFlight;\n #configs = new Claims();\n constructor({ http, url, method, responseMapper, prefetch, revision }) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#responseMapper = responseMapper;\n this.#prefetch = prefetch;\n this.#revision = revision;\n this.#data = null;\n this.#inFlight = null;\n }\n async prefetch() {\n if (!this.#prefetch) {\n return;\n }\n await this.#ensureFetched();\n }\n async exact(...keys) {\n const data = await this.#ensureFetched();\n return data.filter(({ key }) => keys.some((r) => r == key));\n }\n async load(needle) {\n const data = await this.#ensureFetched();\n //includes would coerce a nullish needle to the string \"undefined\": no\n //needle means no filter, as the empty search the combobox opens with\n return data.filter(({ label }) => (label ?? '').toLowerCase().includes(needle?.toLowerCase() ?? ''));\n }\n /**\n * Drops the cached vocabulary so the next question refetches it. Any fetch\n * still in flight is detached: its outcome belongs to the configuration that\n * started it and must neither be served nor stored for the new one.\n */\n async invalidate() {\n this.#configs.invalidate();\n this.#data = null;\n this.#inFlight = null;\n }\n async reconfigureUrl(url) {\n await this.invalidate();\n this.#url = url;\n }\n async #ensureFetched() {\n if (this.#data === null) {\n if (this.#inFlight === null) {\n //held, not taken: concurrent fetch users share one configuration,\n //only a reconfiguration supersedes it\n const claim = this.#configs.hold();\n this.#inFlight = RemoteLoader.#revisionedData(this.#http, this.#method, this.#url, this.#revision)\n .then((raw) => {\n if (!claim.stale) {\n this.#data = this.#responseMapper(raw);\n }\n })\n .finally(() => {\n if (!claim.stale) {\n this.#inFlight = null;\n }\n });\n }\n await this.#inFlight;\n }\n if (this.#data === null) {\n throw new Error('superseded by a reconfiguration');\n }\n return this.#data;\n }\n static async #revisionedData(http, method, url, revision) {\n const storageKey = `${method}@${url}`;\n if (revision !== null) {\n const data = VersionedLocalStorage.load(storageKey, revision);\n if (data !== undefined) {\n return data;\n }\n }\n const data = await http.request(method, url).fetchJson();\n if (revision !== null) {\n try {\n VersionedLocalStorage.save(storageKey, revision, data);\n } catch (/** @type any */ e) {\n //the cache write is best effort: the fetched data is the answer,\n //a full quota must not fail the load that already succeeded\n console.warn('failed to cache the select options', e);\n }\n }\n return data;\n }\n}\n\n/** Asks the endpoint per query instead of fetching the vocabulary once, for a list too large to hold in memory. */\nclass PartialRemoteLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n constructor({ http, url, method, responseMapper }) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#responseMapper = responseMapper;\n }\n /**\n * Nothing is held between queries, so there is no cache to drop: the method\n * exists so a caller can invalidate any loader without knowing which it has.\n */\n async invalidate() {}\n async reconfigureUrl(url) {\n this.#url = url;\n }\n async exact(...keys) {\n const response = await this.#http\n .request(this.#method, this.#url)\n .param('k', ...keys)\n .fetchJson();\n return this.#responseMapper(response);\n }\n async load(needle) {\n const response = await this.#http.request(this.#method, this.#url).param('s', needle).fetchJson();\n return this.#responseMapper(response);\n }\n}\n\n/** Serves a select's options from an array held in memory, which is what the slotted `<option>` elements become. */\nclass InMemoryLoader {\n #data;\n constructor(data) {\n this.#data = data;\n }\n update(data) {\n this.#data = data;\n }\n /** The vocabulary is the data itself: update replaces it, so there is nothing to drop. */\n async invalidate() {}\n exact(...keys) {\n return this.#data.filter(({ key }) => keys.some((r) => r == key));\n }\n load(needle) {\n //no needle means no filter, as in RemoteLoader\n return this.#data.filter(({ label }) => (label ?? '').toLowerCase().includes(needle?.toLowerCase() ?? ''));\n }\n}\n\n/**\n * Builds the select's loader from its attributes: the slotted options in\n * memory, or a remote or chunked loader over src.\n *\n * A component registered under the `loader` attribute replaces this one and\n * must implement the same three methods, each answering `{ key, label,\n * metadata }` entries:\n *\n * - `prefetch()` warms the vocabulary if it can, and resolves either way\n * - `load(needle)` answers the entries matching the typed text, all of them\n * when the needle is nullish, which is the empty search the list opens with\n * - `exact(...keys)` answers the entries for those keys, used to label a value\n * assigned without going through the list\n */\nclass SelectLoader {\n /**\n * Builds a loader from a plain configuration, reading no dom: `data` alone\n * is the in-memory vocabulary, a `url` is fetched whole or, under\n * `mode: 'chunked'`, per query. A test, or a caller holding its own\n * configuration, builds a loader this way; `create` is the same thing with\n * an element's attributes parsed first.\n * @param {{ data?: any[], http?: any, url?: string, method?: string, mode?: string, prefetch?: boolean, revision?: string|null, responseMapper?: any }} conf\n */\n static from({ data, http, url, method = 'POST', mode, prefetch = false, revision = null, responseMapper }) {\n if (!url) {\n return new InMemoryLoader(data ?? []);\n }\n if ('chunked' === mode) {\n return new PartialRemoteLoader({ http, url, method, responseMapper });\n }\n return new RemoteLoader({ http, url, method, responseMapper, prefetch, revision });\n }\n static create(el, conf) {\n if (!el.declared('src')) {\n const els = Array.from(conf.options?.querySelectorAll('option') ?? []);\n return SelectLoader.from({\n data: els.map((e) => ({\n key: e.getAttribute('value') ?? e.innerText.trim(),\n label: e.innerText.trim(),\n metadata: undefined,\n })),\n });\n }\n return SelectLoader.from({\n http: el.component('http-client'),\n url: el.declared('src'),\n method: el.declared('method') ?? 'POST',\n mode: el.declared('mode'),\n prefetch: el.declared('preload'),\n revision: el.declared('revision'),\n responseMapper: SelectLoader.#responseMapperFrom(el),\n });\n }\n static #responseMapperFrom(el) {\n if (el.declared('k-expr') && el.declared('l-expr')) {\n return (response) => {\n const rows = el._registry\n .evaluator()\n .withOverlay(response)\n .evaluateExpression(el.declared('d-expr') ?? 'self');\n return rows.map((row) => {\n const evaluator = el._registry.evaluator().withOverlay(row);\n return {\n key: evaluator.evaluateExpression(el.declared('k-expr')),\n label: evaluator.evaluateExpression(el.declared('l-expr')),\n metadata: evaluator.evaluateExpression(el.declared('m-expr') ?? 'self'),\n };\n });\n };\n }\n if (el.declared('response-mapper')) {\n return el.component(el.declared('response-mapper'));\n }\n //the wire format servers send is the positional row: the default mapper\n //is what turns it into the entry the element speaks everywhere else\n return (/** @type any[] */ response) => response.map(([key, label, metadata]) => ({ key, label, metadata }));\n }\n}\n\n/** The options popup of a select: listbox semantics, one loading claim per show, a localized empty state. */\nclass Dropdown extends ParsedElement {\n static attributes = ['listbox'];\n static slots = true;\n static template = `\n <ful-spinner class=\"centered\" role=\"status\" hidden><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></ful-spinner>\n <p data-ref=\"empty\" aria-live=\"polite\" hidden>{{ #l10n:t('dropdown.empty') }}</p>\n <menu tabindex=\"-1\" role=\"listbox\" hidden></menu>\n `;\n static templates = {\n options: `\n <li data-tpl-each=\"self\" data-tpl-selected=\"index == 0\" data-tpl-value=\"index\" role=\"option\">\n {{ label }}\n </li>\n `,\n };\n #spinner;\n #menu;\n #empty;\n #optionstemplate;\n #options = new Map();\n #shows = new Claims();\n render({ slots }) {\n const fragment = this.template().render();\n this.#optionstemplate = Fragments.isBlank(slots.default)\n ? this.template('options')\n : Templates.fromFragment(slots.default);\n this.#spinner = fragment.querySelector('ful-spinner');\n this.#empty = fragment.querySelector('p[data-ref=empty]');\n this.#menu = fragment.querySelector('menu');\n //the listbox is named so a combobox can point aria-controls and\n //aria-activedescendant at it: a reference to an unnamed element resolves\n //to nothing, and the active option is announced to no one. The name comes\n //from the host when it gave one, since it has to set aria-controls before\n //this element upgrades\n this.#menu.id = this.declared('listbox') || Attributes.uid('ful-listbox');\n this.#menu.addEventListener('click', (evt) => {\n evt.stopPropagation();\n const li = evt.target.closest('li');\n if (!li) {\n this.hide();\n return;\n }\n this.#change(li);\n });\n this.replaceChildren(fragment);\n }\n #selected() {\n return this.#menu?.querySelector('[selected]') ?? this.#menu?.firstElementChild ?? null;\n }\n #highlight(li) {\n if (!li) {\n this.#activated(null);\n return;\n }\n for (const el of this.#menu.querySelectorAll('li')) {\n el.toggleAttribute('selected', el === li);\n }\n li.id ||= Attributes.uid('ful-option');\n this.#activated(li.id);\n li.scrollIntoView({\n block: 'nearest',\n behavior: matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth',\n });\n }\n acceptSelection() {\n const selected = this.#selected();\n if (!selected) {\n return;\n }\n this.#change(selected);\n }\n update(values, keys = []) {\n if (values === undefined) {\n throw new Error('null data');\n }\n this.#options = new Map(values.map((v, i) => [String(i), v]));\n const data = values.map((entry, index) => ({ index, ...entry }));\n this.#optionstemplate.withOverlay(data).renderTo(this.#menu);\n for (const [index, li] of [...this.#menu.children].entries()) {\n const picked = keys.some((r) => r == values[index]?.key);\n li.toggleAttribute('picked', picked);\n //what is picked is what aria-selected means for a listbox: a tint alone\n //says it to whoever can see it and to no one else\n li.setAttribute('aria-selected', picked ? 'true' : 'false');\n }\n this.#empty.toggleAttribute('hidden', values.length !== 0);\n this.#menu.toggleAttribute('hidden', values.length === 0);\n const current = values.findIndex(({ key }) => keys.some((r) => r == key));\n this.#highlight(current >= 0 ? this.#menu.children[current] : this.#selected());\n }\n #change(target) {\n const index = target.getAttribute('value');\n const entry = this.#options.get(index);\n this.hide();\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { index, entry },\n }),\n );\n }\n hide() {\n //hiding ends the current claim: a search still in flight must neither\n //repopulate the list nor point the combobox at an option of a hidden dropdown\n this.#shows.invalidate();\n if (this.matches(':popover-open')) {\n this.hidePopover();\n }\n this.#activated(null);\n }\n /**\n * The option the reader is on, announced for whoever owns the combobox: the\n * dropdown is a view, so it names its active option and never reaches into\n * another element's aria to say so.\n */\n #activated(id) {\n this.dispatchEvent(new CustomEvent('activechange', { bubbles: false, cancelable: false, detail: { id } }));\n }\n\n get shown() {\n return this.matches(':popover-open');\n }\n async show(loader, keys = []) {\n //each show claims the dropdown: a search resolving after a newer show has\n //started, or after the dropdown was hidden again, is stale, and neither\n //renders nor highlights, whichever order the searches resolve in\n const claim = this.#shows.take();\n if (!this.matches(':popover-open')) {\n this.showPopover();\n }\n this.#menu.setAttribute('hidden', '');\n this.#spinner.removeAttribute('hidden');\n try {\n const data = await loader();\n if (claim.stale) {\n return;\n }\n this.update(data, keys);\n } catch (/** @type any */ e) {\n if (claim.stale) {\n //the newer show (or the hide that ended this one) owns the dropdown\n //and its outcome: a superseded failure is neither shown nor thrown\n return;\n }\n this.hide();\n throw e;\n } finally {\n if (!claim.stale) {\n this.#spinner.setAttribute('hidden', '');\n }\n }\n }\n async moveOrShow(forward, loader, keys = []) {\n if (this.shown) {\n const selected = this.#selected();\n const candidate = selected?.[`${forward ? 'next' : 'previous'}ElementSibling`];\n if (selected && candidate) {\n this.#highlight(candidate);\n }\n return;\n }\n await this.show(loader, keys);\n }\n jump(first) {\n const target = first ? this.#menu.firstElementChild : this.#menu.lastElementChild;\n if (target) {\n this.#highlight(target);\n }\n }\n page(forward) {\n const selected = this.#selected();\n if (!selected) {\n return;\n }\n const lis = Array.from(this.#menu.children);\n const step = this.#page();\n const target = lis[Math.max(0, Math.min(lis.length - 1, lis.indexOf(selected) + (forward ? step : -step)))];\n this.#highlight(target);\n }\n #page() {\n const first = this.#menu.firstElementChild;\n if (!first || first.offsetHeight === 0) {\n return 1;\n }\n return Math.max(1, Math.trunc(this.#menu.clientHeight / first.offsetHeight));\n }\n}\n\n/** A combobox acting like a select over a loader's vocabulary, single or multiple. */\nclass Select extends Field {\n //the loader's whole vocabulary is configuration, read once at the upgrade:\n //none of it is reactive, and declaring it here is what lets the loader be\n //built from a plain object rather than from an element\n static attributes = [\n 'name',\n 'loader',\n 'k-type',\n 'src',\n 'method',\n 'mode',\n 'preload:presence',\n 'revision',\n 'k-expr',\n 'l-expr',\n 'd-expr',\n 'm-expr',\n 'response-mapper',\n ];\n //the value attribute is a list of keys whether or not the select is multiple:\n //`set value` normalizes a list of one to a single key, and the getter answers a\n //scalar for a single select, so nothing downstream has to know which it was\n static observed = ['multiple:presence', 'item-list:presence', 'value:csv'];\n static slots = true;\n //a manual popover: the combobox keeps the focus on its input and owns\n //the whole lifecycle (typing, arrows, blur, Escape, Tab), so no light\n //dismiss and no popovertarget invoker; it anchors on its control group\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-control>\n <input type=\"text\" form=\"\" autocomplete=\"off\" role=\"combobox\" aria-autocomplete=\"list\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\n </ful-control>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n <ful-dropdown popover=\"manual\">{{{{ slots.dropdown }}}}</ful-dropdown>\n </ful-control-group>\n <ful-item-list></ful-item-list>\n <ful-field-error></ful-field-error>\n `;\n static templates = {\n items: `\n <ful-item data-tpl-each=\"entries\" data-tpl-var=\"entry\" data-tpl-data-key=\"entry.key\">\n <div><span>{{ entry.label }}</span><button type=\"button\" data-tpl-aria-label=\"#l10n:t('select.remove')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button></div>\n </ful-item>\n `,\n };\n #loader;\n #control;\n #ddmenu;\n #input;\n #items;\n #itemstemplate;\n #multiple;\n #warnedComma = false;\n #values = new Map();\n #assignments = new Claims();\n #editing = false;\n #dload;\n #abortdload;\n _build({ slots }) {\n const name = this.declared('name');\n this.#loader = this.component(this.declared('loader') ?? 'loaders:select').create(this, {\n options: slots.options,\n });\n\n this.#multiple = this.declared('multiple');\n //the prefetch is the vocabulary's concern, not the field's: the label, the\n //combobox and the error region paint at once and the properties go live with\n //them, where a slow endpoint used to hold up the whole upgrade. The loader\n //shares one in-flight fetch, so a first open during the prefetch joins it\n this.#loader.prefetch?.()?.catch((/** @type any */ e) => {\n console.warn('failed to prefetch select options', this, 'reason:', e);\n });\n const fragment = this.template().withOverlay({ slots, name }).render();\n this.#input = fragment.querySelector('input');\n this.#items = fragment.querySelector('ful-item-list');\n this.#itemstemplate =\n slots.items && !Fragments.isBlank(slots.items) ? Templates.fromFragment(slots.items) : null;\n Attributes.forward('input-', this, this.#input);\n this.#control = fragment.querySelector('ful-control');\n\n this.#ddmenu = fragment.querySelector('ful-dropdown');\n //named before it upgrades, so the combobox can control it from the start\n const listbox = Attributes.uid('ful-listbox');\n this.#ddmenu.setAttribute('listbox', listbox);\n this.#input.setAttribute('aria-controls', listbox);\n //one writer for the combobox's state: the dropdown says when it opens and\n //which option is active, the input's aria is the select's to keep\n this.#ddmenu.addEventListener('beforetoggle', (/** @type any */ e) => {\n const open = e.newState === 'open';\n this.#input.setAttribute('aria-expanded', open ? 'true' : 'false');\n if (!open) {\n this.#input.removeAttribute('aria-activedescendant');\n }\n });\n this.#ddmenu.addEventListener('activechange', (/** @type any */ e) => {\n Attributes.set(this.#input, 'aria-activedescendant', e.detail.id);\n });\n //each pair carries its own anchor: two selects on a page must not share one\n const group = fragment.querySelector('ful-control-group');\n wireAnchoredPopover(group, this.#ddmenu, { prefix: 'ful-select', stretch: true });\n [this.#dload, this.#abortdload] = Timing.throttle(400, () => this.#open());\n this.#wireChrome();\n this.#wireChips();\n this.#wireInput();\n this.#wireSelection();\n return {\n fragment,\n control: this.#input,\n error: fragment.querySelector('ful-field-error'),\n label: fragment.querySelector('label'),\n };\n }\n /**\n * Pointer interaction: the element toggles the dropdown, the item list's\n * remove buttons and the control's badges drop their entry.\n */\n #wireChrome() {\n this.addEventListener('click', (/** @type any */ e) => {\n if (!this._interactive()) {\n return;\n }\n if (this.#ddmenu.shown) {\n this.#close();\n return;\n }\n this.#input.focus();\n this.#dload();\n });\n this.#items.addEventListener('click', (e) => {\n e.stopPropagation();\n if (!e.target.closest('button')) {\n return;\n }\n if (!this._interactive()) {\n return;\n }\n this.#removeKeyAt([...this.#items.children].indexOf(e.target.closest('ful-item')));\n });\n this.#control.addEventListener('click', (e) => {\n const badge = e.target instanceof Element ? e.target.closest('ful-badge') : null;\n if (!badge) {\n return;\n }\n e.stopPropagation();\n this.#removeBadge(badge);\n });\n }\n /**\n * Keyboard interaction over the chips: Enter/Space/Backspace/Delete remove,\n * arrows move between badges and the input, Escape returns to the input.\n */\n #wireChips() {\n this.addEventListener('keydown', (/** @type any */ e) => {\n const badge = e.target instanceof Element ? e.target.closest('ful-badge') : null;\n if (badge) {\n this.#chipKeydown(e, badge);\n return;\n }\n //the caret cannot move further left: hand the focus over to the chips,\n //as the backspace at the same spot already hands over the last entry\n if (\n 'ArrowLeft' === e.code &&\n e.target === this.#input &&\n this.#input.selectionStart === 0 &&\n this.#input.selectionEnd === 0\n ) {\n this.#badges().at(-1)?.focus();\n }\n });\n }\n #wireInput() {\n this.#input.addEventListener('change', (e) => {\n e.stopPropagation();\n });\n this.#input.addEventListener('focus', () => {\n if (this.#editing) {\n return;\n }\n this.#input.select();\n });\n this.#input.addEventListener('blur', (e) => {\n e.stopPropagation();\n if (e.relatedTarget && this.contains(e.relatedTarget)) {\n return;\n }\n this.#abortdload();\n this.#close();\n });\n this.#input.addEventListener('keydown', (e) => {\n if (!this._interactive()) {\n return;\n }\n this.#comboboxKeydown(e);\n });\n this.#input.addEventListener('input', (e) => {\n e.stopPropagation();\n if (!this._interactive()) {\n return;\n }\n this.#editing = true;\n this.#dload();\n });\n }\n #wireSelection() {\n this.#ddmenu.addEventListener('change', (e) => {\n e.stopPropagation();\n //a claim landing while the dropdown is open must not accept a pick:\n //disabled closes the list on its own (the focused input blurs), readonly\n //leaves it open, so the guard lives here\n if (!this._interactive()) {\n this.#close();\n return;\n }\n if (!this.#multiple) {\n this.#values.clear();\n }\n this.#editing = false;\n this.#values.set(this.#coerceKey(e.detail.entry.key), e.detail.entry);\n this.#changed();\n this.#syncBadges();\n this.#input.focus();\n this.#ddmenu.hide();\n if (!this.#multiple) {\n this.#input.select();\n }\n });\n }\n /** Hands the loader to the callback, for runtime reconfigurations. */\n async withLoader(fn) {\n return await fn(this.#loader);\n }\n /**\n * Drops whatever the loader is holding and asks it about the current selection\n * again, which is what a select whose vocabulary depends on another control\n * needs when that control changes. A key the loader no longer knows is dropped\n * from the selection, so a value invalidated by the change does not survive it,\n * and one it still knows keeps its place with a fresh label.\n *\n * Pass a url first where the vocabulary lives at a different address:\n *\n * citta.addEventListener('change', async () => {\n * await cap.withLoader((l) => l.reconfigureUrl(`/api/cap?citta=${citta.value}`));\n * await cap.reload();\n * });\n */\n async reload() {\n await this.#loader.invalidate?.();\n //the prefetch is a warm-up: a select configured to preload warms the new\n //vocabulary now rather than on the next open, as it did at the upgrade\n await this.#loader.prefetch?.();\n const keys = [...this.#values.keys()];\n if (keys.length === 0) {\n return;\n }\n await this.#resolve(keys, this.#assignments.take());\n }\n #badges() {\n return Array.from(this.#control.querySelectorAll(':scope > ful-badge'));\n }\n #removeBadge(badge) {\n if (!this._interactive()) {\n return;\n }\n this.#removeKeyAt(this.#badges().indexOf(badge));\n }\n /**\n * Drops the entry at the given index, if any: badges and item list entries\n * share the value map's ordering.\n */\n #removeKeyAt(index) {\n const key = Array.from(this.#values.keys())[index];\n if (key === undefined) {\n return;\n }\n this.#values.delete(key);\n this.#changed();\n this.#syncBadges();\n }\n #chipKeydown(e, badge) {\n switch (e.code) {\n case 'NumpadEnter':\n case 'Enter':\n case 'Space':\n case 'Backspace':\n case 'Delete': {\n e.preventDefault();\n this.#removeBadge(badge);\n this.#input.focus();\n break;\n }\n case 'ArrowLeft': {\n e.preventDefault();\n (this.#badges()[this.#badges().indexOf(badge) - 1] ?? this.#input).focus();\n break;\n }\n case 'ArrowRight': {\n e.preventDefault();\n (this.#badges()[this.#badges().indexOf(badge) + 1] ?? this.#input).focus();\n break;\n }\n case 'Escape': {\n this.#input.focus();\n break;\n }\n }\n }\n /**\n * The combobox keyboard contract: arrows browse and move, Home/End and\n * PageUp/PageDown navigate the open list, Enter accepts or submits,\n * Escape/Tab close, Backspace at the caret's leftmost spot drops the last\n * entry.\n */\n #comboboxKeydown(e) {\n switch (e.code) {\n case 'ArrowUp':\n case 'ArrowDown': {\n e.preventDefault();\n this.#arrowKeydown(e);\n break;\n }\n case 'Home': {\n if (this.#ddmenu.shown) {\n e.preventDefault();\n this.#ddmenu.jump(true);\n }\n break;\n }\n case 'End': {\n if (this.#ddmenu.shown) {\n e.preventDefault();\n this.#ddmenu.jump(false);\n }\n break;\n }\n case 'PageDown':\n case 'PageUp': {\n if (this.#ddmenu.shown) {\n e.preventDefault();\n this.#ddmenu.page('PageDown' === e.code);\n }\n break;\n }\n case 'Escape': {\n this.#abortdload();\n this.#close();\n break;\n }\n //both physical Enter keys: the switch reads e.code, which tells the\n //numpad's apart, and the base submits from either one\n case 'NumpadEnter':\n case 'Enter': {\n if (!this.#ddmenu.shown) {\n //nothing to accept: the key is left alone and the base submits\n //the form, as it does for every field whose control is detached\n return;\n }\n e.preventDefault();\n this.#editing = false;\n this.#display();\n this.#ddmenu.acceptSelection();\n break;\n }\n case 'Backspace': {\n //only where there is no text to delete first, and nothing selected:\n //backspace belongs to the search until the caret runs out of it\n if (this.#input.selectionStart === 0 && this.#input.selectionEnd === 0) {\n this.#removeKeyAt(this.#values.size - 1);\n }\n break;\n }\n case 'Tab': {\n this.#abortdload();\n this.#close();\n break;\n }\n }\n }\n #arrowKeydown(e) {\n const forward = 'ArrowDown' === e.code;\n //alt-down opens, alt-up closes\n if (e.altKey) {\n if (forward && !this.#ddmenu.shown) {\n this.#open();\n } else if (!forward && this.#ddmenu.shown) {\n this.#close();\n }\n return;\n }\n this.#browse();\n this.#ddmenu.moveOrShow(forward, () => this.#loader.load(this.#input.value), [...this.#values.keys()]);\n }\n #close() {\n this.#ddmenu.hide();\n this.#editing = false;\n this.#display();\n }\n /**\n * Opens the dropdown over the entries matching the input: typing filters,\n * browsing starts from the whole vocabulary, the selected keys are always\n * highlighted.\n */\n #open() {\n this.#browse();\n return this.#ddmenu.show(() => this.#loader.load(this.#input.value), [...this.#values.keys()]);\n }\n #browse() {\n if (this.#editing) {\n return;\n }\n this.#input.value = '';\n }\n #display() {\n const entry = this.#values.values().next().value;\n this.#input.value = this.#multiple ? '' : (entry?.label ?? '');\n }\n /** The selection in its one vocabulary: the change detail and the items overlay both speak it. */\n #selection() {\n return [...this.#values.values()];\n }\n #changed() {\n //the detail carries the keys the value property answers with, as every\n //other field's does, and the labeled selection beside them\n this._notifyChange({ entry: this.entry });\n }\n #syncBadges() {\n const badges = this.#multiple\n ? Array.from(this.#values.entries()).map(([k, entry], index) => {\n const b = document.createElement('ful-badge');\n b.setAttribute('role', 'button');\n //a roving tab stop: without one the chips are reachable only from\n //the input's caret, so Tab never finds them\n b.setAttribute('tabindex', index === 0 ? '0' : '-1');\n b.setAttribute('value', k);\n b.innerText = entry.label;\n return b;\n })\n : [];\n for (const b of this.#control.querySelectorAll(':scope > ful-badge')) {\n b.remove();\n }\n this.#input.before(...badges);\n if (!this.#editing) {\n this.#display();\n }\n this.#items.replaceChildren();\n (this.#itemstemplate ?? this.template('items'))\n .withOverlay({ entries: this.#selection() })\n .renderTo(this.#items);\n }\n /**\n * Coerces a key to the type declared by `k-type`. Keys reach the element from\n * both worlds: the `value` attribute is text, a loader returns whatever its\n * endpoint carries. One canonical type keeps the internal Map, which compares\n * keys strictly, consistent. A key that does not decode is left as it is.\n */\n #coerceKey(k) {\n switch (this.declared('k-type')) {\n case 'number': {\n const n = k === '' ? Number.NaN : Number(k);\n return Number.isNaN(n) ? k : n;\n }\n case 'boolean': {\n if (k === true || k === 'true') {\n return true;\n }\n if (k === false || k === 'false') {\n return false;\n }\n return k;\n }\n default:\n return String(k);\n }\n }\n\n set value(vs) {\n //the csv mapper yields [] for an absent attribute; an empty string assigned\n //through the property is left alone, being a usable key for an <option value=\"\">\n const keys = (vs == null ? [] : Array.isArray(vs) ? vs : [vs]).map((k) => this.#coerceKey(k));\n //a key is what the value attribute carries, and that attribute is a comma\n //separated list: a key holding a comma cannot be written back into markup, so\n //a server rendered page could never preselect it. Said once and kept, rather\n //than split here, where splitting would quietly truncate a single select\n if (!this.#warnedComma && keys.some((k) => typeof k === 'string' && k.includes(','))) {\n //once per element, not once per page: a loop assigning bad keys to one\n //select is one mistake, where fifty selects holding one each are fifty\n this.#warnedComma = true;\n console.warn('a ful-select key cannot contain a comma: it is unexpressible in the value attribute', this);\n }\n //the keys are known synchronously and are all `value` reads, so they are applied\n //now: only the labels need the loader, until then a key stands in for its own\n this.#values = new Map(keys.map((k) => [k, { key: k, label: k, metadata: undefined }]));\n const claim = this.#assignments.take();\n if (!this.#control) {\n return;\n }\n this.#syncBadges();\n if (keys.length === 0) {\n return;\n }\n this.#resolve(keys, claim);\n }\n /**\n * Resolves the labels of the assigned keys. A failed lookup is left to reject so\n * that it is reported like any other failure: the keys stay applied either way.\n */\n async #resolve(keys, claim) {\n const entries = await this.#loader.exact(...keys);\n if (claim.stale) {\n //a newer assignment has been made in the meantime\n return;\n }\n //label the keys that are still selected: a removal made while the lookup was in\n //flight must not be undone by it, and a key the loader does not know is dropped\n //the loader keys are coerced too, so they line up with the assigned ones\n const resolved = new Map(entries.map((e) => [this.#coerceKey(e.key), e]));\n for (const key of keys) {\n if (!this.#values.has(key)) {\n continue;\n }\n if (resolved.has(key)) {\n this.#values.set(key, resolved.get(key));\n } else {\n this.#values.delete(key);\n }\n }\n this.#syncBadges();\n }\n get value() {\n if (this.#multiple) {\n return [...this.#values.keys()];\n }\n return [...this.#values.keys()][0] ?? null;\n }\n /** The selection as {key, label, metadata} entries, the change detail's vocabulary: the only one for a single select, every one when multiple. */\n get entry() {\n const selection = this.#selection();\n if (this.#multiple) {\n return selection;\n }\n return selection[0] ?? null;\n }\n #useItemList;\n get multiple() {\n return this.#multiple;\n }\n set multiple(v) {\n this.#multiple = v;\n this.reflectTo('multiple', v);\n }\n get itemList() {\n return this.#useItemList;\n }\n set itemList(v) {\n this.#useItemList = v;\n this.reflectTo('item-list', v);\n }\n}\n\nexport { Dropdown, Select, SelectLoader };\n","import { Attributes, Fragments } from '../../ftl/index.mjs';\nimport { Field } from './field.mjs';\n\n/** A group of radios declared as ful-radio children, a fieldset carrying the group semantics. */\nclass RadioGroup extends Field {\n static attributes = ['name', 'type'];\n static slots = true;\n static ROLE = 'radiogroup';\n static template = `\n <fieldset>\n <legend>\n {{{{ slots.default }}}}\n </legend>\n <header data-tpl-if=\"slots.header\">\n {{{{ slots.header }}}}\n </header>\n <ful-radio-list>\n <div class=\"label-wrapper\" data-tpl-each=\"inputsAndLabels\" data-tpl-var=\"ial\">\n <label>\n {{{{ ial[0] }}}}\n <div>{{{{ ial[1] }}}}</div>\n </label>\n </div>\n </ful-radio-list>\n <ful-field-error></ful-field-error>\n <footer data-tpl-if=\"slots.footer\">\n {{{{ slots.footer }}}}\n </footer>\n </fieldset>\n `;\n #fieldset;\n #firstRadio;\n #booleanType;\n /**\n * @param {{slots: any}} conf\n * @returns {any}\n */\n _build({ slots }) {\n const name = this.declared('name') ?? Attributes.uid('ful-radiogroup');\n const radioEls = Array.from(slots.default.querySelectorAll('ful-radio'));\n const inputsAndLabels = radioEls.map((el) => {\n const input = document.createElement('input');\n input.setAttribute('type', 'radio');\n Attributes.forward('input-', this, input);\n Attributes.forward('', el, input);\n input.setAttribute('name', `${name}-ignore`);\n input.setAttribute('form', ``);\n input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this._notifyChange();\n });\n const label = Fragments.fromChildNodes(el);\n return [input, label];\n });\n\n radioEls.forEach((el) => {\n el.remove();\n });\n const fragment = this.template().withOverlay({ name, slots, inputsAndLabels }).render();\n this.#fieldset = /** @type HTMLElement */ (fragment.firstElementChild);\n this.#firstRadio = fragment.querySelector('input[type=radio]');\n this.#booleanType = this.declared('type') === 'boolean';\n //the group claims through its own fieldset, which carries disabled like a\n //native control, is the piece readonly freezes (radios have no editable\n //text to preserve) and announces the requirement; focus stays on the first radio,\n //and the host itself is described, there being no single control to name\n //and the legend being a fieldset's own label\n return {\n fragment,\n control: this.#firstRadio,\n error: fragment.querySelector('ful-field-error'),\n described: this,\n claims: this.#fieldset,\n //the radiogroup role is the host's, so the claims announce there: a\n //fieldset is a group, which accepts neither aria-readonly nor\n //aria-required\n announces: this,\n freeze: this.#fieldset,\n };\n }\n get value() {\n /** @type {HTMLInputElement|null} */\n const checked = this.querySelector('input[type=radio]:checked');\n return checked ? (this.#booleanType ? checked.value === 'true' : checked.value) : null;\n }\n set value(value) {\n const radios = this.querySelectorAll(`input[type=radio]`);\n const clear = () => {\n radios.forEach((el) => {\n /** @type {HTMLInputElement} */ (el).checked = false;\n });\n };\n if (value === null) {\n clear();\n return;\n }\n /** @type {HTMLInputElement|null} */\n const el = this.querySelector(`input[type=radio][value=${CSS.escape(String(value))}]`);\n //an unknown key clears, like a null assignment and like the select's\n //unknown keys: a stale radio must not keep answering for it\n if (el === null) {\n clear();\n return;\n }\n el.checked = true;\n }\n}\n\nexport { RadioGroup };\n","import { Attributes } from '../../ftl/index.mjs';\nimport { Field } from './field.mjs';\n\n/** A checkbox, or a switch under the type=switch claim. */\nclass Checkbox extends Field {\n static attributes = ['type'];\n static observed = ['value:bool'];\n static slots = true;\n static template = `\n <ful-choice data-tpl-switch=\"isSwitch\">\n <input type=\"checkbox\" data-tpl-role=\"isSwitch ? 'switch' : false\" form=\"\" placeholder=\" \">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </ful-choice>\n <ful-field-error></ful-field-error>\n `;\n #container;\n #input;\n _build({ slots }) {\n const isSwitch = this.declared('type') === 'switch';\n const fragment = this.template().withOverlay({ slots, isSwitch }).render();\n this.#container = fragment.firstElementChild;\n this.#input = fragment.querySelector('input');\n Attributes.forward('input-', this, this.#input);\n this.#input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this._notifyChange();\n });\n const label = fragment.querySelector('label');\n //the label neither wraps the input nor targets it, so the toggle is the\n //field's; the base adds the focus\n label.addEventListener('click', () => {\n if (!this._interactive()) {\n return;\n }\n this.value = !this.value;\n this._notifyChange();\n });\n //a checkbox has no editable text to preserve, so readonly freezes the\n //whole choice, label click included: the container is the frozen piece\n return {\n fragment,\n control: this.#input,\n error: fragment.querySelector('ful-field-error'),\n label,\n freeze: this.#container,\n };\n }\n get value() {\n return this.#input.checked;\n }\n set value(value) {\n this.#input.checked = value;\n }\n}\n\nexport { Checkbox };\n","import { Attributes, Fragments, Nodes, ParsedElement, Rendering } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\nimport { Failure } from '../../httpc/index.mjs';\n\n/** The sort control of a table header: focusable, keyboard-activated, walking asc, desc, unsorted. */\nclass SortButton extends ParsedElement {\n static attributes = ['sorter'];\n static observed = ['order'];\n #order;\n render() {\n const sorter = this.declared('sorter');\n const orders = ['asc', 'desc', null];\n this.setAttribute('role', 'button');\n this.setAttribute('tabindex', '0');\n this.addEventListener('click', () => {\n const nextOrder = orders[(orders.indexOf(this.order) + 1) % 3];\n this.dispatchEvent(\n new CustomEvent('sort:requested', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: { sorter, order: nextOrder },\n },\n }),\n );\n });\n this.addEventListener('keydown', (/** @type any */ evt) => {\n if (evt.code !== 'Enter' && evt.code !== 'Space') {\n return;\n }\n evt.preventDefault();\n this.click();\n });\n }\n\n get order() {\n return this.#order || null;\n }\n\n set order(value) {\n this.#order = value || null;\n this.reflectTo('order', this.#order);\n //the column announces the sort, not this button: an attribute on another\n //element is not a reflection and has no business inside the guard\n const th = this.closest('th');\n if (!th) {\n return;\n }\n Attributes.set(th, 'aria-sort', this.#order ? ('asc' === this.#order ? 'ascending' : 'descending') : null);\n }\n}\n\n/** The pager: a window of page links around the current one, and the reload control. */\nclass Pagination extends ParsedElement {\n static observed = ['total:number', 'current:number'];\n static attributes = ['pages:number'];\n static config = {\n prevIcon: 'chevron-left',\n nextIcon: 'chevron-right',\n reloadIcon: 'arrow-clockwise',\n };\n static template = `\n <ful-pagination-bar role=\"navigation\" data-tpl-aria-label=\"#l10n:t('pagination.navigation')\">\n <ul>\n <li data-ref=\"index\"> {{ #l10n:t('pagination.showing', { 'current': curr.label, 'total': total }) }}</li>\n <li data-ref=\"reload\"><button type=\"button\" data-tpl-aria-label=\"#l10n:t('pagination.reload')\"><ful-icon data-tpl-name=\"config.reloadIcon\" aria-hidden=\"true\"></ful-icon></button></li>\n <li data-ref=\"prev\">\n <button type=\"button\" data-tpl-disabled=\"prev.enabled ? false : true\" data-tpl-aria-label=\"#l10n:t('pagination.previous')\" data-tpl-data-page=\"prev.index\">\n <ful-icon data-tpl-name=\"config.prevIcon\" aria-hidden=\"true\"></ful-icon>\n </button>\n </li>\n <li data-ref=\"page\" data-tpl-each=\"pages\" data-tpl-var=\"page\">\n <button type=\"button\" data-tpl-aria-current=\"curr.index == page.index ? 'page' : false\" data-tpl-data-page=\"page.index\" >\n {{ page.label }}\n </button>\n </li>\n <li data-ref=\"next\">\n <button type=\"button\" data-tpl-disabled=\"next.enabled ? false : true\" data-tpl-aria-label=\"#l10n:t('pagination.next')\" data-tpl-data-page=\"next.index\">\n <ful-icon data-tpl-name=\"config.nextIcon\" aria-hidden=\"true\"></ful-icon>\n </button>\n </li>\n </ul>\n </ful-pagination-bar>\n `;\n #total = 0;\n #current = 0;\n render() {\n this.addEventListener('click', (/** @type any */ evt) => {\n const el = evt.target.closest('button');\n if (!el || el.hasAttribute('disabled')) {\n //a disabled button leads nowhere: the page it would ask for does not exist\n return;\n }\n if (el.getAttribute('aria-current') === 'page') {\n //the page already shown stays focusable and announced, so it is a\n //real control: it just has nothing to ask for\n return;\n }\n this.dispatchEvent(\n new CustomEvent('page:requested', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: Number(el.dataset.page ?? this.#current),\n },\n }),\n );\n });\n }\n /**\n * Moves the pager to a page, a page count, or both, and repaints once. The\n * two are one state: writing them one at a time repainted the bar twice per\n * load, the first pass drawing the new page against the old count.\n * @param {{ current?: number|null, total?: number|null }} [state]\n */\n update({ current: toCurrent, total: toTotal } = {}) {\n if (toCurrent !== undefined) {\n this.#current = toCurrent ?? 0;\n }\n if (toTotal !== undefined) {\n this.#total = toTotal ?? 0;\n }\n this.reflectTo('current', this.#current);\n this.reflectTo('total', this.#total);\n const current = this.#current;\n const total = this.#total;\n const maxRender = this.declared('pages') ?? 5;\n //an empty table is one empty page: everything downstream renders it like\n //any single page result\n const pageCount = Math.max(total, 1);\n const hasPrev = current > 0;\n const hasNext = current + 1 < pageCount;\n //a disabled arrow carries no page: there is nothing valid for it to point at\n const prev = { index: hasPrev ? current - 1 : null, enabled: hasPrev };\n const curr = { index: current, label: current + 1 };\n const next = { index: hasNext ? current + 1 : null, enabled: hasNext };\n //the window holds at most maxRender pages, centered on the current one and slid\n //back towards the end so it stays full on the last pages\n const rendered = Math.max(1, Math.min(maxRender, pageCount));\n const first = Math.max(0, Math.min(current - Math.floor((rendered - 1) / 2), pageCount - rendered));\n const pages = Array.from({ length: rendered }, (_, offset) => ({\n index: first + offset,\n label: first + offset + 1,\n }));\n //the whole bar is replaced, so the control the reader activated is gone\n //by the time the new one paints: the focus follows it to its equivalent\n const focused = this.contains(document.activeElement)\n ? /** @type HTMLElement */ (document.activeElement).closest('li')?.getAttribute('data-ref')\n : null;\n const page = focused === 'page' ? /** @type any */ (document.activeElement).dataset.page : null;\n this.template().withOverlay({ total: pageCount, prev, curr, next, pages }).renderTo(this);\n if (!focused) {\n return;\n }\n const back =\n (page === null ? null : this.querySelector(`li[data-ref=page] button[data-page=\"${page}\"]`)) ??\n this.querySelector(`li[data-ref=${focused}] button:not(:disabled)`) ??\n this.querySelector('li[data-ref=page] button[aria-current=page]');\n /** @type HTMLElement */ (back)?.focus();\n }\n get total() {\n return this.#total;\n }\n set total(value) {\n //an absent attribute declares no pages, not a NaN one\n this.update({ total: value });\n }\n get current() {\n return this.#current;\n }\n set current(value) {\n this.update({ current: value });\n }\n}\n\n/** Reads the schema declaration into the header and row templates a table renders from. */\nclass TableSchemaParser {\n static parse(nodeOrFragment, template) {\n //nodeOrFragment is undefined when the slot is missing altogether\n const schema = nodeOrFragment ? Nodes.queryChildren(nodeOrFragment, 'schema') : null;\n if (!schema) {\n throw new Error('missing expected <schema>: ful-table needs a <template slot=\"schema\"> holding one');\n }\n const headersTr = document.createElement('tr');\n const rowsTr = document.createElement('tr');\n rowsTr.setAttribute('data-tpl-each', 'rows');\n for (const attr of schema.getAttributeNames()) {\n const value = schema.getAttribute(attr);\n headersTr.setAttribute(attr, value ?? '');\n rowsTr.setAttribute(attr, value ?? '');\n }\n const columns = Nodes.queryChildrenAll(schema, 'column');\n //only a sortable column carries the initial sort: an order without its\n //sorter would ask the backend for a \"null\" property\n const sort =\n columns\n .filter((v) => v.hasAttribute('order') && v.hasAttribute('sorter'))\n .map((v) => ({ sorter: v.getAttribute('sorter'), order: v.getAttribute('order') }))[0] ?? null;\n for (var column of columns) {\n const maybeTitleTag = Nodes.queryChildren(column, 'title');\n const sorter = column.getAttribute('sorter');\n const order = column.getAttribute('order');\n const titleNode = maybeTitleTag ?? document.createTextNode(column.getAttribute('title') ?? '');\n maybeTitleTag?.remove();\n column.removeAttribute('sorter');\n column.removeAttribute('order');\n column.removeAttribute('title');\n const wrappedTitleNode =\n !sorter && !order\n ? titleNode\n : (() => {\n const fulSorter = document.createElement('ful-sorter');\n if (sorter) {\n fulSorter.setAttribute('sorter', sorter);\n }\n if (order) {\n fulSorter.setAttribute('order', order);\n }\n fulSorter.append(titleNode);\n return fulSorter;\n })();\n const th = document.createElement('th');\n const td = document.createElement('td');\n //a column's attributes land on both cells, so a `data-tpl-*` written\n //once applies to the header and the body alike. `inHeaders` and\n //`inRows` are how an author tells them apart when that is not what\n //they meant: both templates carry the pair, so a column can say\n //`data-tpl-if=\"inRows\"` and appear in the body only\n for (const attr of column.getAttributeNames()) {\n const value = column.getAttribute(attr);\n th.setAttribute(attr, value ?? '');\n td.setAttribute(attr, value ?? '');\n }\n th.append(wrappedTitleNode);\n td.append(...column.childNodes);\n headersTr.append(th);\n rowsTr.append(td);\n }\n\n return {\n headersTemplate: template\n .withOverlay({ inHeaders: true, inRows: false })\n .withFragment(Fragments.from(headersTr)),\n rowsTemplate: template.withOverlay({ inHeaders: false, inRows: true }).withFragment(Fragments.from(rowsTr)),\n sort: sort,\n length: columns.length,\n };\n }\n}\n\n/** Serves a table's rows from an array held in memory, applying the sort and the paging itself. */\nclass InMemoryTableLoader {\n #data;\n constructor(data) {\n this.#data = data;\n }\n async load(pageRequest, sortRequest, filterRequest) {\n //the header renders a sorter per sortable column whatever the loader is,\n //so the local one answers it rather than leaving it inert\n const rows = this.#sorted(sortRequest);\n const begin = pageRequest.page * pageRequest.size;\n const end = begin + pageRequest.size;\n const page = rows.slice(begin, end);\n const totalElements = rows.length;\n return {\n data: page,\n size: totalElements,\n };\n }\n #sorted(sortRequest) {\n if (!sortRequest?.sorter) {\n return this.#data;\n }\n const { sorter, order } = sortRequest;\n const sign = order === 'desc' ? -1 : 1;\n return [...this.#data].sort((l, r) => {\n const a = l?.[sorter];\n const b = r?.[sorter];\n if (a === b) {\n return 0;\n }\n //a missing value sorts last whichever way the column points\n if (a == null) {\n return 1;\n }\n if (b == null) {\n return -1;\n }\n return (a < b ? -1 : 1) * sign;\n });\n }\n update(data) {\n this.#data = data;\n }\n}\n\n/** Requests one page of rows from a url, passing the page, the sort and the filters to the endpoint. */\nclass RemoteTableLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n constructor(http, url, method, responseMapper = (response) => response) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#responseMapper = responseMapper;\n }\n async load(pageRequest, sortRequest, filterRequest) {\n const filters = Object.entries(filterRequest).filter(([k, v]) => v);\n return await this.#http\n .request(this.#method, this.#url)\n .param('page', pageRequest.page)\n .param('size', pageRequest.size)\n .param('sort', sortRequest ? `${sortRequest.sorter},${sortRequest.order}` : null)\n .param('filters', filters.length > 0 ? JSON.stringify(Object.fromEntries(filters)) : null)\n .fetchJson()\n .then((response) => this.#responseMapper(response));\n }\n}\n\n/**\n * Builds the table's loader from its attributes: an in-memory one, or the\n * remote loader over src.\n *\n * A component registered under the `loader` attribute replaces this one and\n * must implement `load(pageRequest, sortRequest, filterRequest)`, answering\n * `{ data, page, size }` for the requested page. `pageRequest` carries the page\n * index and its size, `sortRequest` the column and direction, and\n * `filterRequest` the values of the filters in the slot.\n */\nclass TableLoader {\n static create(el, conf) {\n const url = el.getAttribute('src');\n if (url) {\n const http = el.component('http-client');\n const method = el.getAttribute('method') ?? 'GET';\n const responseMapper = el.hasAttribute('response-mapper')\n ? el.component(el.getAttribute('response-mapper'))\n : (/** @type any */ response) => response;\n return new RemoteTableLoader(http, url, method, responseMapper);\n }\n return new InMemoryTableLoader([]);\n }\n}\n\n/** A table loading its rows from a loader, with sorting, pagination and an optional filter form. */\nclass Table extends ParsedElement {\n static attributes = ['loader', 'autoload:presence'];\n /**\n * The page size stays live: a rows-per-page control is a normal thing to\n * put next to a table, and the size is the one piece of the request an\n * author changes after the table is up. The rest of the request is the\n * table's own state, moved by the pager, the sorters and the filter form.\n */\n static observed = ['page-size:number'];\n static slots = true;\n static config = {\n searchIcon: 'search',\n };\n static template = `\n <ful-form data-tpl-if=\"slots.filters\">\n {{{{ slots.filters }}}}\n </ful-form>\n <ful-table-wrapper>\n <table>\n <caption data-tpl-if=\"slots.caption\">{{{{ slots.caption }}}}</caption>\n <thead></thead>\n <tbody></tbody>\n <tbody data-ref=\"initial\">\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <div>\n <p data-tpl-if=\"config.searchIcon\"><ful-icon data-tpl-name=\"config.searchIcon\" aria-hidden=\"true\"></ful-icon></p>\n {{ #l10n:t('table.initial') }}\n </div>\n </td>\n </tr>\n </tbody>\n <tbody data-ref=\"loading\" hidden>\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <ful-spinner class=\"big\" role=\"status\"><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></ful-spinner>\n </td>\n </tr>\n </tbody>\n <tbody data-ref=\"feedback\" hidden>\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <div role=\"alert\">\n <p>{{ #l10n:t('table.error') }}</p>\n <div data-ref=\"feedback-error\"></div>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot data-tpl-if=\"slots.footer\">\n {{{{ slots.footer }}}}\n </tfoot>\n </table>\n </ful-table-wrapper>\n <ful-pagination current=\"0\" total=\"1\"></ful-pagination>\n `;\n static templates = {\n row: `\n <tr data-tpl-if=\"pageResponse.data.length == 0\">\n <td data-tpl-colspan=\"schema.length\">\n {{ #l10n:t('table.no-data') }}\n </td>\n </tr>\n {{{{ schema.rowsTemplate.withOverlay({'rows': pageResponse.data}).render() }}}}\n `,\n };\n #loader;\n #schema;\n #body;\n #loading;\n #noAutoload;\n #feedback;\n #paginator;\n #sorters;\n //initialised before the render so the size can be read and written on an\n //element the page has only just created\n /** @type {{ pageRequest: { page: number, size: number }, sortRequest: any, filterRequest: any }} */\n #latestRequest = { pageRequest: { page: 0, size: 10 }, sortRequest: null, filterRequest: {} };\n /** whether a load has been asked for, by autoload or by a caller */\n #loadRequested = false;\n #loads = new Claims();\n /** How many rows a page asks the loader for: the size the next load will carry. */\n get pageSize() {\n return this.#latestRequest.pageRequest.size;\n }\n /**\n * Changes the page size and reloads from the first page, the current index\n * meaning nothing under a new size. A table that has not loaded yet only\n * records it: writing the size is not a request to start loading, which is\n * what `autoload` and `reload()` are for.\n *\n * Absent or null is the default of ten, so removing the attribute restores\n * it rather than asking the loader for NaN rows.\n */\n set pageSize(value) {\n const size = value ?? 10;\n if (size === this.#latestRequest.pageRequest.size) {\n return;\n }\n this.#latestRequest = { ...this.#latestRequest, pageRequest: { page: 0, size } };\n if (!this.#loadRequested) {\n return;\n }\n //the rejection escapes on purpose, as it does for the page, sort and\n //filter listeners: load renders its own error state and the unhandled\n //rejection is what reports the failure\n this.reload();\n }\n async render({ slots }) {\n const template = this.template();\n const schema = TableSchemaParser.parse(slots.schema, template);\n const fragment = template.withOverlay({ slots, schema }).render();\n const tableWrapper = /** @type HTMLTableElement */ (Nodes.queryChildren(fragment, 'ful-table-wrapper'));\n const table = /** @type HTMLTableElement */ (tableWrapper.querySelector('table'));\n Attributes.forward('table-', this, table);\n this.#loader = this.component(this.declared('loader') ?? 'loaders:table').create(this);\n\n this.#schema = schema;\n this.#body = table.querySelector(':scope > tbody');\n this.#loading = table.querySelector(':scope > tbody[data-ref=loading]');\n this.#noAutoload = table.querySelector(':scope > tbody[data-ref=initial]');\n this.#feedback = table.querySelector(':scope > tbody[data-ref=feedback]');\n this.#paginator = Nodes.queryChildren(fragment, 'ful-pagination');\n this.replaceChildren(fragment);\n const thead = /** @type HTMLTableSectionElement */ (this.querySelector('thead'));\n schema.headersTemplate.renderTo(thead);\n this.#sorters = thead.querySelectorAll('ful-sorter');\n await Rendering.waitForChildren(this);\n\n const maybeForm = /** @type any */ (Nodes.queryChildren(this, 'ful-form'));\n //the declared size lands here rather than through the setter: the base\n //applies the observed values after the render returns, and by then the\n //autoload below has already asked for the first page\n this.#latestRequest = {\n pageRequest: {\n page: 0,\n size: this.declared('page-size') ?? 10,\n },\n sortRequest: schema.sort,\n filterRequest: maybeForm?.values ?? {},\n };\n //the page, sort and filter listeners let load's rejection escape on purpose:\n //load renders its own error state, and the unhandled rejection is what\n //reports the failure (the autoload below reports the same way)\n maybeForm?.addEventListener('submit:success', async (evt) => {\n await this.load(\n {\n page: 0,\n size: this.#latestRequest.pageRequest.size,\n },\n this.#latestRequest.sortRequest,\n evt.detail.request,\n );\n });\n this.addEventListener('page:requested', async (/** @type any */ e) => {\n await this.load(\n {\n page: e.detail.value,\n size: this.#latestRequest.pageRequest.size,\n },\n this.#latestRequest.sortRequest,\n this.#latestRequest.filterRequest,\n );\n });\n this.addEventListener('sort:requested', async (/** @type any */ e) => {\n const sortRequest = e.detail.value.order ? e.detail.value : null;\n await this.load(this.#latestRequest.pageRequest, sortRequest, this.#latestRequest.filterRequest);\n //only the load that still owns the table commits the header: a superseded\n //sort must not wipe the arrows of the one that won, and a failed one\n //leaves them where they were\n if (this.#latestRequest.sortRequest !== sortRequest) {\n return;\n }\n this.#sorters.forEach((s) => {\n s.order = null;\n });\n e.target.order = e.detail.value.order;\n });\n if (this.declared('autoload')) {\n //not awaited: the first load must not hold up the upgrade, and a loader that\n //fails or never answers must not keep ftl:ready from firing for the page.\n //load renders its own error state and lets the failure reject, so it is reported\n this.reload();\n }\n }\n\n async reload() {\n return await this.load(\n this.#latestRequest.pageRequest,\n this.#latestRequest.sortRequest,\n this.#latestRequest.filterRequest,\n );\n }\n async load(pageRequest, sortRequest, filterRequest) {\n //marked before the await, not when a response comes back: a size written\n //while the first load is still in flight has to reload rather than be\n //overwritten by the answer to the request it replaced\n this.#loadRequested = true;\n //each load claims the table: a response resolving after a newer load has\n //started is stale, and neither renders nor updates the request a later\n //reload replays, whichever order the responses arrive in\n const claim = this.#loads.take();\n this.#body.replaceChildren();\n this.#loading.removeAttribute('hidden');\n this.#feedback.setAttribute('hidden', '');\n this.#noAutoload.setAttribute('hidden', '');\n this.setAttribute('aria-busy', 'true');\n try {\n const pageResponse = await this.#loader.load(pageRequest, sortRequest, filterRequest);\n if (claim.stale) {\n return;\n }\n this.#latestRequest = { pageRequest, sortRequest, filterRequest };\n this.#update(pageRequest, sortRequest, filterRequest, pageResponse);\n } catch (/** @type any */ error) {\n if (claim.stale) {\n //the newer load owns the table and its outcome: a superseded\n //failure is neither shown nor thrown\n return;\n }\n this.#loading.setAttribute('hidden', '');\n this.#feedback.removeAttribute('hidden');\n this.#feedback.querySelector('[data-ref=feedback-error]').textContent = Failure.problemsText(\n error,\n `${error}`,\n );\n throw error;\n } finally {\n //a superseded load owns nothing, the newer one's busy state included\n if (!claim.stale) {\n this.removeAttribute('aria-busy');\n }\n }\n }\n /** Hands the loader to the callback, for runtime reconfigurations. */\n async withLoader(fn) {\n return await fn(this.#loader);\n }\n async resetWithFilter(filterRequest) {\n return await this.load(\n {\n page: 0,\n size: this.#latestRequest.pageRequest.size,\n },\n this.#latestRequest.sortRequest,\n filterRequest,\n );\n }\n #update(pageRequest, sortRequest, filterRequest, pageResponse) {\n const pages = Math.ceil(pageResponse.size / pageRequest.size);\n const lastPage = Math.max(0, pages - 1);\n if (pageRequest.page > lastPage) {\n //the data shrank behind the page being answered: the last page that\n //still exists is loaded instead of an out-of-range empty one\n this.load({ page: lastPage, size: pageRequest.size }, sortRequest, filterRequest);\n return;\n }\n this.#loading.setAttribute('hidden', '');\n this.#body.replaceChildren(\n this.template('row')\n .withOverlay({\n schema: this.#schema,\n pageRequest,\n filterRequest,\n pageResponse,\n })\n .render(),\n );\n //one move, one repaint: the page and the count are the same state\n this.#paginator.update({ current: pageRequest.page, total: pages });\n }\n}\n\nexport { TableLoader, SortButton, Table, TableSchemaParser, Pagination };\n","import { Attributes } from '../../ftl/index.mjs';\nimport { wireAnchoredPopover } from '../disclosures/anchors.mjs';\n\n/**\n * An invoker button paired with the `ul[popover][role=menu]` that follows it:\n * the chrome behind every filter's operator, sensitivity and boolean value.\n *\n * It fills the menu from a vocabulary, wires it the first time more than one\n * choice survives the whitelist, pins the button to a static glyph when a\n * single one does, owns the roving focus and the Escape/Enter handling, and\n * keeps the button's value, glyph and aria-label in step. A pick that changes\n * the value calls back; the host decides what that means.\n *\n * The button's `value` attribute is the store, as it is for a native control:\n * the menu protocol finds the current item by it, and nothing mirrors it.\n */\nclass ChoiceButton {\n /** The declared choices narrowed to a vocabulary; an empty or unknown set means all of it. */\n static narrow(declared, vocabulary) {\n const narrowed = (declared ?? []).filter((choice) => vocabulary.includes(choice));\n return narrowed.length > 0 ? narrowed : [...vocabulary];\n }\n #button;\n #menu;\n #vocabulary;\n #glyphs;\n #labelFor;\n #display;\n #interactive;\n #onPick;\n #allowed;\n #claimed = false;\n #wired = false;\n /**\n * @param {HTMLElement} button the invoker, whose next sibling is its menu\n * @param {{vocabulary: string[], glyphs?: Record<string,string>, labelFor?: (v: string) => string,\n * display?: ((v: string) => string)|null, interactive?: () => boolean, onPick?: (v: string) => void}} conf\n */\n constructor(\n button,\n { vocabulary, glyphs = {}, labelFor = (v) => v, display = null, interactive = () => true, onPick = () => {} },\n ) {\n this.#button = button;\n this.#menu = /** @type HTMLElement */ (button.nextElementSibling);\n this.#vocabulary = vocabulary;\n this.#glyphs = glyphs;\n this.#labelFor = labelFor;\n //the button shows the compact glyph by default; a menu whose choices have\n //no glyph shows the word instead\n this.#display = display ?? ((choice) => glyphs[choice] ?? choice);\n this.#interactive = interactive;\n this.#onPick = onPick;\n this.#allowed = [...vocabulary];\n this.#menu.addEventListener('click', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n const item = /** @type HTMLElement | null */ (target.closest('li > a'));\n if (!item || !this.#interactive()) {\n return;\n }\n const picked = /** @type string */ (item.getAttribute('value'));\n const previous = this.value;\n this.value = picked;\n /** @type any */ (this.#menu).hidePopover?.();\n if (previous !== picked) {\n this.#onPick(picked);\n }\n });\n }\n /** The choices the host declared, narrowed to the vocabulary; an empty or unknown set means all of it. */\n get allowed() {\n return this.#allowed;\n }\n set allowed(declared) {\n this.#allowed = ChoiceButton.narrow(declared, this.#vocabulary);\n this.#fill();\n if (!this.#wired && this.#allowed.length > 1) {\n this.#wire();\n this.#wired = true;\n }\n this.#sync();\n if (this.pinned) {\n this.value = this.#allowed[0];\n }\n }\n /** A single surviving choice pins the button: a static glyph, no popup, and every read answers it. */\n get pinned() {\n return this.#allowed.length < 2;\n }\n get value() {\n return this.#button.getAttribute('value');\n }\n set value(choice) {\n this.#button.setAttribute('value', choice);\n //the button carries the compact glyph, announced through its label: the\n //menu is where the localized words live\n this.#button.textContent = this.#display(choice);\n Attributes.set(this.#button, 'aria-label', this.#labelFor(choice));\n }\n /** The host's disabled claim, composed with the pin: lifting one cannot lift the other. */\n set claimed(claimed) {\n this.#claimed = claimed;\n this.#sync();\n }\n #fill() {\n this.#menu.replaceChildren(\n ...this.#allowed.map((choice) => {\n const li = document.createElement('li');\n li.setAttribute('role', 'none');\n const a = document.createElement('a');\n a.setAttribute('role', 'menuitem');\n a.setAttribute('tabindex', '-1');\n a.setAttribute('value', choice);\n const word = this.#labelFor(choice);\n const glyph = this.#glyphs[choice] ?? choice;\n if (word === choice && glyph === choice) {\n a.innerText = choice;\n } else {\n const glyphSpan = document.createElement('span');\n glyphSpan.innerText = glyph;\n const wordSpan = document.createElement('span');\n wordSpan.innerText = word;\n a.append(glyphSpan, wordSpan);\n }\n li.append(a);\n return li;\n }),\n );\n }\n #sync() {\n const pinned = this.pinned;\n this.#button.toggleAttribute('disabled', pinned || this.#claimed);\n Attributes.set(this.#button, 'aria-haspopup', pinned ? null : 'true');\n Attributes.set(this.#button, 'aria-expanded', pinned ? null : 'false');\n if (pinned) {\n this.#button.removeAttribute('popovertarget');\n } else if (this.#menu.id) {\n //the menu is wired once, its link is what a pin may break: lifting the\n //pin re-links the invoker to the menu it already owns\n this.#button.setAttribute('popovertarget', this.#menu.id);\n }\n }\n #items() {\n return Array.from(this.#menu.querySelectorAll('li > a'), (a) => /** @type HTMLAnchorElement */ (a));\n }\n #wire() {\n const button = this.#button;\n const menu = this.#menu;\n wireAnchoredPopover(button, menu, { prefix: 'ful-filter-menu', invoke: true, expanded: true });\n menu.addEventListener('toggle', (/** @type any */ evt) => {\n if (evt.newState !== 'open') {\n //give the invoker back the focus the menu had borrowed, without\n //stealing it from wherever else the close came from\n if (menu.contains(document.activeElement)) {\n button.focus();\n }\n return;\n }\n const items = this.#items();\n (items.find((a) => a.getAttribute('value') === this.value) ?? items[0])?.focus();\n });\n menu.addEventListener('keydown', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n const item = /** @type HTMLAnchorElement | null */ (target.closest('li > a'));\n if (!item) {\n return;\n }\n const items = this.#items();\n const at = items.indexOf(item);\n switch (evt.code) {\n case 'ArrowDown': {\n evt.preventDefault();\n items[(at + 1) % items.length]?.focus();\n break;\n }\n case 'ArrowUp': {\n evt.preventDefault();\n items[(at - 1 + items.length) % items.length]?.focus();\n break;\n }\n case 'Home': {\n evt.preventDefault();\n items[0]?.focus();\n break;\n }\n case 'End': {\n evt.preventDefault();\n items[items.length - 1]?.focus();\n break;\n }\n case 'Enter':\n case 'Space': {\n evt.preventDefault();\n item.click();\n button.focus();\n break;\n }\n case 'Escape': {\n //the platform's close request hides the menu, the focus is placed\n //on the invoker before the focused item is detached from it\n button.focus();\n break;\n }\n }\n });\n }\n}\n\nexport { ChoiceButton };\n","import { Localization } from '../../ftl/index.mjs';\nimport { ChoiceButton } from './choice-button.mjs';\nimport { Field } from './field.mjs';\nimport { Instant } from './temporals.mjs';\nimport { Input } from './input.mjs';\n\nconst GLYPHS = {\n EQ: '=',\n NEQ: '≠',\n LT: '<',\n GT: '>',\n LTE: '≤',\n GTE: '≥',\n BETWEEN: '↔',\n CONTAINS: '…a…',\n STARTS_WITH: 'a…',\n ENDS_WITH: '…a',\n};\nconst COMPARE_OPERATORS = ['EQ', 'NEQ', 'LT', 'GT', 'LTE', 'GTE', 'BETWEEN'];\nconst TEXT_OPERATORS = [...COMPARE_OPERATORS, 'CONTAINS', 'STARTS_WITH', 'ENDS_WITH'];\nconst SENSITIVITIES = ['IGNORE_CASE', 'CASE_SENSITIVE'];\n\nconst SENSITIVITY_GLYPHS = {\n IGNORE_CASE: 'aa',\n CASE_SENSITIVE: 'Aa',\n};\n\n/** the labels live in the built-in translations, resolved through the same localization every template uses */\nconst { t } = Localization.of();\nconst operatorLabel = (op) => t(`filters.op.${op}`);\nconst sensitivityLabel = (sensitivity) => t(`filters.sensitivity.${sensitivity}`);\nconst booleanValueLabel = (token) => t(token === '' ? 'filters.boolean.any' : `filters.boolean.${token}`);\n\n/**\n * The shared shape of every operator-and-operands filter: an operator menu, one\n * or two operands of the type the subclass declares, and a tuple that mirrors\n * the data-jpa compare annotations.\n */\nclass CompareFilter extends Input {\n static observed = ['value:json', 'operators:csv'];\n static OPERATORS = COMPARE_OPERATORS;\n static DEFAULT_OPERATOR = 'EQ';\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-affix>\n <button data-ref=\"operator\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n </ful-affix>\n <ful-control>\n <input data-ref=\"value1\" data-tpl-type=\"type\" form=\"\">\n <input data-ref=\"value2\" data-tpl-type=\"type\" form=\"\" hidden>\n </ful-control>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _operator;\n _container;\n _value1;\n _value2;\n _build(conf) {\n const pieces = super._build(conf);\n const fragment = pieces.fragment;\n this._container = fragment.querySelector('ful-control-group');\n this._value1 = fragment.querySelector('[data-ref=value1]');\n this._value2 = fragment.querySelector('[data-ref=value2]');\n this._operator = new ChoiceButton(/** @type HTMLElement */ (fragment.querySelector('[data-ref=operator]')), {\n vocabulary: this._vocabulary(),\n glyphs: GLYPHS,\n labelFor: operatorLabel,\n interactive: () => this._interactive(),\n onPick: () => {\n this._syncBetween();\n this._notifyChange();\n },\n });\n //the default operator below reads the whitelist, so it is resolved here\n //rather than waiting for the base's declared pass\n this.operators = this.declared('operators');\n //Input.render only re-dispatches changes coming from the first operand\n this._value2.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this._notifyChange();\n });\n if (this._operator.value === null) {\n this._showDefaultOperator();\n }\n //the second operand mirrors the claims like the first one does, and the\n //freeze reaches the operator and sensitivity buttons, whose popovers an\n //input's readOnly cannot touch\n return { ...pieces, freeze: this._container, also: [this._value2] };\n }\n _showDefaultOperator() {\n const preferred = this._defaultOperator();\n const allowed = this._operator.allowed;\n this._showOperator(allowed.includes(preferred) ? preferred : allowed[0]);\n }\n formResetCallback() {\n //a declared tuple restores its operator through the base's assignment; a\n //valueless reset also brings the operator back to the default it rendered with\n super.formResetCallback();\n if (!this.hasAttribute('value')) {\n this._showDefaultOperator();\n }\n }\n _type() {\n return 'text';\n }\n _serialize(v) {\n return v;\n }\n _deserialize(v) {\n return v;\n }\n _defaultOperator() {\n return 'EQ';\n }\n _vocabulary() {\n return COMPARE_OPERATORS;\n }\n _declaredOperators;\n get operators() {\n //a page may whitelist before the upgrade: the narrowed set is held until\n //the button exists, and the declared attribute lands over it when the\n //base applies the declared state\n return this._operator ? this._operator.allowed : this._declaredOperators;\n }\n set operators(declared) {\n if (!this._operator) {\n this._declaredOperators = ChoiceButton.narrow(declared, this._vocabulary());\n return;\n }\n this._operator.allowed = declared;\n this._syncBetween();\n }\n get value() {\n return this._tuple();\n }\n set value(v) {\n this._applyTuple(v);\n }\n _tuple() {\n const operator = this._operator.value;\n const values = operator === 'BETWEEN' ? [this._value1.value, this._value2.value] : [this._value1.value];\n return values.some((v) => v === '') ? null : [operator, ...values.map((v) => this._serialize(v))];\n }\n _applyTuple(v) {\n if (v == null) {\n this._value1.value = '';\n this._value2.value = '';\n return;\n }\n const [declared, ...values] = v;\n //a pinned operator wins over whatever the tuple carries\n const operator = this._operator.pinned ? this._operator.allowed[0] : declared;\n this._showOperator(operator);\n //a tuple shorter than the operands leaves the missing ones empty: the DOM\n //would stringify a nullish assignment to \"undefined\"\n this._value1.value = values[0] ? this._deserialize(values[0]) : (values[0] ?? '');\n this._value2.value = values[1] ? this._deserialize(values[1]) : (values[1] ?? '');\n }\n _showOperator(operator) {\n this._operator.value = operator;\n this._syncBetween();\n }\n /** only a BETWEEN carries a second operand */\n _syncBetween() {\n this._value2.toggleAttribute('hidden', this._operator.value !== 'BETWEEN');\n }\n get disabled() {\n return super.disabled;\n }\n set disabled(d) {\n //the claim and both operands are the base's; the chrome buttons are not,\n //frozen by a pin, disabled by the claim, or both\n super.disabled = d;\n for (const choice of this._choices()) {\n choice.claimed = d;\n }\n }\n /** every menu button the filter composes, so one claim reaches them all */\n _choices() {\n return [this._operator].filter((c) => c);\n }\n}\n\n/** The compare filter over ISO instants, defaulting to LTE. */\nclass InstantFilter extends CompareFilter {\n _defaultOperator() {\n return 'LTE';\n }\n _type() {\n return 'datetime-local';\n }\n _serialize(v) {\n return Instant.localToIso(v);\n }\n _deserialize(v) {\n return Instant.isoToLocal(v);\n }\n}\n\n/** The compare filter over dates. */\nclass LocalDateFilter extends CompareFilter {\n _type() {\n return 'date';\n }\n}\n\n/** The compare filter over numbers. */\nclass NumberFilter extends CompareFilter {\n _type() {\n return 'number';\n }\n}\n\n/** The compare filter over text, carrying a case sensitivity beside the operator. */\nclass TextFilter extends CompareFilter {\n static observed = ['sensitivities:csv'];\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-affix>\n <button data-ref=\"operator\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n <button data-ref=\"sensitivity\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n </ful-affix>\n <ful-control>\n <input data-ref=\"value1\" data-tpl-type=\"type\" form=\"\">\n <input data-ref=\"value2\" data-tpl-type=\"type\" form=\"\" hidden>\n </ful-control>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _defaultOperator() {\n return 'CONTAINS';\n }\n _vocabulary() {\n return TEXT_OPERATORS;\n }\n //the sensitivity is carried through from whoever set the value, switched\n //through its own menu, or pinned to the single mode the sensitivities\n //attribute whitelists\n _sensitivityButton;\n _build(conf) {\n const pieces = super._build(conf);\n this._sensitivityButton = new ChoiceButton(\n /** @type HTMLElement */ (pieces.fragment.querySelector('[data-ref=sensitivity]')),\n {\n vocabulary: SENSITIVITIES,\n glyphs: SENSITIVITY_GLYPHS,\n labelFor: sensitivityLabel,\n interactive: () => this._interactive(),\n onPick: () => this._notifyChange(),\n },\n );\n this._sensitivityButton.allowed = null;\n this._sensitivityButton.value = SENSITIVITIES[0];\n return pieces;\n }\n _choices() {\n return [...super._choices(), this._sensitivityButton].filter((c) => c);\n }\n get _sensitivity() {\n return this._sensitivityButton.value;\n }\n _declaredSensitivities;\n get sensitivities() {\n return this._sensitivityButton ? this._sensitivityButton.allowed : this._declaredSensitivities;\n }\n set sensitivities(declared) {\n if (!this._sensitivityButton) {\n this._declaredSensitivities = ChoiceButton.narrow(declared, SENSITIVITIES);\n return;\n }\n const previous = this._sensitivityButton.value;\n this._sensitivityButton.allowed = declared;\n if (!this._sensitivityButton.allowed.includes(previous)) {\n this._sensitivityButton.value = this._sensitivityButton.allowed[0];\n }\n }\n get value() {\n const tuple = this._tuple();\n return tuple == null ? null : [tuple[0], this._sensitivity, ...tuple.slice(1)];\n }\n set value(v) {\n if (v == null) {\n this._applyTuple(v);\n return;\n }\n if (this._sensitivityButton.allowed.includes(v[1])) {\n this._sensitivityButton.value = v[1];\n }\n this._applyTuple([v[0], ...v.slice(2)]);\n }\n formResetCallback() {\n //a declared tuple restores its sensitivity through the value assignment;\n //a valueless reset brings it back to the default it rendered with, the\n //class default normalized against the whitelist\n super.formResetCallback();\n if (!this.hasAttribute('value')) {\n const allowed = this._sensitivityButton.allowed;\n this._sensitivityButton.value = allowed.includes('IGNORE_CASE') ? 'IGNORE_CASE' : allowed[0];\n }\n }\n}\n\nconst BOOLEAN_VALUES = ['', 'true', 'false'];\nconst BOOLEAN_VALUE_GLYPHS = { true: '✓', false: '✗' };\n\n/** The boolean filter: an EQ or NEQ operator and an any/yes/no menu. */\nclass BooleanFilter extends Field {\n static observed = ['value:json', 'operators:csv'];\n static slots = true;\n static OPERATORS = ['EQ', 'NEQ'];\n static DEFAULT_OPERATOR = 'EQ';\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-affix>\n <button data-ref=\"operator\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n </ful-affix>\n <button data-ref=\"value\" type=\"button\" form=\"\"></button>\n <ul popover role=\"menu\"></ul>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _operator;\n _value;\n _container;\n _build({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n this._container = fragment.querySelector('ful-control-group');\n const valueButton = fragment.querySelector('[data-ref=value]');\n this._operator = new ChoiceButton(fragment.querySelector('[data-ref=operator]'), {\n vocabulary: BooleanFilter.OPERATORS,\n glyphs: GLYPHS,\n labelFor: operatorLabel,\n interactive: () => this._interactive(),\n onPick: () => this._notifyChange(),\n });\n //the value button carries the word rather than a glyph: 'any' has none\n this._value = new ChoiceButton(valueButton, {\n vocabulary: BOOLEAN_VALUES,\n glyphs: BOOLEAN_VALUE_GLYPHS,\n labelFor: booleanValueLabel,\n display: booleanValueLabel,\n interactive: () => this._interactive(),\n onPick: () => this._notifyChange(),\n });\n this.operators = this.declared('operators');\n const allowed = this._operator.allowed;\n this._operator.value = allowed.includes(BooleanFilter.DEFAULT_OPERATOR)\n ? BooleanFilter.DEFAULT_OPERATOR\n : allowed[0];\n this._value.allowed = null;\n this._value.value = '';\n return {\n fragment,\n control: valueButton,\n error: fragment.querySelector('ful-field-error'),\n label: fragment.querySelector('label'),\n //a button accepts neither aria-readonly nor aria-required\n announces: null,\n freeze: this._container,\n };\n }\n _declaredOperators;\n get operators() {\n //a page may whitelist before the upgrade: the narrowed set is held until\n //the button exists, and the declared attribute lands over it when the\n //base applies the declared state\n return this._operator ? this._operator.allowed : this._declaredOperators;\n }\n set operators(declared) {\n if (!this._operator) {\n this._declaredOperators = ChoiceButton.narrow(declared, this._vocabulary());\n return;\n }\n this._operator.allowed = declared;\n }\n _vocabulary() {\n return BooleanFilter.OPERATORS;\n }\n get value() {\n return this._value.value === '' ? null : [this._operator.value, this._value.value];\n }\n set value(v) {\n if (v == null) {\n this._value.value = '';\n return;\n }\n //a pinned operator wins over whatever the tuple carries\n this._operator.value = this._operator.pinned ? this._operator.allowed[0] : v[0];\n this._value.value = v[1] ?? '';\n }\n get disabled() {\n return super.disabled;\n }\n set disabled(d) {\n super.disabled = d;\n //the menu buttons are frozen by a pin, disabled by the claim, or both\n for (const choice of [this._operator, this._value].filter((c) => c)) {\n choice.claimed = d;\n }\n }\n}\n\nexport { BooleanFilter, CompareFilter, InstantFilter, LocalDateFilter, NumberFilter, TextFilter };\n","import { Failure } from '../../httpc/index.mjs';\nimport { Claims } from '../claims.mjs';\n\n/**\n * The async section machinery shared by ful-tabs, ful-wizard, ful-dialog and\n * ful-drawer: every activation of a section fires the section:requested family\n * on the host component (bubbling: the generic type, the #index type, and the\n * data-step name when present) and awaits the union of the answers, wherever\n * they were registered. The event's target is the component, whose local name\n * telling the family, e.target === e.currentTarget separating a host's own\n * sections from a nested component's, while detail.section stays the write\n * target. No listener is a plain pass-through, and the first-entry flag is not\n * even spent, so a listener attached later still sees the first activation. A\n * pending answer shows the loading chrome a frame late (answers that never\n * pend never flash) and declares the section aria-busy; a delivery superseded\n * by a newer activation of the same section owns no chrome; a rejection paints\n * the section's error chrome, replacing whatever a previous answer had\n * painted, and travels to the caller.\n */\nclass SectionRequests {\n #entered = new WeakSet();\n /** one generation of claims per section: the sections contend separately */\n #claims = new WeakMap();\n\n /**\n * @param {Element} host\n * @param {Element} section\n * @param {string|null} name\n * @param {number|null} index\n * @returns {Promise<any[]|undefined>} the union of the answers, or undefined when nobody listened\n */\n async request(host, section, name, index) {\n const first = !this.#entered.has(section);\n const detail = { name, section, index, first };\n const types = [\n 'section:requested',\n ...(index !== null && index !== undefined ? [`section:requested:#${index}`] : []),\n ...(name ? [`section:requested:${name}`] : []),\n ];\n const promises = [];\n for (const type of types) {\n const evt = /** @type {CustomEvent & { async?: { promises: Promise<any>[] } }} */ (\n new CustomEvent(type, { bubbles: true, detail })\n );\n host.dispatchEvent(evt);\n promises.push(...(evt.async?.promises ?? []));\n }\n if (promises.length === 0) {\n return undefined;\n }\n this.#entered.add(section);\n let claims = this.#claims.get(section);\n if (!claims) {\n claims = new Claims();\n this.#claims.set(section, claims);\n }\n const claim = claims.take();\n const owned = () => !claim.stale;\n section.querySelector(':scope > .ful-section-error')?.remove();\n const frame = requestAnimationFrame(() => {\n if (owned()) {\n section.toggleAttribute('loading', true);\n section.setAttribute('aria-busy', 'true');\n }\n });\n try {\n return await Promise.all(promises);\n } catch (cause) {\n if (owned()) {\n this.#paintError(section, cause);\n }\n throw cause;\n } finally {\n cancelAnimationFrame(frame);\n if (owned()) {\n section.toggleAttribute('loading', false);\n section.removeAttribute('aria-busy');\n }\n }\n }\n\n #paintError(section, cause) {\n section.querySelector(':scope > .ful-section-error')?.remove();\n const error = document.createElement('div');\n error.className = 'ful-section-error';\n error.setAttribute('role', 'alert');\n error.textContent = Failure.problemsText(cause);\n section.prepend(error);\n }\n}\n\nexport { SectionRequests };\n","/**\n * The dialog-target delegation, shared by the dialog and the drawer: any\n * element carrying dialog-target set to a dialog-bearing ful element's id\n * opens it, clones included. Wired once per document.\n */\nlet targetsWired = false;\nconst wireTargets = () => {\n if (targetsWired) {\n return;\n }\n targetsWired = true;\n document.addEventListener('click', (/** @type any */ e) => {\n const trigger = e.target.closest?.('[dialog-target]');\n if (!trigger) {\n return;\n }\n /** @type {any} */ (document.getElementById(trigger.getAttribute('dialog-target')))?.open?.();\n });\n};\n\nexport { wireTargets };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\nimport { wireAnchoredPopover } from './anchors.mjs';\nimport { wireTargets } from './targets.mjs';\n\n/** An info icon button toggling a popover with a short explanation. */\nclass Tooltip extends ParsedElement {\n static slots = true;\n static attributes = ['placement'];\n static config = {\n icon: 'info-circle-fill',\n };\n static template = `\n <button type=\"button\" class=\"ful-tip\" data-ref=\"trigger\" data-tpl-aria-label=\"#l10n:t('info.tooltip')\"><ful-icon data-tpl-name=\"config.icon\" aria-hidden=\"true\"></ful-icon></button>\n <ful-note popover data-ref=\"content\">{{{{ slots.default }}}}</ful-note>\n `;\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n const trigger = fragment.querySelector('[data-ref=trigger]');\n const content = fragment.querySelector('[data-ref=content]');\n //placed here rather than by the anchor css: the note draws a callout that\n //has to point at the trigger wherever the viewport left room for the note,\n //which is a measurement the stylesheet cannot make for a pseudo-element\n wireAnchoredPopover(trigger, content, { prefix: 'ful-tooltip', invoke: true, expanded: true, handPlace: true });\n const placement = this.declared('placement');\n if (placement) {\n content.setAttribute('placement', placement);\n }\n this.replaceChildren(fragment);\n }\n}\n\n/** A modal dialog on the native platform, open()/ask() resolving with the closer's data-result. */\nclass Dialog extends ParsedElement {\n static attributes = ['header'];\n static slots = true;\n static template = `\n <dialog data-ref=\"dialog\" class=\"ful-dialog\">\n <header data-tpl-if=\"header\"><h2>{{ header }}</h2></header>\n <div data-ref=\"body\">{{{{ slots.default }}}}</div>\n <footer>\n <button type=\"button\" data-ref=\"acknowledge\" data-result=\"acknowledged\" data-tpl-if=\"!slots.buttons\" data-tpl-aria-label=\"#l10n:t('dialog.acknowledge')\">{{ #l10n:t('dialog.acknowledge') }}</button>\n {{{{ slots.buttons }}}}\n </footer>\n </dialog>\n `;\n #dialog;\n #body;\n #requests = new SectionRequests();\n #resolvers = [];\n render({ slots }) {\n const fragment = this.template()\n .withOverlay({ slots, header: this.declared('header') ?? '' })\n .render();\n this.#dialog = fragment.querySelector('[data-ref=dialog]');\n this.#body = fragment.querySelector('[data-ref=body]');\n this.#dialog.addEventListener('close', () => {\n this.dispatchEvent(\n new CustomEvent('close', {\n detail: { result: this.#dialog.returnValue === '' ? null : this.#dialog.returnValue },\n }),\n );\n this.#settle();\n });\n this.#dialog.addEventListener('click', (/** @type any */ e) => {\n const result = e.target.closest('button[data-result]')?.dataset.result;\n if (result !== undefined) {\n this.#dialog.close(result);\n }\n });\n this.replaceChildren(fragment);\n wireTargets();\n }\n //answers every waiter with the dialog's own answer: null while still open\n //or closed without a result, which is also the unanswered answer a dialog\n //leaving the document owes its waiters instead of hanging them\n #settle() {\n const resolvers = this.#resolvers;\n this.#resolvers = [];\n for (const resolve of resolvers) {\n resolve(this.#dialog.returnValue === '' ? null : this.#dialog.returnValue);\n }\n }\n disconnectedCallback() {\n this.#settle();\n }\n open() {\n return this.ask();\n }\n ask() {\n if (!this.#dialog.open) {\n this.#dialog.returnValue = '';\n this.#dialog.showModal();\n this.#request();\n }\n return new Promise((resolve) => {\n this.#resolvers.push(resolve);\n });\n }\n #request() {\n this.#requests.request(this, this.#body, null, null)?.catch(() => undefined);\n }\n /**\n * Re-fires section:requested on the body, open or closed: the explicit\n * request for a body that wants refreshing. A failed refresh paints its\n * problems, nothing rejects: there is no caller to reject towards.\n */\n refresh() {\n return this.#requests.request(this, this.#body, null, null)?.then(undefined, () => undefined);\n }\n close(result) {\n this.#dialog.close(result ?? '');\n }\n}\n\nexport { Tooltip, Dialog };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\nimport { Failure } from '../../httpc/index.mjs';\nimport { wireTargets } from './targets.mjs';\n\n/** A side panel drawer on the native dialog platform, update() owning its open-deliver cycle. */\nclass Drawer extends ParsedElement {\n static attributes = ['title', 'placement'];\n static slots = true;\n static template = `\n <dialog data-ref=\"dialog\" class=\"ful-drawer\">\n <header>\n <h2 data-ref=\"title\">{{ title }}</h2>\n <button type=\"button\" data-ref=\"close\" data-tpl-aria-label=\"#l10n:t('drawer.close')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button>\n </header>\n <section data-ref=\"loading\" hidden><ful-spinner class=\"centered\" role=\"status\"><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></ful-spinner></section>\n <section data-ref=\"error\" role=\"alert\" hidden></section>\n <section data-ref=\"content\">{{{{ slots.default }}}}</section>\n </dialog>\n `;\n #dialog;\n #title;\n #loading;\n #error;\n #content;\n #requests = new SectionRequests();\n #updates = new Claims();\n render({ slots }) {\n const fragment = this.template()\n .withOverlay({ slots, title: this.declared('title') ?? '' })\n .render();\n this.#dialog = fragment.querySelector('[data-ref=dialog]');\n this.#title = fragment.querySelector('[data-ref=title]');\n this.#loading = fragment.querySelector('[data-ref=loading]');\n this.#error = fragment.querySelector('[data-ref=error]');\n this.#content = fragment.querySelector('[data-ref=content]');\n const placement = this.declared('placement');\n if (placement) {\n this.#dialog.setAttribute('placement', placement);\n }\n fragment.querySelector('[data-ref=close]').addEventListener('click', () => this.close());\n this.#dialog.addEventListener('close', () => {\n this.dispatchEvent(new CustomEvent('close'));\n });\n this.replaceChildren(fragment);\n wireTargets();\n }\n get title() {\n return this.#title.textContent;\n }\n set title(v) {\n this.#title.textContent = v ?? '';\n }\n /**\n * Opens the drawer under the given title and waits for the callback: a\n * resolved value paints the content section (which is returned), a\n * rejection paints the problems and travels to the caller, and an update\n * superseded by a newer one paints nothing.\n */\n async update(title, cb) {\n //the claim detaches any update still in flight: its outcome belongs to\n //an abandoned opening and must neither be painted nor own the drawer\n const claim = this.#updates.take();\n this.title = title;\n this.#content.replaceChildren();\n this.#restChrome();\n this.#loading.removeAttribute('hidden');\n this.#content.setAttribute('hidden', '');\n //update owns its own open-answer-deliver cycle, so it shows the dialog\n //without going through open(): a user reopen during the wait is a\n //real open and goes through open()\n this.#show();\n try {\n const delivered = await cb();\n if (claim.stale) {\n return this.#content;\n }\n this.#content.replaceChildren(delivered);\n this.#loading.setAttribute('hidden', '');\n this.#content.removeAttribute('hidden');\n return this.#content;\n } catch (/** @type any */ e) {\n if (!claim.stale) {\n //revealed before it is filled, so the live region announces the\n //change rather than being revealed already holding it\n this.#error.removeAttribute('hidden');\n this.#error.textContent = Failure.problemsText(e);\n this.#loading.setAttribute('hidden', '');\n this.#content.setAttribute('hidden', '');\n }\n throw e;\n }\n }\n /**\n * Re-fires section:requested on the content, open or closed: the explicit\n * request for a body that wants refreshing. A failed refresh paints its\n * problems, nothing rejects: update() stays the rejecting call.\n */\n refresh() {\n return this.#requests.request(this, this.#content, null, null)?.then(undefined, () => undefined);\n }\n open() {\n if (!this.#show()) {\n return;\n }\n this.#restChrome();\n this.#requests.request(this, this.#content, null, null)?.catch(() => undefined);\n }\n close() {\n this.#dialog.close();\n }\n /** Shows the modal, answering whether this call is the one that opened it. */\n #show() {\n if (this.#dialog.open) {\n return false;\n }\n this.#dialog.showModal();\n return true;\n }\n #restChrome() {\n this.#error.replaceChildren();\n this.#error.setAttribute('hidden', '');\n this.#loading.setAttribute('hidden', '');\n this.#content.removeAttribute('hidden');\n }\n}\n\nexport { Drawer };\n","import { Localization, ParsedElement } from '../../ftl/index.mjs';\nimport { Failure } from '../../httpc/index.mjs';\n\nconst SEVERITIES = ['info', 'success', 'warning', 'error'];\n\n//the regions alive in the document: the show-toast listener is wired once and\n//forwards to each of them, so a re-hosted or second region never doubles a toast\nconst REGIONS = new Set();\nlet listenerWired = false;\n\n/** A transient feedback region: each show() stacks a toast that retires on its own timer. */\nclass Toasts extends ParsedElement {\n static attributes = ['timeout:number'];\n #timeout;\n connectedCallback() {\n super.connectedCallback();\n if (this.rendered) {\n REGIONS.add(this);\n }\n }\n disconnectedCallback() {\n REGIONS.delete(this);\n }\n render() {\n this.#timeout = this.declared('timeout') || 5000;\n this.setAttribute('role', 'region');\n //focusable only programmatically, so a retiring toast can hand its focus back\n this.setAttribute('tabindex', '-1');\n this.setAttribute('aria-label', Localization.of().t('toast.region'));\n if (!listenerWired) {\n listenerWired = true;\n document.addEventListener('show-toast', (/** @type any */ e) => {\n for (const region of REGIONS) {\n region.show(e.detail.message, e.detail);\n }\n });\n }\n REGIONS.add(this);\n }\n /**\n * Appends a toast carrying the message (a Failure shows its problems'\n * reasons, one per line), severity picking the theme and the announcement,\n * the toast retiring through its own timer or its dismiss button.\n * @param {any} message\n * @param {any} [options] severity and timeout\n * @returns {HTMLElement}\n */\n show(message, options = {}) {\n const severity = SEVERITIES.includes(options.severity) ? options.severity : 'info';\n const item = document.createElement('ful-toast');\n item.classList.add(severity);\n item.setAttribute('role', severity === 'error' ? 'alert' : 'status');\n const body = document.createElement('div');\n body.textContent = Failure.problemsText(message, `${message ?? ''}`);\n const dismiss = document.createElement('button');\n dismiss.type = 'button';\n dismiss.setAttribute('aria-label', Localization.of().t('toast.dismiss'));\n const icon = document.createElement('ful-icon');\n icon.setAttribute('name', 'x-lg');\n icon.setAttribute('aria-hidden', 'true');\n dismiss.append(icon);\n item.append(body, dismiss);\n item.addEventListener('animationend', () => {\n if (item.classList.contains('ful-toast-out')) {\n item.remove();\n }\n });\n const retire = () => {\n //the toast may hold the focus, on its own dismiss button: handing it\n //back to the region keeps the reader somewhere rather than on <body>\n if (item.contains(document.activeElement)) {\n /** @type HTMLElement */ (this).focus();\n }\n if (matchMedia('(prefers-reduced-motion: reduce)').matches) {\n item.remove();\n return;\n }\n item.classList.add('ful-toast-out');\n if (item.getAnimations().length === 0) {\n item.remove();\n }\n };\n dismiss.addEventListener('click', retire);\n this.append(item);\n setTimeout(retire, options.timeout ?? this.#timeout);\n return item;\n }\n}\n\nexport { Toasts };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\n\n/**\n * A tab panel: one visible panel at a time, announced through the tab pattern\n * (a tablist of tab buttons, each panel a tabpanel named by its tab). The tabs\n * are declared as <tab> elements in the tabs slot, the panels as the slotless\n * children, paired in order. Entering a panel fires the section:requested\n * family on it (generic and #index, panels being nameless) and awaits the\n * answers, so a panel can deliver itself asynchronously.\n */\nclass Tabs extends ParsedElement {\n static slots = true;\n static observed = ['active:number'];\n static template = `\n <ful-tablist role=\"tablist\">{{{{ slots.tabs }}}}</ful-tablist>\n {{{{ slots.default }}}}\n `;\n #tablist;\n #tabs = [];\n #panels = [];\n #requests = new SectionRequests();\n #active = 0;\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n this.#tablist = fragment.querySelector('ful-tablist');\n const declared = [...this.#tablist.children];\n this.#panels = [...fragment.children].filter((el) => el !== this.#tablist);\n if (declared.length !== this.#panels.length) {\n console.warn(\n `ful-tabs: ${declared.length} tabs declared for ${this.#panels.length} panels, the surplus is left alone`,\n );\n }\n const count = Math.min(declared.length, this.#panels.length);\n this.#tabs = [];\n for (let i = 0; i !== count; ++i) {\n const panel = this.#panels[i];\n const tab = document.createElement('button');\n tab.type = 'button';\n tab.role = 'tab';\n tab.id = Attributes.uid('ful-tab');\n //an author-named panel keeps its name: the wiring adopts it\n if (!panel.id) {\n panel.id = Attributes.uid('ful-tabpanel');\n }\n tab.setAttribute('aria-controls', panel.id);\n panel.role = 'tabpanel';\n panel.setAttribute('aria-labelledby', tab.id);\n //the visible panel joins the tab order: keyboard and reader users\n //reach its content right after its tab, hidden ones stay out\n panel.tabIndex = 0;\n tab.append(...declared[i].childNodes);\n tab.addEventListener('click', () => {\n this.active = i;\n });\n declared[i].replaceWith(tab);\n this.#tabs.push(tab);\n }\n this.#tablist.addEventListener('keydown', (e) => {\n const current = this.#active;\n /** @type {number|null} */\n let target = null;\n if (e.key === 'ArrowRight') {\n target = (current + 1) % this.#tabs.length;\n } else if (e.key === 'ArrowLeft') {\n target = (current - 1 + this.#tabs.length) % this.#tabs.length;\n } else if (e.key === 'Home') {\n target = 0;\n } else if (e.key === 'End') {\n target = this.#tabs.length - 1;\n }\n if (target === null || target === current) {\n return;\n }\n e.preventDefault();\n this.active = target;\n this.#tabs[target].focus();\n });\n this.replaceChildren(fragment);\n }\n get active() {\n return this.#active;\n }\n /**\n * Re-fires the section:requested family on the panel (by index or the\n * panel element itself), whether active or not: the explicit request for a\n * content that wants refreshing. A failed refresh paints its problems,\n * nothing rejects: there is no caller to reject towards.\n */\n refresh(ref) {\n const index = ref instanceof Element ? this.#panels.indexOf(ref) : Number.isInteger(ref) ? ref : NaN;\n const panel = this.#panels[index];\n if (!panel) {\n console.warn(`ful-tabs: no panel answers to \"${ref}\"`);\n return undefined;\n }\n return this.#requests.request(this, panel, null, index)?.then(undefined, () => undefined);\n }\n set active(v) {\n const index = Math.min(Math.max(0, Number(v) || 0), Math.max(0, this.#tabs.length - 1));\n const previous = this.#active;\n for (const [i, tab] of this.#tabs.entries()) {\n tab.setAttribute('aria-selected', i === index ? 'true' : 'false');\n tab.tabIndex = i === index ? 0 : -1;\n this.#panels[i].hidden = i !== index;\n }\n this.#active = index;\n this.reflectTo('active', index);\n if (this.rendered && index !== previous) {\n this.dispatchEvent(new CustomEvent('change', { detail: { active: index, previous } }));\n }\n if (this.#panels.length > 0 && (index !== previous || !this.rendered)) {\n //the activation is the reader's own gesture: the chrome reports a\n //failed delivery, there is no caller to reject towards\n this.#requests.request(this, this.#panels[index], null, index)?.catch(() => undefined);\n }\n }\n}\n\nexport { Tabs };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\n\n/**\n * An accordion over native details/summary disclosures: the platform carries\n * the semantics, the keyboard and the toggling, the chrome paints the group.\n * With the exclusive claim the render assigns one shared name to every panel,\n * which is the platform's own exclusive grouping: opening one closes the others.\n */\nclass Accordion extends ParsedElement {\n static slots = true;\n static observed = ['exclusive:presence'];\n static template = `\n <ful-accordion-group>{{{{ slots.default }}}}</ful-accordion-group>\n `;\n #group;\n #exclusive = false;\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n this.#group = fragment.querySelector('ful-accordion-group');\n this.replaceChildren(fragment);\n }\n get exclusive() {\n return this.#exclusive;\n }\n set exclusive(v) {\n this.#exclusive = v === true;\n this.reflectTo('exclusive', this.#exclusive);\n const name = this.#exclusive ? Attributes.uid('ful-accordion') : null;\n for (const details of this.#group.querySelectorAll(':scope > details')) {\n if (name === null) {\n details.removeAttribute('name');\n } else {\n details.setAttribute('name', name);\n }\n }\n }\n}\n\nexport { Accordion };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\n\n/**\n * A wizard: a progress of steps over one-of-N sections, the homeinsurance\n * layout distilled. The steps are declared as <step> elements in the steps\n * slot, the sections as the slotless children, paired in order; each section\n * may carry a data-step name, which is what move() answers to. The current\n * step is the aria-current=step claim, carried in lockstep by the step and\n * its section: the chrome (including which section is shown) follows the\n * claim alone, so the markup state and the style can never disagree. The\n * progress chrome shows the current step alone by default; the progress\n * attribute picks another shape over the same claims (timeline, dots, none).\n * Entering a section\n * fires the section:requested family on it and awaits the answers, so a\n * section can deliver itself asynchronously; move() resolves when the entered\n * section is painted, and rejects when its delivery fails.\n */\nclass Wizard extends ParsedElement {\n static slots = true;\n static observed = ['progress'];\n static template = `\n <ful-steps><ol data-tpl-aria-label=\"#l10n:t('wizard.progress')\">{{{{ slots.steps }}}}</ol></ful-steps>\n {{{{ slots.default }}}}\n `;\n #steps = [];\n #sections = [];\n #requests = new SectionRequests();\n #index = 0;\n #progress;\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n const list = fragment.querySelector('ful-steps ol');\n const declared = [...list.children];\n this.#sections = [...fragment.children].filter((el) => el.localName !== 'ful-steps');\n if (declared.length !== this.#sections.length) {\n console.warn(\n `ful-wizard: ${declared.length} steps declared for ${this.#sections.length} sections, the surplus is left alone`,\n );\n }\n const count = Math.min(declared.length, this.#sections.length);\n this.#steps = [];\n for (let i = 0; i !== count; ++i) {\n const li = document.createElement('li');\n li.append(...declared[i].childNodes);\n declared[i].replaceWith(li);\n this.#steps.push(li);\n //the section is the focus target of a move: the step that just\n //became current must receive it, the button that moved it having\n //left the document with its own section\n this.#sections[i].tabIndex = -1;\n }\n this.replaceChildren(fragment);\n if (count > 0) {\n //a section already carrying the claim keeps it: server-rendered state wins\n const claimed = this.#sections.findIndex((s) => s.getAttribute('aria-current') === 'step');\n this.#apply(claimed === -1 ? 0 : Math.min(claimed, count - 1));\n this.#enter(this.#index)?.catch(() => undefined);\n }\n }\n get index() {\n return this.#index;\n }\n get step() {\n return this.#sections[this.#index]?.getAttribute('data-step') ?? null;\n }\n get progress() {\n return this.#progress;\n }\n set progress(v) {\n this.#progress = v;\n this.reflectTo('progress', v);\n }\n next() {\n return this.#move(this.#index + 1);\n }\n prev() {\n return this.#move(this.#index - 1);\n }\n move(ref) {\n const index = this.#sections.findIndex((s) => s.getAttribute('data-step') === ref);\n if (index === -1) {\n console.warn(`ful-wizard: no section carries data-step=\"${ref}\"`);\n return undefined;\n }\n return this.#move(index);\n }\n /**\n * Re-fires the section:requested family on the named section (or the\n * section element itself), whether active or not: the explicit request for a\n * content that wants refreshing. A failed refresh paints its problems,\n * nothing rejects: move() stays the rejecting call.\n */\n refresh(ref) {\n const section =\n ref instanceof Element\n ? ref\n : typeof ref === 'string'\n ? this.#sections.find((s) => s.getAttribute('data-step') === ref)\n : undefined;\n const index = this.#sections.indexOf(section);\n if (index === -1) {\n console.warn(`ful-wizard: no section answers to \"${ref}\"`);\n return undefined;\n }\n return this.#enter(index)?.then(undefined, () => undefined);\n }\n #enter(index) {\n return this.#requests.request(\n this,\n this.#sections[index],\n this.#sections[index].getAttribute('data-step'),\n index,\n );\n }\n #move(index) {\n const clamped = Math.min(Math.max(0, index), Math.max(0, this.#steps.length - 1));\n if (clamped === this.#index) {\n return undefined;\n }\n this.#apply(clamped);\n //the moving control lived in the section that just hid: focus follows\n //the step, or the reader lands on the body knowing nothing happened\n this.#sections[this.#index].focus();\n if (this.rendered) {\n this.dispatchEvent(new CustomEvent('change', { detail: { index: this.#index, step: this.step } }));\n }\n return this.#enter(clamped);\n }\n #apply(index) {\n for (const [i, step] of this.#steps.entries()) {\n if (i === index) {\n step.setAttribute('aria-current', 'step');\n this.#sections[i].setAttribute('aria-current', 'step');\n } else {\n step.removeAttribute('aria-current');\n this.#sections[i].removeAttribute('aria-current');\n }\n }\n this.#index = index;\n }\n}\n\nexport { Wizard };\n","export default {\n 'pagination.showing': 'Page {current} of {total}',\n 'pagination.navigation': 'Page navigation',\n 'pagination.previous': 'Previous',\n 'pagination.next': 'Next',\n 'pagination.reload': 'Reload',\n 'table.initial': 'Start searching to see results.',\n 'table.error': 'Error while loading data:',\n 'table.no-data': 'No elements found.',\n 'dropdown.empty': 'No results',\n 'select.remove': 'Remove',\n 'files.dropzone-label': 'Click or drop your files here',\n 'files.remove': 'Remove',\n 'files.unacceptable-file-type': 'Only files of type {types} are supported',\n 'files.max-file-size-exceeded': 'Maximum supported file size is {size}',\n 'files.max-total-size-exceeded': 'Maximum supported total file size is {size}',\n 'files.max-files-exceeded': { one: 'Maximum of {count} file exceeded', other: 'Maximum of {count} files exceeded' },\n 'filters.op.EQ': 'Equals',\n 'filters.op.NEQ': 'Not equal',\n 'filters.op.LT': 'Less than',\n 'filters.op.GT': 'Greater than',\n 'filters.op.LTE': 'At most',\n 'filters.op.GTE': 'At least',\n 'filters.op.BETWEEN': 'Between',\n 'filters.op.CONTAINS': 'Contains',\n 'filters.op.STARTS_WITH': 'Starts with',\n 'filters.op.ENDS_WITH': 'Ends with',\n 'filters.sensitivity.IGNORE_CASE': 'Ignore case',\n 'filters.sensitivity.CASE_SENSITIVE': 'Case sensitive',\n 'filters.boolean.any': 'Any',\n 'filters.boolean.true': 'Yes',\n 'filters.boolean.false': 'No',\n 'info.tooltip': 'More information',\n 'dialog.acknowledge': 'Got it',\n 'drawer.close': 'Close',\n 'spinner.loading': 'Loading…',\n 'toast.region': 'Notifications',\n 'toast.dismiss': 'Dismiss',\n 'wizard.progress': 'Progress',\n};\n","export default {\n 'pagination.showing': 'Pagina {current} di {total}',\n 'pagination.navigation': 'Navigazione pagine',\n 'pagination.previous': 'Precedente',\n 'pagination.next': 'Successivo',\n 'pagination.reload': 'Ricarica',\n 'table.initial': 'Avvia la ricerca per visualizzare i risultati.',\n 'table.error': 'Errore nel caricamento dei dati:',\n 'table.no-data': 'Nessun elemento trovato.',\n 'dropdown.empty': 'Nessun risultato',\n 'select.remove': 'Rimuovi',\n 'files.dropzone-label': 'Clicca o trascina i file qui',\n 'files.remove': 'Rimuovi',\n 'files.unacceptable-file-type': 'Solo i file di tipo {types} sono supportati',\n 'files.max-file-size-exceeded': 'La dimensione massima di un file è di {size}',\n 'files.max-total-size-exceeded': 'La dimensione massima complessiva dei file è di {size}',\n 'files.max-files-exceeded': { other: 'Superato il numero massimo di {count} file' },\n 'filters.op.EQ': 'Uguale',\n 'filters.op.NEQ': 'Diverso',\n 'filters.op.LT': 'Minore',\n 'filters.op.GT': 'Maggiore',\n 'filters.op.LTE': 'Al massimo',\n 'filters.op.GTE': 'Almeno',\n 'filters.op.BETWEEN': 'Tra',\n 'filters.op.CONTAINS': 'Contiene',\n 'filters.op.STARTS_WITH': 'Inizia con',\n 'filters.op.ENDS_WITH': 'Termina con',\n 'filters.sensitivity.IGNORE_CASE': 'Ignora maiuscole',\n 'filters.sensitivity.CASE_SENSITIVE': 'Distingui maiuscole',\n 'filters.boolean.any': 'Qualsiasi',\n 'filters.boolean.true': 'Sì',\n 'filters.boolean.false': 'No',\n 'info.tooltip': 'Maggiori informazioni',\n 'dialog.acknowledge': 'Ho capito',\n 'drawer.close': 'Chiudi',\n 'spinner.loading': 'Caricamento…',\n 'toast.region': 'Notifiche',\n 'toast.dismiss': 'Chiudi',\n 'wizard.progress': 'Avanzamento',\n};\n","export default {\n 'pagination.showing': 'Página {current} de {total}',\n 'pagination.navigation': 'Navegación de páginas',\n 'pagination.previous': 'Anterior',\n 'pagination.next': 'Siguiente',\n 'pagination.reload': 'Recargar',\n 'table.initial': 'Inicia la búsqueda para ver los resultados.',\n 'table.error': 'Error al cargar los datos:',\n 'table.no-data': 'No se encontraron elementos.',\n 'dropdown.empty': 'Sin resultados',\n 'select.remove': 'Eliminar',\n 'files.dropzone-label': 'Haz clic o arrastra tus archivos aquí',\n 'files.remove': 'Eliminar',\n 'files.unacceptable-file-type': 'Solo se admiten archivos de tipo {types}',\n 'files.max-file-size-exceeded': 'El tamaño máximo de archivo admitido es {size}',\n 'files.max-total-size-exceeded': 'El tamaño total máximo admitido es {size}',\n 'files.max-files-exceeded': { other: 'Se ha superado el número máximo de {count} archivos' },\n 'filters.op.EQ': 'Igual',\n 'filters.op.NEQ': 'Distinto',\n 'filters.op.LT': 'Menor',\n 'filters.op.GT': 'Mayor',\n 'filters.op.LTE': 'Como máximo',\n 'filters.op.GTE': 'Al menos',\n 'filters.op.BETWEEN': 'Entre',\n 'filters.op.CONTAINS': 'Contiene',\n 'filters.op.STARTS_WITH': 'Empieza por',\n 'filters.op.ENDS_WITH': 'Termina por',\n 'filters.sensitivity.IGNORE_CASE': 'Ignorar mayúsculas',\n 'filters.sensitivity.CASE_SENSITIVE': 'Distinguir mayúsculas',\n 'filters.boolean.any': 'Cualquiera',\n 'filters.boolean.true': 'Sí',\n 'filters.boolean.false': 'No',\n 'info.tooltip': 'Más información',\n 'dialog.acknowledge': 'Entendido',\n 'drawer.close': 'Cerrar',\n 'spinner.loading': 'Cargando…',\n 'toast.region': 'Notificaciones',\n 'toast.dismiss': 'Cerrar',\n 'wizard.progress': 'Progreso',\n};\n","export default {\n 'pagination.showing': 'Page {current} sur {total}',\n 'pagination.navigation': 'Navigation des pages',\n 'pagination.previous': 'Précédent',\n 'pagination.next': 'Suivant',\n 'pagination.reload': 'Recharger',\n 'table.initial': 'Lancez la recherche pour voir les résultats.',\n 'table.error': 'Erreur lors du chargement des données :',\n 'table.no-data': 'Aucun élément trouvé.',\n 'dropdown.empty': 'Aucun résultat',\n 'select.remove': 'Retirer',\n 'files.dropzone-label': 'Cliquez ou déposez vos fichiers ici',\n 'files.remove': 'Retirer',\n 'files.unacceptable-file-type': 'Seuls les fichiers de type {types} sont pris en charge',\n 'files.max-file-size-exceeded': 'La taille maximale de fichier prise en charge est {size}',\n 'files.max-total-size-exceeded': 'La taille totale maximale prise en charge est {size}',\n 'files.max-files-exceeded': {\n one: 'Nombre maximal de {count} fichier dépassé',\n other: 'Nombre maximal de {count} fichiers dépassé',\n },\n 'filters.op.EQ': 'Égal',\n 'filters.op.NEQ': 'Différent',\n 'filters.op.LT': 'Inférieur',\n 'filters.op.GT': 'Supérieur',\n 'filters.op.LTE': 'Au plus',\n 'filters.op.GTE': 'Au moins',\n 'filters.op.BETWEEN': 'Entre',\n 'filters.op.CONTAINS': 'Contient',\n 'filters.op.STARTS_WITH': 'Commence par',\n 'filters.op.ENDS_WITH': 'Finit par',\n 'filters.sensitivity.IGNORE_CASE': 'Ignorer la casse',\n 'filters.sensitivity.CASE_SENSITIVE': 'Respecter la casse',\n 'filters.boolean.any': 'Indifférent',\n 'filters.boolean.true': 'Oui',\n 'filters.boolean.false': 'Non',\n 'info.tooltip': 'Plus d’informations',\n 'dialog.acknowledge': 'J’ai compris',\n 'drawer.close': 'Fermer',\n 'spinner.loading': 'Chargement…',\n 'toast.region': 'Notifications',\n 'toast.dismiss': 'Fermer',\n 'wizard.progress': 'Progression',\n};\n","import { HttpClient } from '../httpc/index.mjs';\nimport { Localization } from '../ftl/index.mjs';\nimport { Checkbox } from './forms/checkbox.mjs';\nimport { LocalDate, Instant, InputLocalDate, InputLocalTime, InputInstant } from './forms/temporals.mjs';\nimport { BooleanFilter, InstantFilter, LocalDateFilter, NumberFilter, TextFilter } from './forms/filters.mjs';\nimport { FormLoader, Form } from './forms/form.mjs';\nimport { Input } from './forms/input.mjs';\nimport { InputFile } from './forms/files.mjs';\nimport { RadioGroup } from './forms/radio.mjs';\nimport { SelectLoader, Dropdown, Select } from './forms/select.mjs';\nimport { Tooltip, Dialog } from './disclosures/info.mjs';\nimport { Drawer } from './disclosures/drawer.mjs';\nimport { Toasts } from './disclosures/toast.mjs';\nimport { Tabs } from './navigation/tabs.mjs';\nimport { Accordion } from './disclosures/accordion.mjs';\nimport { Wizard } from './navigation/wizard.mjs';\nimport { TableLoader, Table, Pagination, SortButton } from './navigation/table.mjs';\nimport en from './l10n/en.mjs';\nimport it from './l10n/it.mjs';\nimport es from './l10n/es.mjs';\nimport fr from './l10n/fr.mjs';\n\nconst BUILTIN = { en, it, es, fr };\n\n/**\n * Registers everything ful provides on a registry: the elements, the loader\n * components, an http client, and the translations for the configured\n * language. A page calls `registry.plugin(new Plugin({…})).configure()` once.\n */\nclass Plugin {\n #language;\n #translations;\n #httpClient;\n\n /**\n * @param {{ language?: string, translations?: Record<string, any>, httpClient?: any }} [options]\n * `language` is fixed for the page: a full BCP-47 tag or a primary subtag,\n * defaulting to the browser's language. `translations` is a flat\n * active-language map applied over the built-in translations: reword built-in\n * keys ('pagination.showing', …) or add your own ('checkout.total', …).\n * `httpClient` is the client every ful component fetches through, registered\n * as the `http-client` component: where an unauthorized session goes is an\n * application decision, so a page that does not want the default's redirect\n * to '/' builds its own.\n */\n constructor(options = {}) {\n this.#language = options.language ?? navigator?.language ?? 'en';\n this.#translations = options.translations ?? {};\n this.#httpClient = options.httpClient ?? null;\n }\n\n configure(registry) {\n const httpClient =\n this.#httpClient ?? HttpClient.builder().withCsrfToken().withRedirectOnUnauthorized('/').build();\n //the fallback chain is baked here: en, the active language, the consumer's own strings\n const language = this.#language.split('-')[0];\n const l10n = { ...BUILTIN.en, ...BUILTIN[language], ...this.#translations };\n registry\n .defineModule('l10n', Localization)\n .defineComponent('http-client', httpClient)\n .defineElement('ful-tooltip', Tooltip)\n .defineElement('ful-dialog', Dialog)\n .defineElement('ful-drawer', Drawer)\n .defineElement('ful-toasts', Toasts)\n .defineElement('ful-tabs', Tabs)\n .defineElement('ful-accordion', Accordion)\n .defineElement('ful-wizard', Wizard)\n .defineElement('ful-form', Form)\n .defineElement('ful-checkbox', Checkbox)\n .defineElement('ful-input', Input)\n .defineElement('ful-input-file', InputFile)\n .defineElement('ful-local-date', LocalDate)\n .defineElement('ful-instant', Instant)\n .defineElement('ful-input-local-date', InputLocalDate)\n .defineElement('ful-input-local-time', InputLocalTime)\n .defineElement('ful-input-instant', InputInstant)\n .defineElement('ful-radio-group', RadioGroup)\n .defineElement('ful-table', Table)\n .defineElement('ful-pagination', Pagination)\n .defineElement('ful-sorter', SortButton)\n .defineElement('ful-filter-instant', InstantFilter)\n .defineElement('ful-filter-local-date', LocalDateFilter)\n .defineElement('ful-filter-number', NumberFilter)\n .defineElement('ful-filter-boolean', BooleanFilter)\n .defineElement('ful-filter-text', TextFilter)\n .defineElement('ful-select', Select)\n .defineElement('ful-dropdown', Dropdown)\n .defineComponent('loaders:select', SelectLoader)\n .defineComponent('loaders:form', FormLoader)\n .defineComponent('loaders:table', TableLoader)\n //the two names a template and the l10n facade resolve: the messages,\n //and the locale every formatter needs. The primary subtag is not a\n //third: it exists to pick the built-in bundle above, and publishing\n //it put a bare name nothing reads into the scope of every template\n .defineOverlay({\n l10n,\n locale: this.#language,\n });\n }\n}\n\nexport { Plugin };\n","import * as ftl from './ftl/index.mjs';\nimport * as httpc from './httpc/index.mjs';\nimport * as ful from './ful/index.mjs';\n\nif (typeof window !== 'undefined') {\n // biome-ignore-start lint/complexity/useLiteralKeys: checkJs rejects unknown properties on Window\n window['ftl'] = ftl;\n window['httpc'] = httpc;\n window['ful'] = ful;\n // biome-ignore-end lint/complexity/useLiteralKeys: checkJs rejects unknown properties on Window\n}\n\nexport * from './ftl/index.mjs';\nexport * from './httpc/index.mjs';\nexport * from './ful/index.mjs';\n"],"names":["$top_level_initializer","TemplatedRoot","TemplatedExpression","value","BeginNode","EndNode","BeginHtml","EndHtml","BeginText","EndText","TemplatedText","parts","c","ExpressionRoot","r","TernaryExpression","cond","ifTrue","ifFalse","ElvisExpression","NullCoalescingExpression","lhs","rhs","OrExpression","head","tail","AndExpression","EqExpression","op","RelExpression","NotExpression","expr","Access","AccessExpression","AccessMember","AccessSubscript","AccessMethodCall","h","t","GroupingExpression","e","ModuleFunctionCall","fn","AnyLiteral","NumberLiteral","StringLiteral","TemplateStringExpression","TemplateStringLiteral","char","ArrayLiteral","DictLiteral","ModuleFunction","module","v","Word","Identifier","s","EqualityOp","RelationalOp","_","parse"],"mappings":";;;IAAA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,YAAY,CAAC;IACnB,IAAI,IAAI;IACR,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAE;IACxB;IACA,IAAI,WAAW,CAAC,GAAG,EAAE;IACrB,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;IACvB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE;IAC/B,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;IACpC,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IACzC,QAAQ;IACR,QAAQ,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;IAClC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;IAC7C,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IACnE,QAAQ;IACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IACrC,QAAQ,OAAO,KAAK;IACpB,IAAI;IACJ,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;IACjC,IAAI;IACJ;;ICtCA,MAAM,KAAK,GAAG;IACd,IAAI,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;IAC1B,IAAI,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;IACxB,IAAI,KAAK,EAAE,MAAM,CAAC,kBAAkB,CAAC;IACrC,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;IACpB,IAAI,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;IACtB,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;IACpB,IAAI,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;IACtB,IAAI,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;IACtB,IAAI,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC5B,IAAI,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;IACnC,IAAI,SAAS,EAAE,MAAM,CAAC,kBAAkB,CAAC;IACzC,IAAI,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC;IACxC,IAAI,IAAI,EAAE,MAAM,CAAC,sBAAsB,CAAC;IACxC,IAAI,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;IAC9B,IAAI,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;IAC9B,IAAI,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC;IAClC,IAAI,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC;IAChC,IAAI,QAAQ,EAAE,MAAM,CAAC,iBAAiB,CAAC;IACvC,IAAI,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC5B,IAAI,SAAS,EAAE;IACf,QAAQ,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC;IACrC,QAAQ,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC;IACrC,QAAQ,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC;IACrC,QAAQ,GAAG,EAAE,MAAM,CAAC,mBAAmB,CAAC;IACxC,KAAK;IACL,IAAI,GAAG,EAAE;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IACzB,KAAK;IACL,CAAC;;;;;;IC7BDA;IACAA;IACAA;IACAA;IACAA,IAAAA,MAAAA,QAAAA,GAAAA,IAAAA,GAAAA,CAAAA;IACAA,QAAAA,CAAAA,MAAAA,EAAAA,IAAAA,CAAAA;IACAA,QAAAA,CAAAA,OAAAA,EAAAA,KAAAA,CAAAA;IACAA,QAAAA,CAAAA,MAAAA,EAAAA,IAAAA,CAAAA;IACAA,QAAAA,CAAAA,WAAAA,EAAAA,SAAAA,CAAAA;IACAA,KAAAA,CAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKiE,EAAA,SAAA,MAAA,CAAA,KAAA,EAAA,KAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,GAAA,EAAA,KAAA,CAAyC,EAAA;IAC5D,EAAA,SAAA,MAAA,CAAA,KAAA,EAAA,KAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,GAAA,EAAA,KAAA,CAAyC,EAAA;IACzC,EAAA,SAAA,MAAA,CAAA,KAAA,EAAA,KAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,GAAA,EAAA,KAAA,CAAyC,EAAA;IAC/D,EAAA,SAAA,MAAA,CAAA,KAAA,EAAA,KAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,GAAA,EAAA,KAAA,CAAyC,EAAA;IAgB7C,EAAA,SAAA,MAAA,CAAA,CAAA,EAAA,KAAA,OAAA,CAAA,CAAW,EAAA;IAEvB,EAAA,SAAA,MAAA,CAAA,KAAA,EAAA,KAAA,OAAA,KAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAwB,EAAA;IAGR,EAAA,SAAA,MAAA,CAAA,CAAA,EAAA,KAAA,OAAA,CAAA,CAAW,EAAA;IAK4D,EAAA,SAAA,MAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,KAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,CAAA,CAAiD,EAAA;IAI1E,EAAA,SAAA,MAAA,CAAA,IAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAwC,EAAA;IAIhD,EAAA,SAAA,MAAA,CAAA,GAAA,EAAA,GAAA,EAAA,KAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,EAAA,GAAA,EAAA,GAAA,CAAA,CAAsC,EAAA;IAItC,EAAA,SAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA;IAC9D,IAAA,IAAA,MAAA,GAAA,IAAA;IACA,IAAA,KAAA,MAAA,GAAA,IAAA,IAAA,EAAA;IACA,QAAA,MAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,CAAA;IACA,IAAA;IACA,IAAA,OAAA,MAAA;IACI,EAAA;IAGwD,EAAA,SAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA;IAC5D,WAAA,IAAA,MAAA,GAAA,IAAA;IACA,WAAA,KAAA,MAAA,GAAA,IAAA,IAAA,EAAA;IACA,eAAA,MAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,CAAA;IACA,WAAA;IACA,WAAA,OAAA,MAAA;IACI,EAAA;IAGgE,EAAA,SAAA,OAAA,CAAA,IAAA,EAAA,EAAA,EAAA,GAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,GAAA,CAAA,CAAiB,EAAA;IAAK,EAAA,SAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA;IAC1F,WAAA,IAAA,MAAA,GAAA,IAAA;IACA,WAAA,KAAA,MAAA,OAAA,IAAA,IAAA,EAAA;IACA,eAAA,MAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,EAAA,OAAA,CAAA,EAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,OAAA,CAAA,GAAA,CAAA;IACA,WAAA;IACA,WAAA,OAAA,MAAA;IACI,EAAA;IAGkE,EAAA,SAAA,OAAA,CAAA,IAAA,EAAA,EAAA,EAAA,GAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,GAAA,CAAA,CAAiB,EAAA;IAAK,EAAA,SAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA;IAC5F,IAAA,IAAA,MAAA,GAAA,IAAA;IACA,IAAA,KAAA,MAAA,OAAA,IAAA,IAAA,EAAA;IACA,QAAA,MAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,GAAA,EAAA,EAAA,EAAA,OAAA,CAAA,EAAA,EAAA,GAAA,EAAA,MAAA,EAAA,GAAA,EAAA,OAAA,CAAA,GAAA,CAAA;IACA,IAAA;IACA,IAAA,OAAA,MAAA;IACI,EAAA;IAI4B,EAAA,SAAA,OAAA,CAAA,IAAA,EAAA,KAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,EAAA,IAAA,CAA+B,EAAA;IAKJ,EAAA,SAAA,OAAA,CAAA,GAAA,EAAA,GAAA,EAAA,KAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,MAAA,EAAA,GAAA,EAAA,GAAA,CAAuC,EAAA;IAUlE,EAAA,SAAA,OAAA,CAAA,EAAA,EAAA,GAAA,EAAA;IAChC,IAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,MAAA,EAAA,EAAA,EAAA,EAAA,KAAA,IAAA,EAAA,GAAA,EAAA,GAAA,CAAA;IACI,EAAA;IAGwC,EAAA,SAAA,OAAA,CAAA,EAAA,EAAA,GAAA,EAAA;IAC5C,WAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,SAAA,EAAA,EAAA,EAAA,EAAA,KAAA,IAAA,EAAA,GAAA,CAAA,CAAA;IACI,EAAA;IAGkE,EAAA,SAAA,OAAA,CAAA,EAAA,EAAA,CAAA,EAAA,CAAA,EAAA;IACtE,WAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,MAAA,EAAA,EAAA,EAAA,EAAA,KAAA,IAAA,EAAA,IAAA,EAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAAA,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA,CAAA,CAAA;IACI,EAAA;IAG4B,EAAA,SAAA,OAAA,CAAA,CAAA,EAAA,KAAA,OAAA,CAAU,EAAA;IAOqC,EAAA,SAAA,OAAA,CAAA,EAAA,EAAA,CAAA,EAAA,CAAA,EAAA;IAC/E,IAAA,MAAA,IAAA,GAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAAA,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA;IACA,IAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,IAAA,EAAA,KAAA,EAAA,EAAA,EAAA,IAAA,CAAA;IACI,EAAA;IASwD,EAAA,SAAA,OAAA,CAAA,KAAA,EAAA;IAC5D,IAAA,OAAA,EAAA,IAAA,EAAA,KAAA,CAAA,OAAA,EAAA,KAAA,EAAA,UAAA,CAAA,KAAA,CAAA,EAAA;IACI,EAAA;IAGyB,EAAA,SAAA,OAAA,CAAA,KAAA,EAAA,KAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,OAAA,EAAA,KAAA,CAAA,CAAsC,EAAA;IACtC,EAAA,SAAA,OAAA,CAAA,KAAA,EAAA,KAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,OAAA,EAAA,KAAA,CAAA,CAAsC,EAAA;IACM,EAAA,SAAA,OAAA,CAAA,KAAA,EAAA;IACzE,WAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,OAAA,EAAA,KAAA,CAAA,CAAA;IACI,EAAA;IAG+B,EAAA,SAAA,OAAA,CAAA,IAAA,EAAA;IACnC,WAAA,OAAA,IAAA,CAAA;IACI,EAAA;IAKgB,EAAA,SAAA,OAAA,CAAA,CAAA,EAAA,KAAA,OAAA,CAAA,CAAW,EAAA;IACvB,EAAA,SAAA,OAAA,CAAA,KAAA,EAAA;IACR,IAAA,OAAA,EAAA,IAAA,EAAA,KAAA,CAAA,OAAA,EAAA,KAAA,EAAA,KAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IACI,EAAA;IACe,EAAA,SAAA,OAAA,CAAA,IAAA,EAAA;IACnB,WAAA,OAAA,EAAA,IAAA,EAAA,KAAA,CAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,CAAA;IACI,EAAA;IAGwD,EAAA,SAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA;IAC5D,WAAA,MAAA,KAAA,GAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAAA,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA;IACA,WAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,KAAA,EAAA,KAAA,CAAA;IACI,EAAA;IAGuG,EAAA,SAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA;IAC3G,IAAA,IAAA,KAAA,GAAA;IACA,IAAA,IAAA,CAAA,KAAA,IAAA,CAAA;IACA,QAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA;IACA,IAAA;IACA,IAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,EAAA,CAAA,CAAA;IACA,IAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA;IACI,EAAA;IAGkC,EAAA,SAAA,OAAA,CAAA,MAAA,EAAA,CAAA,EAAA;IACtC,IAAA,OAAA,CAAA,IAAA,EAAA,KAAA,CAAA,QAAA,EAAA,MAAA,EAAA,KAAA,EAAA,CAAA;IACI,EAAA;IAMU,EAAA,SAAA,OAAA,CAAA,CAAA,EAAA;IACd,IAAA,OAAA,QAAA,CAAA,GAAA,CAAA,CAAA;IACA,UAAA,CAAA,IAAA,EAAA,KAAA,CAAA,OAAA,EAAA,KAAA,EAAA,QAAA,CAAA,GAAA,CAAA,CAAA,CAAA;IACA,UAAA,CAAA,IAAA,EAAA,KAAA,CAAA,MAAA,EAAA,KAAA,EAAA,CAAA,CAAA;IACI,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAzLJC,sBAAa,GAAA;;;;;;;;;;;;IAAsB,IAAA,EAAA,GAAA,EAAA;IAAnB,IAAA,EAAA,GAAA,4BAAA,EAAA;IAAmB,IAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAnB,MAAA,EAAA,GAAA,4BAAA,EAAA;IAAmB,IAAA;;;;;;;eAEnCC,4BAAmB,GAAA;;;;;;;;;;;;IAA4C,IAAA,EAAA,GAAA,WAAA;IAAzCC,IAAAA,EAAAA,GAAO,WAAA;IAAA,IAAA,EAAA,GAAA,kBAAA,EAAA;IAAD,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAY,MAAA,EAAA,GAAA,uBAAA,EAAA;IAAc,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,QAAA,EAAA,GAAA,gBAAA,EAAA;IAAD,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAhCA,UAAAA,EAAAA,GAAgC,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAhCA,UAAAA,EAAAA,GAAgC,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAhCA,QAAAA,EAAAA,GAAgC,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAhCA,MAAAA,EAAAA,GAAgC,UAAA;IAAA,IAAA;IAAS,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA,CAAA,EAAA,CAAA;IAAA,IAAA;IAAA,IAAA,EAAA,GAAA,EAAA;IAEyB,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAD5C,MAAA,EAAA,GAAA,WAAA;IAAzCA,MAAAA,EAAAA,GAAO,WAAA;IAAA,MAAA,EAAA,GAAA,kBAAA,EAAA;IAAD,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAY,QAAA,EAAA,GAAA,uBAAA,EAAA;IAAc,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,UAAA,EAAA,GAAA,gBAAA,EAAA;IAAD,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAhCA,YAAAA,EAAAA,GAAgC,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAhCA,YAAAA,EAAAA,GAAgC,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAhCA,UAAAA,EAAAA,GAAgC,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAhCA,QAAAA,EAAAA,GAAgC,UAAA;IAAA,MAAA;IAAS,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,MAAA,CAAA,EAAA,CAAA;IAAA,MAAA;IAAA,MAAA,EAAA,GAAA,EAAA;IAC4C,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAA5C,QAAA,EAAA,GAAA,WAAA;IAAzCA,QAAAA,EAAAA,GAAO,WAAA;IAAA,QAAA,EAAA,GAAA,kBAAA,EAAA;IAAD,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAY,UAAA,EAAA,GAAA,uBAAA,EAAA;IAAc,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,YAAA,EAAA,GAAA,gBAAA,EAAA;IAAD,YAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAhCA,cAAAA,EAAAA,GAAgC,EAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,WAAA,GAAA,EAAA;IAAhCA,cAAAA,EAAAA,GAAgC,UAAA;IAAA,YAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAhCA,YAAAA,EAAAA,GAAgC,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAhCA,UAAAA,EAAAA,GAAgC,UAAA;IAAA,QAAA;IAAS,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,MAAA,CAAA,EAAA,CAAA;IAAA,QAAA;IAAA,QAAA,EAAA,GAAA,EAAA;IAA4C,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAClE,UAAA,EAAA,GAAA,WAAA;IAAnBA,UAAAA,EAAAA,GAAM,sBAAA,EAAA;IAAa,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,GAAA,MAAA,CAAA,EAAA,CAAA;IAAA,UAAA;IAAA,UAAA,EAAA,GAAA,EAAA;IADkE,QAAA;IAAA,MAAA;IAAA,IAAA;;;;;;;eAGxFC,kBAAS,GAAA;;;;;;;;;;;;IAAG,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,MAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eACZC,gBAAO,GAAA;;;;;;;;;;;;IAAG,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,MAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eACVC,kBAAS,GAAA;;;;;;;;;;;;IAAG,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,MAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eACZC,gBAAO,GAAA;;;;;;;;;;;;IAAG,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,MAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eACVC,kBAAS,GAAA;;;;;;;;;;;;IAAG,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,MAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eACZC,gBAAO,GAAA;;;;;;;;;;;;IAAG,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,MAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAEVC,sBAAa,GAAA;;;;;;;;;;;;IASP,IAAA,EAAA,GAAA,WAAA;IAJAC,IAAAA,EAAAA,GAAM,EAAA;IACJ,IAAA,EAAA,GAAA,WAAA;IAAS,IAAA,EAAA,GAAA,EAAA;IAAN,IAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,IAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAM,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAN,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAM,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAC,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,EAAA;IAAA,IAAA;IACc,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAlB,MAAA,EAAA,GAAA,WAAA;IAAJ,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,MAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAI,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,QAAA,IAAA,KAAA,CAAA,MAAA,GAAA,WAAA,EAAA;IAAAC,UAAAA,EAAAA,GAAE,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAFA,UAAAA,EAAAA,GAAE,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAH,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,MAAA,CAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAkB,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACtB,QAAA,EAAA,GAAA,WAAA;IAAK,QAAA,EAAA,GAAA,WAAA;IAAH,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,MAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAG,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,UAAA,EAAA,GAAA,WAAA;IAAA,UAAA,eAAA,EAAA;IAAC,UAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,MAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IAAD,UAAA,eAAA,EAAA;IAAA,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,GAAA,SAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAD,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,YAAA,EAAA,GAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAL,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,EAAA;IAAA,QAAA;IADsB,MAAA;IAAA,IAAA;IAF1B,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAGe,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAFb,QAAA,EAAA,GAAA,WAAA;IAAS,QAAA,EAAA,GAAA,EAAA;IAAN,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAM,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAN,YAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,YAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,cAAA,WAAA,EAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,cAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,YAAA;IAAM,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAC,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,EAAA;IAAA,QAAA;IACc,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAlB,UAAA,EAAA,GAAA,WAAA;IAAJ,UAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,YAAA,EAAA,GAAA,MAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IAAI,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,YAAA,IAAA,KAAA,CAAA,MAAA,GAAA,WAAA,EAAA;IAAAA,cAAAA,EAAAA,GAAE,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,cAAA,WAAA,EAAA;IAAA,YAAA,CAAA,MAAA;IAAFA,cAAAA,EAAAA,GAAE,UAAA;IAAA,cAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,YAAA;IAAH,YAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,cAAA,EAAA,GAAA,MAAA,CAAA,EAAA,CAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,WAAA,GAAA,EAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,YAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAkB,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACtB,YAAA,EAAA,GAAA,WAAA;IAAK,YAAA,EAAA,GAAA,WAAA;IAAH,YAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EAAA;IAAA,cAAA,EAAA,GAAA,MAAA;IAAA,cAAA,WAAA,EAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,cAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,YAAA;IAAG,YAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,cAAA,EAAA,GAAA,WAAA;IAAA,cAAA,eAAA,EAAA;IAAC,cAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EAAA;IAAA,gBAAA,EAAA,GAAA,MAAA;IAAA,gBAAA,WAAA,EAAA;IAAA,cAAA,CAAA,MAAA;IAAA,gBAAA,EAAA,GAAA,UAAA;IAAA,gBAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,cAAA;IAAD,cAAA,eAAA,EAAA;IAAA,cAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,gBAAA,EAAA,GAAA,SAAA;IAAA,cAAA,CAAA,MAAA;IAAA,gBAAA,WAAA,GAAA,EAAA;IAAA,gBAAA,EAAA,GAAA,UAAA;IAAA,cAAA;IAAD,cAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,gBAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,gBAAA,EAAA,GAAA,EAAA;IAAA,cAAA,CAAA,MAAA;IAAA,gBAAA,WAAA,GAAA,EAAA;IAAA,gBAAA,EAAA,GAAA,UAAA;IAAA,cAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,WAAA,GAAA,EAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,YAAA;IAAL,YAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,cAAA,EAAA,GAAA,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,EAAA,GAAA,EAAA;IAAA,YAAA;IADsB,UAAA;IAAA,QAAA;IACX,MAAA;IAAA,IAAA,CAAA,MAAA;IAHfD,MAAAA,EAAAA,GAGe,UAAA;IAAA,IAAA;IACf,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA,CAAA,EAAA,CAAA;IAAA,IAAA;IAAA,IAAA,EAAA,GAAA,EAAA;;;;;;;eAENE,uBAAc,GAAA;;;;;;;;;;;;IACP,IAAA,EAAA,GAAA,WAAA;IAAD,IAAA,UAAA,EAAA;IAAEC,IAAAA,EAAAA,GAAE,0BAAA,EAAA;IAAU,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,MAAA,UAAA,EAAA;IAAD,MAAA,EAAA,GAAA,MAAA,CAAA,EAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;;;;;;;eAIpBC,0BAAiB,GAAA;;;;;;;;;;;;IACS,IAAA,EAAA,GAAA,WAAA;IAApBC,IAAAA,EAAAA,GAAK,wBAAA,EAAA;IAAwD,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAxC,MAAA,UAAA,EAAA;IAAE,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAsC,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAlC,QAAA,UAAA,EAAA;IAAEC,QAAAA,EAAAA,GAAO,0BAAA,EAAA;IAAyB,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAP,UAAA,UAAA,EAAA;IAAE,UAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,YAAA,EAAA,GAAA,OAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IAAK,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,YAAA,UAAA,EAAA;IAAEC,YAAAA,EAAAA,GAAQ,0BAAA,EAAA;IAAT,YAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,cAAA,EAAA,GAAA,MAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,WAAA,GAAA,EAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,YAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAA8E,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAC3I,MAAA,EAAA,GAAA,wBAAA,EAAA;IAD2I,IAAA;;;;;;;eAGjJC,wBAAe,GAAA;;;;;;;;;;;;IACoB,IAAA,EAAA,GAAA,WAAA;IAA7BH,IAAAA,EAAAA,GAAK,iCAAA,EAAA;IAAiC,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAR,MAAA,UAAA,EAAA;IAAE,MAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,IAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAM,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,QAAA,UAAA,EAAA;IAAEE,QAAAA,EAAAA,GAAQ,wBAAA,EAAA;IAAT,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,MAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAmE,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACzG,MAAA,EAAA,GAAA,iCAAA,EAAA;IADyG,IAAA;;;;;;;eAG/GE,iCAAwB,GAAA;;;;;;;;;;;;IACF,IAAA,EAAA,GAAA,WAAA;IAAhBC,IAAAA,EAAAA,GAAI,qBAAA,EAAA;IAAqB,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAR,MAAA,UAAA,EAAA;IAAE,MAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,IAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAM,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,QAAA,UAAA,EAAA;IAAEC,QAAAA,EAAAA,GAAI,iCAAA,EAAA;IAAL,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,MAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAsE,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAC/F,MAAA,EAAA,GAAA,qBAAA,EAAA;IAD+F,IAAA;;;;;;;eAGrGC,qBAAY,GAAA;;;;;;;;;;;;IACY,IAAA,EAAA,GAAA,WAAA;IAAlBC,IAAAA,EAAAA,GAAK,sBAAA,EAAA;IAAa,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAACC,MAAAA,EAAAA,GAAK,EAAA;IAAE,MAAA,EAAA,GAAA,WAAA;IAAD,MAAA,UAAA,EAAA;IAAE,MAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,IAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAM,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,QAAA,UAAA,EAAA;IAAGH,QAAAA,EAAAA,GAAI,sBAAA,EAAA;IAAN,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAoB,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAA3B,QAAA,EAAA,GAAA,WAAA;IAAD,QAAA,UAAA,EAAA;IAAE,QAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,IAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAM,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,UAAA,UAAA,EAAA;IAAGA,UAAAA,EAAAA,GAAI,sBAAA,EAAA;IAAN,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,GAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAoB,MAAA;IAAnC,MAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;;;;;;;eAQxBI,sBAAa,GAAA;;;;;;;;;;;;IACU,IAAA,EAAA,GAAA,WAAA;IAAjBF,IAAAA,EAAAA,GAAK,qBAAA,EAAA;IAAY,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAACC,MAAAA,EAAAA,GAAK,EAAA;IAAE,MAAA,EAAA,GAAA,WAAA;IAAD,MAAA,UAAA,EAAA;IAAE,MAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,IAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAM,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,QAAA,UAAA,EAAA;IAAGH,QAAAA,EAAAA,GAAI,qBAAA,EAAA;IAAN,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAmB,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAA1B,QAAA,EAAA,GAAA,WAAA;IAAD,QAAA,UAAA,EAAA;IAAE,QAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,IAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAM,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,UAAA,UAAA,EAAA;IAAGA,UAAAA,EAAAA,GAAI,qBAAA,EAAA;IAAN,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,GAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAmB,MAAA;IAAlC,MAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;;;;;;;eAQvBK,qBAAY,GAAA;;;;;;;;;;;;IACY,IAAA,EAAA,GAAA,WAAA;IAAlBH,IAAAA,EAAAA,GAAK,sBAAA,EAAA;IAAa,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAACC,MAAAA,EAAAA,GAAK,EAAA;IAAE,MAAA,EAAA,GAAA,WAAA;IAAD,MAAA,UAAA,EAAA;IAAEG,MAAAA,EAAAA,GAAG,mBAAA,EAAA;IAAY,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,QAAA,UAAA,EAAA;IAAEN,QAAAA,EAAAA,GAAI,sBAAA,EAAA;IAAL,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAsC,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAtD,QAAA,EAAA,GAAA,WAAA;IAAD,QAAA,UAAA,EAAA;IAAEM,QAAAA,EAAAA,GAAG,mBAAA,EAAA;IAAY,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,UAAA,UAAA,EAAA;IAAEN,UAAAA,EAAAA,GAAI,sBAAA,EAAA;IAAL,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAsC,MAAA;IAA9D,MAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;;;;;;;eAQxBO,sBAAa,GAAA;;;;;;;;;;;;IACW,IAAA,EAAA,GAAA,WAAA;IAAlBL,IAAAA,EAAAA,GAAK,sBAAA,EAAA;IAAa,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAACC,MAAAA,EAAAA,GAAK,EAAA;IAAE,MAAA,EAAA,GAAA,WAAA;IAAD,MAAA,UAAA,EAAA;IAAEG,MAAAA,EAAAA,GAAG,qBAAA,EAAA;IAAc,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,QAAA,UAAA,EAAA;IAAEN,QAAAA,EAAAA,GAAI,sBAAA,EAAA;IAAL,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAsC,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAxD,QAAA,EAAA,GAAA,WAAA;IAAD,QAAA,UAAA,EAAA;IAAEM,QAAAA,EAAAA,GAAG,qBAAA,EAAA;IAAc,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,UAAA,UAAA,EAAA;IAAEN,UAAAA,EAAAA,GAAI,sBAAA,EAAA;IAAL,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAsC,MAAA;IAAhE,MAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;;;;;;;eASxBQ,sBAAa,GAAA;;;;;;;;;;;;IACJ,IAAA,EAAA,GAAA,WAAA;IAAH,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAK,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,MAAA,UAAA,EAAA;IAAEC,MAAAA,EAAAA,GAAK,sBAAA,EAAA;IAAN,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAqD,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAC1D,MAAA,EAAA,GAAA,eAAA,EAAA;IAD0D,IAAA;;;;;;;eAIhEC,eAAM,GAAA;;;;;;;;;;;;IACsB,IAAA,EAAA,GAAA,WAAA;IAAtBX,IAAAA,EAAAA,GAAI,2BAAA,EAAA;IAAoB,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,MAAA,UAAA,EAAA;IAAEC,MAAAA,EAAAA,GAAI,EAAA;IAAkB,MAAA,EAAA,GAAA,WAAA;IAAhB,MAAA,EAAA,GAAA,yBAAA,EAAA;IAAgB,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,QAAA,UAAA,EAAA;IAAD,QAAA,EAAA,GAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAtB,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAyB,QAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAH,UAAA,EAAA,GAAA,WAAA;IAAhB,UAAA,EAAA,GAAA,yBAAA,EAAA;IAAgB,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,YAAA,UAAA,EAAA;IAAD,YAAA,EAAA,GAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAG,QAAA;IAAA,MAAA,CAAA,MAAA;IAAzBA,QAAAA,EAAAA,GAAyB,UAAA;IAAA,MAAA;IAA1B,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAqE,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAC7F,MAAA,EAAA,GAAA,2BAAA,EAAA;IAD6F,IAAA;;;;;;;eAInGW,yBAAgB,GAAA;;;;;;;;;;;;IACV,IAAA,EAAA,GAAA,qBAAA,EAAA;IACe,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAf,MAAA,EAAA,GAAA,wBAAA,EAAA;IAAe,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACf,QAAA,EAAA,GAAA,yBAAA,EAAA;IADe,MAAA;IAAA,IAAA;;;;;;;eAGrBC,qBAAY,GAAA;;;;;;;;;;;;IAAZ,IAAA,eAAA,EAAA;IACmB,IAAA,EAAA,GAAA,WAAA;IAAL,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAARN,MAAAA,EAAAA,GAAI,OAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAJA,MAAAA,EAAAA,GAAI,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAI,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAARA,QAAAA,EAAAA,GAAS,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAATA,QAAAA,EAAAA,GAAS,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAD,IAAA;IAAO,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,MAAA,UAAA,EAAA;IAAEN,MAAAA,EAAAA,GAAI,aAAA,EAAA;IAAL,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAEhB,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELa,wBAAe,GAAA;;;;;;;;;;;;IAAf,IAAA,eAAA,EAAA;IACc,IAAA,EAAA,GAAA,WAAA;IAAD,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAPP,MAAAA,EAAAA,GAAG,OAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAHA,MAAAA,EAAAA,GAAG,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAH,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAAA,MAAAA,EAAAA,GAAO,IAAA;IAAA,IAAA;IAAE,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAsB,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAlB,MAAA,UAAA,EAAA;IAAEN,MAAAA,EAAAA,GAAI,0BAAA,EAAA;IAAY,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,QAAA,UAAA,EAAA;IAAE,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAD,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAEhC,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELc,yBAAgB,GAAA;;;;;;;;;;;;IAAhB,IAAA,eAAA,EAAA;IACc,IAAA,EAAA,GAAA,WAAA;IAAD,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAPR,MAAAA,EAAAA,GAAG,OAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAHA,MAAAA,EAAAA,GAAG,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAH,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAAA,MAAAA,EAAAA,GAAO,IAAA;IAAA,IAAA;IAAE,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAiD,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAA7C,MAAA,UAAA,EAAA;IAAES,MAAAA,EAAAA,GAAG,WAAA;IAAC,MAAA,EAAA,GAAA,0BAAA,EAAA;IAAF,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAa,QAAA,EAAA,GAAA,UAAA,EAAA;IAAfA,QAAAA,EAAAA,GAAc,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAdA,QAAAA,EAAAA,GAAc,UAAA;IAAA,MAAA;IAAd,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAAA,QAAAA,EAAAA,GAAiB,IAAA;IAAA,MAAA;IAAEC,MAAAA,EAAAA,GAAE,EAAA;IAAI,MAAA,EAAA,GAAA,WAAA;IAAH,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAiB,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAb,QAAA,UAAA,EAAA;IAAG,QAAA,EAAA,GAAA,0BAAA,EAAA;IAAU,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,UAAA,UAAA,EAAA;IAAD,UAAA,EAAA,GAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAG,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAjB,QAAA,EAAA,GAAA,WAAA;IAAH,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAiB,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAb,UAAA,UAAA,EAAA;IAAG,UAAA,EAAA,GAAA,0BAAA,EAAA;IAAU,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,YAAA,UAAA,EAAA;IAAD,YAAA,EAAA,GAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAG,MAAA;IAAE,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAD,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAE3D,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELC,2BAAkB,GAAA;;;;;;;;;;;;IACT,IAAA,EAAA,GAAA,WAAA;IAAH,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAoB,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAhB,MAAA,UAAA,EAAA;IAAEC,MAAAA,EAAAA,GAAE,0BAAA,EAAA;IAAY,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,QAAA,UAAA,EAAA;IAAE,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAD,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAEV,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IADV,MAAA,EAAA,GAAA,2BAAA,EAAA;IACU,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAV,QAAA,EAAA,GAAA,mBAAA,EAAA;IAAU,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACV,UAAA,EAAA,GAAA,mBAAA,EAAA;IADU,QAAA;IAAA,MAAA;IAAA,IAAA;;;;;;;eAIhBC,2BAAkB,GAAA;;;;;;;;;;;;IAAlB,IAAA,eAAA,EAAA;IACuB,IAAA,EAAA,GAAA,WAAA;IAAjBC,IAAAA,EAAAA,GAAG,uBAAA,EAAA;IAAgE,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAjD,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAiD,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAA7C,QAAA,UAAA,EAAA;IAAEL,QAAAA,EAAAA,GAAG,WAAA;IAAC,QAAA,EAAA,GAAA,0BAAA,EAAA;IAAF,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAa,UAAA,EAAA,GAAA,UAAA,EAAA;IAAfA,UAAAA,EAAAA,GAAc,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAdA,UAAAA,EAAAA,GAAc,UAAA;IAAA,QAAA;IAAd,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAAA,UAAAA,EAAAA,GAAiB,IAAA;IAAA,QAAA;IAAEC,QAAAA,EAAAA,GAAE,EAAA;IAAI,QAAA,EAAA,GAAA,WAAA;IAAH,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAiB,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAb,UAAA,UAAA,EAAA;IAAG,UAAA,EAAA,GAAA,0BAAA,EAAA;IAAU,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,YAAA,UAAA,EAAA;IAAD,YAAA,EAAA,GAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAG,QAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAjB,UAAA,EAAA,GAAA,WAAA;IAAH,UAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,YAAA,EAAA,GAAA,OAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IAAiB,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAb,YAAA,UAAA,EAAA;IAAG,YAAA,EAAA,GAAA,0BAAA,EAAA;IAAU,YAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,cAAA,UAAA,EAAA;IAAD,cAAA,EAAA,GAAA,EAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,WAAA,GAAA,EAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,YAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAG,QAAA;IAAE,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAD,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAGpE,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELK,mBAAU,GAAA;;;;;;;;;;;;IACJ,IAAA,EAAA,GAAA,sBAAA,EAAA;IAEY,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IADZ,MAAA,EAAA,GAAA,sBAAA,EAAA;IACY,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAZ,QAAA,EAAA,GAAA,qBAAA,EAAA;IAAY,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACZ,UAAA,EAAA,GAAA,oBAAA,EAAA;IADY,QAAA;IAAA,MAAA;IAAA,IAAA;;;;;;;eAGlBC,sBAAa,GAAA;;;;;;;;;;;;IAAb,IAAA,eAAA,EAAA;IAC0D,IAAA,EAAA,GAAA,WAAA;IAApDzC,IAAAA,EAAAA,GAAM,WAAA;IAAO,IAAA,EAAA,GAAA,WAAA;IAAJ,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAG,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,IAAA;IAAA,IAAA;IAAS,IAAA,EAAA,GAAA,WAAA;IAAD,IAAA,EAAA,GAAA,EAAA;IAAL,IAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,IAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAK,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAL,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAK,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAC,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAK,MAAA,EAAA,GAAA,WAAA;IAAH,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAG,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAM,QAAA,EAAA,GAAA,EAAA;IAAL,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAK,QAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAL,UAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,UAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IAAK,QAAA;IAAN,QAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,QAAA,EAAA,GAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAQ,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,IAAA;IAAA,MAAA;IAAb,MAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,MAAA,EAAA,GAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAc,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAM,MAAA,EAAA,GAAA,WAAA;IAAH,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAG,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAM,QAAA,EAAA,GAAA,EAAA;IAAL,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAK,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAL,YAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,YAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,cAAA,WAAA,EAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,cAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,YAAA;IAAK,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAN,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,UAAA,EAAA,GAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAN,IAAA;IAAa,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,MAAA,EAAA,GAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAhD,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAAA,MAAAA,EAAAA,GAAM,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAANA,MAAAA,EAAAA,GAAM,EAAA;IAAA,IAAA;IAA8C,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,IAAA;IAAA,IAAA,EAAA,GAAA,EAAA;IAErD,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAEL0C,sBAAa,GAAA;;;;;;;;;;;;IAAb,IAAA,eAAA,EAAA;IACS,IAAA,EAAA,GAAA,WAAA;IAAH,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAgB,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAZ1C,MAAAA,EAAAA,GAAM,WAAA;IAAK,MAAA,EAAA,GAAA,EAAA;IAAJ,MAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,MAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAI,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAJ,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAI,MAAA;IAAXA,MAAAA,EAAAA,GAAM,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAO,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAD,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAC8C,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAA3D,MAAA,EAAA,GAAA,WAAA;IAAH,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAgB,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAZA,QAAAA,EAAAA,GAAM,WAAA;IAAK,QAAA,EAAA,GAAA,EAAA;IAAJ,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAI,QAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAJ,UAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,UAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IAAI,QAAA;IAAXA,QAAAA,EAAAA,GAAM,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAO,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAD,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAA8C,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAC3D,QAAA,EAAA,GAAA,WAAA;IAAH,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAA6D,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAzDQ,UAAAA,EAAAA,GAAM,EAAA;IAAC,UAAA,EAAA,GAAA,iCAAA,EAAA;IAAwB,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAG,YAAA,EAAA,GAAA,8BAAA,EAAA;IAAH,UAAA;IAAwB,UAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAhD,YAAA,EAAA,GAAA,iCAAA,EAAA;IAAwB,YAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAG,cAAA,EAAA,GAAA,8BAAA,EAAA;IAAH,YAAA;IAAwB,UAAA;IAAG,UAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,YAAA,EAAA,GAAA,OAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IAAD,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IADC,MAAA;IAAA,IAAA;IAG/D,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELmC,iCAAwB,GAAA;;;;;;;;;;;;IAAxB,IAAA,eAAA,EAAA;IACS,IAAA,EAAA,GAAA,WAAA;IAAH,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAuB,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAnB,MAAA,UAAA,EAAA;IAAEf,MAAAA,EAAAA,GAAK,0BAAA,EAAA;IAAY,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,QAAA,UAAA,EAAA;IAAE,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAD,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAExB,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELgB,8BAAqB,GAAA;;;;;;;;;;;;IAArB,IAAA,eAAA,EAAA;IAIM,IAAA,EAAA,GAAA,WAAA;IAHApC,IAAAA,EAAAA,GAAM,EAAA;IACJ,IAAA,EAAA,GAAA,WAAA;IAAS,IAAA,EAAA,GAAA,EAAA;IAAP,IAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,IAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAO,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAP,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAO,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAC,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,EAAA;IAAA,IAAA;IAAC,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACL,MAAA,EAAA,GAAA,WAAA;IAAJ,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,MAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAI,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,QAAA,IAAA,KAAA,CAAA,MAAA,GAAA,WAAA,EAAA;IAAAC,UAAAA,EAAAA,GAAE,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAFA,UAAAA,EAAAA,GAAE,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAH,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IADK,IAAA;IADb,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAE0B,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IADxB,QAAA,EAAA,GAAA,WAAA;IAAS,QAAA,EAAA,GAAA,EAAA;IAAP,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAO,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,YAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAP,YAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,YAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,cAAA,WAAA,EAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,cAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,YAAA;IAAO,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAC,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,UAAA,EAAA,GAAA,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,EAAA;IAAA,QAAA;IAAC,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACL,UAAA,EAAA,GAAA,WAAA;IAAJ,UAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,YAAA,EAAA,GAAA,MAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IAAI,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,YAAA,IAAA,KAAA,CAAA,MAAA,GAAA,WAAA,EAAA;IAAAA,cAAAA,EAAAA,GAAE,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,cAAA,WAAA,EAAA;IAAA,YAAA,CAAA,MAAA;IAAFA,cAAAA,EAAAA,GAAE,UAAA;IAAA,cAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,YAAA;IAAH,YAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,cAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,WAAA,GAAA,EAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,YAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IADK,QAAA;IACa,MAAA;IAAA,IAAA,CAAA,MAAA;IAF1BD,MAAAA,EAAAA,GAE0B,UAAA;IAAA,IAAA;IAC1B,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,IAAA;IAAA,IAAA,EAAA,GAAA,EAAA;IAED,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACY,MAAA,EAAA,GAAA,WAAA;IAAX,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EAAA;IAAAqC,QAAAA,EAAAA,GAAK,MAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAALA,QAAAA,EAAAA,GAAK,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAM,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,MAAA;IAAA,MAAA,EAAA,GAAA,EAAA;IADZ,IAAA;IAGA,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELC,qBAAY,GAAA;;;;;;;;;;;;IAAZ,IAAA,eAAA,EAAA;IACS,IAAA,EAAA,GAAA,WAAA;IAAH,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAgD,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAA5C,MAAA,UAAA,EAAA;IAAEZ,MAAAA,EAAAA,GAAG,0BAAA,EAAA;IAAH,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAAA,QAAAA,EAAAA,GAAa,IAAA;IAAA,MAAA;IAAG,MAAA,UAAA,EAAA;IAAEC,MAAAA,EAAAA,GAAE,EAAA;IAAI,MAAA,EAAA,GAAA,WAAA;IAAH,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAiB,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAb,QAAA,UAAA,EAAA;IAAG,QAAA,EAAA,GAAA,0BAAA,EAAA;IAAU,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,UAAA,UAAA,EAAA;IAAD,UAAA,EAAA,GAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAG,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAjB,QAAA,EAAA,GAAA,WAAA;IAAH,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAiB,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAb,UAAA,UAAA,EAAA;IAAG,UAAA,EAAA,GAAA,0BAAA,EAAA;IAAU,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAC,YAAA,UAAA,EAAA;IAAD,YAAA,EAAA,GAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAG,MAAA;IAAE,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAD,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAGjD,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELY,oBAAW,GAAA;;;;;;;;;;;;IAAX,IAAA,eAAA,EAAA;IACS,IAAA,EAAA,GAAA,WAAA;IAAH,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,MAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAA+F,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAA3F,MAAA,UAAA,EAAA;IAAEb,MAAAA,EAAAA,GAAG,WAAA;IAAC,MAAA,EAAA,GAAA,sBAAA,EAAA;IAAF,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAgB,QAAA,EAAA,GAAA,UAAA,EAAA;IAAE,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAK,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAD,UAAA,EAAA,GAAA,UAAA,EAAA;IAAG,UAAA,EAAA,GAAA,0BAAA,EAAA;IAAF,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAzBA,YAAAA,EAAAA,GAAyB,EAAA,EAAA,EAAA,EAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAzBA,YAAAA,EAAAA,GAAyB,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAzBA,UAAAA,EAAAA,GAAyB,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAzBA,QAAAA,EAAAA,GAAyB,UAAA;IAAA,MAAA;IAAzB,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAAA,QAAAA,EAAAA,GAAsC,IAAA;IAAA,MAAA;IAAE,MAAA,EAAA,GAAA,UAAA,EAAA;IAAEC,MAAAA,EAAAA,GAAE,EAAA;IAAI,MAAA,EAAA,GAAA,WAAA;IAAH,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAwC,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAApC,QAAA,EAAA,GAAA,UAAA,EAAA;IAAG,QAAA,EAAA,GAAA,sBAAA,EAAA;IAAiC,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAnB,UAAA,UAAA,EAAA;IAAE,UAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,YAAA,GAAA,GAAA,OAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,GAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IAAiB,UAAA,IAAA,GAAA,KAAA,UAAA,EAAA;IAAb,YAAA,UAAA,EAAA;IAAG,YAAA,GAAA,GAAA,0BAAA,EAAA;IAAU,YAAA,IAAA,GAAA,KAAA,UAAA,EAAA;IAAC,cAAA,UAAA,EAAA;IAAD,cAAA,EAAA,GAAA,EAAA,EAAA,EAAA,GAAA,EAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,WAAA,GAAA,EAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,YAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAG,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAxC,QAAA,EAAA,GAAA,WAAA;IAAH,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAwC,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAApC,UAAA,EAAA,GAAA,UAAA,EAAA;IAAG,UAAA,EAAA,GAAA,sBAAA,EAAA;IAAiC,UAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAnB,YAAA,UAAA,EAAA;IAAE,YAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,cAAA,GAAA,GAAA,OAAA;IAAA,cAAA,WAAA,EAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,GAAA,GAAA,UAAA;IAAA,cAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,YAAA;IAAiB,YAAA,IAAA,GAAA,KAAA,UAAA,EAAA;IAAb,cAAA,UAAA,EAAA;IAAG,cAAA,GAAA,GAAA,0BAAA,EAAA;IAAU,cAAA,IAAA,GAAA,KAAA,UAAA,EAAA;IAAC,gBAAA,UAAA,EAAA;IAAD,gBAAA,EAAA,GAAA,EAAA,EAAA,EAAA,GAAA,EAAA;IAAA,cAAA,CAAA,MAAA;IAAA,gBAAA,WAAA,GAAA,EAAA;IAAA,gBAAA,EAAA,GAAA,UAAA;IAAA,cAAA;IAAA,YAAA,CAAA,MAAA;IAAA,cAAA,WAAA,GAAA,EAAA;IAAA,cAAA,EAAA,GAAA,UAAA;IAAA,YAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,WAAA,GAAA,EAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,UAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,QAAA;IAAG,MAAA;IAAE,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAD,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAOhG,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELa,uBAAc,GAAA;;;;;;;;;;;;IAAd,IAAA,eAAA,EAAA;IACS,IAAA,EAAA,GAAA,WAAA;IAAH,IAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAuB,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAnBC,MAAAA,EAAAA,GAAQ,WAAA;IAAC,MAAA,EAAA,GAAA,aAAA,EAAA;IAAF,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAO,QAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAD,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAbA,UAAAA,EAAAA,GAAa,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,WAAA,GAAA,EAAA;IAAbA,UAAAA,EAAAA,GAAa,UAAA;IAAA,QAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAbA,QAAAA,EAAAA,GAAa,UAAA;IAAA,MAAA;IAAb,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAAA,QAAAA,EAAAA,GAAkB,IAAA;IAAA,MAAA;IAAEC,MAAAA,EAAAA,GAAE,aAAA,EAAA;IAAH,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,WAAA,GAAA,EAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,MAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAExB,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELC,aAAI,GAAA;;;;;;;;;;;;IACE,IAAA,EAAA,GAAA,WAAA;IAAY,IAAA,EAAA,GAAA,WAAA;IAAV,IAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,IAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAU,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAa,MAAA,EAAA,GAAA,EAAA;IAAb,MAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,MAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAa,MAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,QAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAb,QAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,UAAA,WAAA,EAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAa,MAAA;IAAb,MAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,CAAA;IAAA,MAAA,EAAA,GAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,WAAA,GAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,IAAA;IAAZ,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,KAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,EAAA;IAAA,IAAA;;;;;;;eAENC,mBAAU,GAAA;;;;;;;;;;;;IAAV,IAAA,eAAA,EAAA;IACY,IAAA,EAAA,GAAA,WAAA;IAANC,IAAAA,EAAAA,GAAE,aAAA,EAAA;IAAI,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA,CAAA,EAAA,CAAA;IAAA,IAAA;IAAA,IAAA,EAAA,GAAA,EAAA;IAIP,IAAA,eAAA,EAAA;IAAA,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;;;;;;;eAELC,mBAAU,GAAA;;;;;;;;;;;;IACJ,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAI,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACJ,MAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,IAAA,CAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IADI,IAAA;;;;;;;eAGVC,qBAAY,GAAA;;;;;;;;;;;;IACN,IAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,MAAA,EAAA,GAAA,OAAA;IAAA,MAAA,WAAA,IAAA,CAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAEI,IAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IADJ,MAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,QAAA,EAAA,GAAA,OAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IACI,MAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IAAJ,QAAA,IAAA,KAAA,CAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,KAAA,OAAA,EAAA;IAAA,UAAA,EAAA,GAAA,OAAA;IAAA,UAAA,WAAA,IAAA,CAAA;IAAA,QAAA,CAAA,MAAA;IAAA,UAAA,EAAA,GAAA,UAAA;IAAA,UAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,QAAA;IAAI,QAAA,IAAA,EAAA,KAAA,UAAA,EAAA;IACJ,UAAA,IAAA,KAAA,CAAA,UAAA,CAAA,WAAA,CAAA,KAAA,EAAA,EAAA;IAAA,YAAA,EAAA,GAAA,OAAA;IAAA,YAAA,WAAA,EAAA;IAAA,UAAA,CAAA,MAAA;IAAA,YAAA,EAAA,GAAA,UAAA;IAAA,YAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,UAAA;IADI,QAAA;IAAA,MAAA;IAAA,IAAA;;;;;;;eAGVC,UAAC,GAAA;;;;;;;;;;;;IAAD,IAAA,eAAA,EAAA;IACe,IAAA,EAAA,GAAA,EAAA;IAAT,IAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,IAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,MAAA,WAAA,EAAA;IAAA,IAAA,CAAA,MAAA;IAAA,MAAA,EAAA,GAAA,UAAA;IAAA,MAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,IAAA;IAAS,IAAA,OAAA,EAAA,KAAA,UAAA,EAAA;IAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IAAT,MAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA;IAAA,MAAA,IAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA;IAAA,QAAA,WAAA,EAAA;IAAA,MAAA,CAAA,MAAA;IAAA,QAAA,EAAA,GAAA,UAAA;IAAA,QAAA,IAAA,eAAA,KAAA,CAAA,EAAA,EAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA;IAAA,MAAA;IAAS,IAAA;IAAC,IAAA,eAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IChNhB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,IAAI,KAAK;IAC5C,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE;IACzB,QAAQ,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,IAAI;IACJ,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;IACpD,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;IACpC,QAAQ,IAAI,OAAO,IAAI,IAAI,KAAK,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,UAAU,CAAC,EAAE;IAC/F,YAAY,IAAI,IAAI,IAAI,OAAO,EAAE;IACjC,gBAAgB,OAAO,OAAO,CAAC,IAAI,CAAC;IACpC,YAAY;IACZ,QAAQ;IACR,IAAI;IACJ,IAAI,OAAO,SAAS;IACpB,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA,MAAM,iBAAiB,CAAC;IACxB,IAAI,QAAQ;IACZ,IAAI,UAAU;IACd,IAAI,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE;IACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC/B,QAAQ,IAAI,CAAC,UAAU,GAAG,SAAS;IACnC,IAAI;IACJ,IAAI,QAAQ,CAAC,IAAI,EAAE;IACnB,QAAQ,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IACpD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE;IACjC,QAAQ,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IACnE,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;IAC1C,YAAY,OAAO,MAAM,CAAC,KAAK;IAC/B,QAAQ;IACR,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE;IAC1C,YAAY,OAAO,MAAM,CAAC,GAAG;IAC7B,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;;IAEJ,IAAI,qBAAqB;IACzB,IAAI,cAAc,GAAG;IACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;IACzC,YAAY,IAAI,CAAC,qBAAqB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE;IACpE,gBAAgB,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC1D,aAAa,CAAC;IACd,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,qBAAqB;IACzC,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IACtB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC3D,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;IACrB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC3D,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;IACxB,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxC,QAAQ,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7E,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IACtB,QAAQ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;IACrB,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxC,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxC,QAAQ,MAAM,EAAE,GAAG,GAAG,KAAK,GAAG;IAC9B,QAAQ,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE;IAC1C,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IACtB,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxC,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxC,QAAQ,QAAQ,IAAI,CAAC,EAAE;IACvB,YAAY,KAAK,GAAG;IACpB,gBAAgB,OAAO,GAAG,GAAG,GAAG;IAChC,YAAY,KAAK,GAAG;IACpB,gBAAgB,OAAO,GAAG,GAAG,GAAG;IAChC,YAAY,KAAK,IAAI;IACrB,gBAAgB,OAAO,GAAG,IAAI,GAAG;IACjC,YAAY,KAAK,IAAI;IACrB,gBAAgB,OAAO,GAAG,IAAI,GAAG;IACjC,YAAY;IACZ,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D;IACA,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;IACvB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;IAChC,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5F,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACjE,QAAQ;IACR,QAAQ,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;IACtC,QAAQ,IAAI,CAAC,EAAE,EAAE;IACjB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrH,QAAQ;IACR,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5D,QAAQ,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC;IACpD,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;IAC1B,QAAQ,OAAO,IAAI,CAAC,KAAK;IACzB,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;IAC1B,QAAQ,IAAI,MAAM,GAAG,EAAE;IACvB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;IAChC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC1D,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD,YAAY,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE;IAC/D,gBAAgB,MAAM,IAAI,SAAS;IACnC,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;IACzB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IACxC,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;IACvB,QAAQ,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1G,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;IACxB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IACtB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACzF,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IACtB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1C,QAAQ,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACrD,IAAI;IACJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;IACzB,QAAQ,IAAI,IAAI;IAChB,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;IACpD,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,YAAY,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,IAAI,EAAE;IACvC,gBAAgB,OAAO,SAAS;IAChC,YAAY;IACZ,YAAY,IAAI,KAAK;IACrB,YAAY,QAAQ,GAAG,CAAC,IAAI;IAC5B,gBAAgB,KAAK,KAAK,CAAC,MAAM,EAAE;IACnC,oBAAoB,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACxC,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,KAAK,KAAK,CAAC,SAAS,EAAE;IACtC,oBAAoB,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpD,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,KAAK,KAAK,CAAC,MAAM,EAAE;IACnC,oBAAoB,IAAI,CAAC,GAAG,EAAE;IAC9B,wBAAwB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,wBAAwB,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,gBAAgB,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACtG,oBAAoB;IACpB,oBAAoB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvE,oBAAoB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IACjD,oBAAoB;IACpB,gBAAgB;IAChB;IACA,YAAY,IAAI,GAAG,GAAG;IACtB,YAAY,GAAG,GAAG,KAAK;IACvB,QAAQ;IACR,QAAQ,OAAO,GAAG;IAClB,IAAI;IACJ,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;IACzB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;IAC7C,IAAI;IACJ,IAAI,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE;IAC9B,QAAQ,OAAO,CAAC;IAChB,cAAc,IAAI,CAAC,KAAK,CAAC,GAAG;IAC5B,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;IAChC,kBAAkB,QAAQ,IAAI,CAAC,IAAI;IACnC,sBAAsB,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG;IAC9C,0BAA0B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;IACzE,sBAAsB,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG;IAC9C,0BAA0B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IACrF,sBAAsB,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG;IAC9C,0BAA0B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IACrF,sBAAsB,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG;IAC9C,0BAA0B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IACrF,sBAAsB;IACtB,0BAA0B,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtF;IACA,cAAc,CAAC,CAAC;IAChB,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,WAAW,CAAC;IAClB,IAAI,OAAO,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACtD,IAAI,OAAO,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC;;IAEpD,IAAI,OAAO,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC;;IAE7C;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;IACnC,QAAQ,MAAM,GAAG,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,UAAU;IACjD,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE;IAChD,YAAYC,SAAK,CAAC,UAAU,EAAE;IAC9B,gBAAgB,SAAS,EAAE,IAAI,KAAK,WAAW,CAAC,cAAc,GAAG,eAAe,GAAG,gBAAgB;IACnG,aAAa,CAAC;IACd,SAAS;IACT,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE;IACnD,QAAQ,OAAO,IAAI,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,cAAc,CAAC;IAC5G,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3D,QAAQ,OAAO,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IAClG,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,mBAAmB,CAAC;IAC1B,IAAI,QAAQ;IACZ,IAAI,UAAU;IACd,IAAI,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE;IACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC/B,QAAQ,IAAI,CAAC,UAAU,GAAG,SAAS;IACnC,IAAI;IACJ,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;IAC5B,QAAQ,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,KAAK,EAAE,GAAG,KAAK;IACvD,QAAQ,OAAO,IAAI,mBAAmB,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC;IACxF,IAAI;IACJ,IAAI,WAAW,CAAC,GAAG,IAAI,EAAE;IACzB,QAAQ,OAAO,IAAI,mBAAmB;IACtC,YAAY,IAAI,CAAC,QAAQ;IACzB,YAAY,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;IAC/E,SAAS;IACT,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,IAAI,EAAE;IAClB,QAAQ,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IACpD,IAAI;IACJ;IACA,IAAI,kBAAkB,CAAC,UAAU,EAAE;IACnC,QAAQ,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,eAAe,CAAC;IAC7G,IAAI;IACJ;IACA,IAAI,iBAAiB,CAAC,IAAI,EAAE;IAC5B,QAAQ,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC;IACtG,IAAI;IACJ;;ICnSA;IACA,MAAM,SAAS,CAAC;IAChB;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,GAAG,IAAI,EAAE;IAC7B,QAAQ,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;IACrD,QAAQ,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACzD,QAAQ,OAAO,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC;IAC7C,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,QAAQ,EAAE;IAC5B,QAAQ,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;IACnD,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IACxC,QAAQ,OAAO,EAAE,CAAC,SAAS;IAC3B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,CAAC,QAAQ,EAAE;IAC7B,QAAQ,OAAO,QAAQ,CAAC,iBAAiB,KAAK,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACrF,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,EAAE;IAC1B,QAAQ,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE;IAC/C,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAClC,YAAY,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;IACtC,QAAQ;IACR,QAAQ,OAAO,QAAQ;IACvB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,cAAc,CAAC,EAAE,EAAE;IAC9B,QAAQ,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE;IAC/C,QAAQ,OAAO,EAAE,CAAC,UAAU,EAAE;IAC9B,YAAY,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC;IAC/C,QAAQ;IACR,QAAQ,OAAO,QAAQ;IACvB,IAAI;IACJ;;IAEA;IACA,MAAM,UAAU,CAAC;IACjB,IAAI,OAAO,EAAE,GAAG,CAAC;IACjB;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG,CAAC,MAAM,EAAE;IACvB,QAAQ,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;IAClC,QAAQ,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;IACjC,YAAY,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,QAAQ;IACR,QAAQ,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACjC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,QAAQ,IAAI,CAAC,iBAAiB;IAC9B,aAAa,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;IAC/C,aAAa,OAAO,CAAC,CAAC,CAAC,KAAK;IAC5B,gBAAgB,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IACzD,gBAAgB,IAAI,MAAM,KAAK,OAAO,EAAE;IACxC,oBAAoB,MAAM,OAAO;IACjC,wBAAwB;IACxB,6BAA6B,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;IAC1D,8BAA8B,KAAK,CAAC,KAAK;IACzC,6BAA6B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;IAC1D,oBAAoB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAChD,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,EAAE,CAAC,YAAY,CAAC,MAAM,yBAAyB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;IACrF,YAAY,CAAC,CAAC;IACd,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;IAChC,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;IAC3B,YAAY,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,MAAM;IACf,YAAY,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;IACxC,QAAQ;IACR,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,UAAU,CAAC;IACjB;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,IAAI,CAAC,EAAE,EAAE;IACpB;IACA;IACA,QAAQ,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAE;IACzC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;IAC5C,gBAAgB,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC;IAC7C,YAAY;IACZ,QAAQ;IACR;IACA,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ;IACjD,aAAa,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IAChD,aAAa,GAAG,CAAC,CAAC,EAAE,KAAK;IACzB,gBAAgB,EAAE,CAAC,MAAM,EAAE;IAC3B,gBAAgB,MAAM,IAAI,0BAA0B,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5E,gBAAgB,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;IAC1C,gBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1D,YAAY,CAAC,CAAC;IACd,QAAQ,MAAM,KAAK,GAAG,EAAE;IACxB,QAAQ,KAAK,CAAC,OAAO,GAAG,IAAI,gBAAgB,EAAE;IAC9C,QAAQ,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;IAC9C,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,UAAU,EAAE;IAC7C,YAAY,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE;IAClC,gBAAgB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,gBAAgB,EAAE;IACpD,YAAY;IACZ,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAClC,QAAQ;IACR,QAAQ,OAAO,KAAK;IACpB,IAAI;IACJ,IAAI,OAAO,YAAY,CAAC,EAAE,EAAE;IAC5B,QAAQ,IAAI,EAAE,YAAY,mBAAmB,EAAE;IAC/C,YAAY,OAAO,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC;IACjD,QAAQ;IACR,QAAQ,IAAI,EAAE,YAAY,iBAAiB,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,EAAE;IACxE,YAAY,OAAO,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC;IACnD,QAAQ;IACR,QAAQ,OAAO,EAAE;IACjB,IAAI;IACJ;;IAEA;IACA,MAAM,KAAK,CAAC;IACZ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,EAAE,EAAE;IACxB,QAAQ,KAAK,IAAI,CAAC,+BAA+B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE;IAC3E,YAAY,IAAI,CAAC,CAAC,WAAW,EAAE;IAC/B,gBAAgB,OAAO,IAAI;IAC3B,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,KAAK;IACpB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,oBAAoB,CAAC,GAAG,EAAE;IACrC,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE;IAC1C,YAAY,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;IAC5C,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAClG,YAAY,CAAC,CAAC;IACd,QAAQ;IACR,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE;IAC3C,YAAY,OAAO,OAAO,CAAC,OAAO,EAAE;IACpC,QAAQ;IACR,QAAQ,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW;IACnC,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;IAC1B;IACA,YAAY,OAAO,OAAO,CAAC,OAAO,EAAE;IACpC,QAAQ;IACR,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;IACxC,YAAY,MAAM,IAAI,GAAG,MAAM;IAC/B,gBAAgB,GAAG,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC;IACjE,gBAAgB,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC;IACrD,gBAAgB,OAAO,CAAC,SAAS,CAAC;IAClC,YAAY,CAAC;IACb,YAAY,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC;IAC1D,YAAY,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;IAC9C,QAAQ,CAAC,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,UAAU,CAAC,EAAE,EAAE;IAC1B,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;IAChC,YAAY,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IACtC,QAAQ;IACR,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;IACxC,YAAY,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAM;IACxD,gBAAgB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;IACzC,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,QAAQ,CAAC,UAAU,EAAE;IACrC,gBAAgB,OAAO,CAAC,EAAE,CAAC;IAC3B,YAAY,CAAC,CAAC;IACd,YAAY,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE;IAC7D,gBAAgB,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACxD,YAAY;IACZ,YAAY,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM;IACpE,gBAAgB,QAAQ,CAAC,UAAU,EAAE;IACrC,gBAAgB,OAAO,CAAC,EAAE,CAAC;IAC3B,YAAY,CAAC,CAAC;IACd,QAAQ,CAAC,CAAC;IACV,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE;IACvC,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACrC,gBAAgB,OAAO,CAAC;IACxB,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE;IAC1C,QAAQ,MAAM,CAAC,GAAG,EAAE;IACpB,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACrC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,CAAC;IAChB,IAAI;IACJ;;IC9RA;IACA;IACA;IACA;IACA;IACA,MAAM,cAAc,CAAC;IACrB,IAAI,WAAW,GAAG,IAAI,GAAG,EAAE;IAC3B,IAAI,OAAO,CAAC,IAAI,EAAE;IAClB,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IACzC,IAAI;IACJ,IAAI,MAAM,CAAC,IAAI,EAAE;IACjB,QAAQ,IAAI,CAAC,eAAe,IAAI;IAChC,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;IACtC,aAAa,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IAC9C,aAAa,OAAO,CAAC,CAAC,CAAC,KAAK;IAC5B,gBAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,YAAY,CAAC,CAAC;IACd,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC,IAAI;IACJ,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;IACvB,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IACnC,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IAChC,QAAQ,OAAO,CAAC;IAChB,IAAI;IACJ,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE;IACvB,QAAQ,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;IAC9C,IAAI;IACJ,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE;IACtB,QAAQ,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC;IAC1D,IAAI;IACJ,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE;IACvB,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;IAC/B,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACxB,IAAI;IACJ,IAAI,OAAO,GAAG;IACd,QAAQ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;IAC7C,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,QAAQ;IACR,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;IAChC,IAAI;IACJ;;IAEA;IACA,MAAM,eAAe,CAAC;IACtB;IACA;IACA;IACA,IAAI,OAAO,gBAAgB,GAAG;IAC9B,QAAQ,OAAO;IACf,QAAQ,SAAS;IACjB,QAAQ,SAAS;IACjB,QAAQ,SAAS;IACjB,QAAQ,gBAAgB;IACxB,QAAQ,eAAe;IACvB,QAAQ,WAAW;IACnB,QAAQ,aAAa;IACrB,KAAK;IACL;IACA;IACA,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE;IACnD,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC;IAC/D,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5B,QAAQ;IACR,IAAI;IACJ,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE;IACrD,QAAQ,MAAM,SAAS,GAAG,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC;IAClE,QAAQ,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IACnD,QAAQ,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,SAAS;IACpD,aAAa,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,GAAG,SAAS,EAAE,GAAG,SAAS;IACvE,aAAa,MAAM,EAAE;IACrB,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;IAClC,IAAI;IACJ,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE;IACrD,QAAQ,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IACnD,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;IACrD,QAAQ,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACtD,QAAQ,MAAM,SAAS,GAAG,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC;IAClE;IACA;IACA;IACA;IACA;IACA,QAAQ,MAAM,KAAK,GAAG,SAAS,KAAK,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;IACxH,QAAQ,MAAM,KAAK;IACnB,YAAY,SAAS,YAAY;IACjC,kBAAkB,CAAC,GAAG,SAAS;IAC/B,kBAAkB,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI;IAChG,oBAAoB,MAAM,CAAC,OAAO,CAAC,SAAS;IAC5C,oBAAoB,IAAI;IACxB,QAAQ,MAAM,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAClG,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;IACzC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACtE,QAAQ;IACR,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,YAAY,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;IACrC,gBAAgB,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChG,YAAY;IACZ,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5B,YAAY;IACZ,QAAQ;IACR;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO;IAC1C,cAAc,OAAO,CAAC;IACtB,cAAc,OAAO,OAAO,CAAC,MAAM,KAAK;IACxC,gBAAgB,OAAO,CAAC;IACxB,gBAAgB,OAAO,OAAO,CAAC,IAAI,KAAK;IACxC,kBAAkB,OAAO,CAAC;IAC1B,kBAAkB,IAAI;IACtB,QAAQ,IAAI,KAAK,GAAG,CAAC;IACrB,QAAQ,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;IACjC,YAAY,MAAM,IAAI,GAAG;IACzB,gBAAgB,KAAK;IACrB,gBAAgB,KAAK,EAAE,KAAK,GAAG,CAAC;IAChC,gBAAgB,IAAI;IACpB,gBAAgB,KAAK,EAAE,KAAK,KAAK,CAAC;IAClC,gBAAgB,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC;IAC/D,gBAAgB,IAAI,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC;IACrC,gBAAgB,GAAG,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC;IACpC,aAAa;IACb,YAAY,GAAG,CAAC,OAAO;IACvB,gBAAgB,IAAI;IACpB,gBAAgB,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;IACnG,aAAa;IACb,YAAY,EAAE,KAAK;IACnB,QAAQ;IACR,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IACxB,IAAI;IACJ;IACA;IACA,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE;IACrD,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC;IAC/D,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5B,QAAQ;IACR,IAAI;IACJ,IAAI,OAAO,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE;IACzD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5C,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;IAClC,IAAI;IACJ,IAAI,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE;IAClD,QAAQ,QAAQ,KAAK,CAAC,WAAW,EAAE;IACnC,YAAY,KAAK,KAAK,EAAE;IACxB,gBAAgB,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE;IACvD,gBAAgB,OAAO,IAAI,CAAC,UAAU,EAAE;IACxC,oBAAoB,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;IACzD,gBAAgB;IAChB,gBAAgB,IAAI,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE;IACnD;IACA,oBAAoB,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC;IACpD,oBAAoB,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC/C,gBAAgB,CAAC,MAAM;IACvB,oBAAoB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC9C,oBAAoB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,MAAM;IACvB,gBAAgB,IAAI,CAAC,eAAe,EAAE;IACtC,gBAAgB;IAChB,YAAY,KAAK,KAAK;IACtB,gBAAgB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAChC,gBAAgB;IAChB;IACA,IAAI;IACJ,IAAI,OAAO,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE;IAC5D,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC;IAChE,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC;IAC3E,QAAQ,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACtH,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;IACvC,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;IAC3C,IAAI;IACJ,IAAI,OAAO,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE;IAC3D,QAAQ,MAAM,mBAAmB,GAAG,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC;IAC5E,QAAQ,IAAI,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE;IACtE,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,GAAG,CAAC,mBAAmB,CAAC;IAC1G,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;IACnC,YAAY,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE;IACtD,QAAQ,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;IACjE,YAAY,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;IACjC,gBAAgB;IAChB,YAAY;IACZ,YAAY,QAAQ,CAAC,CAAC,IAAI;IAC1B,gBAAgB,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,oBAAoB,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvE,oBAAoB;IACpB,gBAAgB,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,oBAAoB,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClH,oBAAoB;IACpB,gBAAgB,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,oBAAoB,IAAI,EAAE,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,EAAE;IACpD,wBAAwB,MAAM,IAAI,SAAS,CAAC,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvF,oBAAoB;IACpB,oBAAoB,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;IAC9C,oBAAoB;IACpB;IACA,QAAQ;IACR,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IACxB,IAAI;IACJ;;IAEA;IACA,MAAM,cAAc,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC;;IAE7C;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,MAAM,CAAC,UAAU,EAAE;IAC5B,IAAI,OAAO,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC;IACrD,QAAQ;IACR,aAAa,SAAS,CAAC,CAAC;IACxB,aAAa,KAAK,CAAC,WAAW;IAC9B,aAAa,IAAI,CAAC,GAAG;IACrB,aAAa,WAAW,EAAE;IAC1B,KAAK;IACL;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,QAAQ,CAAC;IACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE;IAC5C,QAAQ,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7F,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE;IACpD,QAAQ,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC3D,QAAQ,IAAI,EAAE,UAAU,YAAY,mBAAmB,CAAC,EAAE;IAC1D,YAAY,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;IAChF,QAAQ;IACR,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC;IAC/D,QAAQ,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7E,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE;IACtD,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC;IAC/D,QAAQ,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7E,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE;IACpD,QAAQ,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7E,IAAI;IACJ,IAAI,SAAS;IACb,IAAI,UAAU;IACd;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE;IACrC,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ;IACjC,QAAQ,IAAI,CAAC,UAAU,GAAG,SAAS;IACnC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,SAAS,EAAE;IAC7B,QAAQ,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;IACtD,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,QAAQ,EAAE;IAC3B,QAAQ,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;IACtD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;IAC5B,QAAQ,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpF,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,GAAG,IAAI,EAAE;IACzB,QAAQ,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;IACjF,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,kBAAkB,CAAC,UAAU,EAAE,GAAG,IAAI,EAAE;IAC5C,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC;IAClF,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,iBAAiB,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;IACrC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC3E,IAAI;IACJ;IACA;IACA;IACA,IAAI,SAAS,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,UAAU;IAC9B,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,GAAG;IACb,QAAQ,IAAI;IACZ,YAAY,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE;IAC5C,YAAY,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;IACtE,YAAY,MAAM,QAAQ;IAC1B,gBAAgB,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC3C,sBAAsB;IACtB,sBAAsB,CAAC,MAAM;IAC7B,0BAA0B,MAAM,CAAC,GAAG,IAAI,gBAAgB,EAAE;IAC1D,0BAA0B,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC;IACjD,0BAA0B,OAAO,CAAC;IAClC,sBAAsB,CAAC,GAAG;IAC1B,YAAY,MAAM,QAAQ,GAAG,QAAQ,CAAC,kBAAkB;IACxD,gBAAgB,QAAQ;IACxB,gBAAgB,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,SAAS;IAC9D,gBAAgB,QAAQ,CAAC,YAAY;IACrC,aAAa;IACb,YAAY,IAAI,IAAI;IACpB,YAAY,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;IAC1D,gBAAgB,GAAG,CAAC,OAAO,EAAE;IAC7B,gBAAgB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;IACtD,oBAAoB,IAAI;IACxB,wBAAwB,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;IAC5F,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE;IACjC,wBAAwB,MAAM,WAAW,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,EAAE,EAAE,CAAC;IACtF,oBAAoB;IACpB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,MAAM,EAAE,+BAA+B,IAAI,CAAC;IAC5D,gBAAgB,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,gBAAgB,EAAE;IACxE,oBAAoB,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;IAClD,wBAAwB;IACxB,oBAAoB;IACpB,oBAAoB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;IAC1D,oBAAoB,IAAI;IACxB,wBAAwB,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;IACjF,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE;IACjC;IACA;IACA,wBAAwB,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACjH,oBAAoB;IACpB,oBAAoB,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;IACzC,wBAAwB;IACxB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;IACxE,oBAAoB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;IACvD,wBAAwB;IACxB,oBAAoB;IACpB,oBAAoB,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;IAC5D,oBAAoB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC;IAClE,oBAAoB,IAAI;IACxB,wBAAwB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC;IACxF,wBAAwB,IAAI,OAAO,SAAS,KAAK,SAAS,EAAE;IAC5D,4BAA4B,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE,SAAS,CAAC;IACxE,4BAA4B;IAC5B,wBAAwB;IACxB,wBAAwB,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE;IAC3E,4BAA4B,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC;IACrE,wBAAwB;IACxB,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE;IACjC,wBAAwB,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;IACzH,oBAAoB;IACpB,gBAAgB;IAChB,YAAY;IACZ,YAAY,GAAG,CAAC,OAAO,EAAE;IACzB,YAAY,OAAO,QAAQ;IAC3B,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE;IACrB;IACA;IACA;IACA;IACA,YAAY,IAAI,EAAE,YAAY,WAAW,EAAE;IAC3C,gBAAgB,MAAM,EAAE;IACxB,YAAY;IACZ,YAAY,MAAM,IAAI,WAAW,CAAC,0BAA0B,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;IACjF,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,EAAE,EAAE;IACjB,QAAQ,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACzC,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,EAAE,EAAE;IACjB,QAAQ,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,gBAAgB,CAAC,QAAQ,EAAE;IAC/B,QAAQ,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IACnD,QAAQ,IAAI,EAAE,EAAE;IAChB,YAAY,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7B,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,gBAAgB,CAAC,QAAQ,EAAE;IAC/B,QAAQ,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IACnD,QAAQ,IAAI,EAAE,EAAE;IAChB,YAAY,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7B,QAAQ;IACR,IAAI;IACJ,IAAI,OAAO,YAAY,CAAC,IAAI,EAAE;IAC9B,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;IAC9C,YAAY,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;IAChF,kBAAkB,UAAU,CAAC;IAC7B,kBAAkB,UAAU,CAAC,aAAa;IAC1C,QAAQ;IACR,QAAQ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;IAC5C,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;IACnD,gBAAgB,OAAO,UAAU,CAAC,aAAa;IAC/C,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,UAAU,CAAC,WAAW;IACrC,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,WAAW,SAAS,KAAK,CAAC;IAChC;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,GAAG,CAAC;IACrB,IAAI,KAAK;IACT,IAAI,MAAM;IACV;IACA,IAAI,SAAS,GAAG,KAAK;IACrB;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE;IAChD,QAAQ,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE;IAC/E,YAAY,KAAK,CAAC,SAAS,GAAG,IAAI;IAClC,YAAY,OAAO,KAAK;IACxB,QAAQ;IACR,QAAQ,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC;IAC9D,IAAI;IACJ,IAAI,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE;IAChD,QAAQ,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;IACrF,QAAQ,IAAI,CAAC,IAAI,GAAG,aAAa;IACjC,QAAQ,IAAI,CAAC,KAAK,GAAG,cAAc;IACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,YAAY,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;IAC1E,IAAI;IACJ;IACA,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,MAAM;IAC1B,IAAI;IACJ;IACA,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,OAAO,IAAI,CAAC,KAAK;IACzB,IAAI;IACJ;IACA,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAChD,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,cAAc,EAAE;IACpC,QAAQ,IAAI,cAAc,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;IACxD,YAAY,OAAO,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAClF,QAAQ;IACR,QAAQ,IAAI,cAAc,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;IAC3D,YAAY,MAAM,EAAE,yBAAyB,cAAc,CAAC;IAC5D,YAAY,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9F,YAAY,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACtE,QAAQ;IACR,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU;IAC7D,aAAa,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;IAC1G,aAAa,GAAG,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChD,QAAQ,OAAO,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI;IACJ,IAAI,OAAO,UAAU,CAAC,IAAI,EAAE;IAC5B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAClE,IAAI;IACJ,IAAI,OAAO,SAAS,CAAC,cAAc,EAAE;IACrC,QAAQ,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;IACpD,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,QAAQ,OAAO,CAAC,CAAC,SAAS;IAC1B,IAAI;IACJ,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE;IAC1B,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;IAC9C,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IAClD,QAAQ;IACR,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACzD,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5C,YAAY,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;IACnD,gBAAgB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;IACxD,gBAAgB,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;IAClD,oBAAoB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAC3C,oBAAoB,CAAC,EAAE;IACvB,gBAAgB;IAChB,YAAY,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;IAC7D,gBAAgB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC3C,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;;ICvkBA;IACA;IACA;IACA;IACA;IACA,MAAM,YAAY,CAAC;IACnB,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE;IAClB,IAAI,aAAa;IACjB,IAAI,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;IACtC,QAAQ,IAAI,CAAC,aAAa,GAAG,OAAO;IACpC,IAAI,CAAC,CAAC;IACN,IAAI,WAAW,GAAG;IAClB,QAAQ,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM;IACxD,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,IAAI,CAAC,MAAM;IAC1B,IAAI;IACJ,IAAI,MAAM,MAAM,GAAG;IACnB,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAE;IAC5B,QAAQ,QAAQ,CAAC,aAAa;IAC9B,YAAY,IAAI,WAAW,CAAC,WAAW,EAAE;IACzC,gBAAgB,OAAO,EAAE,KAAK;IAC9B,gBAAgB,UAAU,EAAE,KAAK;IACjC,aAAa,CAAC;IACd,SAAS;IACT,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,IAAI;IACJ,IAAI,OAAO,CAAC,EAAE,EAAE;IAChB,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;IAC7B;IACA;IACA,YAAY;IACZ,QAAQ;IACR;IACA;IACA;IACA,QAAQ,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;IAC1D,YAAY,OAAO,CAAC,aAAa;IACjC,SAAS;IACT,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE;IAC3C,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IACpC,aAAa,OAAO,CAAC,MAAM;IAC3B,gBAAgB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IAClC,gBAAgB,YAAY,EAAE;IAC9B,YAAY,CAAC,CAAC;IACd,QAAQ,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC9C,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;IAC/B,QAAQ,SAAS;IACjB,YAAY,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IAC9C,iBAAiB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC;IAC5C,iBAAiB,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,YAAY,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACtC,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;IACjE,IAAI;IACJ;IACA,IAAI,QAAQ,CAAC,MAAM,EAAE;IACrB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC;IAC5D,IAAI;IACJ;IACA,IAAI,YAAY,CAAC,EAAE,EAAE;IACrB,QAAQ,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO;IACvC,IAAI;IACJ;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,QAAQ,CAAC;IACf,IAAI,WAAW,GAAG,EAAE;IACpB,IAAI,WAAW,GAAG,KAAK;IACvB,IAAI,QAAQ,GAAG;IACf,QAAQ,MAAM,EAAE;IAChB,YAAY,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,GAAG;IAC1B,YAAY,CAAC;IACb,YAAY,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3D,YAAY,CAAC;IACb,SAAS;IACT,QAAQ,MAAM,EAAE;IAChB,YAAY,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;IACxD,YAAY,CAAC;IACb,YAAY,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3D,YAAY,CAAC;IACb,SAAS;IACT,QAAQ,QAAQ,EAAE;IAClB,YAAY,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,GAAG,KAAK,IAAI;IACnC,YAAY,CAAC;IACb,YAAY,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,KAAK,GAAG,EAAE,GAAG,IAAI;IACxC,YAAY,CAAC;IACb,SAAS;IACT,QAAQ,IAAI,EAAE;IACd,YAAY,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,GAAG,KAAK,MAAM;IACrC,YAAY,CAAC;IACb,YAAY,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;IACpE,YAAY,CAAC;IACb,SAAS;IACT,QAAQ,IAAI,EAAE;IACd,YAAY,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC5D,YAAY,CAAC;IACb,YAAY,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACnE,YAAY,CAAC;IACb,SAAS;IACT,QAAQ,GAAG,EAAE;IACb,YAAY,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,GAAG,KAAK;IAC/B,sBAAsB;IACtB,sBAAsB;IACtB,2BAA2B,KAAK,CAAC,GAAG;IACpC,2BAA2B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;IAC9C,2BAA2B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,YAAY,CAAC;IACb,YAAY,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IACrC,gBAAgB,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7D,YAAY,CAAC;IACb,SAAS;IACT,KAAK;IACL,IAAI,WAAW,GAAG,EAAE;IACpB,IAAI,QAAQ;IACZ,IAAI,KAAK,GAAG,EAAE;IACd,IAAI,UAAU,GAAG,IAAI,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC;IACvD,IAAI,aAAa,GAAG,IAAI,YAAY,EAAE;IACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;IAC9B,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;IAC/B,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;IACzC,YAAY,OAAO,IAAI;IACvB,QAAQ;IACR,QAAQ,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC;IACjD,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,cAAc,CAAC,KAAK,EAAE;IACjC,QAAQ,MAAM,KAAK,GAAG,EAAE;IACxB,QAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;IAC3F,YAAY,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,QAAQ;IACR,QAAQ,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IACzG,QAAQ,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE;IAC3E,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,UAAU,CAAC,SAAS,EAAE;IACjC,QAAQ,OAAO,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACxE,IAAI;IACJ,IAAI,wBAAwB,CAAC,GAAG,EAAE,KAAK,EAAE;IACzC,QAAQ,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;IACvE,QAAQ,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK;IACrE;IACA;IACA;IACA;IACA,QAAQ,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,QAAQ,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;IAC7E,QAAQ,MAAM,YAAY,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;IAC7E,YAAY,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAClD,YAAY,MAAM,IAAI,GAAG,SAAS,IAAI,QAAQ;IAC9C,YAAY,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC,EAAE;IACxE,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC,CAAC;IACtE,YAAY;IACZ,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9D,YAAY,OAAO,GAAG;IACtB,QAAQ,CAAC,EAAE,EAAE,CAAC;;IAEd,QAAQ,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO;IAChD,YAAY,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC/E,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,QAAQ,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;;IAEpE,QAAQ,KAAK,CAAC,IAAI,GAAG;IACrB;IACA;IACA;IACA,YAAY,QAAQ,EAAE,IAAI;IAC1B,YAAY,OAAO,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3D,YAAY,KAAK,EAAE,KAAK;IACxB;IACA;IACA;IACA,YAAY,MAAM,EAAE,MAAM;IAC1B,YAAY,QAAQ,EAAE,aAAa;IACnC,YAAY,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,YAAY,cAAc,EAAE,YAAY;IACxC;IACA,YAAY,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,YAAY,SAAS,EAAE,cAAc;IACrC,SAAS;IACT,QAAQ,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;IACzC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;IAC9B,QAAQ,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,KAAK,EAAE,GAAG,KAAK;IACvD,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE;IACvD,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,EAAE,EAAE;IACtB,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE;IAC1B,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE;IACjC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK;IACtC,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,GAAG,IAAI,EAAE;IACxB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,GAAG,IAAI,EAAE;IAC3B,QAAQ,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;IAC7C,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE;IACvB,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5B,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,CAAC,EAAE;IACd,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IACzB,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG;IAChB,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;IACrE,YAAY,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC;IACrD,YAAY,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IACxC,QAAQ;IACR,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;IAC/B,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,MAAM,EAAE;IACnB,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;IAClD,IAAI;IACJ;IACA,IAAI,YAAY,CAAC,EAAE,EAAE;IACrB,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;IAClD,IAAI;IACJ;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;IAC3C,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;IACzC,IAAI;IACJ,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC;IAC5E,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,UAAU;IAC9B,IAAI;IACJ;IACA,IAAI,SAAS,CAAC,IAAI,EAAE;IACpB,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACrC,IAAI;IACJ;;AAEK,UAAC,QAAQ,GAAG,IAAI,QAAQ;;ICzY7B;IACA;IACA,MAAM,SAAS,CAAC;IAChB,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE;IAC1B,QAAQ,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC1E,IAAI;IACJ,IAAI,OAAO,YAAY,CAAC,QAAQ,EAAE;IAClC,QAAQ,OAAO,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAClF,IAAI;IACJ,IAAI,OAAO,YAAY,CAAC,UAAU,EAAE;IACpC,QAAQ,OAAO,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IACpF,IAAI;IACJ,IAAI,OAAO,YAAY,CAAC,QAAQ,EAAE;IAClC,QAAQ,OAAO,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAClF,IAAI;IACJ;;IChBA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,SAAS,CAAC;IAChB,IAAI,OAAO,OAAO,CAAC,EAAE,EAAE;IACvB,QAAQ,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI;IACJ,IAAI,OAAO,eAAe,CAAC,EAAE,EAAE;IAC/B,QAAQ,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7E,IAAI;IACJ;;ICZA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA,MAAM,aAAa,SAAS,WAAW,CAAC;IACxC,IAAI,OAAO,IAAI,GAAG;IAClB;IACA,QAAQ,QAAQ;IAChB,QAAQ,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3B,QAAQ,KAAK,EAAE,KAAK;IACpB;IACA,QAAQ,MAAM,EAAE,SAAS;IACzB;IACA,QAAQ,QAAQ,EAAE,EAAE;IACpB;IACA,QAAQ,QAAQ,EAAE,EAAE;IACpB;IACA,QAAQ,cAAc,EAAE,EAAE;IAC1B;IACA,QAAQ,gBAAgB,EAAE,EAAE;IAC5B,QAAQ,SAAS,EAAE,EAAE;IACrB,KAAK;IACL,IAAI,WAAW,kBAAkB,GAAG;IACpC,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ;IACjC,IAAI;IACJ,IAAI,WAAW,GAAG;IAClB,QAAQ,KAAK,EAAE;IACf,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE;IAC/C,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS;IACb,IAAI,OAAO,GAAG,KAAK;IACnB,IAAI,QAAQ,GAAG,KAAK;IACpB;IACA,IAAI,WAAW,GAAG,IAAI,GAAG,EAAE;IAC3B;IACA,IAAI,QAAQ,+CAA+C,IAAI;IAC/D;IACA,IAAI,OAAO,wCAAwC,EAAE;IACrD,IAAI,KAAK,GAAG;IACZ,QAAQ,2CAA2C,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI;IAC1E,IAAI;IACJ,IAAI,OAAO,CAAC,IAAI,EAAE;IAClB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;IACxD,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB;IACA;IACA;IACA;IACA,YAAY,MAAM,IAAI,KAAK;IAC3B,gBAAgB,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,mFAAmF,CAAC;IAC5J,aAAa;IACb,QAAQ;IACR,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ,IAAI,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE;IACzB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;IAC5D,IAAI;IACJ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;IACzB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IAC5D,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,IAAI,SAAS,GAAG;IACpB,QAAQ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ;IACpC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,IAAI,EAAE;IACpB,QAAQ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;IACpD,IAAI;IACJ,IAAI,QAAQ,CAAC,IAAI,EAAE;IACnB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC;IAChE,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACnG,QAAQ;IACR,QAAQ,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IACzE,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM;IAC1C,QAAQ,OAAO,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC;IACrD,IAAI;IACJ,IAAI,iBAAiB,GAAG;IACxB,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC3B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,IAAI;IACJ,IAAI,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACvD,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE;IACnC,YAAY;IACZ,QAAQ;IACR;IACA;IACA;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IACxC,YAAY;IACZ,QAAQ;IACR;IACA;IACA;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC3B,YAAY,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;IACjE,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;IACpE,YAAY;IACZ,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;IAClF,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,OAAO,GAAG;IACpB,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC3B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;IAC5B,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;IAC5E;IACA;IACA;IACA,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW;IAC3C,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK;IACrD,gBAAgB,SAAS;IACzB,gBAAgB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvE,aAAa,CAAC;IACd,SAAS;IACT,QAAQ,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC;IAC5D,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAChH,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAChC,QAAQ,IAAI;IACZ,YAAY,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACxC;IACA;IACA;IACA,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,gBAAgB;IAC5D,YAAY,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IACtD,gBAAgB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IACvD,YAAY;IACZ;IACA;IACA;IACA;IACA,YAAY,IAAI,CAAC,OAAO,GAAG,IAAI;IAC/B;IACA;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;IACjD,QAAQ,CAAC,SAAS;IAClB,YAAY,IAAI,CAAC,QAAQ,GAAG,IAAI;IAChC,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC;IACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,IAAI,EAAE;IACnB,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;IAClC,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACrC,QAAQ;IACR,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC7D,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtC,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5D,IAAI;IACJ;IACA,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,OAAO;IAC3B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;IAC3B,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;IACpD,QAAQ,IAAI,UAAU,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;IACpD,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC,QAAQ,IAAI;IACZ,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC;IAClD,QAAQ,CAAC,SAAS;IAClB,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;IACzC,QAAQ;IACR,IAAI;IACJ;;IC7OA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;;IAEA,MAAM,WAAW,GAAG,YAAY;IAChC,MAAM,UAAU,GAAG,YAAY;IAC/B;IACA,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;;IAErF;IACA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE;IACxB,MAAM,QAAQ,GAAG,CAAC,OAAO,KAAK;IAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;IAC9B,QAAQ,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3B,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC,IAAI;IACJ,CAAC;;IAED,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC;IACxC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK;IAC7C,IAAI,MAAM,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACtG,IAAI,OAAO,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,YAAY,CAAC;IACnB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE;IAC3B,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;IACxC,QAAQ,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;IACnC,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE;IACnC,YAAY,QAAQ,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,YAAY,OAAO,GAAG;IACtB,QAAQ;IACR,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;IACpC,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE;IACpF,YAAY,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;IACjD,gBAAgB,QAAQ,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC3E,gBAAgB,OAAO,GAAG,OAAO,CAAC,KAAK;IACvC,YAAY,CAAC,MAAM;IACnB,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,QAAQ,IAAI,IAAI;IACzE,gBAAgB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;IACxF,gBAAgB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK;IAC5D,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;IAClE,YAAY,QAAQ,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnE,YAAY,OAAO,GAAG;IACtB,QAAQ;IACR,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;IACzD,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACjC,YAAY,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK;IACnE,gBAAgB,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE;IACtC,oBAAoB,QAAQ,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAChE,oBAAoB,OAAO,OAAO;IAClC,gBAAgB;IAChB,gBAAgB,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY,CAAC,CAAC;IACd,QAAQ;IACR,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IAC7B,YAAY,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK;IACnE,gBAAgB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;IACvC,gBAAgB,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;IACtC,oBAAoB,QAAQ,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjE,oBAAoB,OAAO,OAAO;IAClC,gBAAgB;IAChB,gBAAgB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,YAAY,CAAC,CAAC;IACd,QAAQ;IACR,QAAQ,OAAO,OAAO;IACtB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;IAChC,QAAQ,OAAO,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACjF,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE;IAClC,QAAQ,OAAO,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAC/E,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,KAAK,CAAC,KAAK,EAAE;IACxB,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM;IACrG,QAAQ,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE;IACzC,YAAY,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;IAC7D,QAAQ;IACR,QAAQ,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE;IAClC,YAAY,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;IACtD,QAAQ;IACR,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;IAC3B,YAAY,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;IAC/C,QAAQ;IACR,QAAQ,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,EAAE,CAAC,SAAS,GAAG,EAAE,EAAE;IAC9B;IACA;IACA;IACA,QAAQ,MAAM,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACpE;IACA,QAAQ,MAAM,IAAI;IAClB,YAAY,CAAC,EAAE;IACf,YAAY,CAAC,GAAG,IAAI;IACpB,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IACxG,QAAQ,OAAO;IACf,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACnC,YAAY,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IACzC,YAAY,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAC7C,YAAY,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAC3C,SAAS;IACT,IAAI;IACJ;;;;;;;;;;;;;;;;;;;;;ICnLA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,OAAO,SAAS,KAAK,CAAC;IAC5B;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC1C,QAAQ,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC;IACjC,QAAQ,IAAI,CAAC,IAAI,GAAG,SAAS;IAC7B,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAChC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,MAAM,EAAE;IACrB,QAAQ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IAClG,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE;IACjD,QAAQ,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;IACpE,YAAY,MAAM,IAAI,GAAG,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO;IACjG,YAAY,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAC3D,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE;IAChD,QAAQ,IAAI,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;IACrC,YAAY,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACtE,QAAQ;IACR,QAAQ,OAAO,QAAQ,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;IACvD,IAAI;IACJ;;ICvDA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,MAAM,CAAC;IACb;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE;IACxC,QAAQ,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,QAAQ;IAC5C,QAAQ,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU;IAC1C,QAAQ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;IAChD,QAAQ,IAAI,GAAG,GAAG,EAAE;IACpB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;IACzC,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1C,YAAY,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IACpC,QAAQ;IACR,QAAQ,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;IAC3B,YAAY,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;IAClC,YAAY,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,QAAQ;IACR,QAAQ,OAAO,GAAG;IAClB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;IAChC,QAAQ,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,QAAQ;IAC5C;IACA;IACA,QAAQ,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM;IAC5B,QAAQ,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;IACvD,YAAY,EAAE,GAAG;IACjB,QAAQ;IACR,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;IAC9C,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;IACzG,YAAY,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;IAC9C,QAAQ;IACR,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;IACvC,YAAY,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;IAC7C,QAAQ;IACR,QAAQ,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;IAClC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;IACrC,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;IACzD,QAAQ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;;IAE3C,QAAQ,IAAI,EAAE,GAAG,CAAC;IAClB,QAAQ,IAAI,EAAE,GAAG,CAAC;IAClB;IACA;IACA;IACA,QAAQ,OAAO,EAAE,GAAG,MAAM,EAAE;IAC5B,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,YAAY,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,YAAY,IAAI,EAAE,KAAK,MAAM,EAAE;IAC/B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrD,YAAY,IAAI,EAAE,KAAK,MAAM,EAAE;IAC/B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;IAC7C,QAAQ;;IAER,QAAQ,OAAO,IAAI,CAAC,MAAM;IAC1B,IAAI;IACJ;;IAEA,MAAM,CAAC,QAAQ,GAAG,kEAAkE;IACpF,MAAM,CAAC,QAAQ,GAAG,kEAAkE;;IAEpF;IACA;IACA;IACA,MAAM,GAAG,CAAC;IACV;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,GAAG,EAAE;IACvB,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;IAClC,YAAY,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;IAC7C,QAAQ;IACR,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;IACzC,YAAY,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;IAChD,QAAQ;IACR,QAAQ,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;IACzC,QAAQ,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;IACxD,YAAY,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC;IAChC,YAAY,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;IAC3D,YAAY,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;IACtC,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE;IAChC,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK;IAC/B,aAAa,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtC,aAAa,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACrD,aAAa,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC1C,aAAa,IAAI,CAAC,EAAE,CAAC;IACrB,IAAI;IACJ;;ICvHA;IACA,MAAM,SAAS,CAAC;IAChB,IAAI,KAAK;IACT,IAAI,QAAQ;IACZ,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE;IAC/B,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC/B,IAAI;IACJ,IAAI,IAAI,UAAU,GAAG;IACrB,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI;IACJ,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,OAAO,IAAI,CAAC,KAAK;IACzB,IAAI;IACJ,IAAI,IAAI,OAAO,GAAG;IAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ;IAC5B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;IACpB,QAAQ,IAAI,CAAC,CAAC,EAAE;IAChB,YAAY,OAAO,IAAI,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IACtD,QAAQ;IACR,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACxC,QAAQ,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;IACxE,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE;IACjC,YAAY,OAAO,IAAI,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IACtD,QAAQ;IACR,QAAQ,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC7C,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA,MAAM,eAAe,SAAS,OAAO,CAAC;IACtC;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;IAClD,QAAQ,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;IACvC,QAAQ,IAAI,CAAC,IAAI,GAAG,iBAAiB;IACrC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;IAC5B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,QAAQ,CAAC,MAAM,EAAE;IACrB,QAAQ,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IACvH,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE;IACjC,QAAQ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7D,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE;IAC3B,QAAQ,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,IAAI,iBAAiB,CAAC;IAC3E,QAAQ,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;IAC7F,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,YAAY,CAAC,QAAQ,EAAE;IACxC,QAAQ,QAAQ,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU;IAChF,YAAY,KAAK,2BAA2B,EAAE;IAC9C,gBAAgB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,eAAe,CAAC,WAAW,CAAC;IAC3F,gBAAgB,IAAI,IAAI,KAAK,eAAe,CAAC,WAAW,EAAE;IAC1D,oBAAoB,OAAO,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC;IACjE,gBAAgB;IAChB,gBAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;IAC1C,oBAAoB,OAAO,eAAe,CAAC,YAAY,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACxF,gBAAgB;IAChB,gBAAgB,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IACpG,gBAAgB,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IAC1E,YAAY;IACZ,YAAY,KAAK,0BAA0B,EAAE;IAC7C,gBAAgB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,eAAe,CAAC,WAAW,CAAC;IAC3F,gBAAgB,IAAI,IAAI,KAAK,eAAe,CAAC,WAAW,EAAE;IAC1D,oBAAoB,OAAO,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC;IACjE,gBAAgB;IAChB,gBAAgB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;IACtF,oBAAoB,OAAO,eAAe,CAAC,YAAY,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACxF,gBAAgB;IAChB,gBAAgB,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzG,gBAAgB,OAAO,IAAI,eAAe;IAC1C,oBAAoB,OAAO;IAC3B,oBAAoB,QAAQ,CAAC,MAAM;IACnC,oBAAoB,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC1F,iBAAiB;IACjB,YAAY;IACZ,YAAY,SAAS;IACrB,gBAAgB,OAAO,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzD,YAAY;IACZ;IACA,IAAI;IACJ;IACA,IAAI,OAAO,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAClD;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,YAAY,CAAC,QAAQ,EAAE,EAAE,GAAG,SAAS,EAAE;IAClD,QAAQ,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU;IAC1F,QAAQ,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;IAChH,QAAQ,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;IACnH,IAAI;IACJ,IAAI,aAAa,QAAQ,CAAC,QAAQ,EAAE;IACpC;IACA;IACA;IACA,QAAQ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;IAC5D,QAAQ,MAAM,OAAO;IACrB,YAAY,IAAI,KAAK;IACrB,kBAAkB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,4BAA4B;IACxF,kBAAkB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACtE,QAAQ,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;IACnH,IAAI;IACJ;;IAEA,MAAM,WAAW,GAAG,CAAC,IAAI;IACzB,IAAI,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,SAAS;;IAEpG;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,oBAAoB,CAAC;IAC3B,IAAI,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;IACzC;IACA;IACA;IACA,QAAQ,IAAI,GAAG,CAAC,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE;IAChF,YAAY,OAAO,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;IACpD,QAAQ;IACR,QAAQ,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC;IACtD,QAAQ,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC;IAC9C,QAAQ,IAAI,UAAU,IAAI,SAAS,EAAE;IACrC,YAAY,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC;IACtD,QAAQ;IACR,QAAQ,OAAO,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;IAChD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,iCAAiC,CAAC;IACxC,IAAI,YAAY;IAChB;IACA;IACA;IACA,IAAI,WAAW,CAAC,WAAW,EAAE;IAC7B,QAAQ,IAAI,CAAC,YAAY,GAAG,WAAW;IACvC,IAAI;IACJ,IAAI,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;IACzC,QAAQ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;IAC1D,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;IACrC,YAAY,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY;IACpD;IACA;IACA;IACA;IACA,YAAY,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,QAAQ;IACR,QAAQ,OAAO,QAAQ;IACvB,IAAI;IACJ;;IAEA;IACA,MAAM,iBAAiB,CAAC;IACxB;IACA;IACA;IACA,IAAI,aAAa;IACjB,IAAI,WAAW,GAAG;IAClB,QAAQ,IAAI,CAAC,aAAa,GAAG,EAAE;IAC/B,IAAI;IACJ,IAAI,aAAa,GAAG;IACpB,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,oBAAoB,EAAE,CAAC;IAC3D,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ,IAAI,0BAA0B,CAAC,WAAW,EAAE;IAC5C,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,iCAAiC,CAAC,WAAW,CAAC,CAAC;IACnF,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA,IAAI,gBAAgB,CAAC,GAAG,YAAY,EAAE;IACtC,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;IAChD,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;IACjD,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA,MAAM,QAAQ,CAAC;IACf,IAAI,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;IACzC,QAAQ,IAAI;IACZ,YAAY,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE;IACrB;IACA;IACA;IACA,YAAY,MAAM,eAAe,CAAC,EAAE,CAAC,oBAAoB,EAAE,EAAE,CAAC;IAC9D,QAAQ;IACR,IAAI;IACJ;;IAEA;IACA,MAAM,oBAAoB,CAAC;IAC3B,IAAI,aAAa;IACjB,IAAI,QAAQ;IACZ;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,YAAY,EAAE,OAAO,EAAE;IACvC,QAAQ,IAAI,CAAC,aAAa,GAAG,YAAY;IACzC,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC/B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE;IAChC,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7D,QAAQ,OAAO,MAAM,WAAW,CAAC,SAAS;IAC1C,YAAY,GAAG;IACf,YAAY,OAAO;IACnB,YAAY,IAAI,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC3E,SAAS;IACT,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA,MAAM,UAAU,CAAC;IACjB,IAAI,aAAa;IACjB;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,GAAG;IACrB,QAAQ,OAAO,IAAI,iBAAiB,EAAE;IACtC,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,YAAY,EAAE;IAC9B,QAAQ,IAAI,CAAC,aAAa,GAAG,YAAY,IAAI,EAAE;IAC/C,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE;IAC/C,QAAQ,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,YAAY,IAAI,EAAE,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;IACnF,QAAQ,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,QAAQ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IACjD,QAAQ,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;IAC9E,QAAQ,OAAO,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;IAChD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;IACzB,QAAQ,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC;IAC3D,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,GAAG,CAAC,GAAG,EAAE;IACb,QAAQ,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;IAC1D,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,GAAG,EAAE;IACd,QAAQ,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC;IAC3D,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,GAAG,EAAE;IACd,QAAQ,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC;IAC3D,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,GAAG,CAAC,GAAG,EAAE;IACb,QAAQ,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;IAC1D,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,GAAG,EAAE;IACf,QAAQ,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC;IAC5D,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,GAAG,EAAE;IAChB,QAAQ,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC;IAC7D,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,SAAS,GAAG,OAAO,QAAQ,EAAE,IAAI,KAAK;IAC5C,IAAI,IAAI;IACR,QAAQ,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE;IACrC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;IACjB,QAAQ,MAAM,eAAe,CAAC,EAAE,CAAC,sBAAsB,EAAE,EAAE,CAAC;IAC5D,IAAI;IACJ,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,UAAU,GAAG,CAAC,MAAM,KAAK;IAC/B,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;IACxB,QAAQ,OAAO,EAAE;IACjB,IAAI;IACJ,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IACpC,QAAQ,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC;IAC1C,IAAI;IACJ,IAAI,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE;IACvD,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IACjC,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,kBAAkB,CAAC;IACzB,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,IAAI;IACR,IAAI,OAAO;IACX,IAAI,QAAQ;IACZ,IAAI,KAAK;IACT,IAAI,QAAQ;IACZ,IAAI,aAAa;IACjB,IAAI,SAAS;IACb;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;IACvC;IACA;IACA,QAAQ,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAC1C,QAAQ,MAAM,QAAQ,GAAG,SAAS,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;IACrE,QAAQ,MAAM,eAAe,GAAG,SAAS,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;IAChF,QAAQ,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC;IACvD,QAAQ,OAAO,IAAI,kBAAkB;IACrC,YAAY,MAAM;IAClB,YAAY,MAAM;IAClB,YAAY,UAAU,KAAK,EAAE,GAAG,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;IACtF,YAAY,IAAI,eAAe,CAAC,UAAU,KAAK,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC/F,YAAY,IAAI,OAAO,EAAE;IACzB,YAAY,SAAS;IACrB,YAAY,EAAE;IACd,YAAY,EAAE;IACd,YAAY,QAAQ;IACpB,SAAS;IACT,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,GAAG,EAAE,EAAE;IAClG,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;IACvB,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC/B,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC/B,QAAQ,IAAI,CAAC,aAAa,GAAG,YAAY;IACzC,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ;IACjC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,EAAE,EAAE;IAChB,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE;IAC7C,YAAY,IAAI,CAAC,IAAI,IAAI,EAAE;IAC3B,gBAAgB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,YAAY,CAAC,MAAM;IACnB,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;IACjB,QAAQ,IAAI,CAAC,IAAI,IAAI,EAAE;IACvB,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM;IACf,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,EAAE,EAAE;IACf,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE;IAC7C,YAAY,IAAI,CAAC,IAAI,IAAI,EAAE;IAC3B,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,YAAY,CAAC,MAAM;IACnB,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;IACpB;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAClD,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;IACjC,YAAY,OAAO,IAAI;IACvB,QAAQ;IACR,QAAQ,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;IAChC,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACrC,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE;IAChC,YAAY,OAAO,IAAI;IACvB,QAAQ;IACR,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC/C,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC7D,QAAQ,IAAI,CAAC,KAAK,GAAG,UAAU;IAC/B,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,QAAQ,EAAE;IACxB,QAAQ,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;IACvC,QAAQ,MAAM,OAAO,GAAG,IAAI,8BAA8B,CAAC,QAAQ,CAAC;IACpE,QAAQ,QAAQ,CAAC,OAAO,CAAC;IACzB,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ;IAC7B,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,GAAG,EAAE;IACjB,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;IAClD,YAAY,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IAChC,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;IACjB,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5B,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,EAAE,EAAE;IACrB,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;IAC5B,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,CAAC,EAAE;IACnB,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,QAAQ,GAAG;IACrB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;IACjE,QAAQ,MAAM,IAAI,GAAG;IACrB,YAAY,GAAG,IAAI,CAAC,QAAQ;IAC5B,YAAY,OAAO,EAAE,IAAI,CAAC,QAAQ;IAClC,YAAY,MAAM,EAAE,IAAI,CAAC,OAAO;IAChC,YAAY,IAAI,EAAE,IAAI,CAAC,KAAK;IAC5B,SAAS;IACT,QAAQ,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC;IAC7G,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,KAAK,GAAG;IAClB,QAAQ,IAAI;IACZ,YAAY,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;IAClD,YAAY,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAC9B,gBAAgB,MAAM,MAAM,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC;IAClE,YAAY;IACZ,YAAY,OAAO,QAAQ;IAC3B,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE;IACrB,YAAY,IAAI,EAAE,YAAY,OAAO,EAAE;IACvC,gBAAgB,MAAM,EAAE;IACxB,YAAY;IACZ;IACA;IACA;IACA;IACA,YAAY,MAAM,eAAe,CAAC,EAAE,CAAC,oBAAoB,EAAE,EAAE,CAAC;IAC9D,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,SAAS,GAAG;IACtB,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;IAC3C,QAAQ,OAAO,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAChD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,SAAS,GAAG;IACtB,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;IAC3C,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;IACrC;IACA,YAAY,OAAO,IAAI;IACvB,QAAQ;IACR,QAAQ,OAAO,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAChD,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,SAAS,GAAG;IACtB,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;IAC3C,QAAQ,OAAO,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAChD,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;IAC3C,QAAQ,OAAO,MAAM,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC;IACvD,IAAI;IACJ;;IAEA;IACA,MAAM,8BAA8B,CAAC;IACrC,IAAI,SAAS;IACb;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,QAAQ,EAAE;IAC1B,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ;IACjC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAC1C,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;IACpD,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;IACxB,QAAQ,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;IAChC,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,QAAQ,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IACpF,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;IACnD,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;;;;;;;;;;;;;;;;ICtvBA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,OAAO,GAAG,CAAC,OAAO,KAAK;IAC7B,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK;IAC1B,QAAQ,IAAI;IACZ,YAAY,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACnC,QAAQ,CAAC,CAAC,MAAM;IAChB;IACA,QAAQ;IACR,IAAI,CAAC;IACL,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK;IACxB,QAAQ,IAAI,GAAG;IACf,QAAQ,IAAI;IACZ,YAAY,GAAG,GAAG,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,QAAQ,CAAC,CAAC,MAAM;IAChB;IACA;IACA,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;IAC1B,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,QAAQ,IAAI;IACZ,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAClC,QAAQ,CAAC,CAAC,MAAM;IAChB;IACA,YAAY,MAAM,CAAC,CAAC,CAAC;IACrB,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,IAAI,CAAC;IACL,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;IAC3B,QAAQ,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC;IACL,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK;IACvB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/B,QAAQ,MAAM,CAAC,CAAC,CAAC;IACjB,QAAQ,OAAO,OAAO;IACtB,IAAI,CAAC;IACL,IAAI,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IACtC,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA,MAAM,SAAS,GAAG,CAAC,KAAK,MAAM;IAC9B,IAAI,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC9B,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC;IACL,IAAI,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE;IACxB,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;IAC1F,YAAY,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAC7B,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,QAAQ,OAAO,MAAM,CAAC,IAAI;IAC1B,IAAI,CAAC;IACL,CAAC,CAAC;;AAEG,UAAC,YAAY,GAAG,OAAO,CAAC,MAAM,YAAY;AAC1C,UAAC,cAAc,GAAG,OAAO,CAAC,MAAM,cAAc;AAC9C,UAAC,qBAAqB,GAAG,SAAS,CAAC,YAAY;AAC/C,UAAC,uBAAuB,GAAG,SAAS,CAAC,cAAc;;ICrExD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,WAAW,CAAC;IAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;IAC7C,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC;IAC7B,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE;IAClD,QAAQ,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,WAAW;IACjD,QAAQ,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,MAAM,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;IAC5G;IACA;IACA,YAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,YAAY,MAAM,IAAI,KAAK;IAC3B,gBAAgB,IAAI,KAAK;IACzB,sBAAsB,CAAC,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,+EAA+E,EAAE,QAAQ,CAAC,MAAM,CAAC,0CAA0C;IAClM,sBAAsB,CAAC,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,gFAAgF,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAC3K,aAAa;IACb,QAAQ;IACR,QAAQ,OAAO,IAAI,KAAK,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1F,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE;IAC1C;IACA,QAAQ,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK;IAC1C,YAAY,MAAM,EAAE,8BAA8B,KAAK,CAAC;IACxD,YAAY,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;IAC3B,gBAAgB,EAAE,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3C,YAAY;IACZ,YAAY,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE;IACxE,YAAY,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACrC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC;IACzB,YAAY;IACZ,QAAQ,CAAC;;IAET,QAAQ,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;IACpD,QAAQ,OAAO,QAAQ;IACvB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;IACjD,QAAQ,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;IACvD,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,CAAC,GAAG,OAAO,EAAE;IAC/B,QAAQ,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;IACjC,YAAY,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE;IACvC;IACA;IACA;IACA;IACA;IACA;IACA,gBAAgB,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;IAC9C,oBAAoB,OAAO,MAAM,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC;IAC1E,gBAAgB,CAAC;;IAEjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA,gBAAgB,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE;IAC3C,oBAAoB,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;IACvE,gBAAgB,CAAC;;IAEjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA,gBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;IAClD,oBAAoB,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;IACvE,gBAAgB,CAAC;IACjB,aAAa,CAAC;IACd,QAAQ;IACR,IAAI;IACJ;;ICnHA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,MAAM,CAAC;IACb,IAAI,WAAW,GAAG,CAAC;IACnB;IACA;IACA;IACA;IACA,IAAI,IAAI,GAAG;IACX,QAAQ,EAAE,IAAI,CAAC,WAAW;IAC1B,QAAQ,OAAO,IAAI,CAAC,IAAI,EAAE;IAC1B,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,IAAI,GAAG;IACX,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW;IACrC,QAAQ,MAAM,MAAM,GAAG,IAAI;IAC3B,QAAQ,OAAO;IACf;IACA,YAAY,IAAI,KAAK,GAAG;IACxB,gBAAgB,OAAO,IAAI,KAAK,MAAM,CAAC,WAAW;IAClD,YAAY,CAAC;IACb,SAAS;IACT,IAAI;IACJ;IACA,IAAI,UAAU,GAAG;IACjB,QAAQ,EAAE,IAAI,CAAC,WAAW;IAC1B,IAAI;IACJ;;IC1CA;IACA;IACA;IACA;IACA,MAAM,MAAM,CAAC;IACb;IACA,IAAI,OAAO,KAAK,CAAC,EAAE,EAAE;IACrB,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAChE,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9C,QAAQ,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK;IACrD,QAAQ,IAAI,GAAG,iCAAiC,IAAI,CAAC;IACrD,QAAQ,IAAI,IAAI,GAAG,EAAE;IACrB,QAAQ,IAAI,iBAAiB,GAAG,CAAC;;IAEjC,QAAQ,MAAM,KAAK,GAAG,MAAM;IAC5B,YAAY,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,iBAAiB;IACjE,YAAY,IAAI,SAAS,GAAG,OAAO,EAAE;IACrC,gBAAgB,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5D,gBAAgB;IAChB,YAAY;IACZ,YAAY,GAAG,GAAG,IAAI;IACtB,YAAY,IAAI,CAAC,SAAS,EAAE;IAC5B,gBAAgB,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,YAAY;IACZ;IACA;IACA,YAAY,IAAI,GAAG,KAAK,IAAI,EAAE;IAC9B,gBAAgB,IAAI,GAAG,EAAE;IACzB,YAAY;IACZ,QAAQ,CAAC;;IAET,QAAQ,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,KAAK;IACzC,YAAY,IAAI,GAAG,MAAM;IACzB,YAAY,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;IACjD,YAAY,IAAI,GAAG,KAAK,IAAI,EAAE;IAC9B,gBAAgB,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;IAClD,gBAAgB,IAAI,SAAS,EAAE;IAC/B,oBAAoB,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,gBAAgB;IAChB,YAAY;IACZ,QAAQ,CAAC;IACT,QAAQ,MAAM,KAAK,GAAG,MAAM;IAC5B,YAAY,YAAY,CAAC,GAAG,IAAI,SAAS,CAAC;IAC1C,YAAY,GAAG,GAAG,IAAI;IACtB,YAAY,IAAI,GAAG,EAAE;IACrB,QAAQ,CAAC;IACT,QAAQ,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;IACjC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9C,QAAQ,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI;IAChD,QAAQ,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI;IAClD,QAAQ,IAAI,GAAG,iCAAiC,IAAI,CAAC;IACrD,QAAQ,IAAI,IAAI,GAAG,EAAE;IACrB,QAAQ,IAAI,iBAAiB,GAAG,CAAC;;IAEjC,QAAQ,MAAM,KAAK,GAAG,MAAM;IAC5B,YAAY,iBAAiB,GAAG,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;IAC/D,YAAY,GAAG,GAAG,IAAI;IACtB,YAAY,IAAI,CAAC,GAAG,IAAI,CAAC;IACzB,YAAY,IAAI,GAAG,KAAK,IAAI,EAAE;IAC9B,gBAAgB,IAAI,GAAG,EAAE;IACzB,YAAY;IACZ,QAAQ,CAAC;IACT,QAAQ,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,KAAK;IACzC,YAAY,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;IACzC,YAAY,IAAI,CAAC,iBAAiB,IAAI,CAAC,OAAO,EAAE;IAChD,gBAAgB,iBAAiB,GAAG,GAAG;IACvC,YAAY;IACZ,YAAY,MAAM,SAAS,GAAG,iBAAiB,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,IAAI,GAAG,GAAG,iBAAiB,CAAC;IACjG,YAAY,IAAI,GAAG,MAAM;IACzB,YAAY,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,SAAS,EAAE;IACzD,gBAAgB,IAAI,GAAG,KAAK,IAAI,EAAE;IAClC,oBAAoB,YAAY,CAAC,GAAG,CAAC;IACrC,oBAAoB,GAAG,GAAG,IAAI;IAC9B,gBAAgB;IAChB,gBAAgB,iBAAiB,GAAG,GAAG;IACvC,gBAAgB,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,gBAAgB,IAAI,GAAG,KAAK,IAAI,EAAE;IAClC,oBAAoB,IAAI,GAAG,EAAE;IAC7B,gBAAgB;IAChB,YAAY,CAAC,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,EAAE;IACjD,gBAAgB,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;IAClD,YAAY;IACZ,QAAQ,CAAC;IACT,QAAQ,MAAM,KAAK,GAAG,MAAM;IAC5B,YAAY,YAAY,CAAC,GAAG,IAAI,SAAS,CAAC;IAC1C,YAAY,GAAG,GAAG,IAAI;IACtB,YAAY,IAAI,GAAG,EAAE;IACrB,QAAQ,CAAC;IACT,QAAQ,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;IACjC,IAAI;IACJ;;IC3GA;IACA,MAAM,QAAQ,CAAC;IACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;IACvC,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;IACnD,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;IAClF,gBAAgB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACxE,YAAY,CAAC,MAAM;IACnB,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACjC,YAAY;IACZ,YAAY,OAAO,GAAG;IACtB,QAAQ,CAAC,EAAE,EAAE,CAAC;IACd,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC1E;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;IAC5C,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,QAAQ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;IAChC,YAAY,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,mBAAmB,GAAG,EAAE,EAAE;IACjE,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,0BAA0B,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACjF,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,OAAO,GAAG,MAAM,IAAI,EAAE;IAClC,QAAQ,IAAI,QAAQ,uBAAuB,IAAI,CAAC;IAChD,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE;IAC/B,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IAChC,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,YAAY,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IACnE,gBAAgB,IAAI,QAAQ,KAAK,IAAI,EAAE;IACvC,oBAAoB,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,EAAE;IACjD,gBAAgB,CAAC,MAAM;IACvB,oBAAoB,MAAM,GAAG,OAAO,GAAG,EAAE;IACzC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IACvC;IACA;IACA,gBAAgB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,IAAI,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACpG,gBAAgB,OAAO,MAAM;IAC7B,YAAY;IACZ;IACA;IACA;IACA,YAAY,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;IAC7E,gBAAgB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;IAClC,YAAY;IACZ,YAAY,QAAQ,GAAG,OAAO;IAC9B,YAAY,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IACnC,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,OAAO,CAAC,EAAE,EAAE;IACvB,QAAQ,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE;IACjD,YAAY,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;IAC7B,gBAAgB,OAAO,SAAS;IAChC,YAAY;IACZ,YAAY,OAAO,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,GAAG,EAAE,CAAC,KAAK,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK;IACxF,QAAQ;IACR,QAAQ,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE;IACpD,YAAY,OAAO,EAAE,CAAC,OAAO;IAC7B,QAAQ;IACR,QAAQ,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE;IAClD,YAAY,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,KAAK,KAAK,MAAM;IACzD,QAAQ;IACR,QAAQ,IAAI,EAAE,CAAC,OAAO,KAAK,QAAQ,qCAAqC,CAAC,EAAE,EAAE,QAAQ,EAAE;IACvF,YAAY,OAAO,KAAK,CAAC,IAAI,kCAAkC,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;IACxG,QAAQ;IACR,QAAQ,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO,IAAI,EAAE,CAAC,OAAO,KAAK,QAAQ,IAAI,EAAE,CAAC,OAAO,KAAK,UAAU,EAAE;IAC5F,YAAY,OAAO,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,KAAK;IAC9E,QAAQ;IACR,QAAQ,OAAO,EAAE,CAAC,KAAK;IACvB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,EAAE,EAAE;IACxB,QAAQ,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;IAClF,IAAI;IACJ,IAAI,OAAO,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE;IACxC,QAAQ,IAAI,MAAM,GAAG,EAAE;IACvB,QAAQ,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;IACxC,YAAY,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;IAC1C,gBAAgB;IAChB,YAAY;IACZ;IACA;IACA;IACA;IACA,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;IAC3D,gBAAgB;IAChB,YAAY;IACZ;IACA;IACA,YAAY,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;IAC7D,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,GAAG,QAAQ,CAAC,WAAW;IACzC,gBAAgB,MAAM;IACtB,uCAAuC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;IAC9D,gBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACpC,aAAa;IACb,QAAQ;IACR,QAAQ,OAAO,MAAM;IACrB,IAAI;;IAEJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE;IAC3B,QAAQ,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE;IACjD;IACA;IACA,YAAY,EAAE,CAAC,OAAO,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC;IAChF,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE;IACpD,YAAY,EAAE,CAAC,OAAO,GAAG,GAAG;IAC5B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,EAAE,CAAC,OAAO,KAAK,QAAQ,qCAAqC,CAAC,EAAE,EAAE,QAAQ,EAAE;IACvF,YAAY,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClG,YAAY,KAAK,CAAC,IAAI,kCAAkC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;IACrF,gBAAgB,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IACrD,YAAY,CAAC,CAAC;IACd,YAAY;IACZ,QAAQ;IACR,QAAQ,EAAE,CAAC,KAAK,GAAG,GAAG;IACtB,IAAI;;IAEJ,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE;IAClC,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;IAC9C,aAAa,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;IAChD,aAAa,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7B,QAAQ,KAAK,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC1G,YAAY,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAC5F,gBAAgB,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;IAC1C,YAAY;IACZ,QAAQ;IACR,IAAI;;IAEJ,IAAI,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE;IAC3C;IACA;IACA;IACA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;IACjE,YAAY,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1E,QAAQ,CAAC,CAAC;IACV,QAAQ,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,KAAK,CAAC,CAAC,OAAO;IACpG,QAAQ,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C,QAAQ,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;IACxD,YAAY,EAAE,CAAC,iBAAiB,GAAG,EAAE,CAAC;IACtC,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;IAC5D,YAAY,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5C,YAAY,EAAE,CAAC,eAAe,EAAE;IAChC,YAAY,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACzC,QAAQ,CAAC,CAAC;IACV,QAAQ,MAAM,SAAS,GAAG,EAAE;IAC5B,QAAQ,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;IACnC,YAAY,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC/F,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACzC,YAAY,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE;IACrD,gBAAgB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1D,gBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACvF,gBAAgB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;IAC1C,oBAAoB;IACpB,gBAAgB;IAChB;IACA;IACA;IACA;IACA;IACA,gBAAgB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACxD,gBAAgB,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;IAC3C,oBAAoB,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC;IAChE,gBAAgB,CAAC,CAAC;IAClB,gBAAgB;IAChB,YAAY;IACZ;IACA,YAAY,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7B,QAAQ,CAAC,CAAC;IACV,QAAQ,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,SAAS,CAAC;IACxD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;IAC5D,YAAY,MAAM,GAAG,8BAA8B,EAAE,CAAC;IACtD,YAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;IACvC,gBAAgB,GAAG,CAAC,SAAS,GAAG,EAAE;IAClC,gBAAgB;IAChB,YAAY;IACZ;IACA;IACA;IACA,YAAY,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;IACxC,YAAY,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACpE,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE;IAC/C,YAAY;IACZ,QAAQ;IACR,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpD,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,cAAc,KAAK,EAAE;IACrB,IAAI;IACJ;;ICtPA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,KAAK,SAAS,aAAa,CAAC;IAClC,IAAI,OAAO,cAAc,GAAG,IAAI;IAChC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,OAAO,CAAC;IAC9F;IACA,IAAI,OAAO,IAAI,GAAG,cAAc;IAChC,IAAI,QAAQ;IACZ,IAAI,WAAW;IACf,IAAI,OAAO;IACX,IAAI,UAAU;IACd,IAAI,KAAK,GAAG,EAAE;IACd,IAAI,WAAW,GAAG;IAClB,QAAQ,KAAK,EAAE;IACf;IACA,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,+BAA+B,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI;IACjF,IAAI;IACJ;IACA,IAAI,QAAQ,GAAG;IACf,QAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IAChF,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,CAAC;IACV,QAAQ,QAAQ;IAChB,QAAQ,OAAO;IACf,QAAQ,KAAK;IACb,QAAQ,KAAK,GAAG,IAAI;IACpB,QAAQ,SAAS,GAAG,IAAI;IACxB,QAAQ,MAAM,GAAG,IAAI;IACrB,QAAQ,SAAS,GAAG,OAAO;IAC3B,QAAQ,MAAM,GAAG,IAAI;IACrB,QAAQ,IAAI,GAAG,EAAE;IACjB,KAAK,EAAE;IACP,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC/B,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK;IAChC,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,UAAU,GAAG,SAAS;IACnC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,MAAM,EAAE;IACpB;IACA;IACA;IACA;IACA;IACA,YAAY,MAAM,CAAC,gBAAgB;IACnC,gBAAgB,OAAO;IACvB,gBAAgB,CAAC,GAAG,KAAK;IACzB,oBAAoB,IAAI,IAAI,CAAC,QAAQ,EAAE;IACvC,wBAAwB,GAAG,CAAC,cAAc,EAAE;IAC5C,oBAAoB;IACpB,gBAAgB,CAAC;IACjB,gBAAgB,IAAI;IACpB,aAAa;IACb,QAAQ;IACR;IACA;IACA,QAAQ,IAAI,KAAK,EAAE;IACnB,YAAY,CAAC,SAAS,IAAI,OAAO,EAAE,uBAAuB,GAAG,CAAC,KAAK,CAAC;IACpE,QAAQ;IACR,QAAQ,IAAI,KAAK,EAAE;IACnB,YAAY,OAAO,CAAC,sBAAsB,GAAG,CAAC,KAAK,CAAC;IACpD;IACA,YAAY,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/D,QAAQ;IACR;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,GAAG,KAAK;IAClD,YAAY,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,WAAW,EAAE;IAChF,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,MAAM,oCAAoC,GAAG,CAAC,MAAM,CAAC;IACvE;IACA;IACA;IACA,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;IACvF,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,cAAc,EAAE;IACjC,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,eAAe,CAAC,EAAE,EAAE;IAC/B,QAAQ,OAAO,EAAE,YAAY,gBAAgB,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;IAClH,IAAI;IACJ,IAAI,KAAK,CAAC,OAAO,EAAE;IACnB,QAAQ,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;IACrC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE;IACtC;IACA;IACA;IACA,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/F,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,YAAY,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;IAC1C,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE;IAC3C,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;IAC9D,QAAQ,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,KAAK;IAC1C,IAAI;IACJ;IACA,IAAI,cAAc,GAAG;IACrB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI;IACxC,QAAQ,IAAI,CAAC,IAAI,EAAE;IACnB,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,UAAU;IACxB,YAAY,IAAI,CAAC,gBAAgB,CAAC,6CAA6C;IAC/E,SAAS;IACT,QAAQ,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClG,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,CAAC,MAAM,GAAG,EAAE,EAAE;IAC/B,QAAQ,IAAI,CAAC,aAAa;IAC1B,YAAY,IAAI,WAAW,CAAC,QAAQ,EAAE;IACtC,gBAAgB,OAAO,EAAE,IAAI;IAC7B,gBAAgB,UAAU,EAAE,KAAK;IACjC,gBAAgB,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,EAAE;IACxD,aAAa,CAAC;IACd,SAAS;IACT,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,GAAG;IACnB,QAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;IAC3D,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,SAAS;IACxB,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;IAClB;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,iBAAiB,GAAG;IACxB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACxE,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,QAAQ,GAAG;IACnB;IACA;IACA,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAC5C,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB;IACA,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC;IACA;IACA;IACA,QAAQ,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;IAC1C,YAAY,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7C,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,QAAQ,GAAG;IACnB;IACA;IACA,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAC5C,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;IAC1C,YAAY,EAAE,CAAC,QAAQ,GAAG,CAAC;IAC3B,QAAQ;IACR;IACA;IACA,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;IAC7B,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/E,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,IAAI,QAAQ,GAAG;IACnB;IACA;IACA,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAC5C,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;IAC7B,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/E,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,IAAI,EAAE;IACjB,QAAQ,MAAM,KAAK,uBAAuB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5D,QAAQ,IAAI,KAAK,YAAY,OAAO,EAAE;IACtC,YAAY,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3B,QAAQ,OAAO,SAAS;IACxB,IAAI;IACJ,IAAI,OAAO,CAAC,MAAM,EAAE;IACpB,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,IAAI,EAAE;IACjB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACzE,IAAI;IACJ;;ICjVA;IACA,MAAM,oBAAoB,CAAC;IAC3B,IAAI,KAAK;IACT,IAAI,IAAI;IACR,IAAI,OAAO;IACX,IAAI,cAAc;IAClB,IAAI,eAAe;IACnB,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE;IAClE,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;IACvB,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,cAAc,GAAG,aAAa;IAC3C,QAAQ,IAAI,CAAC,eAAe,GAAG,cAAc;IAC7C,IAAI;IACJ,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE;IAC1B,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;IAChD,IAAI;IACJ,IAAI,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE;IAChC,QAAQ,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE;IACtF,IAAI;IACJ,IAAI,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE;IAC9B,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC;IACnD,IAAI;IACJ;;IAEA;IACA,MAAM,eAAe,CAAC;IACtB,IAAI,cAAc;IAClB,IAAI,eAAe;IACnB,IAAI,WAAW,CAAC,aAAa,EAAE,cAAc,EAAE;IAC/C,QAAQ,IAAI,CAAC,cAAc,GAAG,aAAa;IAC3C,QAAQ,IAAI,CAAC,eAAe,GAAG,cAAc;IAC7C,IAAI;IACJ,IAAI,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE;IAChC,QAAQ,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;IACtD,IAAI;IACJ,IAAI,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC1C;IACA,QAAQ,OAAO,QAAQ;IACvB,IAAI;IACJ,IAAI,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE;IACpC,QAAQ,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC;IACzD,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,UAAU,CAAC;IACjB,IAAI,OAAO,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE;IAC5B,QAAQ,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC;IAChD,QAAQ,MAAM,aAAa,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACpH,QAAQ,MAAM,cAAc,GAAG,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACvH,QAAQ,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzC,QAAQ,IAAI,CAAC,GAAG,EAAE;IAClB,YAAY,OAAO,IAAI,eAAe,CAAC,aAAa,EAAE,cAAc,CAAC;IACrE,QAAQ;IACR,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM;IACtD,QAAQ,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,CAAC;IACzF,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA,MAAM,IAAI,SAAS,aAAa,CAAC;IACjC;IACA;IACA,IAAI,OAAO,UAAU,GAAG;IACxB,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,QAAQ,gBAAgB;IACxB,QAAQ,iBAAiB;IACzB,QAAQ,kCAAkC;IAC1C,QAAQ,0BAA0B;IAClC,QAAQ,cAAc;IACtB,KAAK;IACL,IAAI,IAAI;IACR,IAAI,MAAM,GAAG;IACb,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;IACnD,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;IACxB;IACA;IACA;IACA,QAAQ,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC;IAC3C,QAAQ,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;IAC/C;IACA;IACA;IACA,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC3E,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;IAChD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK;IACrD,YAAY,CAAC,CAAC,cAAc,EAAE;IAC9B,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B,YAAY,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC;IACvD,QAAQ,CAAC,CAAC;IACV;IACA;IACA;IACA,QAAQ,IAAI,CAAC,gBAAgB;IAC7B,YAAY,OAAO;IACnB,YAAY,CAAC,GAAG,KAAK;IACrB,gBAAgB,MAAM,MAAM,yBAAyB,GAAG,CAAC,MAAM,CAAC;IAChE,gBAAgB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,wBAAwB,CAAC,EAAE;IACjE,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,GAAG,CAAC,cAAc,EAAE;IACpC,gBAAgB,GAAG,CAAC,wBAAwB,EAAE;IAC9C,YAAY,CAAC;IACb,YAAY,IAAI;IAChB,SAAS;IACT,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;IACtD,YAAY,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,KAAK;IACtE,gBAAgB,GAAG,CAAC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC;IAClD,YAAY,CAAC,CAAC;IACd,QAAQ;IACR,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IAClC,IAAI;IACJ,IAAI,WAAW,GAAG,KAAK;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,MAAM,CAAC,SAAS,EAAE;IAC5B,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;IAC/B,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1B;IACA;IACA;IACA,QAAQ,IAAI,MAAM;IAClB,QAAQ,IAAI,OAAO;IACnB,QAAQ,IAAI;IACZ,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACjG,YAAY,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;IAC/D,YAAY,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;IACxD,YAAY,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE;IACjD,gBAAgB,OAAO,EAAE,IAAI;IAC7B,gBAAgB,UAAU,EAAE,IAAI;IAChC,gBAAgB,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IACtD,aAAa,CAAC;IACd,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;IACzC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,MAAM,GAAG,EAAE;IAC5B,YAAY,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,kBAAkB,EAAE;IAC5D,gBAAgB,OAAO,EAAE,IAAI;IAC7B,gBAAgB,UAAU,EAAE,KAAK;IACjC,gBAAgB,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;IAC3F,aAAa,CAAC;IACd,YAAY,IAAI,QAAQ,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvF,YAAY,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO;;IAExC,YAAY,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;IACnE,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC;IACjE,YAAY,IAAI,CAAC,aAAa;IAC9B,gBAAgB,IAAI,WAAW,CAAC,gBAAgB,EAAE;IAClD,oBAAoB,OAAO,EAAE,IAAI;IACjC,oBAAoB,UAAU,EAAE,KAAK;IACrC,oBAAoB,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;IAC5E,iBAAiB,CAAC;IAClB,aAAa;IACb,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE;IACpB,YAAY,IAAI,CAAC,aAAa;IAC9B,gBAAgB,IAAI,WAAW,CAAC,gBAAgB,EAAE;IAClD,oBAAoB,OAAO,EAAE,IAAI;IACjC,oBAAoB,UAAU,EAAE,KAAK;IACrC,oBAAoB,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE;IACxE,iBAAiB,CAAC;IAClB,aAAa;IACb,YAAY,IAAI,CAAC,YAAY,OAAO,EAAE;IACtC,gBAAgB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ;IACxC,YAAY;IACZ,YAAY,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACrE,QAAQ,CAAC,SAAS;IAClB,YAAY,IAAI,CAAC,WAAW,GAAG,KAAK;IACpC,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC/B,QAAQ;IACR,IAAI;IACJ;IACA,IAAI,KAAK,GAAG;IACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IACzB,IAAI;IACJ,IAAI,SAAS,GAAG,CAAC;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,EAAE,EAAE;IAClB,QAAQ,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC;IACrD,QAAQ,EAAE,CAAC,MAAM,GAAG,KAAK;IACzB,QAAQ,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;IAC1C,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;IACpD,QAAQ,KAAK,CAAC,SAAS,GAAG,aAAa;IACvC,QAAQ,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,eAAe;IAC3C,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;IACxB,QAAQ,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAClE,IAAI;IACJ;IACA,IAAI,OAAO,CAAC,IAAI,EAAE;IAClB;IACA;IACA,QAAQ,IAAI,IAAI,EAAE;IAClB,YAAY,EAAE,IAAI,CAAC,SAAS;IAC5B,YAAY,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,QAAQ,CAAC,MAAM;IACf,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IAC5D,YAAY,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,QAAQ;IACR;IACA;IACA,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/D,QAAQ,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;IAC7D,YAAY,MAAM,GAAG,6BAA6B,EAAE,CAAC;IACrD,YAAY,IAAI,IAAI,EAAE;IACtB,gBAAgB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IACnC,gBAAgB;IAChB,YAAY;IACZ,YAAY,GAAG,CAAC,MAAM,GAAG,IAAI;IAC7B,YAAY,GAAG,CAAC,aAAa,CAAC,mCAAmC,CAAC,EAAE,MAAM,EAAE;IAC5E,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;IAC9D,YAAY,MAAM,GAAG,oDAAoD,EAAE,CAAC;IAC5E,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;IAC/D,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,IAAI,EAAE;IACtB;IACA;IACA;IACA;IACA;IACA,gBAAgB,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE;IACxE,gBAAgB,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;IACzD,YAAY,CAAC,MAAM;IACnB;IACA,gBAAgB,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE;IAClD,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC;IAC5E,gBAAgB,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE;IACrC,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE;IACnB,QAAQ,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IACxC,IAAI;IACJ,IAAI,IAAI,MAAM,GAAG;IACjB,QAAQ,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI;IACJ;IACA,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE;IACnB,QAAQ,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACxE,IAAI;IACJ;;ICjSA;IACA;IACA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC;IAC1C,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,OAAO;IAC/B,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM;IAC1D,QAAQ,IAAI;IACZ,YAAY,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC;IAC3C,QAAQ,CAAC,CAAC,wBAAwB,CAAC,EAAE;IACrC,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACjE,YAAY,OAAO,IAAI;IACvB,QAAQ;IACR,IAAI,CAAC,CAAC;;IAEN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,qBAAqB,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,cAAc,CAAC,IAAI,IAAI;;IAE9F,MAAM,UAAU,GAAG,IAAI,OAAO,EAAE;IAChC,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK;IACzB,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpC,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACxC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;IACjE;IACA,QAAQ,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1B,QAAQ,OAAO,CAAC,IAAI,CAAC,+EAA+E,EAAE,EAAE,CAAC;IACzG,IAAI;IACJ,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;IACvB,QAAQ,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACzC;IACA;IACA,QAAQ,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,IAAI;IACJ,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;IACzB,QAAQ,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC7C,QAAQ,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI;IACJ,IAAI,OAAO,IAAI;IACf,CAAC;;IAED;IACA,MAAM,KAAK,SAAS,KAAK,CAAC;IAC1B,IAAI,OAAO,QAAQ,GAAG,CAAC,aAAa,CAAC;IACrC;IACA;IACA,IAAI,OAAO,UAAU,GAAG;IACxB,QAAQ,MAAM;IACd,QAAQ,QAAQ;IAChB,QAAQ,MAAM;IACd,QAAQ,QAAQ;IAChB,QAAQ,oBAAoB;IAC5B,QAAQ,eAAe;IACvB,QAAQ,cAAc;IACtB,KAAK;IACL,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,MAAM;IACV,IAAI,KAAK,GAAG;IACZ;IACA;IACA,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClG,IAAI;IACJ,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;IACjC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IAC9E,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC;;IAE9D;IACA;IACA;IACA,QAAQ,UAAU,CAAC,GAAG;IACtB,YAAY,IAAI,CAAC,MAAM;IACvB,YAAY,cAAc;IAC1B,YAAY,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC;IACxE,SAAS;IACT,QAAQ,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IACvD,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;IACvD,YAAY,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;IACxC,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK;IAC3C,YAAY,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IACvC,YAAY,IAAI,MAAM,KAAK,KAAK,EAAE;IAClC,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc;IACnD,YAAY,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK;IACpC,YAAY,IAAI,KAAK,KAAK,IAAI,EAAE;IAChC;IACA,gBAAgB;IAChB,YAAY;IACZ;IACA;IACA,YAAY,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM;IAC9D,YAAY,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;IACtD,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK;IACxD,YAAY,GAAG,CAAC,eAAe,EAAE;IACjC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,QAAQ,CAAC,CAAC;IACV,QAAQ,OAAO;IACf,YAAY,QAAQ;IACpB,YAAY,OAAO,EAAE,IAAI,CAAC,MAAM;IAChC,YAAY,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;IAC5D,YAAY,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IAClD,SAAS;IACT,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACpD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC1C,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;IACnC,QAAQ,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1D,QAAQ,MAAM,OAAO,GAAG,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,UAAU;IAC7D,QAAQ,IAAI,OAAO,KAAK,EAAE,EAAE;IAC5B,YAAY,OAAO,IAAI;IACvB,QAAQ;IACR,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;IAClD;IACA;IACA,YAAY,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACrC,YAAY,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;IAChD,QAAQ;IACR,QAAQ,OAAO,OAAO;IACtB,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;IACrB,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK;IAC9E,IAAI;IACJ,IAAI,IAAI,WAAW,GAAG;IACtB,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC;IACzD,QAAQ,OAAO,CAAC,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC;IACnC,IAAI;IACJ,IAAI,IAAI,WAAW,CAAC,CAAC,EAAE;IACvB;IACA;IACA,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,IAAI,GAAG,CAAC;IAC5D,QAAQ,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;IACxC,IAAI;IACJ;;ICvKA;IACA,MAAM,SAAS,SAAS,aAAa,CAAC;IACtC,IAAI,OAAO,UAAU,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7C,IAAI,MAAM,GAAG;IACb,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC/C,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IACxD,QAAQ,MAAM,MAAM,GAAG,OAAO,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpE;IACA;IACA,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE;IAC/D,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAChE,YAAY;IACZ,QAAQ;IACR;IACA,QAAQ,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;IAC1F,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACjG,IAAI;IACJ;;IAEA;IACA,MAAM,OAAO,SAAS,aAAa,CAAC;IACpC,IAAI,OAAO,UAAU,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7C,IAAI,MAAM,GAAG;IACb,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC/C,QAAQ,MAAM,MAAM,GAAG,OAAO,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACpF;IACA,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE;IAC/D,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAChE,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;IAC1F,QAAQ,IAAI,CAAC,eAAe;IAC5B,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,gBAAgB,IAAI,EAAE,SAAS;IAC/B,gBAAgB,KAAK,EAAE,SAAS;IAChC,gBAAgB,GAAG,EAAE,SAAS;IAC9B,gBAAgB,IAAI,EAAE,SAAS;IAC/B,gBAAgB,MAAM,EAAE,SAAS;IACjC,gBAAgB,MAAM,EAAE,SAAS;IACjC,gBAAgB,MAAM,EAAE,KAAK;IAC7B,aAAa,CAAC;IACd,SAAS;IACT,IAAI;IACJ;IACA;IACA,IAAI,OAAO,MAAM,CAAC,CAAC,EAAE;IACrB,QAAQ,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IACtF,IAAI;IACJ,IAAI,OAAO,UAAU,CAAC,GAAG,EAAE;IAC3B,QAAQ,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IACrC,QAAQ,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACxD,QAAQ,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5F,QAAQ,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IACjI,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChC,IAAI;IACJ,IAAI,OAAO,UAAU,CAAC,KAAK,EAAE;IAC7B,QAAQ,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACvC,QAAQ,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE;IACjE,IAAI;IACJ;;IAEA;IACA,MAAM,cAAc,SAAS,KAAK,CAAC;IACnC;IACA;IACA,IAAI,OAAO,QAAQ,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;IAC5C,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ,IAAI,IAAI,GAAG,GAAG;IACd,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;IACjC,QAAQ,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC;IAClC,IAAI;IACJ,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE;IACf,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5D,IAAI;IACJ,IAAI,IAAI,GAAG,GAAG;IACd,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;IACjC,QAAQ,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC;IAClC,IAAI;IACJ,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE;IACf,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5D,IAAI;IACJ,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;IAClC,QAAQ,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC;IAClC,IAAI;IACJ,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE;IAChB,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE;IAClC,IAAI;IACJ,IAAI,OAAO,gBAAgB,CAAC,CAAC,EAAE;IAC/B,QAAQ,IAAI,CAAC,CAAC,EAAE;IAChB,YAAY,OAAO,EAAE;IACrB,QAAQ;IACR;IACA;IACA,QAAQ,MAAM,eAAe,GAAG,CAAC,IAAI;IACrC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,QAAQ,IAAI,CAAC,KAAK,KAAK,EAAE;IACzB,YAAY,OAAO,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9C,QAAQ;IACR,QAAQ,MAAM,EAAE,GAAG,sBAAsB;IACzC,QAAQ,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,YAAY,OAAO,CAAC;IACpB,QAAQ;IACR,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC;IAC9C,QAAQ,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,QAAQ,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE;IAC5B,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,QAAQ,QAAQ,KAAK,CAAC,CAAC,CAAC;IACxB,YAAY,KAAK,GAAG;IACpB,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;IACtD,gBAAgB;IAChB,YAAY,KAAK,GAAG,EAAE;IACtB,gBAAgB,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,EAAE;IAC/C,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;IACxD,gBAAgB,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,WAAW,EAAE;IACjD,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,GAAG;IACpB,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9D,gBAAgB;IAChB;IACA,QAAQ,OAAO,eAAe,CAAC,CAAC,CAAC;IACjC,IAAI;IACJ;;IAEA;IACA,MAAM,cAAc,SAAS,cAAc,CAAC;IAC5C,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ,IAAI,IAAI,GAAG,GAAG;IACd,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;IACjC,QAAQ,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC;IAClC,IAAI;IACJ,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE;IACf,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAClD,IAAI;IACJ,IAAI,IAAI,GAAG,GAAG;IACd,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;IACjC,QAAQ,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC;IAClC,IAAI;IACJ,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE;IACf,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAClD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,gBAAgB,CAAC,CAAC,EAAE;IACxB,QAAQ,IAAI,CAAC,CAAC,EAAE;IAChB,YAAY,OAAO,EAAE;IACrB,QAAQ;IACR,QAAQ,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;IACnC,QAAQ,IAAI,CAAC,KAAK,KAAK,EAAE;IACzB,YAAY,MAAM,EAAE,GAAG,qBAAqB;IAC5C,YAAY,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,gBAAgB,OAAO,CAAC;IACxB,YAAY;IACZ,YAAY,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC;IAClD,YAAY,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;IAC3C,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAClC,gBAAgB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC/D,YAAY,CAAC,MAAM;IACnB,gBAAgB,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC;IACnE,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAChF,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE;IACvC,QAAQ,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACrD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;IAC3F,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,WAAW;IACvE,QAAQ,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAClD,QAAQ,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;IACzD,QAAQ,OAAO,WAAW,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1F,IAAI;IACJ;;IAEA;IACA,MAAM,YAAY,SAAS,KAAK,CAAC;IACjC;IACA;IACA,IAAI,OAAO,QAAQ,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;IAC5C,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,gBAAgB;IAC/B,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACpD,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;IACjB,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE;IAC1D,IAAI;IACJ,IAAI,IAAI,GAAG,GAAG;IACd,QAAQ,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAClD,IAAI;IACJ,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE;IACf,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE;IACxD,IAAI;IACJ,IAAI,IAAI,GAAG,GAAG;IACd,QAAQ,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAClD,IAAI;IACJ,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE;IACf,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE;IACxD,IAAI;IACJ,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;IAClC,QAAQ,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC;IAClC,IAAI;IACJ,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE;IAChB,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE;IAClC,IAAI;IACJ;;IC9NA;IACA,MAAM,SAAS,SAAS,KAAK,CAAC;IAC9B;IACA,IAAI,OAAO,eAAe,GAAG,IAAI;IACjC;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE;IAC5B,QAAQ,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE;IACrC,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAClC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B,QAAQ;IACR,QAAQ,OAAO,EAAE,CAAC,KAAK;IACvB,IAAI;IACJ,IAAI,OAAO,QAAQ,GAAG;IACtB,QAAQ,aAAa;IACrB,QAAQ,YAAY;IACpB,QAAQ,mBAAmB;IAC3B,QAAQ,oBAAoB;IAC5B,QAAQ,mBAAmB;IAC3B,QAAQ,kBAAkB;IAC1B,QAAQ,sBAAsB;IAC9B,QAAQ,uBAAuB;IAC/B;IACA;IACA,QAAQ,OAAO;IACf,KAAK;IACL,IAAI,OAAO;IACX,IAAI,MAAM;IACV,IAAI,SAAS;IACb,IAAI,SAAS;IACb,IAAI,MAAM;IACV,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,OAAO,SAAS,GAAG;IACvB,QAAQ,KAAK,EAAE;AACf;AACA;AACA;AACA,QAAQ,CAAC;IACT,QAAQ,OAAO,EAAE,CAAC,+DAA+D,CAAC;IAClF,KAAK;IACL,IAAI,cAAc;IAClB,IAAI,MAAM,CAAC,IAAI,EAAE;IACjB,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IACzC,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;IACxC,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC;IAC7D;IACA;IACA,QAAQ,IAAI,CAAC,cAAc;IAC3B,YAAY,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;IACvH,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC;IACtE,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC;IACrE,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACjE,QAAQ,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK;IAC/D,YAAY,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;IAC7B,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;IACrD,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAC7C,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACvF,YAAY,IAAI,GAAG,KAAK,EAAE,EAAE;IAC5B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IACpF;IACA;IACA,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;IACxD,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;IAChD,QAAQ,CAAC,CAAC;;IAEV,QAAQ,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK;IAC3D,YAAY,CAAC,CAAC,cAAc,EAAE;IAC9B,YAAY,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC;IAClD,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM;IAC3D,YAAY,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC;IACnD,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK;IACvD,YAAY,CAAC,CAAC,cAAc,EAAE;IAC9B,YAAY,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC;IACnD;IACA;IACA,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;IACtF,YAAY,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IACrF,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;IAC5E,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9C;IACA;IACA,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK;IACtD,YAAY,IAAI,CAAC,OAAO,EAAE;IAC1B,QAAQ,CAAC,CAAC;IACV;IACA;IACA;IACA;IACA,QAAQ,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;IACjD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,CAAC,iBAAiB,EAAE;IAChC,QAAQ,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;IACxC,QAAQ,IAAI,CAAC,iBAAiB,EAAE;IAChC,QAAQ,IAAI,CAAC,gBAAgB,EAAE;IAC/B,QAAQ,IAAI,CAAC,gBAAgB,EAAE;IAC/B,QAAQ,IAAI,CAAC,iBAAiB,EAAE;IAChC,QAAQ,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAChH,IAAI;IACJ,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE;IACvB,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;IACpF;IACA;IACA;IACA,QAAQ,MAAM,OAAO,6BAA6B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAClF,QAAQ,UAAU,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,eAAe,CAAC;IACrE,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,IAAI,EAAE;IACtB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;IAC5C,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK;IAC5C,YAAY,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;IAC9D,YAAY,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;IACnC,gBAAgB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,YAAY;IACZ,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IAClC,gBAAgB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,YAAY;IACZ,YAAY,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;IACrD,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ,IAAI,iBAAiB,GAAG;IACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IAClC,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;IAEtF,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;IACvC,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACxF,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,IAAI;IACJ,IAAI,iBAAiB,GAAG;IACxB,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;IACrC,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE;IACjD,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3E,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE;IAC5C,IAAI;;IAEJ,IAAI,gBAAgB,GAAG;IACvB,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;IACxC,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;IACzF,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;IACpC,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;IAC1G,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,IAAI;IACJ,IAAI,gBAAgB,GAAG;IACvB,QAAQ,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;IACzC,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnF,QAAQ,IAAI,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE;IAC7C,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;IAC5G,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE;IAC5C,IAAI;;IAEJ,IAAI,IAAI,MAAM,GAAG;IACjB,QAAQ,OAAO,IAAI,CAAC,OAAO;IAC3B,IAAI;IACJ,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE;IACnB,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;IACzC,QAAQ,IAAI,CAAC,OAAO,GAAG,EAAE;IACzB,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;IACpC,IAAI;IACJ,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;IACnC,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC;IAChC,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;IAChC,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE;IAClB,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;IAC9B,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,IAAI;IACJ,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;IACpC,IAAI;IACJ,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE;IAChB,QAAQ,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACjD,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;IACtE,QAAQ,OAAO,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzD,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;IACjB,QAAQ,IAAI,CAAC,EAAE;IACf,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE;IACrC,IAAI;IACJ,IAAI,iBAAiB,GAAG;IACxB;IACA;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,IAAI;IACJ,IAAI,IAAI,SAAS,GAAG;IACpB,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,IAAI;IACJ,IAAI,SAAS;IACb,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,SAAS;IAC7B,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC;IAC1B,QAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IACtC,IAAI;IACJ,IAAI,YAAY;IAChB,IAAI,IAAI,WAAW,GAAG;IACtB,QAAQ,OAAO,IAAI,CAAC,YAAY;IAChC,IAAI;IACJ,IAAI,IAAI,WAAW,CAAC,CAAC,EAAE;IACvB,QAAQ,IAAI,CAAC,YAAY,GAAG,CAAC;IAC7B,QAAQ,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC;IAC1C,IAAI;IACJ,IAAI,aAAa;IACjB,IAAI,IAAI,YAAY,GAAG;IACvB,QAAQ,OAAO,IAAI,CAAC,aAAa;IACjC,IAAI;IACJ,IAAI,IAAI,YAAY,CAAC,CAAC,EAAE;IACxB,QAAQ,IAAI,CAAC,aAAa,GAAG,CAAC;IAC9B,QAAQ,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC3C,IAAI;IACJ,IAAI,YAAY;IAChB,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,YAAY;IAChC,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,IAAI,CAAC,YAAY,GAAG,CAAC;IAC7B,QAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IACtC,IAAI;IACJ,IAAI,YAAY;IAChB,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,YAAY;IAChC,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,IAAI,CAAC,YAAY,GAAG,CAAC;IAC7B,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,IAAI;IACJ;;ICxTA;IACA;IACA;IACA;IACA;IACA;IACA;;;IAIA;IACA,MAAM,GAAG,GAAG,CAAC;IACb,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE;IACtB,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,WAAW,GAAG,KAAK;;IAEvB,MAAM,eAAe,GAAG;IACxB,IAAI,GAAG,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC5C,IAAI,GAAG,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAChD,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACzC,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACvC,IAAI,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC;;IAE7C,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;;IAEvF;IACA,MAAM,MAAM,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC;;IAE/E;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK;IAC5C,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,qBAAqB,EAAE;IAC/C,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;IAChD;IACA,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,2BAA2B,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5H,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzH,CAAC;;IAED,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,QAAQ,KAAK;IACrC,IAAI,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ;IACzC,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,qBAAqB,EAAE;IAC/C,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe;IAC7C,IAAI,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW;IACnC,IAAI,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY;IACpC;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;IAC1C,IAAI,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAC9C,IAAI,MAAM,GAAG,GAAG;IAChB,QAAQ,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;IAChD,QAAQ,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;IACpD,QAAQ,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;IACtD,QAAQ,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;IAClD,KAAK;IACL,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM;IAChC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;IACjC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;IAC9B,IAAI,IAAI,OAAO,EAAE;IACjB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IACvD,QAAQ,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAC1C,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;IAC1E,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM;IAC7D,QAAQ,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;IACtF,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,IAAI,MAAM,SAAS,GAAG,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,QAAQ,IAAI,QAAQ;IACvF,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAC7C,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3E,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACnC,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK;IACtD,IAAI,IAAI,IAAI;IACZ,QAAQ,SAAS,KAAK;IACtB,cAAc,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;IAC9B,cAAc,SAAS,KAAK;IAC5B,gBAAgB,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG;IACvC,gBAAgB;IAChB,kBAAkB,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG;IACpD,kBAAkB,GAAG,CAAC,IAAI;IAC1B,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;IAClE,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM;IACzD,IAAI,MAAM,GAAG;IACb,QAAQ,SAAS,KAAK;IACtB,cAAc,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG;IACrC,cAAc,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK;IACrD,gBAAgB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG;IACpD,gBAAgB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG;IACpC,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;IACjE,IAAI,IAAI,IAAI,EAAE;IACd,QAAQ,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC;IACvC,IAAI;IACJ,CAAC;;IAED,MAAM,OAAO,GAAG,CAAC,OAAO,KAAK;IAC7B,IAAI,KAAK,MAAM,QAAQ,IAAI;IAC3B,QAAQ,KAAK;IACb,QAAQ,MAAM;IACd,QAAQ,OAAO;IACf,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,QAAQ,WAAW;IACnB,QAAQ,OAAO;IACf,QAAQ,2BAA2B;IACnC,QAAQ,0BAA0B;IAClC,KAAK,EAAE;IACP,QAAQ,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;IAC9C,IAAI;IACJ,CAAC;;IAED,MAAM,MAAM,GAAG,MAAM;IACrB,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;IAC5C;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;IACnE,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAChC,YAAY;IACZ,QAAQ;IACR,QAAQ,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;IAChC,IAAI;IACJ,CAAC;;IAED,MAAM,QAAQ,GAAG,MAAM;IACvB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;IACjC,QAAQ,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC;IAC7C,IAAI;IACJ,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,mBAAmB,GAAG;IAC5B,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,MAAM,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,EAAE;IACxG,KAAK;IACL,IAAI,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;IACtC,IAAI,IAAI,MAAM,EAAE;IAChB;IACA,QAAQ,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,GAAG;IACtC,QAAQ,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC;IACzD,IAAI;IACJ,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;IACrC,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,MAAM;IACzC,IAAI,IAAI,QAAQ,EAAE;IAClB,QAAQ,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;IACtD,QAAQ,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,KAAK;IACrE,YAAY,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7F,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA;IACA;IACA,IAAI,IAAI,CAAC,SAAS,IAAI,eAAe,EAAE,EAAE;IACzC,QAAQ;IACR,IAAI;IACJ,IAAI,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;IACzC,IAAI,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,GAAG,KAAK;IACvE;IACA;IACA,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;IACrC,YAAY,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;IACpC,QAAQ;IACR,IAAI,CAAC,CAAC;IACN,IAAI,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,KAAK;IACjE,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;IACrC,YAAY,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;IACvC,YAAY,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;IACpC,QAAQ,CAAC,MAAM;IACf,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAChC,YAAY,OAAO,CAAC,OAAO,CAAC;IAC5B,QAAQ;IACR,IAAI,CAAC,CAAC;IACN,IAAI,IAAI,CAAC,WAAW,EAAE;IACtB,QAAQ,WAAW,GAAG,IAAI;IAC1B,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;IAC3D,QAAQ,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACnD,IAAI;IACJ,CAAC;;ICpMD;IACA;IACA;IACA;IACA;IACA,MAAM,YAAY,CAAC;IACnB,IAAI,KAAK;IACT,IAAI,IAAI;IACR,IAAI,OAAO;IACX,IAAI,eAAe;IACnB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,IAAI,KAAK;IACT,IAAI,SAAS;IACb,IAAI,QAAQ,GAAG,IAAI,MAAM,EAAE;IAC3B,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAC3E,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;IACvB,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,eAAe,GAAG,cAAc;IAC7C,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ;IACjC,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ;IACjC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;IAC7B,IAAI;IACJ,IAAI,MAAM,QAAQ,GAAG;IACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;IAC7B,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,IAAI,CAAC,cAAc,EAAE;IACnC,IAAI;IACJ,IAAI,MAAM,KAAK,CAAC,GAAG,IAAI,EAAE;IACzB,QAAQ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;IAChD,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACnE,IAAI;IACJ,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE;IACvB,QAAQ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;IAChD;IACA;IACA,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5G,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,UAAU,GAAG;IACvB,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;IAClC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;IAC7B,IAAI;IACJ,IAAI,MAAM,cAAc,CAAC,GAAG,EAAE;IAC9B,QAAQ,MAAM,IAAI,CAAC,UAAU,EAAE;IAC/B,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;IACvB,IAAI;IACJ,IAAI,MAAM,cAAc,GAAG;IAC3B,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;IACjC,YAAY,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;IACzC;IACA;IACA,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IAClD,gBAAgB,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS;IACjH,qBAAqB,IAAI,CAAC,CAAC,GAAG,KAAK;IACnC,wBAAwB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IAC1C,4BAA4B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;IAClE,wBAAwB;IACxB,oBAAoB,CAAC;IACrB,qBAAqB,OAAO,CAAC,MAAM;IACnC,wBAAwB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IAC1C,4BAA4B,IAAI,CAAC,SAAS,GAAG,IAAI;IACjD,wBAAwB;IACxB,oBAAoB,CAAC,CAAC;IACtB,YAAY;IACZ,YAAY,MAAM,IAAI,CAAC,SAAS;IAChC,QAAQ;IACR,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;IACjC,YAAY,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;IAC9D,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,KAAK;IACzB,IAAI;IACJ,IAAI,aAAa,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE;IAC9D,QAAQ,MAAM,UAAU,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7C,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE;IAC/B,YAAY,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;IACzE,YAAY,IAAI,IAAI,KAAK,SAAS,EAAE;IACpC,gBAAgB,OAAO,IAAI;IAC3B,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE;IAChE,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE;IAC/B,YAAY,IAAI;IAChB,gBAAgB,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC;IACtE,YAAY,CAAC,CAAC,wBAAwB,CAAC,EAAE;IACzC;IACA;IACA,gBAAgB,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC,CAAC;IACrE,YAAY;IACZ,QAAQ;IACR,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;;IAEA;IACA,MAAM,mBAAmB,CAAC;IAC1B,IAAI,KAAK;IACT,IAAI,IAAI;IACR,IAAI,OAAO;IACX,IAAI,eAAe;IACnB,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE;IACvD,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;IACvB,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,eAAe,GAAG,cAAc;IAC7C,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,UAAU,GAAG,CAAC;IACxB,IAAI,MAAM,cAAc,CAAC,GAAG,EAAE;IAC9B,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;IACvB,IAAI;IACJ,IAAI,MAAM,KAAK,CAAC,GAAG,IAAI,EAAE;IACzB,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;IACpC,aAAa,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI;IAC5C,aAAa,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;IAC/B,aAAa,SAAS,EAAE;IACxB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IAC7C,IAAI;IACJ,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE;IACvB,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE;IACzG,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IAC7C,IAAI;IACJ;;IAEA;IACA,MAAM,cAAc,CAAC;IACrB,IAAI,KAAK;IACT,IAAI,WAAW,CAAC,IAAI,EAAE;IACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,IAAI;IACJ,IAAI,MAAM,CAAC,IAAI,EAAE;IACjB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,IAAI;IACJ;IACA,IAAI,MAAM,UAAU,GAAG,CAAC;IACxB,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE;IACnB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACzE,IAAI;IACJ,IAAI,IAAI,CAAC,MAAM,EAAE;IACjB;IACA,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAClH,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,YAAY,CAAC;IACnB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE,cAAc,EAAE,EAAE;IAC/G,QAAQ,IAAI,CAAC,GAAG,EAAE;IAClB,YAAY,OAAO,IAAI,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC;IACjD,QAAQ;IACR,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE;IAChC,YAAY,OAAO,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACjF,QAAQ;IACR,QAAQ,OAAO,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAC1F,IAAI;IACJ,IAAI,OAAO,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE;IAC5B,QAAQ,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACjC,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClF,YAAY,OAAO,YAAY,CAAC,IAAI,CAAC;IACrC,gBAAgB,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;IACtC,oBAAoB,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE;IACtE,oBAAoB,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE;IAC7C,oBAAoB,QAAQ,EAAE,SAAS;IACvC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC;IACd,QAAQ;IACR,QAAQ,OAAO,YAAY,CAAC,IAAI,CAAC;IACjC,YAAY,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC;IAC7C,YAAY,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;IACnC,YAAY,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM;IACnD,YAAY,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;IACrC,YAAY,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC5C,YAAY,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC7C,YAAY,cAAc,EAAE,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAChE,SAAS,CAAC;IACV,IAAI;IACJ,IAAI,OAAO,mBAAmB,CAAC,EAAE,EAAE;IACnC,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;IAC5D,YAAY,OAAO,CAAC,QAAQ,KAAK;IACjC,gBAAgB,MAAM,IAAI,GAAG,EAAE,CAAC;IAChC,qBAAqB,SAAS;IAC9B,qBAAqB,WAAW,CAAC,QAAQ;IACzC,qBAAqB,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;IACxE,gBAAgB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;IACzC,oBAAoB,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;IAC/E,oBAAoB,OAAO;IAC3B,wBAAwB,GAAG,EAAE,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChF,wBAAwB,KAAK,EAAE,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClF,wBAAwB,QAAQ,EAAE,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;IAC/F,qBAAqB;IACrB,gBAAgB,CAAC,CAAC;IAClB,YAAY,CAAC;IACb,QAAQ;IACR,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;IAC5C,YAAY,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC/D,QAAQ;IACR;IACA;IACA,QAAQ,OAAO,oBAAoB,QAAQ,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpH,IAAI;IACJ;;IAEA;IACA,MAAM,QAAQ,SAAS,aAAa,CAAC;IACrC,IAAI,OAAO,UAAU,GAAG,CAAC,SAAS,CAAC;IACnC,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,OAAO,SAAS,GAAG;IACvB,QAAQ,OAAO,EAAE;AACjB;AACA;AACA;AACA,QAAQ,CAAC;IACT,KAAK;IACL,IAAI,QAAQ;IACZ,IAAI,KAAK;IACT,IAAI,MAAM;IACV,IAAI,gBAAgB;IACpB,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAE;IACxB,IAAI,MAAM,GAAG,IAAI,MAAM,EAAE;IACzB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;IACjD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;IAC/D,cAAc,IAAI,CAAC,QAAQ,CAAC,SAAS;IACrC,cAAc,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;IACnD,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC;IAC7D,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACjE,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;IACnD;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;IACjF,QAAQ,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;IACtD,YAAY,GAAG,CAAC,eAAe,EAAE;IACjC,YAAY,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,YAAY,IAAI,CAAC,EAAE,EAAE;IACrB,gBAAgB,IAAI,CAAC,IAAI,EAAE;IAC3B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtC,IAAI;IACJ,IAAI,SAAS,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,iBAAiB,IAAI,IAAI;IAC/F,IAAI;IACJ,IAAI,UAAU,CAAC,EAAE,EAAE;IACnB,QAAQ,IAAI,CAAC,EAAE,EAAE;IACjB,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACjC,YAAY;IACZ,QAAQ;IACR,QAAQ,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;IAC5D,YAAY,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC;IACrD,QAAQ;IACR,QAAQ,EAAE,CAAC,EAAE,KAAK,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC;IAC9C,QAAQ,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9B,QAAQ,EAAE,CAAC,cAAc,CAAC;IAC1B,YAAY,KAAK,EAAE,SAAS;IAC5B,YAAY,QAAQ,EAAE,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ;IAChG,SAAS,CAAC;IACV,IAAI;IACJ,IAAI,eAAe,GAAG;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;IACzC,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9B,IAAI;IACJ,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE;IAC9B,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE;IAClC,YAAY,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC;IACxC,QAAQ;IACR,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACxE,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IACpE,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE;IACtE,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IACpE,YAAY,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;IAChD;IACA;IACA,YAAY,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACvE,QAAQ;IACR,QAAQ,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAClE,QAAQ,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IACjE,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACjF,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACvF,IAAI;IACJ,IAAI,OAAO,CAAC,MAAM,EAAE;IACpB,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;IAClD,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9C,QAAQ,IAAI,CAAC,IAAI,EAAE;IACnB,QAAQ,IAAI,CAAC,aAAa;IAC1B,YAAY,IAAI,WAAW,CAAC,QAAQ,EAAE;IACtC,gBAAgB,OAAO,EAAE,IAAI;IAC7B,gBAAgB,UAAU,EAAE,KAAK;IACjC,gBAAgB,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;IACxC,aAAa,CAAC;IACd,SAAS;IACT,IAAI;IACJ,IAAI,IAAI,GAAG;IACX;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;IAChC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;IAC3C,YAAY,IAAI,CAAC,WAAW,EAAE;IAC9B,QAAQ;IACR,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC7B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,EAAE,EAAE;IACnB,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAClH,IAAI;;IAEJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;IAC5C,IAAI;IACJ,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE;IAClC;IACA;IACA;IACA,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;IAC5C,YAAY,IAAI,CAAC,WAAW,EAAE;IAC9B,QAAQ;IACR,QAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC7C,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;IAC/C,QAAQ,IAAI;IACZ,YAAY,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE;IACvC,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;IAC7B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,QAAQ,CAAC,CAAC,wBAAwB,CAAC,EAAE;IACrC,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;IAC7B;IACA;IACA,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,YAAY,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS;IAClB,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IAC9B,gBAAgB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACxD,YAAY;IACZ,QAAQ;IACR,IAAI;IACJ,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE;IACjD,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;IACxB,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;IAC7C,YAAY,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC1F,YAAY,IAAI,QAAQ,IAAI,SAAS,EAAE;IACvC,gBAAgB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;IAC1C,YAAY;IACZ,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;IACrC,IAAI;IACJ,IAAI,IAAI,CAAC,KAAK,EAAE;IAChB,QAAQ,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB;IACzF,QAAQ,IAAI,MAAM,EAAE;IACpB,YAAY,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IACnC,QAAQ;IACR,IAAI;IACJ,IAAI,IAAI,CAAC,OAAO,EAAE;IAClB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;IACzC,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IACnD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;IACjC,QAAQ,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnH,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAC/B,IAAI;IACJ,IAAI,KAAK,GAAG;IACZ,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB;IAClD,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE;IAChD,YAAY,OAAO,CAAC;IACpB,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACpF,IAAI;IACJ;;IAEA;IACA,MAAM,MAAM,SAAS,KAAK,CAAC;IAC3B;IACA;IACA;IACA,IAAI,OAAO,UAAU,GAAG;IACxB,QAAQ,MAAM;IACd,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,QAAQ,KAAK;IACb,QAAQ,QAAQ;IAChB,QAAQ,MAAM;IACd,QAAQ,kBAAkB;IAC1B,QAAQ,UAAU;IAClB,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,QAAQ,iBAAiB;IACzB,KAAK;IACL;IACA;IACA;IACA,IAAI,OAAO,QAAQ,GAAG,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,WAAW,CAAC;IAC9E,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB;IACA;IACA;IACA,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,OAAO,SAAS,GAAG;IACvB,QAAQ,KAAK,EAAE;AACf;AACA;AACA;AACA,QAAQ,CAAC;IACT,KAAK;IACL,IAAI,OAAO;IACX,IAAI,QAAQ;IACZ,IAAI,OAAO;IACX,IAAI,MAAM;IACV,IAAI,MAAM;IACV,IAAI,cAAc;IAClB,IAAI,SAAS;IACb,IAAI,YAAY,GAAG,KAAK;IACxB,IAAI,OAAO,GAAG,IAAI,GAAG,EAAE;IACvB,IAAI,YAAY,GAAG,IAAI,MAAM,EAAE;IAC/B,IAAI,QAAQ,GAAG,KAAK;IACpB,IAAI,MAAM;IACV,IAAI,WAAW;IACf,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC1C,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;IAChG,YAAY,OAAO,EAAE,KAAK,CAAC,OAAO;IAClC,SAAS,CAAC;;IAEV,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAClD;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,KAAK,CAAC,kBAAkB,CAAC,KAAK;IACjE,YAAY,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACjF,QAAQ,CAAC,CAAC;IACV,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAC9E,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IACrD,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC;IAC7D,QAAQ,IAAI,CAAC,cAAc;IAC3B,YAAY,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;IACvG,QAAQ,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IACvD,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC;;IAE7D,QAAQ,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;IAC7D;IACA,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;IACrD,QAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC;IACrD,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;IAC1D;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,KAAK;IAC9E,YAAY,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,MAAM;IAC9C,YAAY,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9E,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,gBAAgB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,uBAAuB,CAAC;IACpE,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,KAAK;IAC9E,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7E,QAAQ,CAAC,CAAC;IACV;IACA,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACjE,QAAQ,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzF,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAClF,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,QAAQ,IAAI,CAAC,UAAU,EAAE;IACzB,QAAQ,IAAI,CAAC,UAAU,EAAE;IACzB,QAAQ,IAAI,CAAC,cAAc,EAAE;IAC7B,QAAQ,OAAO;IACf,YAAY,QAAQ;IACpB,YAAY,OAAO,EAAE,IAAI,CAAC,MAAM;IAChC,YAAY,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;IAC5D,YAAY,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IAClD,SAAS;IACT,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,WAAW,GAAG;IAClB,QAAQ,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK;IAC/D,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACpC,gBAAgB,IAAI,CAAC,MAAM,EAAE;IAC7B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC/B,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;IACrD,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAC7C,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9F,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;IACvD,YAAY,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,YAAY,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAC5F,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,gBAAgB;IAChB,YAAY;IACZ,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACpC,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,UAAU,GAAG;IACjB,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,CAAC,KAAK;IACjE,YAAY,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,YAAY,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAC5F,YAAY,IAAI,KAAK,EAAE;IACvB,gBAAgB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;IAC3C,gBAAgB;IAChB,YAAY;IACZ;IACA;IACA,YAAY;IACZ,gBAAgB,WAAW,KAAK,CAAC,CAAC,IAAI;IACtC,gBAAgB,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;IACxC,gBAAgB,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,CAAC;IAChD,gBAAgB,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK;IAC7C,cAAc;IACd,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE;IAC9C,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ,IAAI,UAAU,GAAG;IACjB,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK;IACtD,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;IACpD,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC/B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAChC,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK;IACpD,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B,YAAY,IAAI,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE;IACnE,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK;IACvD,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;IACrD,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,QAAQ,GAAG,IAAI;IAChC,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ,IAAI,cAAc,GAAG;IACrB,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK;IACvD,YAAY,CAAC,CAAC,eAAe,EAAE;IAC/B;IACA;IACA;IACA,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IACtC,gBAAgB,IAAI,CAAC,MAAM,EAAE;IAC7B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;IACjC,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACpC,YAAY;IACZ,YAAY,IAAI,CAAC,QAAQ,GAAG,KAAK;IACjC,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACjF,YAAY,IAAI,CAAC,QAAQ,EAAE;IAC3B,YAAY,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC/B,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IAC/B,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;IACjC,gBAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IACpC,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA,IAAI,MAAM,UAAU,CAAC,EAAE,EAAE;IACzB,QAAQ,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;IACrC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,MAAM,GAAG;IACnB,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI;IACzC;IACA;IACA,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI;IACvC,QAAQ,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7C,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;IAC/B,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC3D,IAAI;IACJ,IAAI,OAAO,GAAG;IACd,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAC/E,IAAI;IACJ,IAAI,YAAY,CAAC,KAAK,EAAE;IACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IAClC,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,YAAY,CAAC,KAAK,EAAE;IACxB,QAAQ,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;IAC1D,QAAQ,IAAI,GAAG,KAAK,SAAS,EAAE;IAC/B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IAChC,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,IAAI;IACJ,IAAI,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE;IAC3B,QAAQ,QAAQ,CAAC,CAAC,IAAI;IACtB,YAAY,KAAK,aAAa;IAC9B,YAAY,KAAK,OAAO;IACxB,YAAY,KAAK,OAAO;IACxB,YAAY,KAAK,WAAW;IAC5B,YAAY,KAAK,QAAQ,EAAE;IAC3B,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,gBAAgB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACxC,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACnC,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,WAAW,EAAE;IAC9B,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;IAC1F,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,YAAY,EAAE;IAC/B,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;IAC1F,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,QAAQ,EAAE;IAC3B,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACnC,gBAAgB;IAChB,YAAY;IACZ;IACA,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,gBAAgB,CAAC,CAAC,EAAE;IACxB,QAAQ,QAAQ,CAAC,CAAC,IAAI;IACtB,YAAY,KAAK,SAAS;IAC1B,YAAY,KAAK,WAAW,EAAE;IAC9B,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,gBAAgB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACrC,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,MAAM,EAAE;IACzB,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACxC,oBAAoB,CAAC,CAAC,cAAc,EAAE;IACtC,oBAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3C,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,KAAK,EAAE;IACxB,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACxC,oBAAoB,CAAC,CAAC,cAAc,EAAE;IACtC,oBAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5C,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,UAAU;IAC3B,YAAY,KAAK,QAAQ,EAAE;IAC3B,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACxC,oBAAoB,CAAC,CAAC,cAAc,EAAE;IACtC,oBAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,IAAI,CAAC;IAC5D,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,QAAQ,EAAE;IAC3B,gBAAgB,IAAI,CAAC,WAAW,EAAE;IAClC,gBAAgB,IAAI,CAAC,MAAM,EAAE;IAC7B,gBAAgB;IAChB,YAAY;IACZ;IACA;IACA,YAAY,KAAK,aAAa;IAC9B,YAAY,KAAK,OAAO,EAAE;IAC1B,gBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACzC;IACA;IACA,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,CAAC,CAAC,cAAc,EAAE;IAClC,gBAAgB,IAAI,CAAC,QAAQ,GAAG,KAAK;IACrC,gBAAgB,IAAI,CAAC,QAAQ,EAAE;IAC/B,gBAAgB,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;IAC9C,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,WAAW,EAAE;IAC9B;IACA;IACA,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE;IACxF,oBAAoB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAC5D,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,YAAY,KAAK,KAAK,EAAE;IACxB,gBAAgB,IAAI,CAAC,WAAW,EAAE;IAClC,gBAAgB,IAAI,CAAC,MAAM,EAAE;IAC7B,gBAAgB;IAChB,YAAY;IACZ;IACA,IAAI;IACJ,IAAI,aAAa,CAAC,CAAC,EAAE;IACrB,QAAQ,MAAM,OAAO,GAAG,WAAW,KAAK,CAAC,CAAC,IAAI;IAC9C;IACA,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE;IACtB,YAAY,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAChD,gBAAgB,IAAI,CAAC,KAAK,EAAE;IAC5B,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACvD,gBAAgB,IAAI,CAAC,MAAM,EAAE;IAC7B,YAAY;IACZ,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9G,IAAI;IACJ,IAAI,MAAM,GAAG;IACb,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IAC3B,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK;IAC7B,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,GAAG;IACZ,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACtG,IAAI;IACJ,IAAI,OAAO,GAAG;IACd,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC3B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;IAC9B,IAAI;IACJ,IAAI,QAAQ,GAAG;IACf,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;IACxD,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IACtE,IAAI;IACJ;IACA,IAAI,UAAU,GAAG;IACjB,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IACzC,IAAI;IACJ,IAAI,QAAQ,GAAG;IACf;IACA;IACA,QAAQ,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACjD,IAAI;IACJ,IAAI,WAAW,GAAG;IAClB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK;IAC5E,kBAAkB,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC;IAC/D,kBAAkB,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClD;IACA;IACA,kBAAkB,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IACtE,kBAAkB,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,kBAAkB,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;IAC3C,kBAAkB,OAAO,CAAC;IAC1B,cAAc,CAAC;IACf,cAAc,EAAE;IAChB,QAAQ,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE;IAC9E,YAAY,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ;IACR,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACrC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;IAC5B,YAAY,IAAI,CAAC,QAAQ,EAAE;IAC3B,QAAQ;IACR,QAAQ,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;IACrC,QAAQ,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACtD,aAAa,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;IACvD,aAAa,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAClC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,CAAC,CAAC,EAAE;IAClB,QAAQ,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACvC,YAAY,KAAK,QAAQ,EAAE;IAC3B,gBAAgB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;IAC3D,gBAAgB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9C,YAAY;IACZ,YAAY,KAAK,SAAS,EAAE;IAC5B,gBAAgB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,EAAE;IAChD,oBAAoB,OAAO,IAAI;IAC/B,gBAAgB;IAChB,gBAAgB,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO,EAAE;IAClD,oBAAoB,OAAO,KAAK;IAChC,gBAAgB;IAChB,gBAAgB,OAAO,CAAC;IACxB,YAAY;IACZ,YAAY;IACZ,gBAAgB,OAAO,MAAM,CAAC,CAAC,CAAC;IAChC;IACA,IAAI;;IAEJ,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE;IAClB;IACA;IACA,QAAQ,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrG;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;IAC9F;IACA;IACA,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;IACpC,YAAY,OAAO,CAAC,IAAI,CAAC,qFAAqF,EAAE,IAAI,CAAC;IACrH,QAAQ;IACR;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC/F,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC9C,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;IAC5B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;IAC/B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAClC,IAAI;IACJ;IACA;IACA;IACA;IACA,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;IAChC,QAAQ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACzD,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;IACzB;IACA,YAAY;IACZ,QAAQ;IACR;IACA;IACA;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,QAAQ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;IAChC,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;IACxC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;IACnC,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxD,YAAY,CAAC,MAAM;IACnB,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IACxC,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;IAC5B,YAAY,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC3C,QAAQ;IACR,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;IAClD,IAAI;IACJ;IACA,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE;IAC3C,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;IAC5B,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,QAAQ,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI;IACnC,IAAI;IACJ,IAAI,YAAY;IAChB,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,SAAS;IAC7B,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC;IAC1B,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,IAAI;IACJ,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,YAAY;IAChC,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,IAAI,CAAC,YAAY,GAAG,CAAC;IAC7B,QAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IACtC,IAAI;IACJ;;IC79BA;IACA,MAAM,UAAU,SAAS,KAAK,CAAC;IAC/B,IAAI,OAAO,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IACxC,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,IAAI,GAAG,YAAY;IAC9B,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,SAAS;IACb,IAAI,WAAW;IACf,IAAI,YAAY;IAChB;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC9E,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAChF,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK;IACrD,YAAY,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IACzD,YAAY,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,YAAY,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;IACrD,YAAY,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;IAC7C,YAAY,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxD,YAAY,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,YAAY,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK;IACtD,gBAAgB,GAAG,CAAC,eAAe,EAAE;IACrC,gBAAgB,IAAI,CAAC,aAAa,EAAE;IACpC,YAAY,CAAC,CAAC;IACd,YAAY,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;IACtD,YAAY,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;IACjC,QAAQ,CAAC,CAAC;;IAEV,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;IACjC,YAAY,EAAE,CAAC,MAAM,EAAE;IACvB,QAAQ,CAAC,CAAC;IACV,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC/F,QAAQ,IAAI,CAAC,SAAS,6BAA6B,QAAQ,CAAC,iBAAiB,CAAC;IAC9E,QAAQ,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACtE,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,SAAS;IAC/D;IACA;IACA;IACA;IACA;IACA,QAAQ,OAAO;IACf,YAAY,QAAQ;IACpB,YAAY,OAAO,EAAE,IAAI,CAAC,WAAW;IACrC,YAAY,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;IAC5D,YAAY,SAAS,EAAE,IAAI;IAC3B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;IAClC;IACA;IACA;IACA,YAAY,SAAS,EAAE,IAAI;IAC3B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;IAClC,SAAS;IACT,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB;IACA,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC;IACvE,QAAQ,OAAO,OAAO,IAAI,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,KAAK,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI;IAC9F,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;IACrB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACjE,QAAQ,MAAM,KAAK,GAAG,MAAM;IAC5B,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;IACnC,gDAAgD,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK;IACpE,YAAY,CAAC,CAAC;IACd,QAAQ,CAAC;IACT,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;IAC5B,YAAY,KAAK,EAAE;IACnB,YAAY;IACZ,QAAQ;IACR;IACA,QAAQ,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F;IACA;IACA,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE;IACzB,YAAY,KAAK,EAAE;IACnB,YAAY;IACZ,QAAQ;IACR,QAAQ,EAAE,CAAC,OAAO,GAAG,IAAI;IACzB,IAAI;IACJ;;ICvGA;IACA,MAAM,QAAQ,SAAS,KAAK,CAAC;IAC7B,IAAI,OAAO,UAAU,GAAG,CAAC,MAAM,CAAC;IAChC,IAAI,OAAO,QAAQ,GAAG,CAAC,YAAY,CAAC;IACpC,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,UAAU;IACd,IAAI,MAAM;IACV,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,QAAQ;IAC3D,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IAClF,QAAQ,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,iBAAiB;IACpD,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IACrD,QAAQ,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IACvD,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK;IACxD,YAAY,GAAG,CAAC,eAAe,EAAE;IACjC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,QAAQ,CAAC,CAAC;IACV,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IACrD;IACA;IACA,QAAQ,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAC9C,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IACtC,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK;IACpC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,QAAQ,CAAC,CAAC;IACV;IACA;IACA,QAAQ,OAAO;IACf,YAAY,QAAQ;IACpB,YAAY,OAAO,EAAE,IAAI,CAAC,MAAM;IAChC,YAAY,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;IAC5D,YAAY,KAAK;IACjB,YAAY,MAAM,EAAE,IAAI,CAAC,UAAU;IACnC,SAAS;IACT,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;IAClC,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;IACrB,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK;IACnC,IAAI;IACJ;;IClDA;IACA,MAAM,UAAU,SAAS,aAAa,CAAC;IACvC,IAAI,OAAO,UAAU,GAAG,CAAC,QAAQ,CAAC;IAClC,IAAI,OAAO,QAAQ,GAAG,CAAC,OAAO,CAAC;IAC/B,IAAI,MAAM;IACV,IAAI,MAAM,GAAG;IACb,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC9C,QAAQ,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC;IAC5C,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC3C,QAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;IAC1C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAC7C,YAAY,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1E,YAAY,IAAI,CAAC,aAAa;IAC9B,gBAAgB,IAAI,WAAW,CAAC,gBAAgB,EAAE;IAClD,oBAAoB,OAAO,EAAE,IAAI;IACjC,oBAAoB,UAAU,EAAE,IAAI;IACpC,oBAAoB,MAAM,EAAE;IAC5B,wBAAwB,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;IAC3D,qBAAqB;IACrB,iBAAiB,CAAC;IAClB,aAAa;IACb,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,GAAG,KAAK;IACnE,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;IAC9D,gBAAgB;IAChB,YAAY;IACZ,YAAY,GAAG,CAAC,cAAc,EAAE;IAChC,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,QAAQ,CAAC,CAAC;IACV,IAAI;;IAEJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI;IAClC,IAAI;;IAEJ,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;IACrB,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI;IACnC,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;IAC5C;IACA;IACA,QAAQ,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACrC,QAAQ,IAAI,CAAC,EAAE,EAAE;IACjB,YAAY;IACZ,QAAQ;IACR,QAAQ,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,WAAW,GAAG,YAAY,IAAI,IAAI,CAAC;IAClH,IAAI;IACJ;;IAEA;IACA,MAAM,UAAU,SAAS,aAAa,CAAC;IACvC,IAAI,OAAO,QAAQ,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC;IACxD,IAAI,OAAO,UAAU,GAAG,CAAC,cAAc,CAAC;IACxC,IAAI,OAAO,MAAM,GAAG;IACpB,QAAQ,QAAQ,EAAE,cAAc;IAChC,QAAQ,QAAQ,EAAE,eAAe;IACjC,QAAQ,UAAU,EAAE,iBAAiB;IACrC,KAAK;IACL,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,MAAM,GAAG,CAAC;IACd,IAAI,QAAQ,GAAG,CAAC;IAChB,IAAI,MAAM,GAAG;IACb,QAAQ,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,KAAK;IACjE,YAAY,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnD,YAAY,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;IACpD;IACA,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,MAAM,EAAE;IAC5D;IACA;IACA,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,aAAa;IAC9B,gBAAgB,IAAI,WAAW,CAAC,gBAAgB,EAAE;IAClD,oBAAoB,OAAO,EAAE,IAAI;IACjC,oBAAoB,UAAU,EAAE,IAAI;IACpC,oBAAoB,MAAM,EAAE;IAC5B,wBAAwB,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;IACvE,qBAAqB;IACrB,iBAAiB,CAAC;IAClB,aAAa;IACb,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;IACxD,QAAQ,IAAI,SAAS,KAAK,SAAS,EAAE;IACrC,YAAY,IAAI,CAAC,QAAQ,GAAG,SAAS,IAAI,CAAC;IAC1C,QAAQ;IACR,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE;IACnC,YAAY,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,CAAC;IACtC,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;IAChD,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;IAC5C,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;IACrC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;IACjC,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;IACrD;IACA;IACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,QAAQ,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC;IACnC,QAAQ,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,SAAS;IAC/C;IACA,QAAQ,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;IAC9E,QAAQ,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE;IAC3D,QAAQ,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;IAC9E;IACA;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpE,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC3G,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,MAAM;IACvE,YAAY,KAAK,EAAE,KAAK,GAAG,MAAM;IACjC,YAAY,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,CAAC;IACrC,SAAS,CAAC,CAAC;IACX;IACA;IACA,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa;IAC5D,uCAAuC,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,UAAU;IACtG,cAAc,IAAI;IAClB,QAAQ,MAAM,IAAI,GAAG,OAAO,KAAK,MAAM,oBAAoB,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI;IACvG,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjG,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,IAAI;IAClB,YAAY,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,oCAAoC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACvG,YAAY,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC/E,YAAY,IAAI,CAAC,aAAa,CAAC,6CAA6C,CAAC;IAC7E,iCAAiC,CAAC,IAAI,GAAG,KAAK,EAAE;IAChD,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,MAAM;IAC1B,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;IACrB;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACrC,IAAI;IACJ,IAAI,IAAI,OAAO,GAAG;IAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ;IAC5B,IAAI;IACJ,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;IACvB,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvC,IAAI;IACJ;;IAEA;IACA,MAAM,iBAAiB,CAAC;IACxB,IAAI,OAAO,KAAK,CAAC,cAAc,EAAE,QAAQ,EAAE;IAC3C;IACA,QAAQ,MAAM,MAAM,GAAG,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,IAAI;IAC5F,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC;IAChH,QAAQ;IACR,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;IACtD,QAAQ,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;IACnD,QAAQ,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;IACpD,QAAQ,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,iBAAiB,EAAE,EAAE;IACvD,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;IACnD,YAAY,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IACrD,YAAY,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IAClD,QAAQ;IACR,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAChE;IACA;IACA,QAAQ,MAAM,IAAI;IAClB,YAAY;IACZ,iBAAiB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC;IAClF,iBAAiB,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;IAC9G,QAAQ,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE;IACpC,YAAY,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,YAAY,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;IACxD,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;IACtD,YAAY,MAAM,SAAS,GAAG,aAAa,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC1G,YAAY,aAAa,EAAE,MAAM,EAAE;IACnC,YAAY,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;IAC5C,YAAY,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;IAC3C,YAAY,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;IAC3C,YAAY,MAAM,gBAAgB;IAClC,gBAAgB,CAAC,MAAM,IAAI,CAAC;IAC5B,sBAAsB;IACtB,sBAAsB,CAAC,MAAM;IAC7B,0BAA0B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC;IAChF,0BAA0B,IAAI,MAAM,EAAE;IACtC,8BAA8B,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;IACtE,0BAA0B;IAC1B,0BAA0B,IAAI,KAAK,EAAE;IACrC,8BAA8B,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;IACpE,0BAA0B;IAC1B,0BAA0B,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;IACrD,0BAA0B,OAAO,SAAS;IAC1C,sBAAsB,CAAC,GAAG;IAC1B,YAAY,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;IACnD,YAAY,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;IACnD;IACA;IACA;IACA;IACA;IACA,YAAY,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,iBAAiB,EAAE,EAAE;IAC3D,gBAAgB,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;IACvD,gBAAgB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IAClD,gBAAgB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IAClD,YAAY;IACZ,YAAY,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACvC,YAAY,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;IAC3C,YAAY,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;IAChC,YAAY,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7B,QAAQ;;IAER,QAAQ,OAAO;IACf,YAAY,eAAe,EAAE;IAC7B,iBAAiB,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAC/D,iBAAiB,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxD,YAAY,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvH,YAAY,IAAI,EAAE,IAAI;IACtB,YAAY,MAAM,EAAE,OAAO,CAAC,MAAM;IAClC,SAAS;IACT,IAAI;IACJ;;IAEA;IACA,MAAM,mBAAmB,CAAC;IAC1B,IAAI,KAAK;IACT,IAAI,WAAW,CAAC,IAAI,EAAE;IACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,IAAI;IACJ,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE;IACxD;IACA;IACA,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAC9C,QAAQ,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI;IACzD,QAAQ,MAAM,GAAG,GAAG,KAAK,GAAG,WAAW,CAAC,IAAI;IAC5C,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;IAC3C,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM;IACzC,QAAQ,OAAO;IACf,YAAY,IAAI,EAAE,IAAI;IACtB,YAAY,IAAI,EAAE,aAAa;IAC/B,SAAS;IACT,IAAI;IACJ,IAAI,OAAO,CAAC,WAAW,EAAE;IACzB,QAAQ,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;IAClC,YAAY,OAAO,IAAI,CAAC,KAAK;IAC7B,QAAQ;IACR,QAAQ,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW;IAC7C,QAAQ,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC;IAC9C,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;IAC9C,YAAY,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACjC,YAAY,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACjC,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE;IACzB,gBAAgB,OAAO,CAAC;IACxB,YAAY;IACZ;IACA,YAAY,IAAI,CAAC,IAAI,IAAI,EAAE;IAC3B,gBAAgB,OAAO,CAAC;IACxB,YAAY;IACZ,YAAY,IAAI,CAAC,IAAI,IAAI,EAAE;IAC3B,gBAAgB,OAAO,EAAE;IACzB,YAAY;IACZ,YAAY,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI;IAC1C,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ,IAAI,MAAM,CAAC,IAAI,EAAE;IACjB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,IAAI;IACJ;;IAEA;IACA,MAAM,iBAAiB,CAAC;IACxB,IAAI,KAAK;IACT,IAAI,IAAI;IACR,IAAI,OAAO;IACX,IAAI,eAAe;IACnB,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE;IAC5E,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,GAAG;IACvB,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,eAAe,GAAG,cAAc;IAC7C,IAAI;IACJ,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE;IACxD,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3E,QAAQ,OAAO,MAAM,IAAI,CAAC;IAC1B,aAAa,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI;IAC5C,aAAa,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI;IAC3C,aAAa,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI;IAC3C,aAAa,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI;IAC5F,aAAa,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI;IACrG,aAAa,SAAS;IACtB,aAAa,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI;IACJ;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,WAAW,CAAC;IAClB,IAAI,OAAO,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE;IAC5B,QAAQ,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;IAC1C,QAAQ,IAAI,GAAG,EAAE;IACjB,YAAY,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC;IACpD,YAAY,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,KAAK;IAC7D,YAAY,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB;IACpE,kBAAkB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC;IACjE,kBAAkB,kBAAkB,QAAQ,KAAK,QAAQ;IACzD,YAAY,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC;IAC3E,QAAQ;IACR,QAAQ,OAAO,IAAI,mBAAmB,CAAC,EAAE,CAAC;IAC1C,IAAI;IACJ;;IAEA;IACA,MAAM,KAAK,SAAS,aAAa,CAAC;IAClC,IAAI,OAAO,UAAU,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvD;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,QAAQ,GAAG,CAAC,kBAAkB,CAAC;IAC1C,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,MAAM,GAAG;IACpB,QAAQ,UAAU,EAAE,QAAQ;IAC5B,KAAK;IACL,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,OAAO,SAAS,GAAG;IACvB,QAAQ,GAAG,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC;IACT,KAAK;IACL,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,KAAK;IACT,IAAI,QAAQ;IACZ,IAAI,WAAW;IACf,IAAI,SAAS;IACb,IAAI,UAAU;IACd,IAAI,QAAQ;IACZ;IACA;IACA;IACA,IAAI,cAAc,GAAG,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE;IACjG;IACA,IAAI,cAAc,GAAG,KAAK;IAC1B,IAAI,MAAM,GAAG,IAAI,MAAM,EAAE;IACzB;IACA,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI;IACnD,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE;IACxB,QAAQ,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IAChC,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3D,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IACxF,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;IAClC,YAAY;IACZ,QAAQ;IACR;IACA;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,IAAI;IACJ,IAAI,MAAM,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IAC5B,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;IACxC,QAAQ,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;IACtE,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IACzE,QAAQ,MAAM,YAAY,kCAAkC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC/G,QAAQ,MAAM,KAAK,kCAAkC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzF,QAAQ,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;IACjD,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;;IAE9F,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC;IAC1D,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,kCAAkC,CAAC;IAC/E,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,kCAAkC,CAAC;IAClF,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,mCAAmC,CAAC;IACjF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACzE,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtC,QAAQ,MAAM,KAAK,yCAAyC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxF,QAAQ,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC9C,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC;IAC5D,QAAQ,MAAM,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC;;IAE7C,QAAQ,MAAM,SAAS,qBAAqB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAClF;IACA;IACA;IACA,QAAQ,IAAI,CAAC,cAAc,GAAG;IAC9B,YAAY,WAAW,EAAE;IACzB,gBAAgB,IAAI,EAAE,CAAC;IACvB,gBAAgB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;IACtD,aAAa;IACb,YAAY,WAAW,EAAE,MAAM,CAAC,IAAI;IACpC,YAAY,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE;IAClD,SAAS;IACT;IACA;IACA;IACA,QAAQ,SAAS,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,GAAG,KAAK;IACrE,YAAY,MAAM,IAAI,CAAC,IAAI;IAC3B,gBAAgB;IAChB,oBAAoB,IAAI,EAAE,CAAC;IAC3B,oBAAoB,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI;IAC9D,iBAAiB;IACjB,gBAAgB,IAAI,CAAC,cAAc,CAAC,WAAW;IAC/C,gBAAgB,GAAG,CAAC,MAAM,CAAC,OAAO;IAClC,aAAa;IACb,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,KAAK;IAC9E,YAAY,MAAM,IAAI,CAAC,IAAI;IAC3B,gBAAgB;IAChB,oBAAoB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;IACxC,oBAAoB,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI;IAC9D,iBAAiB;IACjB,gBAAgB,IAAI,CAAC,cAAc,CAAC,WAAW;IAC/C,gBAAgB,IAAI,CAAC,cAAc,CAAC,aAAa;IACjD,aAAa;IACb,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,KAAK;IAC9E,YAAY,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI;IAC5E,YAAY,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;IAC5G;IACA;IACA;IACA,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,KAAK,WAAW,EAAE;IACjE,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;IACzC,gBAAgB,CAAC,CAAC,KAAK,GAAG,IAAI;IAC9B,YAAY,CAAC,CAAC;IACd,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;IACjD,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;IACvC;IACA;IACA;IACA,YAAY,IAAI,CAAC,MAAM,EAAE;IACzB,QAAQ;IACR,IAAI;;IAEJ,IAAI,MAAM,MAAM,GAAG;IACnB,QAAQ,OAAO,MAAM,IAAI,CAAC,IAAI;IAC9B,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW;IAC3C,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW;IAC3C,YAAY,IAAI,CAAC,cAAc,CAAC,aAAa;IAC7C,SAAS;IACT,IAAI;IACJ,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE;IACxD;IACA;IACA;IACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI;IAClC;IACA;IACA;IACA,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;IACpC,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;IAC/C,QAAQ,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACjD,QAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACnD,QAAQ,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9C,QAAQ,IAAI;IACZ,YAAY,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC;IACjG,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;IAC7B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE;IAC7E,YAAY,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC;IAC/E,QAAQ,CAAC,CAAC,wBAAwB,KAAK,EAAE;IACzC,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;IAC7B;IACA;IACA,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACpD,YAAY,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC;IACpD,YAAY,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY;IACxG,gBAAgB,KAAK;IACrB,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1B,aAAa;IACb,YAAY,MAAM,KAAK;IACvB,QAAQ,CAAC,SAAS;IAClB;IACA,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IAC9B,gBAAgB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;IACjD,YAAY;IACZ,QAAQ;IACR,IAAI;IACJ;IACA,IAAI,MAAM,UAAU,CAAC,EAAE,EAAE;IACzB,QAAQ,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;IACrC,IAAI;IACJ,IAAI,MAAM,eAAe,CAAC,aAAa,EAAE;IACzC,QAAQ,OAAO,MAAM,IAAI,CAAC,IAAI;IAC9B,YAAY;IACZ,gBAAgB,IAAI,EAAE,CAAC;IACvB,gBAAgB,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI;IAC1D,aAAa;IACb,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW;IAC3C,YAAY,aAAa;IACzB,SAAS;IACT,IAAI;IACJ,IAAI,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE;IACnE,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IACrE,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IAC/C,QAAQ,IAAI,WAAW,CAAC,IAAI,GAAG,QAAQ,EAAE;IACzC;IACA;IACA,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC;IAC7F,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IAChD,QAAQ,IAAI,CAAC,KAAK,CAAC,eAAe;IAClC,YAAY,IAAI,CAAC,QAAQ,CAAC,KAAK;IAC/B,iBAAiB,WAAW,CAAC;IAC7B,oBAAoB,MAAM,EAAE,IAAI,CAAC,OAAO;IACxC,oBAAoB,WAAW;IAC/B,oBAAoB,aAAa;IACjC,oBAAoB,YAAY;IAChC,iBAAiB;IACjB,iBAAiB,MAAM,EAAE;IACzB,SAAS;IACT;IACA,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC3E,IAAI;IACJ;;ICvmBA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,YAAY,CAAC;IACnB;IACA,IAAI,OAAO,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE;IACxC,QAAQ,MAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzF,QAAQ,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC;IAC/D,IAAI;IACJ,IAAI,OAAO;IACX,IAAI,KAAK;IACT,IAAI,WAAW;IACf,IAAI,OAAO;IACX,IAAI,SAAS;IACb,IAAI,QAAQ;IACZ,IAAI,YAAY;IAChB,IAAI,OAAO;IACX,IAAI,QAAQ;IACZ,IAAI,QAAQ,GAAG,KAAK;IACpB,IAAI,MAAM,GAAG,KAAK;IAClB;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW;IACf,QAAQ,MAAM;IACd,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE;IACrH,MAAM;IACN,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,KAAK,6BAA6B,MAAM,CAAC,kBAAkB,CAAC;IACzE,QAAQ,IAAI,CAAC,WAAW,GAAG,UAAU;IACrC,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ;IACjC;IACA;IACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IACzE,QAAQ,IAAI,CAAC,YAAY,GAAG,WAAW;IACvC,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM;IAC7B,QAAQ,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC;IACvC,QAAQ,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;IACtD,YAAY,MAAM,MAAM,6BAA6B,GAAG,CAAC,MAAM,CAAC;IAChE,YAAY,MAAM,IAAI,oCAAoC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnF,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;IAC/C,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,MAAM,wBAAwB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC3E,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK;IACvC,YAAY,IAAI,CAAC,KAAK,GAAG,MAAM;IAC/B,6BAA6B,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI;IACzD,YAAY,IAAI,QAAQ,KAAK,MAAM,EAAE;IACrC,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;IACA,IAAI,IAAI,OAAO,GAAG;IAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ;IAC5B,IAAI;IACJ,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE;IAC1B,QAAQ,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;IACvE,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;IACtD,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI;IAC9B,QAAQ;IACR,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;IACzB,YAAY,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,QAAQ;IACR,IAAI;IACJ;IACA,IAAI,IAAI,MAAM,GAAG;IACjB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IACvC,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;IACjD,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE;IACtB,QAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;IAClD;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxD,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1E,IAAI;IACJ;IACA,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE;IACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO;IAC/B,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,IAAI;IACJ,IAAI,KAAK,GAAG;IACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,eAAe;IAClC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;IAC7C,gBAAgB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;IACvD,gBAAgB,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;IAC/C,gBAAgB,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;IACrD,gBAAgB,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC;IAClD,gBAAgB,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;IAChD,gBAAgB,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;IAC/C,gBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACnD,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;IAC5D,gBAAgB,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,EAAE;IACzD,oBAAoB,CAAC,CAAC,SAAS,GAAG,MAAM;IACxC,gBAAgB,CAAC,MAAM;IACvB,oBAAoB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;IACpE,oBAAoB,SAAS,CAAC,SAAS,GAAG,KAAK;IAC/C,oBAAoB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;IACnE,oBAAoB,QAAQ,CAAC,SAAS,GAAG,IAAI;IAC7C,oBAAoB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC;IACjD,gBAAgB;IAChB,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5B,gBAAgB,OAAO,EAAE;IACzB,YAAY,CAAC,CAAC;IACd,SAAS;IACT,IAAI;IACJ,IAAI,KAAK,GAAG;IACZ,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;IAClC,QAAQ,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC;IACzE,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IAC7E,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;IAC9E,QAAQ,IAAI,MAAM,EAAE;IACpB,YAAY,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC;IACzD,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;IAClC;IACA;IACA,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACrE,QAAQ;IACR,IAAI;IACJ,IAAI,MAAM,GAAG;IACb,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC3G,IAAI;IACJ,IAAI,KAAK,GAAG;IACZ,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;IACnC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;IAC/B,QAAQ,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtG,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,KAAK;IAClE,YAAY,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;IACzC;IACA;IACA,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;IAC3D,oBAAoB,MAAM,CAAC,KAAK,EAAE;IAClC,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;IACvC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE;IAC5F,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,GAAG,KAAK;IAClD,YAAY,MAAM,MAAM,6BAA6B,GAAG,CAAC,MAAM,CAAC;IAChE,YAAY,MAAM,IAAI,0CAA0C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzF,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,gBAAgB;IAChB,YAAY;IACZ,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;IACvC,YAAY,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1C,YAAY,QAAQ,GAAG,CAAC,IAAI;IAC5B,gBAAgB,KAAK,WAAW,EAAE;IAClC,oBAAoB,GAAG,CAAC,cAAc,EAAE;IACxC,oBAAoB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE;IAC3D,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,KAAK,SAAS,EAAE;IAChC,oBAAoB,GAAG,CAAC,cAAc,EAAE;IACxC,oBAAoB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE;IAC1E,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,KAAK,MAAM,EAAE;IAC7B,oBAAoB,GAAG,CAAC,cAAc,EAAE;IACxC,oBAAoB,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;IACrC,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,KAAK,KAAK,EAAE;IAC5B,oBAAoB,GAAG,CAAC,cAAc,EAAE;IACxC,oBAAoB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;IACpD,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,KAAK,OAAO;IAC5B,gBAAgB,KAAK,OAAO,EAAE;IAC9B,oBAAoB,GAAG,CAAC,cAAc,EAAE;IACxC,oBAAoB,IAAI,CAAC,KAAK,EAAE;IAChC,oBAAoB,MAAM,CAAC,KAAK,EAAE;IAClC,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB,KAAK,QAAQ,EAAE;IAC/B;IACA;IACA,oBAAoB,MAAM,CAAC,KAAK,EAAE;IAClC,oBAAoB;IACpB,gBAAgB;IAChB;IACA,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ;;ICvMA,MAAM,MAAM,GAAG;IACf,IAAI,EAAE,EAAE,GAAG;IACX,IAAI,GAAG,EAAE,GAAG;IACZ,IAAI,EAAE,EAAE,GAAG;IACX,IAAI,EAAE,EAAE,GAAG;IACX,IAAI,GAAG,EAAE,GAAG;IACZ,IAAI,GAAG,EAAE,GAAG;IACZ,IAAI,OAAO,EAAE,GAAG;IAChB,IAAI,QAAQ,EAAE,KAAK;IACnB,IAAI,WAAW,EAAE,IAAI;IACrB,IAAI,SAAS,EAAE,IAAI;IACnB,CAAC;IACD,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IAC5E,MAAM,cAAc,GAAG,CAAC,GAAG,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC;IACrF,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC;;IAEvD,MAAM,kBAAkB,GAAG;IAC3B,IAAI,WAAW,EAAE,IAAI;IACrB,IAAI,cAAc,EAAE,IAAI;IACxB,CAAC;;IAED;IACA,MAAM,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,EAAE,EAAE;IAC/B,MAAM,aAAa,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC;IACjF,MAAM,iBAAiB,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK,EAAE,GAAG,qBAAqB,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;;IAEzG;IACA;IACA;IACA;IACA;IACA,MAAM,aAAa,SAAS,KAAK,CAAC;IAClC,IAAI,OAAO,QAAQ,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC;IACrD,IAAI,OAAO,SAAS,GAAG,iBAAiB;IACxC,IAAI,OAAO,gBAAgB,GAAG,IAAI;IAClC,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,SAAS;IACb,IAAI,UAAU;IACd,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,MAAM,CAAC,IAAI,EAAE;IACjB,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IACzC,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;IACxC,QAAQ,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACrE,QAAQ,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IAClE,QAAQ,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IAClE,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,2BAA2B,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,GAAG;IACpH,YAAY,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE;IAC1C,YAAY,MAAM,EAAE,MAAM;IAC1B,YAAY,QAAQ,EAAE,aAAa;IACnC,YAAY,WAAW,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;IAClD,YAAY,MAAM,EAAE,MAAM;IAC1B,gBAAgB,IAAI,CAAC,YAAY,EAAE;IACnC,gBAAgB,IAAI,CAAC,aAAa,EAAE;IACpC,YAAY,CAAC;IACb,SAAS,CAAC;IACV;IACA;IACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACnD;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK;IACzD,YAAY,GAAG,CAAC,eAAe,EAAE;IACjC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,EAAE;IAC3C,YAAY,IAAI,CAAC,oBAAoB,EAAE;IACvC,QAAQ;IACR;IACA;IACA;IACA,QAAQ,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;IAC3E,IAAI;IACJ,IAAI,oBAAoB,GAAG;IAC3B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;IACjD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO;IAC9C,QAAQ,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChF,IAAI;IACJ,IAAI,iBAAiB,GAAG;IACxB;IACA;IACA,QAAQ,KAAK,CAAC,iBAAiB,EAAE;IACjC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;IACzC,YAAY,IAAI,CAAC,oBAAoB,EAAE;IACvC,QAAQ;IACR,IAAI;IACJ,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ,IAAI,UAAU,CAAC,CAAC,EAAE;IAClB,QAAQ,OAAO,CAAC;IAChB,IAAI;IACJ,IAAI,YAAY,CAAC,CAAC,EAAE;IACpB,QAAQ,OAAO,CAAC;IAChB,IAAI;IACJ,IAAI,gBAAgB,GAAG;IACvB,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ,IAAI,WAAW,GAAG;IAClB,QAAQ,OAAO,iBAAiB;IAChC,IAAI;IACJ,IAAI,kBAAkB;IACtB,IAAI,IAAI,SAAS,GAAG;IACpB;IACA;IACA;IACA,QAAQ,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB;IAChF,IAAI;IACJ,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE;IAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;IAC7B,YAAY,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACvF,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,QAAQ;IACzC,QAAQ,IAAI,CAAC,YAAY,EAAE;IAC3B,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE;IAC5B,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;IACjB,QAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3B,IAAI;IACJ,IAAI,MAAM,GAAG;IACb,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;IAC7C,QAAQ,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC/G,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACzG,IAAI;IACJ,IAAI,WAAW,CAAC,CAAC,EAAE;IACnB,QAAQ,IAAI,CAAC,IAAI,IAAI,EAAE;IACvB,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE;IACnC,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE;IACnC,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;IACvC;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ;IACrF,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IACpC;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzF,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzF,IAAI;IACJ,IAAI,aAAa,CAAC,QAAQ,EAAE;IAC5B,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ;IACvC,QAAQ,IAAI,CAAC,YAAY,EAAE;IAC3B,IAAI;IACJ;IACA,IAAI,YAAY,GAAG;IACnB,QAAQ,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC;IAClF,IAAI;IACJ,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,KAAK,CAAC,QAAQ;IAC7B,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB;IACA;IACA,QAAQ,KAAK,CAAC,QAAQ,GAAG,CAAC;IAC1B,QAAQ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;IAC9C,YAAY,MAAM,CAAC,OAAO,GAAG,CAAC;IAC9B,QAAQ;IACR,IAAI;IACJ;IACA,IAAI,QAAQ,GAAG;IACf,QAAQ,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI;IACJ;;IAEA;IACA,MAAM,aAAa,SAAS,aAAa,CAAC;IAC1C,IAAI,gBAAgB,GAAG;IACvB,QAAQ,OAAO,KAAK;IACpB,IAAI;IACJ,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,gBAAgB;IAC/B,IAAI;IACJ,IAAI,UAAU,CAAC,CAAC,EAAE;IAClB,QAAQ,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,IAAI;IACJ,IAAI,YAAY,CAAC,CAAC,EAAE;IACpB,QAAQ,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,IAAI;IACJ;;IAEA;IACA,MAAM,eAAe,SAAS,aAAa,CAAC;IAC5C,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ;;IAEA;IACA,MAAM,YAAY,SAAS,aAAa,CAAC;IACzC,IAAI,KAAK,GAAG;IACZ,QAAQ,OAAO,QAAQ;IACvB,IAAI;IACJ;;IAEA;IACA,MAAM,UAAU,SAAS,aAAa,CAAC;IACvC,IAAI,OAAO,QAAQ,GAAG,CAAC,mBAAmB,CAAC;IAC3C,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,gBAAgB,GAAG;IACvB,QAAQ,OAAO,UAAU;IACzB,IAAI;IACJ,IAAI,WAAW,GAAG;IAClB,QAAQ,OAAO,cAAc;IAC7B,IAAI;IACJ;IACA;IACA;IACA,IAAI,kBAAkB;IACtB,IAAI,MAAM,CAAC,IAAI,EAAE;IACjB,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IACzC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,YAAY;IAClD,sCAAsC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;IAC7F,YAAY;IACZ,gBAAgB,UAAU,EAAE,aAAa;IACzC,gBAAgB,MAAM,EAAE,kBAAkB;IAC1C,gBAAgB,QAAQ,EAAE,gBAAgB;IAC1C,gBAAgB,WAAW,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;IACtD,gBAAgB,MAAM,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE;IAClD,aAAa;IACb,SAAS;IACT,QAAQ,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI;IAC9C,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC;IACxD,QAAQ,OAAO,MAAM;IACrB,IAAI;IACJ,IAAI,QAAQ,GAAG;IACf,QAAQ,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI;IACJ,IAAI,IAAI,YAAY,GAAG;IACvB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK;IAC5C,IAAI;IACJ,IAAI,sBAAsB;IAC1B,IAAI,IAAI,aAAa,GAAG;IACxB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,sBAAsB;IACtG,IAAI;IACJ,IAAI,IAAI,aAAa,CAAC,QAAQ,EAAE;IAChC,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;IACtC,YAAY,IAAI,CAAC,sBAAsB,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;IACtF,YAAY;IACZ,QAAQ;IACR,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;IACtD,QAAQ,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,QAAQ;IAClD,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;IACjE,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9E,QAAQ;IACR,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;IACnC,QAAQ,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtF,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;IACjB,QAAQ,IAAI,CAAC,IAAI,IAAI,EAAE;IACvB,YAAY,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IAC5D,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,QAAQ;IACR,QAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI;IACJ,IAAI,iBAAiB,GAAG;IACxB;IACA;IACA;IACA,QAAQ,KAAK,CAAC,iBAAiB,EAAE;IACjC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;IACzC,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO;IAC3D,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC;IACxG,QAAQ;IACR,IAAI;IACJ;;IAEA,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC;IAC5C,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;;IAEtD;IACA,MAAM,aAAa,SAAS,KAAK,CAAC;IAClC,IAAI,OAAO,QAAQ,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC;IACrD,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IACpC,IAAI,OAAO,gBAAgB,GAAG,IAAI;IAClC,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,SAAS;IACb,IAAI,MAAM;IACV,IAAI,UAAU;IACd,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACxE,QAAQ,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACrE,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC;IACtE,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE;IACzF,YAAY,UAAU,EAAE,aAAa,CAAC,SAAS;IAC/C,YAAY,MAAM,EAAE,MAAM;IAC1B,YAAY,QAAQ,EAAE,aAAa;IACnC,YAAY,WAAW,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;IAClD,YAAY,MAAM,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE;IAC9C,SAAS,CAAC;IACV;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE;IACpD,YAAY,UAAU,EAAE,cAAc;IACtC,YAAY,MAAM,EAAE,oBAAoB;IACxC,YAAY,QAAQ,EAAE,iBAAiB;IACvC,YAAY,OAAO,EAAE,iBAAiB;IACtC,YAAY,WAAW,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;IAClD,YAAY,MAAM,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE;IAC9C,SAAS,CAAC;IACV,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACnD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO;IAC9C,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB;IAC9E,cAAc,aAAa,CAAC;IAC5B,cAAc,OAAO,CAAC,CAAC,CAAC;IACxB,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;IAClC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;IAC9B,QAAQ,OAAO;IACf,YAAY,QAAQ;IACpB,YAAY,OAAO,EAAE,WAAW;IAChC,YAAY,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;IAC5D,YAAY,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IAClD;IACA,YAAY,SAAS,EAAE,IAAI;IAC3B,YAAY,MAAM,EAAE,IAAI,CAAC,UAAU;IACnC,SAAS;IACT,IAAI;IACJ,IAAI,kBAAkB;IACtB,IAAI,IAAI,SAAS,GAAG;IACpB;IACA;IACA;IACA,QAAQ,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB;IAChF,IAAI;IACJ,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE;IAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;IAC7B,YAAY,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACvF,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,QAAQ;IACzC,IAAI;IACJ,IAAI,WAAW,GAAG;IAClB,QAAQ,OAAO,aAAa,CAAC,SAAS;IACtC,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1F,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;IACjB,QAAQ,IAAI,CAAC,IAAI,IAAI,EAAE;IACvB,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;IAClC,YAAY;IACZ,QAAQ;IACR;IACA,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvF,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;IACtC,IAAI;IACJ,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,KAAK,CAAC,QAAQ;IAC7B,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,KAAK,CAAC,QAAQ,GAAG,CAAC;IAC1B;IACA,QAAQ,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;IAC7E,YAAY,MAAM,CAAC,OAAO,GAAG,CAAC;IAC9B,QAAQ;IACR,IAAI;IACJ;;IC9ZA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,eAAe,CAAC;IACtB,IAAI,QAAQ,GAAG,IAAI,OAAO,EAAE;IAC5B;IACA,IAAI,OAAO,GAAG,IAAI,OAAO,EAAE;;IAE3B;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;IAC9C,QAAQ,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IACjD,QAAQ,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;IACtD,QAAQ,MAAM,KAAK,GAAG;IACtB,YAAY,mBAAmB;IAC/B,YAAY,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,CAAC,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7F,YAAY,IAAI,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,SAAS;IACT,QAAQ,MAAM,QAAQ,GAAG,EAAE;IAC3B,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IAClC,YAAY,MAAM,GAAG;IACrB,gBAAgB,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IAC/D,aAAa;IACb,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IACnC,YAAY,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IACzD,QAAQ;IACR,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;IACnC,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IAClC,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC9C,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,MAAM,GAAG,IAAI,MAAM,EAAE;IACjC,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;IAC7C,QAAQ;IACR,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE;IACnC,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK;IACxC,QAAQ,OAAO,CAAC,aAAa,CAAC,6BAA6B,CAAC,EAAE,MAAM,EAAE;IACtE,QAAQ,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM;IAClD,YAAY,IAAI,KAAK,EAAE,EAAE;IACzB,gBAAgB,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC;IACxD,gBAAgB,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;IACzD,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI;IACZ,YAAY,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9C,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;IACxB,YAAY,IAAI,KAAK,EAAE,EAAE;IACzB,gBAAgB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;IAChD,YAAY;IACZ,YAAY,MAAM,KAAK;IACvB,QAAQ,CAAC,SAAS;IAClB,YAAY,oBAAoB,CAAC,KAAK,CAAC;IACvC,YAAY,IAAI,KAAK,EAAE,EAAE;IACzB,gBAAgB,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC;IACzD,gBAAgB,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC;IACpD,YAAY;IACZ,QAAQ;IACR,IAAI;;IAEJ,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE;IAChC,QAAQ,OAAO,CAAC,aAAa,CAAC,6BAA6B,CAAC,EAAE,MAAM,EAAE;IACtE,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IACnD,QAAQ,KAAK,CAAC,SAAS,GAAG,mBAAmB;IAC7C,QAAQ,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3C,QAAQ,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;IACvD,QAAQ,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9B,IAAI;IACJ;;ICzFA;IACA;IACA;IACA;IACA;IACA,IAAI,YAAY,GAAG,KAAK;IACxB,MAAM,WAAW,GAAG,MAAM;IAC1B,IAAI,IAAI,YAAY,EAAE;IACtB,QAAQ;IACR,IAAI;IACJ,IAAI,YAAY,GAAG,IAAI;IACvB,IAAI,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK;IAC/D,QAAQ,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAC;IAC7D,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,YAAY;IACZ,QAAQ;IACR,2BAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,IAAI;IACrG,IAAI,CAAC,CAAC;IACN,CAAC;;ICbD;IACA,MAAM,OAAO,SAAS,aAAa,CAAC;IACpC,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,UAAU,GAAG,CAAC,WAAW,CAAC;IACrC,IAAI,OAAO,MAAM,GAAG;IACpB,QAAQ,IAAI,EAAE,kBAAkB;IAChC,KAAK;IACL,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA,IAAI,CAAC;IACL,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACxE,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC;IACpE,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC;IACpE;IACA;IACA;IACA,QAAQ,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvH,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACpD,QAAQ,IAAI,SAAS,EAAE;IACvB,YAAY,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC;IACxD,QAAQ;IACR,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtC,IAAI;IACJ;;IAEA;IACA,MAAM,MAAM,SAAS,aAAa,CAAC;IACnC,IAAI,OAAO,UAAU,GAAG,CAAC,QAAQ,CAAC;IAClC,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,OAAO;IACX,IAAI,KAAK;IACT,IAAI,SAAS,GAAG,IAAI,eAAe,EAAE;IACrC,IAAI,UAAU,GAAG,EAAE;IACnB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;IACtC,aAAa,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;IACzE,aAAa,MAAM,EAAE;IACrB,QAAQ,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IAClE,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;IAC9D,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;IACrD,YAAY,IAAI,CAAC,aAAa;IAC9B,gBAAgB,IAAI,WAAW,CAAC,OAAO,EAAE;IACzC,oBAAoB,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;IACzG,iBAAiB,CAAC;IAClB,aAAa;IACb,YAAY,IAAI,CAAC,OAAO,EAAE;IAC1B,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK;IACvE,YAAY,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC,MAAM;IAClF,YAAY,IAAI,MAAM,KAAK,SAAS,EAAE;IACtC,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1C,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtC,QAAQ,WAAW,EAAE;IACrB,IAAI;IACJ;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU;IACzC,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE;IAC5B,QAAQ,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;IACzC,YAAY,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACtF,QAAQ;IACR,IAAI;IACJ,IAAI,oBAAoB,GAAG;IAC3B,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,IAAI;IACJ,IAAI,IAAI,GAAG;IACX,QAAQ,OAAO,IAAI,CAAC,GAAG,EAAE;IACzB,IAAI;IACJ,IAAI,GAAG,GAAG;IACV,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IAChC,YAAY,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE;IACzC,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IACpC,YAAY,IAAI,CAAC,QAAQ,EAAE;IAC3B,QAAQ;IACR,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;IACxC,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;IACzC,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ,IAAI,QAAQ,GAAG;IACf,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,SAAS,CAAC;IACpF,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,SAAS,CAAC;IACrG,IAAI;IACJ,IAAI,KAAK,CAAC,MAAM,EAAE;IAClB,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IACxC,IAAI;IACJ;;IC3GA;IACA,MAAM,MAAM,SAAS,aAAa,CAAC;IACnC,IAAI,OAAO,UAAU,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9C,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;IACL,IAAI,OAAO;IACX,IAAI,MAAM;IACV,IAAI,QAAQ;IACZ,IAAI,MAAM;IACV,IAAI,QAAQ;IACZ,IAAI,SAAS,GAAG,IAAI,eAAe,EAAE;IACrC,IAAI,QAAQ,GAAG,IAAI,MAAM,EAAE;IAC3B,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;IACtC,aAAa,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;IACvE,aAAa,MAAM,EAAE;IACrB,QAAQ,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;IAClE,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC;IAChE,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC;IACpE,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC;IAChE,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC;IACpE,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACpD,QAAQ,IAAI,SAAS,EAAE;IACvB,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC;IAC7D,QAAQ;IACR,QAAQ,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAChG,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;IACrD,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtC,QAAQ,WAAW,EAAE;IACrB,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW;IACtC,IAAI;IACJ,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;IACjB,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE;IACzC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,MAAM,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE;IAC5B;IACA;IACA,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC1C,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;IAC1B,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;IACvC,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;IAC/C,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IAChD;IACA;IACA;IACA,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,QAAQ,IAAI;IACZ,YAAY,MAAM,SAAS,GAAG,MAAM,EAAE,EAAE;IACxC,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;IAC7B,gBAAgB,OAAO,IAAI,CAAC,QAAQ;IACpC,YAAY;IACZ,YAAY,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;IACpD,YAAY,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACpD,YAAY,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;IACnD,YAAY,OAAO,IAAI,CAAC,QAAQ;IAChC,QAAQ,CAAC,CAAC,wBAAwB,CAAC,EAAE;IACrC,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IAC9B;IACA;IACA,gBAAgB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;IACrD,gBAAgB,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACjE,gBAAgB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACxD,gBAAgB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACxD,YAAY;IACZ,YAAY,MAAM,CAAC;IACnB,QAAQ;IACR,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,GAAG;IACd,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,SAAS,CAAC;IACxG,IAAI;IACJ,IAAI,IAAI,GAAG;IACX,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;IAC3B,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,SAAS,CAAC;IACvF,IAAI;IACJ,IAAI,KAAK,GAAG;IACZ,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IAC5B,IAAI;IACJ;IACA,IAAI,KAAK,GAAG;IACZ,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IAC/B,YAAY,OAAO,KAAK;IACxB,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAChC,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ,IAAI,WAAW,GAAG;IAClB,QAAQ,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;IACrC,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9C,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IAChD,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC;IAC/C,IAAI;IACJ;;IC3HA,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;;IAE1D;IACA;IACA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;IACzB,IAAI,aAAa,GAAG,KAAK;;IAEzB;IACA,MAAM,MAAM,SAAS,aAAa,CAAC;IACnC,IAAI,OAAO,UAAU,GAAG,CAAC,gBAAgB,CAAC;IAC1C,IAAI,QAAQ;IACZ,IAAI,iBAAiB,GAAG;IACxB,QAAQ,KAAK,CAAC,iBAAiB,EAAE;IACjC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC3B,YAAY,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B,QAAQ;IACR,IAAI;IACJ,IAAI,oBAAoB,GAAG;IAC3B,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5B,IAAI;IACJ,IAAI,MAAM,GAAG;IACb,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI;IACxD,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC3C;IACA,QAAQ,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;IAC3C,QAAQ,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC5E,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,aAAa,GAAG,IAAI;IAChC,YAAY,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,CAAC,KAAK;IAC5E,gBAAgB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;IAC9C,oBAAoB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;IAC3D,gBAAgB;IAChB,YAAY,CAAC,CAAC;IACd,QAAQ;IACR,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;IAChC,QAAQ,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,MAAM;IAC1F,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC;IACxD,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpC,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5E,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IAClD,QAAQ,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5E,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IACxD,QAAQ,OAAO,CAAC,IAAI,GAAG,QAAQ;IAC/B,QAAQ,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAChF,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;IACvD,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;IACzC,QAAQ,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;IAChD,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5B,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;IAClC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAM;IACpD,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;IAC1D,gBAAgB,IAAI,CAAC,MAAM,EAAE;IAC7B,YAAY;IACZ,QAAQ,CAAC,CAAC;IACV,QAAQ,MAAM,MAAM,GAAG,MAAM;IAC7B;IACA;IACA,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;IACvD,yCAAyC,CAAC,IAAI,EAAE,KAAK,EAAE;IACvD,YAAY;IACZ,YAAY,IAAI,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,EAAE;IACxE,gBAAgB,IAAI,CAAC,MAAM,EAAE;IAC7B,gBAAgB;IAChB,YAAY;IACZ,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;IAC/C,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;IACnD,gBAAgB,IAAI,CAAC,MAAM,EAAE;IAC7B,YAAY;IACZ,QAAQ,CAAC;IACT,QAAQ,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC;IACjD,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACzB,QAAQ,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC5D,QAAQ,OAAO,IAAI;IACnB,IAAI;IACJ;;ICpFA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,IAAI,SAAS,aAAa,CAAC;IACjC,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,QAAQ,GAAG,CAAC,eAAe,CAAC;IACvC,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA,IAAI,CAAC;IACL,IAAI,QAAQ;IACZ,IAAI,KAAK,GAAG,EAAE;IACd,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,SAAS,GAAG,IAAI,eAAe,EAAE;IACrC,IAAI,OAAO,GAAG,CAAC;IACf,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACxE,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC;IAC7D,QAAQ,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACpD,QAAQ,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC;IAClF,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IACrD,YAAY,OAAO,CAAC,IAAI;IACxB,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,kCAAkC,CAAC;IACzH,aAAa;IACb,QAAQ;IACR,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACpE,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE;IACvB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC,EAAE;IAC1C,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,YAAY,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IACxD,YAAY,GAAG,CAAC,IAAI,GAAG,QAAQ;IAC/B,YAAY,GAAG,CAAC,IAAI,GAAG,KAAK;IAC5B,YAAY,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;IAC9C;IACA,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;IAC3B,gBAAgB,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC;IACzD,YAAY;IACZ,YAAY,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;IACvD,YAAY,KAAK,CAAC,IAAI,GAAG,UAAU;IACnC,YAAY,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC;IACzD;IACA;IACA,YAAY,KAAK,CAAC,QAAQ,GAAG,CAAC;IAC9B,YAAY,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACjD,YAAY,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAChD,gBAAgB,IAAI,CAAC,MAAM,GAAG,CAAC;IAC/B,YAAY,CAAC,CAAC;IACd,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;IACxC,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC,QAAQ;IACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK;IACzD,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;IACxC;IACA,YAAY,IAAI,MAAM,GAAG,IAAI;IAC7B,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,EAAE;IACxC,gBAAgB,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;IAC1D,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;IAC9C,gBAAgB,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;IAC9E,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE;IACzC,gBAAgB,MAAM,GAAG,CAAC;IAC1B,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE;IACxC,gBAAgB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAC9C,YAAY;IACZ,YAAY,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,OAAO,EAAE;IACvD,gBAAgB;IAChB,YAAY;IACZ,YAAY,CAAC,CAAC,cAAc,EAAE;IAC9B,YAAY,IAAI,CAAC,MAAM,GAAG,MAAM;IAChC,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE;IACtC,QAAQ,CAAC,CAAC;IACV,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtC,IAAI;IACJ,IAAI,IAAI,MAAM,GAAG;IACjB,QAAQ,OAAO,IAAI,CAAC,OAAO;IAC3B,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,GAAG,EAAE;IACjB,QAAQ,MAAM,KAAK,GAAG,GAAG,YAAY,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;IAC5G,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAClE,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,SAAS,CAAC;IACjG,IAAI;IACJ,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE;IAClB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/F,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO;IACrC,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;IACrD,YAAY,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,KAAK,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7E,YAAY,GAAG,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,EAAE;IAC/C,YAAY,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK;IAChD,QAAQ;IACR,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;IAC5B,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC;IACvC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,QAAQ,EAAE;IACjD,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAClG,QAAQ;IACR,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;IAC/E;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,SAAS,CAAC;IAClG,QAAQ;IACR,IAAI;IACJ;;ICnHA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,SAAS,SAAS,aAAa,CAAC;IACtC,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,QAAQ,GAAG,CAAC,oBAAoB,CAAC;IAC5C,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA,IAAI,CAAC;IACL,IAAI,MAAM;IACV,IAAI,UAAU,GAAG,KAAK;IACtB,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACxE,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC;IACnE,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtC,IAAI;IACJ,IAAI,IAAI,SAAS,GAAG;IACpB,QAAQ,OAAO,IAAI,CAAC,UAAU;IAC9B,IAAI;IACJ,IAAI,IAAI,SAAS,CAAC,CAAC,EAAE;IACrB,QAAQ,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,IAAI;IACpC,QAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC;IACpD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,IAAI;IAC7E,QAAQ,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAAE;IAChF,YAAY,IAAI,IAAI,KAAK,IAAI,EAAE;IAC/B,gBAAgB,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC;IAC/C,YAAY,CAAC,MAAM;IACnB,gBAAgB,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;IAClD,YAAY;IACZ,QAAQ;IACR,IAAI;IACJ;;ICjCA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM,MAAM,SAAS,aAAa,CAAC;IACnC,IAAI,OAAO,KAAK,GAAG,IAAI;IACvB,IAAI,OAAO,QAAQ,GAAG,CAAC,UAAU,CAAC;IAClC,IAAI,OAAO,QAAQ,GAAG;AACtB;AACA;AACA,IAAI,CAAC;IACL,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,SAAS,GAAG,EAAE;IAClB,IAAI,SAAS,GAAG,IAAI,eAAe,EAAE;IACrC,IAAI,MAAM,GAAG,CAAC;IACd,IAAI,SAAS;IACb,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;IACtB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACxE,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;IAC3D,QAAQ,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC3C,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,KAAK,WAAW,CAAC;IAC5F,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;IACvD,YAAY,OAAO,CAAC,IAAI;IACxB,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,oCAAoC,CAAC;IAChI,aAAa;IACb,QAAQ;IACR,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACtE,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;IACxB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC,EAAE;IAC1C,YAAY,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;IACnD,YAAY,EAAE,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAChD,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;IACvC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAChC;IACA;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE;IAC3C,QAAQ;IACR,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtC,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE;IACvB;IACA,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC;IACtG,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1E,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,SAAS,CAAC;IAC5D,QAAQ;IACR,IAAI;IACJ,IAAI,IAAI,KAAK,GAAG;IAChB,QAAQ,OAAO,IAAI,CAAC,MAAM;IAC1B,IAAI;IACJ,IAAI,IAAI,IAAI,GAAG;IACf,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,IAAI;IAC7E,IAAI;IACJ,IAAI,IAAI,QAAQ,GAAG;IACnB,QAAQ,OAAO,IAAI,CAAC,SAAS;IAC7B,IAAI;IACJ,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE;IACpB,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC;IAC1B,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,IAAI;IACJ,IAAI,IAAI,GAAG;IACX,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,IAAI;IACJ,IAAI,IAAI,GAAG;IACX,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,IAAI;IACJ,IAAI,IAAI,CAAC,GAAG,EAAE;IACd,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC;IAC1F,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;IAC1B,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7E,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAChC,IAAI;IACJ;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,CAAC,GAAG,EAAE;IACjB,QAAQ,MAAM,OAAO;IACrB,YAAY,GAAG,YAAY;IAC3B,kBAAkB;IAClB,kBAAkB,OAAO,GAAG,KAAK;IACjC,oBAAoB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,GAAG;IAClF,oBAAoB,SAAS;IAC7B,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;IACrD,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;IAC1B,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,SAAS,CAAC;IACnE,IAAI;IACJ,IAAI,MAAM,CAAC,KAAK,EAAE;IAClB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO;IACrC,YAAY,IAAI;IAChB,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACjC,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC;IAC3D,YAAY,KAAK;IACjB,SAAS;IACT,IAAI;IACJ,IAAI,KAAK,CAAC,KAAK,EAAE;IACjB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzF,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE;IACrC,YAAY,OAAO,SAAS;IAC5B,QAAQ;IACR,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC5B;IACA;IACA,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE;IAC3C,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC3B,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9G,QAAQ;IACR,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IACnC,IAAI;IACJ,IAAI,MAAM,CAAC,KAAK,EAAE;IAClB,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;IACvD,YAAY,IAAI,CAAC,KAAK,KAAK,EAAE;IAC7B,gBAAgB,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;IACzD,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;IACtE,YAAY,CAAC,MAAM;IACnB,gBAAgB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;IACpD,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,cAAc,CAAC;IACjE,YAAY;IACZ,QAAQ;IACR,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK;IAC3B,IAAI;IACJ;;AC7IA,aAAe;IACf,IAAI,oBAAoB,EAAE,2BAA2B;IACrD,IAAI,uBAAuB,EAAE,iBAAiB;IAC9C,IAAI,qBAAqB,EAAE,UAAU;IACrC,IAAI,iBAAiB,EAAE,MAAM;IAC7B,IAAI,mBAAmB,EAAE,QAAQ;IACjC,IAAI,eAAe,EAAE,iCAAiC;IACtD,IAAI,aAAa,EAAE,2BAA2B;IAC9C,IAAI,eAAe,EAAE,oBAAoB;IACzC,IAAI,gBAAgB,EAAE,YAAY;IAClC,IAAI,eAAe,EAAE,QAAQ;IAC7B,IAAI,sBAAsB,EAAE,+BAA+B;IAC3D,IAAI,cAAc,EAAE,QAAQ;IAC5B,IAAI,8BAA8B,EAAE,0CAA0C;IAC9E,IAAI,8BAA8B,EAAE,uCAAuC;IAC3E,IAAI,+BAA+B,EAAE,6CAA6C;IAClF,IAAI,0BAA0B,EAAE,EAAE,GAAG,EAAE,kCAAkC,EAAE,KAAK,EAAE,mCAAmC,EAAE;IACvH,IAAI,eAAe,EAAE,QAAQ;IAC7B,IAAI,gBAAgB,EAAE,WAAW;IACjC,IAAI,eAAe,EAAE,WAAW;IAChC,IAAI,eAAe,EAAE,cAAc;IACnC,IAAI,gBAAgB,EAAE,SAAS;IAC/B,IAAI,gBAAgB,EAAE,UAAU;IAChC,IAAI,oBAAoB,EAAE,SAAS;IACnC,IAAI,qBAAqB,EAAE,UAAU;IACrC,IAAI,wBAAwB,EAAE,aAAa;IAC3C,IAAI,sBAAsB,EAAE,WAAW;IACvC,IAAI,iCAAiC,EAAE,aAAa;IACpD,IAAI,oCAAoC,EAAE,gBAAgB;IAC1D,IAAI,qBAAqB,EAAE,KAAK;IAChC,IAAI,sBAAsB,EAAE,KAAK;IACjC,IAAI,uBAAuB,EAAE,IAAI;IACjC,IAAI,cAAc,EAAE,kBAAkB;IACtC,IAAI,oBAAoB,EAAE,QAAQ;IAClC,IAAI,cAAc,EAAE,OAAO;IAC3B,IAAI,iBAAiB,EAAE,UAAU;IACjC,IAAI,cAAc,EAAE,eAAe;IACnC,IAAI,eAAe,EAAE,SAAS;IAC9B,IAAI,iBAAiB,EAAE,UAAU;IACjC,CAAC;;ACvCD,aAAe;IACf,IAAI,oBAAoB,EAAE,6BAA6B;IACvD,IAAI,uBAAuB,EAAE,oBAAoB;IACjD,IAAI,qBAAqB,EAAE,YAAY;IACvC,IAAI,iBAAiB,EAAE,YAAY;IACnC,IAAI,mBAAmB,EAAE,UAAU;IACnC,IAAI,eAAe,EAAE,gDAAgD;IACrE,IAAI,aAAa,EAAE,kCAAkC;IACrD,IAAI,eAAe,EAAE,0BAA0B;IAC/C,IAAI,gBAAgB,EAAE,kBAAkB;IACxC,IAAI,eAAe,EAAE,SAAS;IAC9B,IAAI,sBAAsB,EAAE,8BAA8B;IAC1D,IAAI,cAAc,EAAE,SAAS;IAC7B,IAAI,8BAA8B,EAAE,6CAA6C;IACjF,IAAI,8BAA8B,EAAE,8CAA8C;IAClF,IAAI,+BAA+B,EAAE,wDAAwD;IAC7F,IAAI,0BAA0B,EAAE,EAAE,KAAK,EAAE,4CAA4C,EAAE;IACvF,IAAI,eAAe,EAAE,QAAQ;IAC7B,IAAI,gBAAgB,EAAE,SAAS;IAC/B,IAAI,eAAe,EAAE,QAAQ;IAC7B,IAAI,eAAe,EAAE,UAAU;IAC/B,IAAI,gBAAgB,EAAE,YAAY;IAClC,IAAI,gBAAgB,EAAE,QAAQ;IAC9B,IAAI,oBAAoB,EAAE,KAAK;IAC/B,IAAI,qBAAqB,EAAE,UAAU;IACrC,IAAI,wBAAwB,EAAE,YAAY;IAC1C,IAAI,sBAAsB,EAAE,aAAa;IACzC,IAAI,iCAAiC,EAAE,kBAAkB;IACzD,IAAI,oCAAoC,EAAE,qBAAqB;IAC/D,IAAI,qBAAqB,EAAE,WAAW;IACtC,IAAI,sBAAsB,EAAE,IAAI;IAChC,IAAI,uBAAuB,EAAE,IAAI;IACjC,IAAI,cAAc,EAAE,uBAAuB;IAC3C,IAAI,oBAAoB,EAAE,WAAW;IACrC,IAAI,cAAc,EAAE,QAAQ;IAC5B,IAAI,iBAAiB,EAAE,cAAc;IACrC,IAAI,cAAc,EAAE,WAAW;IAC/B,IAAI,eAAe,EAAE,QAAQ;IAC7B,IAAI,iBAAiB,EAAE,aAAa;IACpC,CAAC;;ACvCD,aAAe;IACf,IAAI,oBAAoB,EAAE,6BAA6B;IACvD,IAAI,uBAAuB,EAAE,uBAAuB;IACpD,IAAI,qBAAqB,EAAE,UAAU;IACrC,IAAI,iBAAiB,EAAE,WAAW;IAClC,IAAI,mBAAmB,EAAE,UAAU;IACnC,IAAI,eAAe,EAAE,6CAA6C;IAClE,IAAI,aAAa,EAAE,4BAA4B;IAC/C,IAAI,eAAe,EAAE,8BAA8B;IACnD,IAAI,gBAAgB,EAAE,gBAAgB;IACtC,IAAI,eAAe,EAAE,UAAU;IAC/B,IAAI,sBAAsB,EAAE,uCAAuC;IACnE,IAAI,cAAc,EAAE,UAAU;IAC9B,IAAI,8BAA8B,EAAE,0CAA0C;IAC9E,IAAI,8BAA8B,EAAE,gDAAgD;IACpF,IAAI,+BAA+B,EAAE,2CAA2C;IAChF,IAAI,0BAA0B,EAAE,EAAE,KAAK,EAAE,qDAAqD,EAAE;IAChG,IAAI,eAAe,EAAE,OAAO;IAC5B,IAAI,gBAAgB,EAAE,UAAU;IAChC,IAAI,eAAe,EAAE,OAAO;IAC5B,IAAI,eAAe,EAAE,OAAO;IAC5B,IAAI,gBAAgB,EAAE,aAAa;IACnC,IAAI,gBAAgB,EAAE,UAAU;IAChC,IAAI,oBAAoB,EAAE,OAAO;IACjC,IAAI,qBAAqB,EAAE,UAAU;IACrC,IAAI,wBAAwB,EAAE,aAAa;IAC3C,IAAI,sBAAsB,EAAE,aAAa;IACzC,IAAI,iCAAiC,EAAE,oBAAoB;IAC3D,IAAI,oCAAoC,EAAE,uBAAuB;IACjE,IAAI,qBAAqB,EAAE,YAAY;IACvC,IAAI,sBAAsB,EAAE,IAAI;IAChC,IAAI,uBAAuB,EAAE,IAAI;IACjC,IAAI,cAAc,EAAE,iBAAiB;IACrC,IAAI,oBAAoB,EAAE,WAAW;IACrC,IAAI,cAAc,EAAE,QAAQ;IAC5B,IAAI,iBAAiB,EAAE,WAAW;IAClC,IAAI,cAAc,EAAE,gBAAgB;IACpC,IAAI,eAAe,EAAE,QAAQ;IAC7B,IAAI,iBAAiB,EAAE,UAAU;IACjC,CAAC;;ACvCD,aAAe;IACf,IAAI,oBAAoB,EAAE,4BAA4B;IACtD,IAAI,uBAAuB,EAAE,sBAAsB;IACnD,IAAI,qBAAqB,EAAE,WAAW;IACtC,IAAI,iBAAiB,EAAE,SAAS;IAChC,IAAI,mBAAmB,EAAE,WAAW;IACpC,IAAI,eAAe,EAAE,8CAA8C;IACnE,IAAI,aAAa,EAAE,yCAAyC;IAC5D,IAAI,eAAe,EAAE,uBAAuB;IAC5C,IAAI,gBAAgB,EAAE,gBAAgB;IACtC,IAAI,eAAe,EAAE,SAAS;IAC9B,IAAI,sBAAsB,EAAE,qCAAqC;IACjE,IAAI,cAAc,EAAE,SAAS;IAC7B,IAAI,8BAA8B,EAAE,wDAAwD;IAC5F,IAAI,8BAA8B,EAAE,0DAA0D;IAC9F,IAAI,+BAA+B,EAAE,sDAAsD;IAC3F,IAAI,0BAA0B,EAAE;IAChC,QAAQ,GAAG,EAAE,2CAA2C;IACxD,QAAQ,KAAK,EAAE,4CAA4C;IAC3D,KAAK;IACL,IAAI,eAAe,EAAE,MAAM;IAC3B,IAAI,gBAAgB,EAAE,WAAW;IACjC,IAAI,eAAe,EAAE,WAAW;IAChC,IAAI,eAAe,EAAE,WAAW;IAChC,IAAI,gBAAgB,EAAE,SAAS;IAC/B,IAAI,gBAAgB,EAAE,UAAU;IAChC,IAAI,oBAAoB,EAAE,OAAO;IACjC,IAAI,qBAAqB,EAAE,UAAU;IACrC,IAAI,wBAAwB,EAAE,cAAc;IAC5C,IAAI,sBAAsB,EAAE,WAAW;IACvC,IAAI,iCAAiC,EAAE,kBAAkB;IACzD,IAAI,oCAAoC,EAAE,oBAAoB;IAC9D,IAAI,qBAAqB,EAAE,aAAa;IACxC,IAAI,sBAAsB,EAAE,KAAK;IACjC,IAAI,uBAAuB,EAAE,KAAK;IAClC,IAAI,cAAc,EAAE,qBAAqB;IACzC,IAAI,oBAAoB,EAAE,cAAc;IACxC,IAAI,cAAc,EAAE,QAAQ;IAC5B,IAAI,iBAAiB,EAAE,aAAa;IACpC,IAAI,cAAc,EAAE,eAAe;IACnC,IAAI,eAAe,EAAE,QAAQ;IAC7B,IAAI,iBAAiB,EAAE,aAAa;IACpC,CAAC;;ICpBD,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;;IAElC;IACA;IACA;IACA;IACA;IACA,MAAM,MAAM,CAAC;IACb,IAAI,SAAS;IACb,IAAI,aAAa;IACjB,IAAI,WAAW;;IAEf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;IAC9B,QAAQ,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,SAAS,EAAE,QAAQ,IAAI,IAAI;IACxE,QAAQ,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE;IACvD,QAAQ,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI;IACrD,IAAI;;IAEJ,IAAI,SAAS,CAAC,QAAQ,EAAE;IACxB,QAAQ,MAAM,UAAU;IACxB,YAAY,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;IAC5G;IACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,QAAQ,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;IACnF,QAAQ;IACR,aAAa,YAAY,CAAC,MAAM,EAAE,YAAY;IAC9C,aAAa,eAAe,CAAC,aAAa,EAAE,UAAU;IACtD,aAAa,aAAa,CAAC,aAAa,EAAE,OAAO;IACjD,aAAa,aAAa,CAAC,YAAY,EAAE,MAAM;IAC/C,aAAa,aAAa,CAAC,YAAY,EAAE,MAAM;IAC/C,aAAa,aAAa,CAAC,YAAY,EAAE,MAAM;IAC/C,aAAa,aAAa,CAAC,UAAU,EAAE,IAAI;IAC3C,aAAa,aAAa,CAAC,eAAe,EAAE,SAAS;IACrD,aAAa,aAAa,CAAC,YAAY,EAAE,MAAM;IAC/C,aAAa,aAAa,CAAC,UAAU,EAAE,IAAI;IAC3C,aAAa,aAAa,CAAC,cAAc,EAAE,QAAQ;IACnD,aAAa,aAAa,CAAC,WAAW,EAAE,KAAK;IAC7C,aAAa,aAAa,CAAC,gBAAgB,EAAE,SAAS;IACtD,aAAa,aAAa,CAAC,gBAAgB,EAAE,SAAS;IACtD,aAAa,aAAa,CAAC,aAAa,EAAE,OAAO;IACjD,aAAa,aAAa,CAAC,sBAAsB,EAAE,cAAc;IACjE,aAAa,aAAa,CAAC,sBAAsB,EAAE,cAAc;IACjE,aAAa,aAAa,CAAC,mBAAmB,EAAE,YAAY;IAC5D,aAAa,aAAa,CAAC,iBAAiB,EAAE,UAAU;IACxD,aAAa,aAAa,CAAC,WAAW,EAAE,KAAK;IAC7C,aAAa,aAAa,CAAC,gBAAgB,EAAE,UAAU;IACvD,aAAa,aAAa,CAAC,YAAY,EAAE,UAAU;IACnD,aAAa,aAAa,CAAC,oBAAoB,EAAE,aAAa;IAC9D,aAAa,aAAa,CAAC,uBAAuB,EAAE,eAAe;IACnE,aAAa,aAAa,CAAC,mBAAmB,EAAE,YAAY;IAC5D,aAAa,aAAa,CAAC,oBAAoB,EAAE,aAAa;IAC9D,aAAa,aAAa,CAAC,iBAAiB,EAAE,UAAU;IACxD,aAAa,aAAa,CAAC,YAAY,EAAE,MAAM;IAC/C,aAAa,aAAa,CAAC,cAAc,EAAE,QAAQ;IACnD,aAAa,eAAe,CAAC,gBAAgB,EAAE,YAAY;IAC3D,aAAa,eAAe,CAAC,cAAc,EAAE,UAAU;IACvD,aAAa,eAAe,CAAC,eAAe,EAAE,WAAW;IACzD;IACA;IACA;IACA;IACA,aAAa,aAAa,CAAC;IAC3B,gBAAgB,IAAI;IACpB,gBAAgB,MAAM,EAAE,IAAI,CAAC,SAAS;IACtC,aAAa,CAAC;IACd,IAAI;IACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC/FA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACnC;IACA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG;IACvB,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK;IAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG;IACvB;IACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"fml.iife.js","sources":["../src/ftl/cache.mjs","../src/ftl/ast.mjs","../src/ftl/expressions-parser.peggy","../src/ftl/expressions.mjs","../src/ftl/dom.mjs","../src/ftl/template.mjs","../src/ftl/registry.mjs","../src/ftl/templates.mjs","../src/ftl/rendering.mjs","../src/ftl/parsed-element.mjs","../src/ftl/l10n.mjs","../src/httpc/failure.mjs","../src/httpc/encodings.mjs","../src/httpc/http-client.mjs","../src/ful/storage.mjs","../src/ful/events/async.mjs","../src/ful/events/leave.mjs","../src/ful/claims.mjs","../src/ful/descriptions.mjs","../src/ful/timing.mjs","../src/ful/forms/bindings.mjs","../src/ful/forms/field.mjs","../src/ful/forms/form.mjs","../src/ful/forms/input.mjs","../src/ful/forms/temporals.mjs","../src/ful/forms/files.mjs","../src/ful/disclosures/anchors.mjs","../src/ful/forms/select.mjs","../src/ful/forms/radio.mjs","../src/ful/forms/checkbox.mjs","../src/ful/navigation/table.mjs","../src/ful/disclosures/menu-keys.mjs","../src/ful/forms/choice-button.mjs","../src/ful/forms/filters.mjs","../src/ful/disclosures/tooltip.mjs","../src/ful/events/sections.mjs","../src/ful/disclosures/dialog-sections.mjs","../src/ful/disclosures/targets.mjs","../src/ful/disclosures/dialog.mjs","../src/ful/disclosures/drawer.mjs","../src/ful/disclosures/menu.mjs","../src/ful/disclosures/toast.mjs","../src/ful/navigation/tabs.mjs","../src/ful/disclosures/accordion.mjs","../src/ful/navigation/wizard.mjs","../src/ful/l10n/en.mjs","../src/ful/l10n/it.mjs","../src/ful/l10n/es.mjs","../src/ful/l10n/fr.mjs","../src/ful/plugin.mjs","../src/index.mjs"],"sourcesContent":["/**\n * A Map bounded by entry count, evicting the oldest entry when full. A hit does\n * not refresh an entry: eviction follows insertion order, not use.\n */\nclass BoundedCache {\n #max;\n #entries = new Map();\n /** @param {number} max */\n constructor(max) {\n this.#max = max;\n }\n /**\n * The cached value for the key, computing and caching it on a miss. A\n * computed null or undefined is cached like any value; a throwing compute\n * caches nothing.\n * @template K, V\n * @param {K} key\n * @param {(key: K) => V} compute\n * @returns {V}\n */\n getOrCompute(key, compute) {\n if (this.#entries.has(key)) {\n return this.#entries.get(key);\n }\n const value = compute(key);\n if (this.#entries.size >= this.#max) {\n this.#entries.delete(this.#entries.keys().next().value);\n }\n this.#entries.set(key, value);\n return value;\n }\n /** @returns {number} the number of entries held */\n get size() {\n return this.#entries.size;\n }\n}\n\nexport { BoundedCache };\n","const nodes = {\n ter: Symbol('ternary'),\n elv: Symbol('elvis'),\n nullc: Symbol('null-coalescence'),\n or: Symbol('or'),\n and: Symbol('and'),\n eq: Symbol('eq'),\n cmp: Symbol('cmp'),\n not: Symbol('not'),\n access: Symbol('access'),\n member: Symbol('access-member'),\n subscript: Symbol('access-subscript'),\n method: Symbol('access-method-call'),\n call: Symbol('module-function-call'),\n tstring: Symbol('tstring'),\n literal: Symbol('literal'),\n array: Symbol('array-literal'),\n dict: Symbol('dict-literal'),\n function: Symbol('module-function'),\n symbol: Symbol('symbol'),\n templated: {\n ten: Symbol('templated-node'),\n teh: Symbol('templated-html'),\n tet: Symbol('templated-text'),\n tel: Symbol('templated-literal'),\n },\n dom: {\n t: Symbol('text'),\n h: Symbol('html'),\n n: Symbol('node'),\n },\n};\n\nexport { nodes };\n","{{\n import { nodes } from \"./ast.mjs\";\n const keywords = new Map([\n ['true', true],\n ['false', false],\n ['null', null],\n ['undefined', undefined],\n ]);\n}}\n\nTemplatedRoot = TemplatedExpression*\n\nTemplatedExpression = value:(BeginNode @ExpressionRoot EndNode) { return {type:nodes.templated.ten, value}}\n\t/ value:(BeginHtml @ExpressionRoot EndHtml) { return {type:nodes.templated.teh, value}}\n\t/ value:(BeginText @ExpressionRoot EndText) { return {type:nodes.templated.tet, value}} \n\t/ value:TemplatedText { return {type:nodes.templated.tel, value}}\n\nBeginNode = '{{{{'\nEndNode = '}}}}'\t\nBeginHtml = '{{{'\nEndHtml = '}}}'\nBeginText = '{{'\nEndText = '}}'\n\nTemplatedText\n = parts:(\n $( [^\\\\{]+ )\n / '\\\\' c:. { return c; }\n / $('{' !'{')\n )+ { return parts.join(''); }\n\nExpressionRoot\n = _ r:Expression _ { return r; }\n\nExpression = TernaryExpression\n\nTernaryExpression \n = cond:ElvisExpression _ \"?\" _ ifTrue:TernaryExpression _ \":\" _ ifFalse:TernaryExpression { return {type:nodes.ter, cond, ifTrue, ifFalse}; }\n / ElvisExpression\n\nElvisExpression\n = cond:NullCoalescingExpression _ \"?:\" _ ifFalse:ElvisExpression {return {type:nodes.elv, cond, ifFalse}; }\n / NullCoalescingExpression\n\nNullCoalescingExpression\n = lhs:OrExpression _ \"??\" _ rhs:NullCoalescingExpression { return {type:nodes.nullc, lhs, rhs}; } \n / OrExpression\n\nOrExpression \n = head:AndExpression tail:(_ \"||\" _ @rhs:AndExpression)* {\n let result = head;\n for (const rhs of tail) {\n result = {type: nodes.or, lhs: result, rhs};\n }\n return result;\n }\n\nAndExpression\n = head:EqExpression tail:(_ \"&&\" _ @rhs:EqExpression)* { \n let result = head;\n for (const rhs of tail) {\n result = {type: nodes.and, lhs: result, rhs};\n }\n return result;\n }\n\nEqExpression\n = head:RelExpression tail:(_ op:EqualityOp _ rhs:RelExpression {return {op, rhs};})* { \n let result = head;\n for (const element of tail) {\n result = {type: nodes.eq, op: element.op, lhs: result, rhs: element.rhs};\n }\n return result;\n }\n\nRelExpression\n = head:NotExpression tail:(_ op:RelationalOp _ rhs:NotExpression {return {op, rhs};})* {\n let result = head;\n for (const element of tail) {\n result = {type: nodes.cmp, op: element.op, lhs: result, rhs: element.rhs};\n }\n return result;\n }\n\n\nNotExpression\n = \"!\" _ expr:NotExpression { return {type:nodes.not, expr} }\n / Access\n\n\nAccess \n = lhs:GroupingExpression _ rhs:(@AccessExpression _)+ { return {type: nodes.access, lhs, rhs} } \n / GroupingExpression\n\n\nAccessExpression \n = AccessMember\n / AccessSubscript \n / AccessMethodCall\n \nAccessMember \"member\"\n = op:(\"?.\"/\".\") _ rhs:Word {\n return {type: nodes.member, ns: op === '?.', rhs: rhs};\n }\n\nAccessSubscript \"subscript\" \n = op:\"?.\"? \"[\" _ rhs:Expression _ \"]\" { \n return {type: nodes.subscript, ns: op !== null, rhs}; \n } \n\nAccessMethodCall \"method-call\" \n = op:\"?.\"? \"(\" _ h:(@Expression _)? t:(\",\" _ @Expression _)* \")\" { \n return {type: nodes.method, ns: op !== null, args: h === null ? [] : [h, ...t]}; \n }\n\nGroupingExpression\n = \"(\" _ e:Expression _ \")\" { return e }\n / ModuleFunctionCall\n / AnyLiteral\n / Identifier\n\n\nModuleFunctionCall \"module-function-call\" \n = fn:ModuleFunction \"(\" _ h:(@Expression _)? t:(\",\" _ @Expression _)* \")\" {\n const args = h === null ? [] : [h, ...t];\n return {type: nodes.call, value: fn, args};\n }\n\nAnyLiteral\n = NumberLiteral\n / StringLiteral\n / ArrayLiteral\n / DictLiteral\n\nNumberLiteral \"number-literal\" \n = value:$( '-'? ([0-9]+ ('.' [0-9]*)? / '.' [0-9]+ ) ) {\n return { type: nodes.literal, value: parseFloat(value) };\n }\n\nStringLiteral \"string-literal\"\n = \"'\" value:$[^']* \"'\" { return {type: nodes.literal, value}; }\n / '\"' value:$[^\"]* '\"' { return {type: nodes.literal, value}; }\n / \"`\" parts:(TemplateStringExpression / TemplateStringLiteral)* \"`\" { \n return {type: nodes.tstring, parts}; \n }\n\nTemplateStringExpression \"tstring-expression\"\n = \"{\" _ expr:Expression _ \"}\" { \n return expr; \n }\n\nTemplateStringLiteral \"tstring-literal\"\n = parts:(\n $([^\\\\`{]+)\n / \"\\\\\" c:. { return c; }\n )+ {\n return { type: nodes.literal, value: parts.join('') };\n }\n / char:$(\"{\") { \n return { type: nodes.literal, value: char }; \n }\n\nArrayLiteral \"array-literal\" \n = \"[\" _ h:(Expression)? _ t:(\",\" _ @Expression _)* \"]\" { \n const value = h === null ? [] : [h, ...t];\n return {type: nodes.array, value};\n }\n\nDictLiteral \"dict-literal\" \n = \"{\" _ h:(@StringLiteral _ \":\" _ @Expression)? _ t:(\",\" _ @StringLiteral _ \":\" _ @Expression _)* \"}\" {\n var value = []\n if (h !== null){\n value.push(h);\n }\n value.push.apply(value, t);\n return {type: nodes.dict, value}; \n }\n\nModuleFunction \"module-function\"\n = '#' module:(@Word ':')? v:Word {\n return {type: nodes.function, module, value: v}\n }\n\nWord\n = $([a-zA-Z$_][a-zA-Z$_0-9]*)\n\nIdentifier \"identifier-or-keyword\"\n = s:Word {\n return keywords.has(s)\n ? {type: nodes.literal, value: keywords.get(s)}\n : {type: nodes.symbol, value: s};\n }\n\nEqualityOp\n = \"==\"\n / \"!=\"\n\nRelationalOp\n = \">=\"\n / \">\"\n / \"<=\"\n / \"<\"\n\n_ \"whitespaces\"\n = [ \\t\\n\\r]*\n\n","import { parse } from './expressions-parser.peggy';\nimport { nodes } from './ast.mjs';\nimport { BoundedCache } from './cache.mjs';\n\n/**\n * The one lookup against a data stack: the innermost overlay carrying the name\n * wins, `self` is the innermost overlay itself, and a function overlay counts\n * like an object one.\n * @param {any[]} dataStack\n * @param {string|symbol} prop\n * @returns {any} undefined when no overlay carries the name\n */\nconst resolveInStack = (dataStack, prop) => {\n if (prop === 'self') {\n return dataStack[dataStack.length - 1];\n }\n for (let i = dataStack.length - 1; i >= 0; i--) {\n const overlay = dataStack[i];\n if (overlay != null && (typeof overlay === 'object' || typeof overlay === 'function')) {\n if (prop in overlay) {\n return overlay[prop];\n }\n }\n }\n return undefined;\n};\n\n/**\n * Evaluates a parsed expression against a scope. One instance per evaluation:\n * it holds the modules and the data stack that names resolve against, and keeps\n * no state between visits.\n */\nclass EvaluatingVisitor {\n #modules;\n #dataStack;\n constructor(modules, dataStack) {\n this.#modules = modules;\n this.#dataStack = dataStack;\n }\n #resolve(prop) {\n return resolveInStack(this.#dataStack, prop);\n }\n /**\n * The name a missing-method report can carry: the called symbol for a bare\n * `boom()`, the member for a dotted `a.boom()`, nothing for anything else\n * (a subscript or a grouped left-hand side has no static name).\n */\n #reportableName(node, index) {\n const source = index === 0 ? node.lhs : node.rhs[index - 1];\n if (source.type === nodes.symbol) {\n return source.value;\n }\n if (source.type === nodes.member) {\n return source.rhs;\n }\n return null;\n }\n\n #cached_resolve_proxy;\n #resolve_proxy() {\n if (!this.#cached_resolve_proxy) {\n this.#cached_resolve_proxy = new Proxy(this.#dataStack, {\n get: (target, prop) => this.#resolve(prop),\n });\n }\n return this.#cached_resolve_proxy;\n }\n [nodes.and](node) {\n return this.visit(node.lhs) && this.visit(node.rhs);\n }\n [nodes.or](node) {\n return this.visit(node.lhs) || this.visit(node.rhs);\n }\n [nodes.nullc](node) {\n return this.visit(node.lhs) ?? this.visit(node.rhs);\n }\n [nodes.not](node) {\n return !this.visit(node.expr);\n }\n [nodes.eq](node) {\n const lhs = this.visit(node.lhs);\n const rhs = this.visit(node.rhs);\n const eq = lhs === rhs;\n return node.op === '==' ? eq : !eq;\n }\n [nodes.cmp](node) {\n const lhs = this.visit(node.lhs);\n const rhs = this.visit(node.rhs);\n switch (node.op) {\n case '>':\n return lhs > rhs;\n case '<':\n return lhs < rhs;\n case '>=':\n return lhs >= rhs;\n case '<=':\n return lhs <= rhs;\n default:\n throw new Error(`unknown cmp op ${node.op}`);\n }\n }\n [nodes.call](node) {\n const fnRef = node.value;\n const module = fnRef.module === null ? this.#modules : this.#modules?.[fnRef.module];\n if (!module) {\n throw new Error(`Module \"${fnRef.module}\" not found`);\n }\n const fn = module[fnRef.value];\n if (!fn) {\n throw new Error(`Function \"#${fnRef.module === null ? '' : `${fnRef.module}:`}${fnRef.value}\" not found`);\n }\n const args = node.args.map((arg) => this.visit(arg));\n return fn.apply(this.#resolve_proxy(), args);\n }\n [nodes.literal](node) {\n return node.value;\n }\n [nodes.tstring](node) {\n let result = '';\n const parts = node.parts;\n for (let i = 0, len = parts.length; i < len; i++) {\n const evaluated = this.visit(parts[i]);\n if (evaluated !== null && evaluated !== undefined) {\n result += evaluated;\n }\n }\n return result;\n }\n [nodes.symbol](node) {\n return this.#resolve(node.value);\n }\n [nodes.dict](node) {\n return Object.fromEntries(node.value.map((entry) => [this.visit(entry[0]), this.visit(entry[1])]));\n }\n [nodes.array](node) {\n return node.value.map((v) => this.visit(v));\n }\n [nodes.ter](node) {\n return this.visit(node.cond) ? this.visit(node.ifTrue) : this.visit(node.ifFalse);\n }\n [nodes.elv](node) {\n return this.visit(node.cond) || this.visit(node.ifFalse);\n }\n [nodes.access](node) {\n let prev;\n let cur = this.visit(node.lhs);\n for (let i = 0; i !== node.rhs.length; ++i) {\n const rhs = node.rhs[i];\n if (rhs.ns && cur == null) {\n return undefined;\n }\n let value;\n switch (rhs.type) {\n case nodes.member: {\n value = cur[rhs.rhs];\n break;\n }\n case nodes.subscript: {\n value = cur[this.visit(rhs.rhs)];\n break;\n }\n case nodes.method: {\n if (!cur) {\n const name = this.#reportableName(node, i);\n throw new Error(name === null ? 'Method missing' : `Method missing \"${name}\"`);\n }\n const args = rhs.args.map((arg) => this.visit(arg));\n value = cur.apply(prev, args);\n break;\n }\n }\n prev = cur;\n cur = value;\n }\n return cur;\n }\n visit(node, ...args) {\n return this[node.type](node, ...args);\n }\n visitRoot(ast, templated) {\n return !templated\n ? this.visit(ast)\n : ast.map((node) => {\n switch (node.type) {\n case nodes.templated.tel:\n return { type: nodes.dom.t, value: node.value };\n case nodes.templated.tet:\n return { type: nodes.dom.t, value: this.visit(node.value) };\n case nodes.templated.teh:\n return { type: nodes.dom.h, value: this.visit(node.value) };\n case nodes.templated.ten:\n return { type: nodes.dom.n, value: this.visit(node.value) };\n default:\n throw new Error(`unknown node type ${node.type.toString()}`);\n }\n });\n }\n}\n\n/**\n * The expression language: parsing to an ast, caching the parses, and\n * interpreting one against a scope. Member access and calls are unfiltered, so\n * an expression can do whatever the page's own javascript can. Expressions are\n * written by the page author; untrusted data is passed in as data and never\n * spliced into the expression text.\n */\nclass Expressions {\n /** Parses the whole text as one expression: `user.name`. */\n static MODE_EXPRESSION = Symbol('MODE_EXPRESSION');\n /**\n * Parses text with interpolations, `Hello {{ user.name }}`, evaluating to\n * its parts: `{ type, value }` for each literal run and each `{{ }}` (text),\n * `{{{ }}}` (html) or `{{{{ }}}}` (node) interpolation, in order.\n */\n static MODE_TEMPLATED = Symbol('MODE_TEMPLATED');\n\n static #astCache = new BoundedCache(1000);\n\n /**\n * Parses an expression, caching the ast by mode and text.\n * @param {string} expression\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode] MODE_EXPRESSION when omitted\n * @returns {any} the ast\n * @throws a peggy syntax error when the text does not parse\n */\n static parse(expression, mode) {\n const key = mode?.toString() + expression;\n return this.#astCache.getOrCompute(key, () =>\n parse(expression, {\n startRule: mode === Expressions.MODE_TEMPLATED ? 'TemplatedRoot' : 'ExpressionRoot',\n }),\n );\n }\n /**\n * Evaluates a parsed ast against the modules and the data stack.\n * @param {{[k: string]: any } | null | undefined } modules\n * @param {any[]} dataStack innermost overlay last\n * @param {any} ast what `parse` answered\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode] the mode it was parsed in\n * @returns {any} the value, or the list of parts in MODE_TEMPLATED\n */\n static evaluate(modules, dataStack, ast, mode) {\n return new EvaluatingVisitor(modules, dataStack).visitRoot(ast, mode === Expressions.MODE_TEMPLATED);\n }\n /**\n * Parses and evaluates an expression.\n * @param {{ [x: string]: any; } | null | undefined} modules\n * @param {any[]} dataStack innermost overlay last\n * @param {string} expression\n * @param {(typeof Expressions.MODE_EXPRESSION | typeof Expressions.MODE_TEMPLATED)?} [mode] MODE_EXPRESSION when omitted\n * @returns {any} the value, or the list of parts in MODE_TEMPLATED\n */\n static interpret(modules, dataStack, expression, mode) {\n return Expressions.evaluate(modules, dataStack, Expressions.parse(expression, mode), mode);\n }\n}\n\n/**\n * A scope: the modules that `#name:fn()` resolves against and the data stack\n * that a bare identifier resolves against, as a single value. Adding an overlay\n * returns a new evaluator instead of modifying this one, so a template can add\n * data for one subtree without affecting the rest of the render.\n */\nclass ExpressionEvaluator {\n #modules;\n #dataStack;\n /**\n * @param {{ [k: string]: any } | null | undefined} modules\n * @param {any[]} dataStack innermost overlay last\n */\n constructor(modules, dataStack) {\n this.#modules = modules;\n this.#dataStack = dataStack;\n }\n /**\n * A new evaluator with one more module: `#name:fn()` resolves into it, and an\n * empty name merges a whole map whose functions resolve bare, as `#fn()`.\n * @param {string} name\n * @param {object} value\n * @returns {ExpressionEvaluator}\n */\n withModule(name, value) {\n const module = name ? { [name]: value } : value;\n return new ExpressionEvaluator({ ...this.#modules, ...module }, this.#dataStack);\n }\n /**\n * A new evaluator with the data pushed as the innermost overlays, the last\n * one winning a shared name.\n * @param {...any} data\n * @returns {ExpressionEvaluator}\n */\n withOverlay(...data) {\n return new ExpressionEvaluator(\n this.#modules,\n data.length === 0 ? this.#dataStack : [...this.#dataStack, ...data],\n );\n }\n /**\n * Resolves a name against the data stack, with no parse round trip: the\n * lookup a template's bare identifier makes, for an imperative caller.\n * @param {string} name\n * @returns {any} undefined when no overlay carries the name\n */\n resolve(name) {\n return resolveInStack(this.#dataStack, name);\n }\n /**\n * Evaluates an expression against this scope.\n * @param {string} expression\n * @returns {any}\n */\n evaluateExpression(expression) {\n return Expressions.interpret(this.#modules, this.#dataStack, expression, Expressions.MODE_EXPRESSION);\n }\n /**\n * Evaluates a templated text, the `{{ }}` form, against this scope.\n * @param {string} text\n * @returns {{ type: symbol, value: any }[]} its parts, as MODE_TEMPLATED describes\n */\n evaluateTemplated(text) {\n return Expressions.interpret(this.#modules, this.#dataStack, text, Expressions.MODE_TEMPLATED);\n }\n}\n\nexport { Expressions, ExpressionEvaluator };\n","/** Creates, serializes and inspects DocumentFragments. */\nclass Fragments {\n /**\n * Parses html into a DocumentFragment adopted by the document, each piece\n * trimmed and the pieces joined.\n * @param {...string} html\n * @returns {DocumentFragment}\n */\n static fromHtml(...html) {\n const el = document.createElement('template');\n el.innerHTML = html.map((h) => h.trim()).join('');\n return document.adoptNode(el.content);\n }\n /**\n * Serializes a fragment, or a single node, to html, consuming it: the nodes\n * are moved out, not copied, and a fragment is left empty. Pass\n * `fragment.cloneNode(true)` to keep the original usable.\n * @param {DocumentFragment|Node} fragment\n * @returns {string}\n */\n static toHtml(fragment) {\n var el = document.createElement('template');\n el.content.appendChild(fragment);\n return el.innerHTML;\n }\n /**\n * Whether a fragment holds no element and no text but whitespace.\n * @param {DocumentFragment} fragment\n * @returns {boolean}\n */\n static isBlank(fragment) {\n return fragment.childElementCount === 0 && fragment.textContent.trim() === '';\n }\n /**\n * Moves the nodes, in order, into a new DocumentFragment.\n * @param {...Node} nodes\n * @returns {DocumentFragment}\n */\n static from(...nodes) {\n const fragment = new DocumentFragment();\n for (const node of nodes) {\n fragment.appendChild(node);\n }\n return fragment;\n }\n /**\n * Moves the children of a node into a new DocumentFragment, leaving the\n * node empty.\n * @param {Node} el\n * @returns {DocumentFragment}\n */\n static fromChildNodes(el) {\n const fragment = new DocumentFragment();\n while (el.firstChild) {\n fragment.appendChild(el.firstChild);\n }\n return fragment;\n }\n}\n\n/** Attribute helpers: unique ids, defaults, prefixed forwarding, and writes where a nullish value removes the attribute. */\nclass Attributes {\n static id = 0;\n /**\n * A page-unique id under the prefix, as `prefix-n`.\n * @param {string} prefix\n * @returns {string}\n */\n static uid(prefix) {\n return `${prefix}-${++Attributes.id}`;\n }\n /**\n * Sets an attribute when the element does not carry it.\n * @param {Element} el\n * @param {string} k\n * @param {string} v\n * @returns {string|null} the attribute's value afterwards\n */\n static defaultValue(el, k, v) {\n if (!el.hasAttribute(k)) {\n el.setAttribute(k, v);\n }\n return el.getAttribute(k);\n }\n /**\n * Copies every attribute whose name starts with the prefix onto another\n * element, under the name without the prefix. `<prefix>class` adds its\n * classes to the target's instead of replacing them.\n * @param {string} prefix\n * @param {Element} from\n * @param {Element} to\n */\n static forward(prefix, from, to) {\n from.getAttributeNames()\n .filter((a) => a.startsWith(prefix))\n .forEach((a) => {\n const target = a.substring(prefix.length);\n if (target === 'class') {\n const classes =\n from\n .getAttribute(`${prefix}class`)\n ?.split(/\\s+/)\n .filter((a) => a.length) ?? [];\n to.classList.add(...classes);\n return;\n }\n to.setAttribute(target, /** @type {string} */ (from.getAttribute(a)));\n });\n }\n /**\n * Sets an attribute, or removes it when the value is nullish.\n * @param {Element} el\n * @param {string} attr\n * @param {string | null | undefined} value\n */\n static set(el, attr, value) {\n if (value == null) {\n el.removeAttribute(attr);\n } else {\n el.setAttribute(attr, value);\n }\n }\n}\n\n/**\n * Reads an element's light-dom slots: the named `<template slot=…>` and\n * `[slot=…]` children are removed and collected by name, and the remaining\n * children become the default slot. fml renders into the light dom, so this\n * replaces the slotting a shadow root would do.\n */\nclass LightSlots {\n /**\n * Takes an element's children apart into slots, leaving the element empty.\n * A named child is removed and contributes what `slotFromNode` answers;\n * children sharing a name are gathered in order. A child with an empty\n * `slot` belongs to the default slot, in document order among the rest.\n * @param {Element} el\n * @returns {Record<string, DocumentFragment>} the slots by name, `default` always present\n */\n static from(el) {\n for (const child of el.children) {\n if (child.matches('[slot=\"\"]')) {\n child.removeAttribute('slot');\n }\n }\n /** @type [string, Element|DocumentFragment][] */\n const namedSlots = Array.from(el.children)\n .filter((el) => el.matches('[slot]'))\n .map((el) => {\n el.remove();\n const slot = /** @type {string} */ (el.getAttribute('slot'));\n el.removeAttribute('slot');\n return [slot, LightSlots.slotFromNode(el)];\n });\n const slots = {};\n slots.default = new DocumentFragment();\n slots.default.append(...el.childNodes);\n for (const [name, el] of namedSlots) {\n if (!(name in slots)) {\n slots[name] = new DocumentFragment();\n }\n slots[name].append(el);\n }\n return slots;\n }\n /**\n * What a slotted node contributes: a template's content, the parsed markup\n * of a `<script type=\"text/html\">`, or the node itself.\n * @param {Element} el\n * @returns {Element|DocumentFragment}\n */\n static slotFromNode(el) {\n if (el instanceof HTMLTemplateElement) {\n return document.adoptNode(el.content);\n }\n if (el instanceof HTMLScriptElement && el.type === 'text/html') {\n return Fragments.fromHtml(el.innerHTML);\n }\n return el;\n }\n}\n\n/** Waits on the parser and the document, and queries an element's own children. */\nclass Nodes {\n /**\n * Whether the parser has moved past the element: the element, or one of\n * its ancestors, has a next sibling.\n * @param {Element} el\n * @returns {boolean}\n */\n static isParsed(el) {\n for (let c = /** @type {Node | null} */ (el); c; c = c.parentNode) {\n if (c.nextSibling) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Waits for the document's DOMContentLoaded. Resolves at once when that\n * moment already passed, and for a document with no view, which receives\n * no events. Never resolves early for a document still running its\n * deferred scripts.\n * @param {Document} doc\n * @returns {Promise<void>}\n */\n static waitDomContentLoaded(doc) {\n if (doc.readyState === 'loading') {\n return new Promise((resolve) => {\n doc.addEventListener('DOMContentLoaded', () => resolve(undefined), { once: true });\n });\n }\n if (doc.readyState === 'complete') {\n return Promise.resolve();\n }\n const win = doc.defaultView;\n if (win === null) {\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n const done = () => {\n win.removeEventListener('DOMContentLoaded', done);\n win.removeEventListener('load', done);\n resolve(undefined);\n };\n win.addEventListener('DOMContentLoaded', done);\n win.addEventListener('load', done);\n });\n }\n\n /**\n * Waits for the element's closing tag to be parsed: one MutationObserver\n * resolves once the element, or any of its ancestors, gains a next sibling,\n * which is the parser having moved past this subtree. The document's\n * DOMContentLoaded is the deadline. Resolves immediately for an element\n * that is already parsed.\n * @param {Element} el\n * @returns {Promise<Element>} the element\n */\n static waitParsed(el) {\n if (Nodes.isParsed(el)) {\n return Promise.resolve(el);\n }\n return new Promise((resolve) => {\n const observer = new MutationObserver(() => {\n if (!Nodes.isParsed(el)) {\n return;\n }\n observer.disconnect();\n resolve(el);\n });\n for (let c = el.parentNode; c; c = c.parentNode) {\n observer.observe(c, { childList: true });\n }\n Nodes.waitDomContentLoaded(el.ownerDocument).then(() => {\n observer.disconnect();\n resolve(el);\n });\n });\n }\n\n /**\n * The first child element matching the selector, descendants excluded.\n * @param {Element|DocumentFragment} el\n * @param {string} selector\n * @returns {Element|null}\n */\n static queryChildren(el, selector) {\n for (const c of el.children) {\n if (c.matches(selector)) {\n return c;\n }\n }\n return null;\n }\n /**\n * Every child element matching the selector, descendants excluded.\n * @param {Element|DocumentFragment} el\n * @param {string} selector\n * @returns {Element[]}\n */\n static queryChildrenAll(el, selector) {\n const r = [];\n for (const c of el.children) {\n if (c.matches(selector)) {\n r.push(c);\n }\n }\n return r;\n }\n}\n\nexport { Fragments, Attributes, LightSlots, Nodes };\n","import { nodes } from './ast.mjs';\nimport { BoundedCache } from './cache.mjs';\nimport { Fragments } from './dom.mjs';\nimport { ExpressionEvaluator } from './expressions.mjs';\n\n/**\n * Collects the changes a render makes to the tree it is traversing, deferring\n * those that would break the traversal: a node marked for removal stays in\n * place until the render finishes, so the iteration containing it completes.\n */\nclass NodeOperations {\n #forRemoval = new Set();\n removed(node) {\n return this.#forRemoval.has(node);\n }\n remove(node) {\n node.replaceChildren?.();\n Object.keys(node.dataset || {})\n .filter((k) => k.startsWith('tpl'))\n .forEach((k) => {\n delete node.dataset[k];\n });\n this.#forRemoval.add(node);\n }\n popData(node, key) {\n const v = node.dataset[key];\n delete node.dataset[key];\n return v;\n }\n prepend(ref, node) {\n ref.parentNode.insertBefore(node, ref);\n }\n append(ref, node) {\n ref.parentNode.insertBefore(node, ref.nextSibling);\n }\n replace(ref, node) {\n this.prepend(ref, node);\n this.remove(ref);\n }\n cleanup() {\n for (const node of this.#forRemoval) {\n node.remove();\n }\n this.#forRemoval.clear();\n }\n}\n\n/** The `data-tpl-*` commands, each taking the node it is written on and the scope it evaluates in. */\nclass CommandsHandler {\n /**\n * The order the commands run in on one element, each seeing the node as the\n * ones before left it: tplIf gates before tplWith and tplEach push their\n * overlay, tplWhen gates after, inside the scope that overlay opened.\n */\n static ORDERED_COMMANDS = [\n 'tplIf',\n 'tplWith',\n 'tplEach',\n 'tplWhen',\n 'tplClassAppend',\n 'tplAttrAppend',\n 'tplRemove',\n 'tplVerbatim',\n ];\n /** Removes the node when the expression is falsy, evaluated before tplWith and tplEach open their overlay. */\n static tplIf(node, expression, ops, evaluator) {\n const accept = evaluator.evaluateExpression(expression);\n if (!accept) {\n ops.remove(node);\n }\n }\n static tplWith(node, expression, ops, evaluator) {\n const evaluated = evaluator.evaluateExpression(expression);\n const varName = ops.popData(node, 'tplVar');\n const newNode = new Template(node, evaluator)\n .withOverlay(varName ? { [varName]: evaluated } : evaluated)\n .render();\n ops.replace(node, newNode);\n }\n /**\n * Renders the node once per entry, in place of the node. A Map iterates as\n * `{ key, value }` entries in its own order, a plain object as `{ key, value }`\n * entries in `Object.entries` order, and any other iterable as itself; a\n * value that is none of these throws. Each render sees its entry under\n * `data-tpl-var`, or as the whole overlay without one. `data-tpl-stat` names\n * an overlay beneath the entry carrying `index`, `count`, `size`, `first`,\n * `last`, `even` and `odd`, so an entry property of the same name wins; the\n * size, and so `last`, is null for a collection that knows neither its\n * `length` nor its `size`, which is never consumed to learn it.\n */\n static tplEach(node, expression, ops, evaluator) {\n const varName = ops.popData(node, 'tplVar');\n const statName = ops.popData(node, 'tplStat');\n const template = new Template(node, evaluator);\n const evaluated = evaluator.evaluateExpression(expression);\n const proto = evaluated === null || typeof evaluated !== 'object' ? undefined : Object.getPrototypeOf(evaluated);\n const plain = !evaluated?.[Symbol.iterator] && (proto === Object.prototype || proto === null);\n const dict = plain ? Object.entries(evaluated) : null;\n const keyed = evaluated instanceof Map ? [...evaluated] : dict;\n const entries = keyed === null ? evaluated : keyed.map(([key, value]) => ({ key, value }));\n if (!entries?.[Symbol.iterator]) {\n throw new Error(`Expected an iterable got '${evaluated}'`);\n }\n const measured = statName ? entries : null;\n const counted = typeof measured?.length === 'number' ? measured.length : measured?.size;\n const size = typeof counted === 'number' ? counted : null;\n let index = 0;\n for (const v of entries) {\n const item = varName ? { [varName]: v } : v;\n const stat = {\n index,\n count: index + 1,\n size,\n first: index === 0,\n last: size === null ? null : index === size - 1,\n even: index % 2 === 0,\n odd: index % 2 === 1,\n };\n const layers = statName ? [{ [statName]: stat }, item] : [item];\n ops.prepend(node, template.withOverlay(...layers).render());\n ++index;\n }\n ops.remove(node);\n }\n /** Removes the node when the expression is falsy, evaluated in the overlay tplWith or tplEach opened. */\n static tplWhen(node, expression, ops, evaluator) {\n const accept = evaluator.evaluateExpression(expression);\n if (!accept) {\n ops.remove(node);\n }\n }\n static tplVerbatim(node, expression, ops, evaluator) {\n const newNode = node.cloneNode(true);\n ops.replace(node, newNode);\n }\n static tplRemove(node, value, ops, evaluator) {\n switch (value.toLowerCase()) {\n case 'tag': {\n const fragment = Fragments.fromChildNodes(node);\n if ('tplVerbatim' in node.dataset) {\n ops.popData(node, 'tplVerbatim');\n ops.replace(node, fragment);\n } else {\n ops.append(node, fragment);\n ops.remove(node);\n }\n break;\n }\n case 'body':\n node.replaceChildren();\n break;\n case 'all':\n ops.remove(node);\n break;\n }\n }\n static tplClassAppend(node, expression, ops, evaluator) {\n const classes = evaluator.evaluateExpression(expression);\n if (!classes) {\n return;\n }\n const classesAsArray = Array.isArray(classes) ? classes : [classes];\n const cleanClasses = classesAsArray.flatMap((c) => (typeof c === 'string' ? c.split(' ') : c)).filter(Boolean);\n if (cleanClasses.length === 0) {\n return;\n }\n node.classList.add(...cleanClasses);\n }\n static tplAttrAppend(node, expression, ops, evaluator) {\n const attributesAndValues = evaluator.evaluateExpression(expression);\n if (!attributesAndValues || attributesAndValues.length === 0) {\n return;\n }\n const tuples = Array.isArray(attributesAndValues[0]) ? attributesAndValues : [attributesAndValues];\n tuples.forEach(([k, v]) => {\n node.setAttribute(k, v);\n });\n }\n static textNode(node, expression, ops, evaluator) {\n for (const v of evaluator.evaluateTemplated(expression)) {\n if (v.value == null) {\n continue;\n }\n switch (v.type) {\n case nodes.dom.t:\n ops.prepend(node, document.createTextNode(v.value));\n break;\n case nodes.dom.h:\n ops.prepend(node, Fragments.fromHtml(typeof v.value === 'string' ? v.value : String(v.value)));\n break;\n case nodes.dom.n:\n if (!(v.value instanceof Node)) {\n throw new TypeError(`Expected a Node, got '${typeof v.value}'`);\n }\n ops.prepend(node, v.value);\n break;\n }\n }\n ops.remove(node);\n }\n}\n\nconst attributeCache = new BoundedCache(1000);\n\n/**\n * The attribute a `tpl` dataset key targets: `tplAriaLabel` is `aria-label`.\n * @param {string} dataSetKey\n * @returns {string}\n */\nfunction toAttr(dataSetKey) {\n return attributeCache.getOrCompute(dataSetKey, (k) =>\n k\n .substring(3)\n .split(/(?=[A-Z])/)\n .join('-')\n .toLowerCase(),\n );\n}\n\n/**\n * A compiled fragment together with the scope it renders in. Both are\n * immutable: adding data or replacing the scope returns a new Template, so one\n * piece of compiled markup can be rendered against any number of scopes and a\n * registry can reuse a single template for every element that requests it.\n */\nclass Template {\n /**\n * Creates a template from html.\n * @param {string} html\n * @param {{ [k: string] : any }?} [modules]\n * @param {...*} data the data stack, innermost last\n * @returns {Template}\n */\n static fromHtml(html, modules, ...data) {\n return new Template(Fragments.fromHtml(html), new ExpressionEvaluator(modules, data));\n }\n\n /**\n * Creates a template from the content of the first element matching the\n * selector, which is adopted: the template element is left empty.\n * @param {string} selector for an HTMLTemplateElement\n * @param {{ [k: string] : any }?} [modules]\n * @param {...*} data the data stack, innermost last\n * @returns {Template}\n * @throws when the selector matches no template element\n */\n static fromSelector(selector, modules, ...data) {\n const templateEl = document.querySelector(selector);\n if (!(templateEl instanceof HTMLTemplateElement)) {\n throw new Error('template selector does not match any template tag');\n }\n return Template.fromTemplate(templateEl, modules, ...data);\n }\n\n /**\n * Creates a template from the content of a template element, which is\n * adopted: the template element is left empty.\n * @param {HTMLTemplateElement} templateEl\n * @param {{ [k: string] : any }?} [modules]\n * @param {...*} data the data stack, innermost last\n * @returns {Template}\n */\n static fromTemplate(templateEl, modules, ...data) {\n const fragment = document.adoptNode(templateEl.content);\n return new Template(fragment, new ExpressionEvaluator(modules, data));\n }\n\n /**\n * Creates a template over a fragment, which is imported afresh on every\n * render and never modified.\n * @param {DocumentFragment} fragment\n * @param { { [k: string] : any }? } [modules]\n * @param {...*} data the data stack, innermost last\n * @returns {Template}\n */\n static fromFragment(fragment, modules, ...data) {\n return new Template(fragment, new ExpressionEvaluator(modules, data));\n }\n #fragment;\n #evaluator;\n /**\n * Creates a template: a fragment plus the scope it renders in.\n * @param {DocumentFragment} fragment\n * @param {ExpressionEvaluator} evaluator the modules and data stack the expressions resolve against\n */\n constructor(fragment, evaluator) {\n this.#fragment = fragment;\n this.#evaluator = evaluator;\n }\n /**\n * Creates a new Template rendering in another scope: the one way to rebind\n * a compiled template to a registry's modules and data.\n * @param {ExpressionEvaluator} evaluator\n * @returns {Template}\n */\n withEvaluator(evaluator) {\n return new Template(this.#fragment, evaluator);\n }\n /**\n * Creates a new Template over another fragment, in the same scope.\n * @param {DocumentFragment} fragment\n * @returns {Template}\n */\n withFragment(fragment) {\n return new Template(fragment, this.#evaluator);\n }\n /**\n * Creates a new Template with a module added, as `ExpressionEvaluator.withModule` does.\n * @param {string?} name\n * @param {{[k: string]: any}} value\n * @returns {Template}\n */\n withModule(name, value) {\n return new Template(this.#fragment, this.#evaluator.withModule(name, value));\n }\n /**\n * Creates a new Template with the data pushed as the innermost overlays.\n * @param {...*} data\n * @returns {Template}\n */\n withOverlay(...data) {\n return new Template(this.#fragment, this.#evaluator.withOverlay(...data));\n }\n /**\n * Evaluates an expression in this template's scope, widened by the overlays.\n * @param {string} expression\n * @param {...*} data\n * @returns {any}\n */\n evaluateExpression(expression, ...data) {\n return this.#evaluator.withOverlay(...data).evaluateExpression(expression);\n }\n /**\n * Evaluates a templated text, the `{{ }}` form, in this template's scope.\n * @param {string} text\n * @param {...*} data\n * @returns {{ type: symbol, value: any }[]} the parts, as `Expressions.MODE_TEMPLATED` describes\n */\n evaluateTemplated(text, ...data) {\n return this.#evaluator.withOverlay(...data).evaluateTemplated(text);\n }\n /**\n * The scope this template renders in.\n * @returns {ExpressionEvaluator}\n */\n evaluator() {\n return this.#evaluator;\n }\n /**\n * Renders the template into a new fragment, applying the `data-tpl-*`\n * commands and bindings and the `{{ }}` interpolations.\n * @returns {DocumentFragment}\n * @throws {RenderError} naming the node and the directive that failed\n */\n render() {\n try {\n const ops = new NodeOperations();\n const imported = document.importNode(this.#fragment, true);\n const fragment = imported.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? imported : Fragments.from(imported);\n const iterator = document.createNodeIterator(\n fragment,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n Template.#NODE_FILTER,\n );\n let node;\n while ((node = iterator.nextNode()) !== null) {\n ops.cleanup();\n if (node.nodeType === Node.TEXT_NODE) {\n try {\n CommandsHandler.textNode(node, node.nodeValue, ops, this.#evaluator);\n } catch (ex) {\n throw RenderError.wrap('Error evaluating text node', node, ex);\n }\n continue;\n }\n const el = /** @type {HTMLElement} */ (node);\n for (const command of CommandsHandler.ORDERED_COMMANDS) {\n if (!(command in el.dataset)) {\n continue;\n }\n const value = ops.popData(el, command);\n try {\n CommandsHandler[command](el, value, ops, this.#evaluator);\n } catch (ex) {\n throw RenderError.wrap(`Error evaluating data-tpl-${toAttr(command)}=\"${value}\"`, el, ex);\n }\n if (ops.removed(el)) {\n break;\n }\n }\n for (const dataSetKey of Object.keys(el.dataset || {})) {\n if (!dataSetKey.startsWith('tpl')) {\n continue;\n }\n const attributeName = toAttr(dataSetKey);\n const expression = ops.popData(el, dataSetKey);\n try {\n const evaluated = this.#evaluator.evaluateExpression(expression);\n if (typeof evaluated === 'boolean') {\n el.toggleAttribute(attributeName, evaluated);\n continue;\n }\n if (evaluated !== null && evaluated !== undefined) {\n el.setAttribute(attributeName, evaluated);\n }\n } catch (ex) {\n throw RenderError.wrap(`Error evaluating data-tpl-${attributeName}=\"${expression}\"`, el, ex);\n }\n }\n }\n ops.cleanup();\n return fragment;\n } catch (ex) {\n if (ex instanceof RenderError) {\n throw ex;\n }\n throw new RenderError('Error rendering template', this.#fragment, ex);\n }\n }\n /**\n * Renders this template into the element, replacing its children.\n * @param {Element} el\n * @throws {RenderError}\n */\n renderTo(el) {\n el.replaceChildren(this.render());\n }\n /**\n * Renders this template and appends the result to the element.\n * @param {Element} el\n * @throws {RenderError}\n */\n appendTo(el) {\n el.appendChild(this.render());\n }\n /**\n * Renders this template into the first element matching the selector,\n * replacing its children; does nothing when none matches.\n * @param {string} selector\n * @throws {RenderError}\n */\n renderToSelector(selector) {\n const el = document.querySelector(selector);\n if (el) {\n this.renderTo(el);\n }\n }\n /**\n * Renders this template and appends the result to the first element\n * matching the selector; does nothing when none matches.\n * @param {string} selector\n * @throws {RenderError}\n */\n appendToSelector(selector) {\n const el = document.querySelector(selector);\n if (el) {\n this.appendTo(el);\n }\n }\n static #NODE_FILTER(node) {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.nodeValue.includes('{{') && node.nodeValue.includes('}}')\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_REJECT;\n }\n for (const attr of node.attributes) {\n if (attr.name.startsWith('data-tpl-')) {\n return NodeFilter.FILTER_ACCEPT;\n }\n }\n return NodeFilter.FILTER_SKIP;\n }\n}\n\n/**\n * A render failure, one frame per nesting level, chained through `cause` from\n * the outermost frame down to the error that failed the expression. A frame's\n * message names what was being evaluated and the node's open tag, with the\n * attributes it still carries: the directive being evaluated is already off\n * the tag. The subtree is not in the message; `html` serializes it on demand.\n */\nclass RenderError extends Error {\n /** How many frames a chain keeps: a deeper nesting drops the outermost ones and marks the chain `truncated`. */\n static FRAMES = 3;\n #node;\n #depth;\n /** Whether the chain dropped outer frames to stay within FRAMES. */\n truncated = false;\n /**\n * Frames a failure, unless the chain already holds FRAMES frames: then the\n * cause is returned as it is, marked `truncated`.\n * @param {string} message\n * @param {Node} nodeOrFragment the node that failed\n * @param {any} cause\n * @returns {RenderError}\n */\n static wrap(message, nodeOrFragment, cause) {\n if (cause instanceof RenderError && cause.depth >= RenderError.FRAMES) {\n cause.truncated = true;\n return cause;\n }\n return new RenderError(message, nodeOrFragment, cause);\n }\n /**\n * @param {string} message\n * @param {Node} nodeOrFragment the node that failed\n * @param {any} cause\n */\n constructor(message, nodeOrFragment, cause) {\n super(`${message} in \\`${RenderError.describe(nodeOrFragment)}\\``, { cause });\n this.name = 'RenderError';\n this.#node = nodeOrFragment;\n this.#depth = (cause instanceof RenderError ? cause.depth : 0) + 1;\n }\n /**\n * How many frames this chain carries, this one included.\n * @returns {number}\n */\n get depth() {\n return this.#depth;\n }\n /**\n * The node the render failed on, live in the fragment being built.\n * @returns {Node}\n */\n get node() {\n return this.#node;\n }\n /**\n * The failed node's markup, whitespace trimmed, serialized on each read.\n * @returns {string}\n */\n get html() {\n return RenderError.stringify(this.#node);\n }\n /**\n * What identifies a node in a frame: an element by its open tag, a text node\n * by its source, a fragment by the open tags of the elements it holds, cut\n * at 120 characters.\n * @param {Node} nodeOrFragment\n * @returns {string}\n */\n static describe(nodeOrFragment) {\n if (nodeOrFragment.nodeType === Node.TEXT_NODE) {\n return RenderError.#ellipsize(String(nodeOrFragment.nodeValue).trim());\n }\n if (nodeOrFragment.nodeType === Node.ELEMENT_NODE) {\n const el = /** @type Element */ (nodeOrFragment);\n const attrs = Array.from(el.attributes, (a) => ` ${a.name}=\"${a.value}\"`).join('');\n return RenderError.#ellipsize(`<${el.localName}${attrs}>`);\n }\n const children = Array.from(nodeOrFragment.childNodes)\n .filter((n) => n.nodeType === Node.ELEMENT_NODE || String(n.nodeValue ?? '').trim().length > 0)\n .map((n) => RenderError.describe(n));\n return RenderError.#ellipsize(children.join(''));\n }\n static #ellipsize(text) {\n return text.length > 120 ? `${text.slice(0, 120)}…` : text;\n }\n /**\n * A node's markup with its whitespace-only text dropped and the rest trimmed.\n * @param {Node} nodeOrFragment left untouched: a clone is serialized\n * @returns {string}\n */\n static stringify(nodeOrFragment) {\n return Fragments.toHtml(RenderError.#cleanup(nodeOrFragment.cloneNode(true)));\n }\n static #cleanup(node) {\n if (node.nodeType === Node.TEXT_NODE) {\n node.nodeValue = node.nodeValue.trim();\n }\n for (let n = 0; n < node.childNodes.length; n++) {\n const child = node.childNodes[n];\n if (child.nodeType === Node.TEXT_NODE) {\n child.nodeValue = child.nodeValue.trim();\n if (child.nodeValue.length === 0) {\n node.removeChild(child);\n n--;\n }\n } else if (child.nodeType === Node.ELEMENT_NODE) {\n RenderError.#cleanup(child);\n }\n }\n return node;\n }\n}\n\nexport { Template, RenderError };\n","import { Nodes } from './dom.mjs';\nimport { ExpressionEvaluator } from './expressions.mjs';\nimport { Template } from './template.mjs';\n\nclass UpgradeQueue {\n #q = new Map();\n #readyResolve;\n #ready = new Promise((resolve) => {\n this.#readyResolve = resolve;\n });\n constructor() {\n Nodes.waitDomContentLoaded(document).then(() => {\n this.#start();\n });\n }\n ready() {\n return this.#ready;\n }\n async #start() {\n await this.settled();\n document.dispatchEvent(\n new CustomEvent('ftl:ready', {\n bubbles: false,\n cancelable: false,\n }),\n );\n this.#readyResolve();\n }\n enqueue(el) {\n if (this.#q.has(el)) {\n return;\n }\n const { promise: finished, resolve: markFinished } = /** @type {PromiseWithResolvers<void>} */ (\n Promise.withResolvers()\n );\n const upgrade = Nodes.waitParsed(el)\n .then(() => el.upgrade())\n .finally(() => {\n this.#q.delete(el);\n markFinished();\n });\n this.#q.set(el, { upgrade, finished });\n }\n async #drain(accept, pick) {\n for (;;) {\n const pending = Array.from(this.#q)\n .filter(([el]) => accept(el))\n .map(([, entry]) => pick(entry));\n if (pending.length === 0) {\n return;\n }\n await Promise.all(pending);\n }\n }\n /**\n * Waits for the whole queue to drain, the upgrades enqueued meanwhile included.\n * Never rejects: a failed upgrade counts as drained.\n * @returns {Promise<void>}\n */\n settled() {\n return this.#drain(() => true, (entry) => entry.finished);\n }\n /**\n * Waits for the accepted upgrades, the ones enqueued meanwhile included,\n * rejecting with the first that failed.\n * @param {(el: Element) => boolean} accept\n * @returns {Promise<void>}\n */\n upgraded(accept) {\n return this.#drain(accept, (entry) => entry.upgrade);\n }\n whenUpgraded(el) {\n return this.#q.get(el)?.upgrade;\n }\n pending() {\n return Array.from(this.#q.keys());\n }\n}\n\n/**\n * The page's single source of truth for elements, modules, data, components\n * and attribute mappers. Elements defined before configure() are deferred and\n * defined by it; from then on every defineElement takes effect immediately.\n * The exported `registry` singleton is the page's own; a `new Registry()` is a\n * separate instance with its own upgrade queue, which dispatches its own\n * ftl:ready on the document, while Rendering waits on the singleton alone.\n */\nclass Registry {\n #tagToClass = {};\n #configured = false;\n #mappers = {\n string: {\n unmarshal(str, name, el) {\n return str;\n },\n marshal(value, name, el) {\n return value == null ? null : String(value);\n },\n },\n number: {\n unmarshal(str, name, el) {\n return str === null ? null : Number(str);\n },\n marshal(value, name, el) {\n return value == null ? null : String(value);\n },\n },\n presence: {\n unmarshal(str, name, el) {\n return str !== null;\n },\n marshal(value, name, el) {\n return value ? '' : null;\n },\n },\n bool: {\n unmarshal(str, name, el) {\n return str === 'true';\n },\n marshal(value, name, el) {\n return value == null ? null : String(value === true);\n },\n },\n json: {\n unmarshal(str, name, el) {\n return str === null ? null : JSON.parse(str);\n },\n marshal(value, name, el) {\n return value == null ? null : JSON.stringify(value);\n },\n },\n csv: {\n unmarshal(str, name, el) {\n return str === null\n ? []\n : str\n .split(',')\n .map((e) => e.trim())\n .filter((e) => e);\n },\n marshal(value, name, el) {\n return value == null ? null : value.join(',');\n },\n },\n };\n #components = {};\n #modules;\n #data = [];\n #evaluator = new ExpressionEvaluator(undefined, []);\n #upgradeQueue = new UpgradeQueue();\n /**\n * Registers a custom element under its tag: the class is augmented with its\n * BITS (observed attributes, mappers, templates) and handed to the platform.\n * Before configure() the definition is deferred, so import order never\n * matters. The element resolves its templates and components through this\n * registry, whichever one a module imports, and its `static config` is read\n * here, so a page replacing it does so before the definition.\n * @param {string} tag\n * @param {*} klass a ParsedElement subclass\n * @returns {Registry} this registry\n */\n defineElement(tag, klass) {\n if (!this.#configured) {\n this.#tagToClass[tag] = klass;\n return this;\n }\n this.#augmentAndDefineElement(tag, klass);\n return this;\n }\n /**\n * The attribute declarations a class composes along its inheritance chain,\n * base first: `observed` stay live after the upgrade and drive the property\n * `propertyOf` names, `attributes` are the configuration read once at it and\n * drive no property at all. A subclass's entry for a name overrides its\n * ancestors', so a base class declares what every subclass keeps observing\n * (a protocol attribute such as Field's disabled claim) and a leaf refines a\n * mapping, or moves a name's position, without repeating the whole list.\n * The observed attributes are applied in the composed order, a re-declared\n * name taking the position of its last declaration.\n * @param {*} klass a ParsedElement subclass\n * @returns {{ observed: string[], attributes: string[] }}\n */\n static declarationsOf(klass) {\n const chain = [];\n for (let c = klass; c !== null && c !== HTMLElement; c = Object.getPrototypeOf(c)) {\n chain.unshift(c);\n }\n const own = (name) => chain.flatMap((c) => Object.getOwnPropertyDescriptor(c, name)?.value ?? []);\n return { observed: own('observed'), attributes: own('attributes') };\n }\n /**\n * The property an observed attribute drives, by the platform's own\n * dash-to-camel rule: the one `dataset` applies, so `clear-invalid-on-change`\n * would reach `clearInvalidOnChange` the way `data-clear-invalid-on-change`\n * reaches `dataset.clearInvalidOnChange`.\n *\n * Only this direction is mapped. A property never derives its attribute: a\n * setter reflects through `reflectTo`, naming the attribute it writes.\n * @param {string} attribute\n * @returns {string}\n */\n static propertyOf(attribute) {\n return attribute.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n }\n #augmentAndDefineElement(tag, klass) {\n const { observed, attributes } = Registry.declarationsOf(klass);\n const { template, templates, slots, mappers, config } = klass;\n const declaredNames = observed.map((a) => a.split(':')[0]);\n const observedNames = [...new Set(declaredNames.reverse())].reverse();\n const attrToMapper = [...attributes, ...observed].reduce((acc, a) => {\n const [attr, maybeType] = a.split(':');\n const type = maybeType ?? 'string';\n if (!(type in this.#mappers) && !(type in (mappers ?? {}))) {\n throw new Error(`unsupported attribute type: ${type}`);\n }\n acc[attr] = mappers?.[type] ?? this.#mappers[type];\n return acc;\n }, {});\n\n const namesAndTemplates = Object.entries(\n Object.assign({}, templates, template ? { default: template } : {}),\n ).map(([k, v]) => [k, Template.fromHtml(v)]);\n const nameToTemplate = Object.fromEntries(namesAndTemplates);\n\n klass.BITS = {\n registry: this,\n enqueue: (el) => this.#upgradeQueue.enqueue(el),\n SLOTS: slots,\n CONFIG: config,\n OBSERVED: observedNames,\n DECLARED: [...new Set([...observedNames, ...attributes.map((a) => a.split(':')[0])])],\n ATTR_TO_MAPPER: attrToMapper,\n ATTR_TO_PROPERTY: Object.fromEntries(observedNames.map((a) => [a, Registry.propertyOf(a)])),\n TEMPLATES: nameToTemplate,\n };\n customElements.define(tag, klass);\n }\n /**\n * Merges one module under its name, its functions resolving as\n * `#name:fn`; an empty name merges a whole map, whose keys resolve bare,\n * as `#fn`.\n * @param {string} name\n * @param {object} value\n * @returns {Registry} this registry\n */\n defineModule(name, value) {\n const module = name ? { [name]: value } : value;\n this.#modules = { ...this.#modules, ...module };\n this.#rebind();\n return this;\n }\n /**\n * Replaces the whole module map.\n * @param {object} ms\n * @returns {Registry} this registry\n */\n defineModules(ms) {\n this.#modules = ms;\n this.#rebind();\n return this;\n }\n /**\n * Registers a named component (a loader, a response mapper), fetched back\n * through component().\n * @param {string} name\n * @param {*} value\n * @returns {Registry} this registry\n */\n defineComponent(name, value) {\n this.#components[name] = value;\n return this;\n }\n /**\n * Replaces the data stack the templates evaluate over.\n * @param {...any} data\n * @returns {Registry} this registry\n */\n defineData(...data) {\n this.#data = data;\n this.#rebind();\n return this;\n }\n /**\n * Appends to the data stack, the later entry winning a shared name.\n * @param {...any} data\n * @returns {Registry} this registry\n */\n defineOverlay(...data) {\n this.#data = [...this.#data, ...data];\n this.#rebind();\n return this;\n }\n /**\n * Registers a custom attribute mapper type, available to every later\n * `name:type` declaration.\n * @param {string} k\n * @param {{ unmarshal(str: string|null, name: string, el: Element): any, marshal(value: any, name: string, el: Element): string|null }} v\n * @returns {Registry} this registry\n */\n defineMapper(k, v) {\n this.#mappers[k] = v;\n return this;\n }\n /**\n * Hands the registry over to the plugin's configure.\n * @param {{ configure(registry: Registry): void }} p\n * @returns {Registry} this registry\n */\n plugin(p) {\n p.configure(this);\n return this;\n }\n /**\n * Defines every element deferred so far; from then on, defineElement takes\n * effect immediately.\n * @returns {Registry} this registry\n */\n configure() {\n for (const [tag, klass] of Object.entries(this.#tagToClass)) {\n this.#augmentAndDefineElement(tag, klass);\n delete this.#tagToClass[tag];\n }\n this.#configured = true;\n return this;\n }\n /**\n * Waits for the queued upgrades the filter accepts, rejecting with the first\n * that failed, the upgrades enqueued meanwhile included: the rejecting\n * barrier Rendering is a facade over.\n * @param {(el: Element) => boolean} accept\n * @returns {Promise<void>}\n */\n settle(accept) {\n return this.#upgradeQueue.upgraded(accept);\n }\n /**\n * The pending upgrade of one element: resolving when it has rendered,\n * rejecting with what its upgrade threw.\n * @param {Element} el\n * @returns {Promise<void>|undefined} undefined when the element is not queued\n */\n whenUpgraded(el) {\n return this.#upgradeQueue.whenUpgraded(el);\n }\n /**\n * The elements whose upgrade is still pending, in queue order.\n * @returns {Element[]}\n */\n pending() {\n return this.#upgradeQueue.pending();\n }\n /**\n * Waits for this registry's readiness: resolves right after its ftl:ready\n * event is dispatched on the document, and immediately when that already\n * happened. Never rejects: a failed upgrade counts as settled, and its\n * rejection is left unhandled so it still reaches the console and the\n * page's error reporting.\n * @returns {Promise<void>}\n */\n ready() {\n return this.#upgradeQueue.ready();\n }\n #rebind() {\n this.#evaluator = new ExpressionEvaluator(this.#modules, this.#data);\n }\n /**\n * The scope every template on this registry renders in: the modules and the\n * data stack, as one value. Replaced whenever either is defined, so a holder\n * of an older one keeps rendering against what it was handed.\n * @returns {ExpressionEvaluator}\n */\n evaluator() {\n return this.#evaluator;\n }\n /**\n * The component registered under the name.\n * @param {string} name\n * @returns {any} undefined when none is\n */\n component(name) {\n return this.#components[name];\n }\n}\n\nconst registry = new Registry();\n\nexport { Registry, registry };\n","import { registry } from './registry.mjs';\nimport { Template } from './template.mjs';\n\n/** The Template factories bound to the page's own registry: the same four sources, with its modules and data already applied. */\nclass Templates {\n /**\n * @param {string} html\n * @returns {Template}\n */\n static fromHtml(html) {\n return Template.fromHtml(html).withEvaluator(registry.evaluator());\n }\n /**\n * @param {string} selector for an HTMLTemplateElement\n * @returns {Template}\n */\n static fromSelector(selector) {\n return Template.fromSelector(selector).withEvaluator(registry.evaluator());\n }\n /**\n * @param {HTMLTemplateElement} templateEl consumed: its content is adopted\n * @returns {Template}\n */\n static fromTemplate(templateEl) {\n return Template.fromTemplate(templateEl).withEvaluator(registry.evaluator());\n }\n /**\n * @param {DocumentFragment} fragment\n * @returns {Template}\n */\n static fromFragment(fragment) {\n return Template.fromFragment(fragment).withEvaluator(registry.evaluator());\n }\n}\n\nexport { Templates };\n","import { registry } from './registry.mjs';\n\n/**\n * Waits for elements queued on the page's `registry` to render. Unlike\n * `registry.ready()`, these reject when an awaited upgrade fails. An element\n * defined by another Registry is awaited through that registry instead.\n */\nclass Rendering {\n /**\n * Waits for the element and its descendants, the ones their own renders\n * enqueue included.\n * @param {Element} el\n * @returns {Promise<void>} rejecting with the first upgrade that failed\n */\n static waitFor(el) {\n return registry.settle((child) => el.contains(child));\n }\n /**\n * Waits for the element's descendants, the element itself excluded: what a\n * component awaits from inside its own render.\n * @param {Element} el\n * @returns {Promise<void>} rejecting with the first upgrade that failed\n */\n static waitForChildren(el) {\n return registry.settle((child) => el !== child && el.contains(child));\n }\n}\n\nexport { Rendering };\n","import { Attributes, LightSlots } from './dom.mjs';\nimport { registry } from './registry.mjs';\nimport { Template } from './template.mjs';\n\n/**\n * An attribute Mapper.\n *\n * @typedef {object} Mapper\n * @property {(val: string|null|undefined, name: string, el: Element) => any} unmarshal\n * @property {(val: any, name: string, el: Element) => string|null} marshal\n */\n\n/**\n * The base of every fml element. A subclass declares its attributes, slots and\n * templates in statics and builds its dom in `render`; the base reads the light\n * slots, reads the declared attributes through their mappers, renders once, and\n * then forwards observed attribute writes to the matching properties. An element\n * resolves templates and components through the registry that defined it.\n */\nclass ParsedElement extends HTMLElement {\n static BITS = {\n registry,\n enqueue: (el) => {},\n SLOTS: false,\n /** @type {object|undefined} */\n CONFIG: undefined,\n /** @type {string[]} */\n OBSERVED: [],\n /** @type {string[]} */\n DECLARED: [],\n /** @type {Record<string, Mapper>} */\n ATTR_TO_MAPPER: {},\n /** @type {Record<string, string>} */\n ATTR_TO_PROPERTY: {},\n TEMPLATES: {},\n };\n static get observedAttributes() {\n return this.BITS.OBSERVED;\n }\n constructor() {\n super();\n this.internals = this.attachInternals();\n }\n /**\n * The element's ElementInternals, attached by the base for every element: a\n * subclass never calls attachInternals itself, since a second call throws.\n * A subclass declaring `static formAssociated` gets the form apis here.\n * A subclass must not redeclare the field: a class field without an\n * initializer assigns undefined after super() returns, wiping it.\n * @type {ElementInternals}\n */\n internals;\n #parsed = false;\n #started = false;\n /** the attributes whose own reflection is in flight */\n #reflecting = new Set();\n /** the observed snapshot between the upgrade's start and its render's end */\n #pending = /** @type {{ [k: string]: any } | null} */ (null);\n /** the configuration tier, read once at the upgrade and kept for the element's life */\n #frozen = /** @type {{ [k: string]: any }} */ ({});\n #bits() {\n return /** @type {typeof ParsedElement} */ (this.constructor).BITS;\n }\n #mapper(attr) {\n const mapper = this.#bits().ATTR_TO_MAPPER[attr];\n if (!mapper) {\n throw new Error(\n `${this.constructor.name} declares no attribute '${attr}': declare it in static observed or static attributes, or read it with getAttribute`,\n );\n }\n return mapper;\n }\n /**\n * Reads an attribute value through the mapper it was declared with.\n * @param {string} attr\n * @param {string|null} str\n * @returns {any}\n * @throws when the class declares no such attribute; read undeclared ones with getAttribute\n */\n unmarshal(attr, str) {\n return this.#mapper(attr).unmarshal(str, attr, this);\n }\n /**\n * Writes a value as the attribute string its declared mapper produces.\n * @param {string} attr\n * @param {any} value\n * @returns {string|null} null for a value that removes the attribute\n * @throws when the class declares no such attribute\n */\n marshal(attr, value) {\n return this.#mapper(attr).marshal(value, attr, this);\n }\n /**\n * The registry that defined this element, the page's own for an undefined one.\n * @returns {typeof registry}\n */\n get _registry() {\n return this.#bits().registry;\n }\n /**\n * The component registered under the name on this element's registry, the\n * one every ful loader and mapper resolves through.\n * @param {string} name\n * @returns {any} undefined when none is registered\n */\n component(name) {\n return this.#bits().registry.component(name);\n }\n /**\n * One of the class's templates, bound to its registry's scope with the\n * class's `static config` overlaid as `config`.\n * @param {string} [name] 'default', the `static template`, when omitted\n * @returns {Template}\n * @throws when the class declares no template of that name\n */\n template(name) {\n const target = this.#bits().TEMPLATES[name ?? 'default'];\n if (!target) {\n throw new Error(`no template named '${name ?? 'default'}' on ${this.constructor.name}`);\n }\n const t = target.withEvaluator(this.#bits().registry.evaluator());\n const config = this.#bits().CONFIG;\n return config ? t.withOverlay({ config }) : t;\n }\n connectedCallback() {\n if (this.#started) {\n return;\n }\n this.#bits().enqueue(this);\n }\n attributeChangedCallback(attr, oldValue, newValue) {\n if (oldValue === newValue) {\n return;\n }\n if (this.#reflecting.has(attr)) {\n return;\n }\n if (!this.#parsed) {\n if (this.#pending !== null && attr in this.#pending) {\n this.#pending[attr] = this.unmarshal(attr, newValue);\n }\n return;\n }\n this[this.#bits().ATTR_TO_PROPERTY[attr]] = this.unmarshal(attr, newValue);\n }\n /**\n * Upgrades once, however often the element is connected: reads the declared\n * attributes, keeps the observed ones open to writes made while the render is\n * pending, renders, then applies the observed values to their properties in\n * the order the registry composed them, a base class's before a subclass's.\n * Only then do attribute writes forward to properties, and the element gains\n * the `rendered` custom state. A render that throws leaves the forwarding\n * shut and the state unset.\n *\n * An observed attribute drives the property the registry's `propertyOf`\n * names, so a hyphenated attribute is authored with its dashes and read as\n * a camelCase property.\n * @returns {Promise<void>} rejecting with what the render threw\n */\n async upgrade() {\n if (this.#started) {\n return;\n }\n this.#started = true;\n const slots = this.#bits().SLOTS ? LightSlots.from(this) : undefined;\n const declared = Object.fromEntries(\n this.#bits().DECLARED.map((attribute) => [\n attribute,\n this.unmarshal(attribute, this.getAttribute(attribute)),\n ]),\n );\n const observedNames = new Set(this.#bits().OBSERVED);\n this.#frozen = Object.fromEntries(Object.entries(declared).filter(([name]) => !observedNames.has(name)));\n this.#pending = declared;\n try {\n await this.render({ slots });\n const properties = this.#bits().ATTR_TO_PROPERTY;\n for (const name of this.#bits().OBSERVED) {\n this[properties[name]] = declared[name];\n }\n this.#parsed = true;\n this.internals.states.add('rendered');\n } finally {\n this.#pending = null;\n }\n }\n /**\n * Renders the element from its slots alone: it builds the dom its setters\n * drive, and the base applies the declared state onto the properties as\n * soon as it returns. A render needing a declared value while it builds\n * reads it through `declared(name)`. The slots are undefined for an element\n * declaring no slots. It may be async; the upgrade awaits it.\n * @param {{ slots: Record<string, DocumentFragment> | undefined }} c\n * @returns {void | Promise<void>}\n */\n render(c) {}\n /**\n * The declared value of an attribute, unmarshalled through its mapper.\n *\n * A `static attributes` name is the configuration tier: read once when the\n * upgrade starts and answered unchanged for the element's life, so a later\n * attribute write does not quietly change how the element behaves. An\n * observed name answers the snapshot while the render is pending, kept\n * open to attribute writes landing in that window, and the live attribute\n * afterwards, the property being live by then.\n * @param {string} name\n * @returns {any}\n * @throws when the class declares no such attribute\n */\n declared(name) {\n if (name in this.#frozen) {\n return this.#frozen[name];\n }\n if (this.#pending !== null && name in this.#pending) {\n return this.#pending[name];\n }\n return this.unmarshal(name, this.getAttribute(name));\n }\n /**\n * Whether the element's render completed: the moment its properties went\n * live, which css reads as `:state(rendered)`. Unlike `:defined`, which holds\n * from the constructor, it is false until the dom exists.\n * @returns {boolean}\n */\n get rendered() {\n return this.#parsed;\n }\n /**\n * Projects a property back onto its observed attribute, marshalled through\n * the mapper the attribute was declared with.\n *\n * A value the attribute already carries is not written at all, so reflecting\n * what an attribute write just delivered ends there rather than looping, and\n * only the attribute being written is muted while it happens.\n * @param {string} attr\n * @param {any} value\n */\n reflectTo(attr, value) {\n const marshalled = this.marshal(attr, value);\n if (marshalled === this.getAttribute(attr)) {\n return;\n }\n this.#reflecting.add(attr);\n try {\n Attributes.set(this, attr, marshalled);\n } finally {\n this.#reflecting.delete(attr);\n }\n }\n}\n\nexport { ParsedElement };\n","import { BoundedCache } from './cache.mjs';\nimport { registry } from './registry.mjs';\n\n/**\n * A flat translations map: dotted keys pointing to a message, or to a plural\n * leaf carrying a CLDR plural category for each of its forms ('other' is\n * required, the missing categories of a language fall back to it).\n *\n * @typedef {Record<string, string | Record<string, string>>} Messages\n */\n\n/**\n * The receiver contract of the module functions: bound to a proxy over the\n * data stack when called from a template, or to a plain object by Localization.of().\n *\n * @typedef {{ l10n?: Messages, locale?: string }} Receiver\n */\n\nconst PLACEHOLDER = /\\{(\\w+)\\}/g;\nconst POSITIONAL = /\\{(\\d+)\\}/g;\n/** @param {any} v @returns {v is Record<string, string>} */\nconst isPlainObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);\n\n/** @param {any} problem @returns {string|undefined} the reason, unless it is missing or blank */\nconst reasonOf = (problem) =>\n typeof problem?.reason === 'string' && problem.reason.trim() !== '' ? problem.reason : undefined;\n\nconst warned = new Set();\nconst warnOnce = (problem) => {\n if (!warned.has(problem)) {\n warned.add(problem);\n console.warn(`l10n: ${problem}`);\n }\n};\n\nconst formatters = new BoundedCache(100);\n/**\n * An Intl instance, memoized by constructor, locale and options.\n * @param {{ new (locale: string | undefined, options: any): any }} ctor\n * @param {string | undefined} locale\n * @param {any} [options]\n */\nconst formatter = (ctor, locale, options) => {\n const key = `${ctor.name}|${locale ?? ''}|${options === undefined ? '' : JSON.stringify(options)}`;\n return formatters.getOrCompute(key, () => new ctor(locale, options));\n};\n\n/**\n * The translations as a template module: `#l10n:t()` for messages, plus date,\n * number and bytes formatting in the page's locale. The template form and the\n * imperative `of()` facade both resolve through the registry's scope, so they\n * always produce the same result for the same key.\n */\nclass Localization {\n /**\n * Resolves a message from the translations and interpolates its arguments.\n * A single plain object argument interpolates named placeholders\n * ({name}); anything else interpolates positional ones ({0}).\n * A plural leaf selects its form through Intl.PluralRules over the\n * numeric {count} named argument.\n *\n * @param {string} key\n * @param {...any} args\n * Each problem (a missing key, placeholder or plural form) is warned once\n * per page.\n *\n * @this {Receiver}\n * @returns {string} the message, or the key itself when the translations do not carry it\n */\n static t(key, ...args) {\n const messages = this.l10n ?? {};\n let message = Object.hasOwn(messages, key) ? messages[key] : undefined;\n if (message === undefined) {\n warnOnce(`missing message \"${key}\"`);\n return key;\n }\n const named = args.length === 1 && isPlainObject(args[0]) ? args[0] : null;\n if (isPlainObject(message)) {\n if (typeof named?.count !== 'number') {\n warnOnce(`plural message \"${key}\" needs a numeric {count}`);\n message = message.other;\n } else {\n const locale = this.locale ?? navigator?.language ?? 'en';\n const category = formatter(Intl.PluralRules, locale).select(named.count);\n message = message[category] ?? message.other;\n }\n }\n if (message === undefined || typeof message === 'object') {\n warnOnce(`plural message \"${key}\" has no \"other\" form`);\n return key;\n }\n if (named) {\n return message.replace(PLACEHOLDER, (literal, name) => {\n if (!Object.hasOwn(named, name)) {\n warnOnce(`message \"${key}\" wants {${name}}`);\n return literal;\n }\n return String(named[name]);\n });\n }\n if (args.length > 0) {\n return message.replace(POSITIONAL, (literal, index) => {\n const i = Number(index);\n if (i >= args.length) {\n warnOnce(`message \"${key}\" wants {${index}}`);\n return literal;\n }\n return String(args[i]);\n });\n }\n return message;\n }\n\n /**\n * Formats a date through Intl.DateTimeFormat in the receiver's locale.\n *\n * @param {Date | number} value\n * @param {Intl.DateTimeFormatOptions} [options]\n * @this {Receiver}\n * @returns {string}\n */\n static date(value, options) {\n return formatter(Intl.DateTimeFormat, this.locale, options).format(value);\n }\n\n /**\n * Formats a number through Intl.NumberFormat in the receiver's locale.\n *\n * @param {number} value\n * @param {Intl.NumberFormatOptions} [options]\n * @this {Receiver}\n * @returns {string}\n */\n static number(value, options) {\n return formatter(Intl.NumberFormat, this.locale, options).format(value);\n }\n\n /**\n * Formats a byte size with binary thresholds and literal unit suffixes:\n * the digits honor the locale, the units are the near-universal KiB/MiB/GiB.\n * A size exactly on a threshold takes the larger unit: 1024 is 1KiB.\n *\n * @param {number} value\n * @this {Receiver}\n * @returns {string}\n */\n static bytes(value) {\n const format = formatter(Intl.NumberFormat, this.locale, { maximumFractionDigits: 2 }).format;\n if (value >= 1024 * 1024 * 1024) {\n return `${format(value / 1024 / 1024 / 1024)}GiB`;\n }\n if (value >= 1024 * 1024) {\n return `${format(value / 1024 / 1024)}MiB`;\n }\n if (value >= 1024) {\n return `${format(value / 1024)}KiB`;\n }\n return `${format(value)}B`;\n }\n\n /**\n * What went wrong, as text for the reader. A value carrying a non-empty\n * `problems` array reads as their reasons, one per line, a blank or missing\n * reason reading as the `failure.no-reason` message. Any other value with a\n * `message` reads as that message; anything else as its string form, and\n * null or undefined as the empty string.\n *\n * @param {any} value what was thrown or rejected with\n * @this {Receiver}\n * @returns {string}\n */\n static failure(value) {\n if (Array.isArray(value?.problems) && value.problems.length > 0) {\n return value.problems.map((p) => reasonOf(p) ?? Localization.t.call(this, 'failure.no-reason')).join('\\n');\n }\n if (value?.message !== undefined) {\n return String(value.message);\n }\n return value == null ? '' : String(value);\n }\n\n /**\n * An imperative facade over the module functions, resolving the translations\n * and the locale from the registry overlays on every call, the same lookup a\n * template makes: a facade taken at module scope, before the plugin\n * configures, still sees the translations.\n *\n * @param {{ locale?: string }} [overrides] an explicit locale, winning over the registry one\n * @returns {{ t: (key: string, ...args: any[]) => string, date: (value: Date | number, options?: Intl.DateTimeFormatOptions) => string, number: (value: number, options?: Intl.NumberFormatOptions) => string, bytes: (value: number) => string, failure: (value: any) => string }}\n */\n static of(overrides = {}) {\n const resolve = (prop) => registry.evaluator().resolve(prop);\n /** @param {any} fn */\n const bind =\n (fn) =>\n (...args) =>\n fn.apply({ l10n: resolve('l10n'), locale: overrides.locale ?? resolve('locale') }, args);\n return {\n t: bind(Localization.t),\n date: bind(Localization.date),\n number: bind(Localization.number),\n bytes: bind(Localization.bytes),\n failure: bind(Localization.failure),\n };\n }\n}\n\nexport { Localization };\n","/**\n * One problem of a failure: its `type` (a code such as `FIELD_ERROR` or\n * `GENERIC_PROBLEM`), the `context` naming the field it belongs to or null, the\n * human `reason`, and optional `details`.\n * @typedef {{ type: string; context: string?; reason: string; details: any?; }} Problem\n */\n/**\n * An error carrying a list of problems rather than one message. A problem's\n * `context` names the field it belongs to, which is what lets a form show each\n * one beside its own input instead of in a banner.\n */\nclass Failure extends Error {\n /**\n * @param {string} message\n * @param {Problem[]} problems\n * @param {*} [cause]\n */\n constructor(message, problems, cause) {\n super(message, { cause });\n this.name = 'Failure';\n this.problems = problems;\n }\n /**\n * Returns a copy whose problems' contexts have the prefix removed, so a\n * caller can rethrow namespaced problems as its own.\n * @param {string} prefix\n * @returns {Failure}\n */\n dropping(prefix) {\n return new Failure(this.message, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n /**\n * Copies of the problems, each context losing the prefix where it starts with it.\n * @param {Problem[]} problems\n * @param {string} prefix\n * @returns {Problem[]}\n */\n static dropProblemsContext(problems, prefix) {\n return problems.map(({ type, context, reason, details }) => {\n const nctx = context?.startsWith(prefix) ? context.substring(prefix.length) : context;\n return { type, context: nctx, reason, details };\n });\n }\n}\n\nexport { Failure };\n","/**\n * Base64 encoding and decoding over ArrayBuffers, in the STANDARD and URL_SAFE\n * alphabets. The encoder never emits padding; the decoder accepts both padded\n * and unpadded input, and rejects anything it cannot decode faithfully instead\n * of corrupting silently.\n */\nclass Base64 {\n /** The RFC 4648 alphabet, with `+` and `/`. */\n static STANDARD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n /** The RFC 4648 url and filename safe alphabet, with `-` and `_`. */\n static URL_SAFE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n /**\n * @param {ArrayBuffer} arrayBuffer\n * @param {string} [dialect] one of Base64.STANDARD or Base64.URL_SAFE, URL_SAFE by default\n * @returns {string} the unpadded encoding\n */\n static encode(arrayBuffer, dialect) {\n const d = dialect || Base64.URL_SAFE;\n const len = arrayBuffer.byteLength;\n const view = new Uint8Array(arrayBuffer);\n let res = '';\n for (let i = 0; i < len; i += 3) {\n const v1 = d[view[i] >> 2];\n const v2 = d[((view[i] & 3) << 4) | (view[i + 1] >> 4)];\n const v3 = d[((view[i + 1] & 15) << 2) | (view[i + 2] >> 6)];\n const v4 = d[view[i + 2] & 63];\n res += v1 + v2 + v3 + v4;\n }\n if (len % 3 === 2) {\n res = res.substring(0, res.length - 1);\n } else if (len % 3 === 1) {\n res = res.substring(0, res.length - 2);\n }\n return res;\n }\n /**\n * @param {string} str padded or unpadded\n * @param {string} [dialect] one of Base64.STANDARD or Base64.URL_SAFE, URL_SAFE by default\n * @returns {ArrayBuffer}\n * @throws on padding anywhere but the tail or longer than two, on an\n * impossible length, and on a character outside the dialect\n */\n static decode(str, dialect) {\n const d = dialect || Base64.URL_SAFE;\n let end = str.length;\n while (end > 0 && str.charAt(end - 1) === '=') {\n --end;\n }\n const unpadded = str.substring(0, end);\n if (str.length - end > 2 || unpadded.includes('=') || (unpadded.length === 0 && str.length > 0)) {\n throw new Error('invalid padding');\n }\n if (unpadded.length % 4 === 1) {\n throw new Error('invalid length');\n }\n for (const c of unpadded) {\n if (d.indexOf(c) === -1) {\n throw new Error(`invalid character '${c}'`);\n }\n }\n const nbytes = Math.floor(unpadded.length * 0.75);\n const view = new Uint8Array(nbytes);\n\n let vi = 0;\n let si = 0;\n while (vi < nbytes) {\n const v1 = d.indexOf(unpadded.charAt(si++));\n const v2 = d.indexOf(unpadded.charAt(si++));\n const v3 = d.indexOf(unpadded.charAt(si++));\n const v4 = d.indexOf(unpadded.charAt(si++));\n view[vi++] = (v1 << 2) | (v2 >> 4);\n if (vi === nbytes) {\n break;\n }\n view[vi++] = ((v2 & 15) << 4) | (v3 >> 2);\n if (vi === nbytes) {\n break;\n }\n view[vi++] = ((v3 & 3) << 6) | v4;\n }\n\n return view.buffer;\n }\n}\n\n/**\n * Hex encoding and decoding over byte sequences, lowercase by default.\n */\nclass Hex {\n /**\n * @param {string} hex either case\n * @returns {Uint8Array}\n * @throws on an odd length or a character that is not a hex digit\n */\n static decode(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error('invalid length');\n }\n if (!/^[0-9a-fA-F]*$/.test(hex)) {\n throw new Error('invalid character');\n }\n const lenInBytes = hex.length / 2;\n return new Uint8Array(lenInBytes).map((e, i) => {\n const offset = i * 2;\n const octet = hex.substring(offset, offset + 2);\n return parseInt(octet, 16);\n });\n }\n /**\n * @param {Iterable<number>} bytes\n * @param {boolean} [upper] uppercase digits instead of lowercase\n * @returns {string} two digits per byte\n */\n static encode(bytes, upper) {\n return Array.from(bytes)\n .map((b) => b.toString(16))\n .map((b) => (upper ? b.toUpperCase() : b))\n .map((o) => o.padStart(2, '0'))\n .join('');\n }\n}\n\nexport { Base64, Hex };\n","import { Failure } from './failure.mjs';\n\n/** A parsed `Content-Type`: the type and subtype without the parameters, so a comparison is not defeated by a charset. */\nclass MediaType {\n #type;\n #subtype;\n constructor(type, subtype) {\n this.#type = type;\n this.#subtype = subtype;\n }\n /** @returns {string} `type/subtype`, lowercase */\n get normalized() {\n return `${this.#type}/${this.#subtype}`;\n }\n /** @returns {string} */\n get type() {\n return this.#type;\n }\n /** @returns {string} */\n get subtype() {\n return this.#subtype;\n }\n /**\n * Parses a Content-Type header value into its type/subtype pair, dropping any parameter.\n * @param {string|null|undefined} v\n * @returns {MediaType} `unknown/unknown` for a missing or malformed value\n */\n static parse(v) {\n if (!v) {\n return new MediaType('unknown', 'unknown');\n }\n const [prefix, _] = v.split(';');\n const [ptype, psubtype] = prefix.trim().toLowerCase().split('/');\n if (!ptype || !psubtype) {\n return new MediaType('unknown', 'unknown');\n }\n return new MediaType(ptype, psubtype);\n }\n}\n\n/**\n * @typedef {Int8Array| Uint8Array| Uint8ClampedArray| Int16Array| Uint16Array| Int32Array| Uint32Array| Float32Array| Float64Array| BigInt64Array| BigUint64Array} TypedArray\n */\n/**\n * @typedef {object} HttpInterceptor\n * @property {(url: URL, init: RequestInit|undefined, chain: HttpInterceptorChain) => Promise<Response>} intercept\n */\n\n/**\n * A Failure from an http exchange, carrying the status that was served. Status\n * 0 means no response was served at all: the transport failed, or a body the\n * server did send could not be read.\n */\nclass HttpClientError extends Failure {\n /**\n * @param {string} message\n * @param {number} status\n * @param {{ type: string; context: string?; reason: string; details: any?; }[]} problems\n * @param {Error|undefined} [cause]\n */\n constructor(message, status, problems, cause) {\n super(message, problems, cause);\n this.name = 'HttpClientError';\n this.status = status;\n }\n /**\n * Returns a copy whose problems' contexts have the prefix removed, keeping\n * this error's status.\n * @param {string} prefix\n * @returns {HttpClientError}\n */\n dropping(prefix) {\n return new HttpClientError(this.message, this.status, Failure.dropProblemsContext(this.problems, prefix), this);\n }\n /**\n * A problem with no context and no details.\n * @param {string} type\n * @param {string} reason\n * @returns {{ type: string; context: null; reason: string; details: null; }}\n */\n static problem(type, reason) {\n return { type, context: null, reason, details: null };\n }\n /**\n * A failure with status 0 and one problem of the given type, whose reason is\n * the cause's message.\n * @param {string} type\n * @param {any} cause\n * @returns {HttpClientError}\n */\n static of(type, cause) {\n const reason = String(cause?.message ?? cause ?? 'unknown failure');\n return new HttpClientError(reason, 0, [HttpClientError.problem(type, reason)], cause);\n }\n /**\n * The failure an error response stands for, keeping its status. An\n * `application/failures+json` body is the problems list; an\n * `application/problem+json` body contributes its `problems`, or one\n * GENERIC_PROBLEM made of its title and detail. Any other body is one\n * GENERIC_PROBLEM carrying the body text. A json body that does not decode,\n * or decodes to the wrong shape, and a body that cannot be read at all,\n * each become one GENERIC_PROBLEM saying so.\n * @param {Response} response consumed\n * @returns {Promise<HttpClientError>}\n */\n static async fromResponse(response) {\n switch (MediaType.parse(response.headers.get('Content-Type')).normalized) {\n case 'application/failures+json': {\n const data = await response.json().catch(() => HttpClientError.#unreadable);\n if (data === HttpClientError.#unreadable) {\n return HttpClientError.#undecodable(response);\n }\n if (!Array.isArray(data)) {\n return HttpClientError.#undecodable(response, 'as a failures array');\n }\n const message = `${response.status} ${response.statusText}: ${data.length} failures`;\n return new HttpClientError(message, response.status, data);\n }\n case 'application/problem+json': {\n const data = await response.json().catch(() => HttpClientError.#unreadable);\n if (data === HttpClientError.#unreadable) {\n return HttpClientError.#undecodable(response);\n }\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\n return HttpClientError.#undecodable(response, 'as a problem object');\n }\n const message = `${response.status} ${response.statusText}: ${data.title} ${data.detail}`;\n return new HttpClientError(\n message,\n response.status,\n data.problems || [HttpClientError.problem('GENERIC_PROBLEM', message)],\n );\n }\n default: {\n return HttpClientError.#generic(response);\n }\n }\n }\n static #unreadable = Symbol('unreadable body');\n /**\n * @param {Response} response\n * @param {string} [as] what the body does not decode as\n */\n static #undecodable(response, as = 'as json') {\n const mediaType = MediaType.parse(response.headers.get('Content-Type')).normalized;\n const message = `${response.status} ${response.statusText}: the ${mediaType} body does not decode ${as}`;\n return new HttpClientError(message, response.status, [HttpClientError.problem('GENERIC_PROBLEM', message)]);\n }\n static async #generic(response) {\n const text = await response.text().catch(() => null);\n const message =\n text === null\n ? `${response.status} ${response.statusText}: the body could not be read`\n : `${response.status} ${response.statusText}: ${text}`;\n return new HttpClientError(message, response.status, [HttpClientError.problem('GENERIC_PROBLEM', message)]);\n }\n}\n\nconst metaContent = (name) =>\n globalThis.document?.querySelector(`meta[name=\"${name}\"]`)?.getAttribute('content') ?? undefined;\n\n/**\n * Sends the csrf header named by the page's `_csrf_header` meta, with the token\n * from `_csrf`. Both are read per request, so metas replaced after the client\n * was built are honoured, and the header is sent to the page's own origin only.\n * @implements {HttpInterceptor}\n */\nclass CsrfTokenInterceptor {\n async intercept(url, request, chain) {\n if (url.origin !== (globalThis.window?.location?.origin ?? url.origin)) {\n return await chain.proceed(url, request);\n }\n const csrfHeader = metaContent('_csrf_header');\n const csrfToken = metaContent('_csrf');\n if (csrfHeader && csrfToken) {\n request.headers.set(csrfHeader, csrfToken);\n }\n return await chain.proceed(url, request);\n }\n}\n/**\n * Navigates to a login url when a response comes back 401. The promise it\n * returns never settles, so callers keep waiting while the page unloads\n * instead of showing a failure; where the navigation is blocked, as by a\n * beforeunload prompt, they stay pending until the page leaves.\n * @implements {HttpInterceptor}\n */\nclass RedirectOnUnauthorizedInterceptor {\n #redirectUri;\n /**\n * @param {string} redirectUri\n */\n constructor(redirectUri) {\n this.#redirectUri = redirectUri;\n }\n async intercept(url, request, chain) {\n const response = await chain.proceed(url, request);\n if (response.status === 401) {\n window.location.href = this.#redirectUri;\n return new Promise(() => {});\n }\n return response;\n }\n}\n\n/** Collects the interceptors an HttpClient will run, in the order they are added. */\nclass HttpClientBuilder {\n /**\n * @type {HttpInterceptor[]}\n */\n #interceptors;\n constructor() {\n this.#interceptors = [];\n }\n /**\n * Adds the CsrfTokenInterceptor.\n * @returns {HttpClientBuilder} this builder\n */\n withCsrfToken() {\n this.#interceptors.push(new CsrfTokenInterceptor());\n return this;\n }\n /**\n * Adds the RedirectOnUnauthorizedInterceptor.\n * @param {string} redirectUri where a 401 navigates to\n * @returns {HttpClientBuilder} this builder\n */\n withRedirectOnUnauthorized(redirectUri) {\n this.#interceptors.push(new RedirectOnUnauthorizedInterceptor(redirectUri));\n return this;\n }\n /**\n * Adds interceptors, run in the order given after the ones added before.\n * @param {...HttpInterceptor} interceptors\n * @returns {HttpClientBuilder} this builder\n */\n withInterceptors(...interceptors) {\n this.#interceptors.push(...interceptors);\n return this;\n }\n /** @returns {HttpClient} a client running the interceptors added so far */\n build() {\n return new HttpClient(this.#interceptors);\n }\n}\n\n/**\n * The last interceptor in every chain, performing the request with fetch. A\n * fetch rejection becomes an HttpClientError with a CONNECTION_PROBLEM.\n * @implements {HttpInterceptor}\n */\nclass HttpCall {\n async intercept(url, request, chain) {\n try {\n return await fetch(url, request);\n } catch (ex) {\n throw HttpClientError.of('CONNECTION_PROBLEM', ex);\n }\n }\n}\n\n/** One request's position in the interceptor list: `proceed` runs the next interceptor, the last of which performs the request. */\nclass HttpInterceptorChain {\n #interceptors;\n #current;\n /**\n * @param {HttpInterceptor[]} interceptors\n * @param {number} current the index of the interceptor `proceed` runs\n */\n constructor(interceptors, current) {\n this.#interceptors = interceptors;\n this.#current = current;\n }\n /**\n * Runs the next interceptor.\n * @param {URL} url\n * @param {RequestInit} request\n * @returns {Promise<Response>}\n */\n async proceed(url, request) {\n const interceptor = this.#interceptors[this.#current];\n return await interceptor.intercept(\n url,\n request,\n new HttpInterceptorChain(this.#interceptors, this.#current + 1),\n );\n }\n}\n\n/**\n * Performs http requests through a fixed list of interceptors. The verbs\n * return a request builder; `exchange` is the lower-level entry that returns\n * the Response itself without treating an error status as a failure.\n */\nclass HttpClient {\n #interceptors;\n /**\n * Creates a builder for an HttpClient.\n * @returns {HttpClientBuilder} the client builder\n */\n static builder() {\n return new HttpClientBuilder();\n }\n /**\n * Creates an HttpClient.\n * @param {HttpInterceptor[]|undefined} interceptors - a list of interceptors to be registered for every request performed by the created client.\n */\n constructor(interceptors) {\n this.#interceptors = interceptors || [];\n }\n /**\n * Performs an HTTP exchange through the client's interceptors, then the\n * given ones.\n * @param {string} uri the request url, relative to the page's\n * @param {RequestInit|undefined} options fetch options\n * @param {HttpInterceptor[]|undefined} interceptors run for this exchange only\n * @returns {Promise<Response>} the response, whatever its status; rejecting\n * with an HttpClientError CONNECTION_PROBLEM when the transport fails, or\n * with what an interceptor throws\n */\n async exchange(uri, options, interceptors) {\n const is = [...this.#interceptors, ...(interceptors || []), new HttpCall()];\n const chain = new HttpInterceptorChain(is, 0);\n const url = new URL(new Request(uri).url);\n const request = { ...options, headers: new Headers(options?.headers) };\n return await chain.proceed(url, request);\n }\n /**\n * Starts a request with any method.\n * @param {string} method\n * @param {string} uri the request url, relative to the page's; a query and a fragment in it are kept\n * @returns {HttpRequestBuilder}\n */\n request(method, uri) {\n return HttpRequestBuilder.create(this, method, uri);\n }\n /**\n * Starts a GET request.\n * @param {string} uri the request url, relative to the page's; a query and a fragment in it are kept\n * @returns {HttpRequestBuilder}\n */\n get(uri) {\n return HttpRequestBuilder.create(this, 'GET', uri);\n }\n /**\n * Starts a HEAD request.\n * @param {string} uri the request url, relative to the page's; a query and a fragment in it are kept\n * @returns {HttpRequestBuilder}\n */\n head(uri) {\n return HttpRequestBuilder.create(this, 'HEAD', uri);\n }\n /**\n * Starts a POST request.\n * @param {string} uri the request url, relative to the page's; a query and a fragment in it are kept\n * @returns {HttpRequestBuilder}\n */\n post(uri) {\n return HttpRequestBuilder.create(this, 'POST', uri);\n }\n /**\n * Starts a PUT request.\n * @param {string} uri the request url, relative to the page's; a query and a fragment in it are kept\n * @returns {HttpRequestBuilder}\n */\n put(uri) {\n return HttpRequestBuilder.create(this, 'PUT', uri);\n }\n /**\n * Starts a PATCH request.\n * @param {string} uri the request url, relative to the page's; a query and a fragment in it are kept\n * @returns {HttpRequestBuilder}\n */\n patch(uri) {\n return HttpRequestBuilder.create(this, 'PATCH', uri);\n }\n /**\n * Starts a DELETE request.\n * @param {string} uri the request url, relative to the page's; a query and a fragment in it are kept\n * @returns {HttpRequestBuilder}\n */\n delete(uri) {\n return HttpRequestBuilder.create(this, 'DELETE', uri);\n }\n}\n\n/**\n * Reads the response body as the given type, wrapping a failed read as an UNMARSHALING_PROBLEM.\n * @param {Response} response\n * @param {'text'|'json'|'blob'|'arrayBuffer'} type\n * @returns {Promise<any>}\n */\nconst unmarshal = async (response, type) => {\n try {\n return await response[type]();\n } catch (ex) {\n throw HttpClientError.of('UNMARSHALING_PROBLEM', ex);\n }\n};\n\n/**\n * The entries of a headers or params initializer with nullish values kept as they are.\n * @param {any} source\n * @returns {Iterable<[string, any]>}\n */\nconst rawEntries = (source) => {\n if (source == null) {\n return [];\n }\n if (typeof source === 'string') {\n return new URLSearchParams(source);\n }\n if (typeof source[Symbol.iterator] === 'function') {\n return source;\n }\n return Object.entries(source);\n};\n\n/**\n * One request under construction: method, url, parameters, headers and body,\n * with a `fetch*` method per body type. Every configuration method returns the\n * builder, and a `fetch*` rejects with an HttpClientError for any status\n * outside 200-299.\n */\nclass HttpRequestBuilder {\n #client;\n #method;\n #uri;\n #params;\n #headers;\n #body;\n #options;\n #interceptors;\n #fragment;\n /**\n * A builder for the url: its query becomes the initial params, split at the\n * first `?`, and its fragment, from the first `#`, is kept for the final url.\n * @param {HttpClient} client\n * @param {string} method\n * @param {string} uri\n * @returns {HttpRequestBuilder}\n */\n static create(client, method, uri) {\n const hashIndex = uri.indexOf('#');\n const fragment = hashIndex === -1 ? '' : uri.slice(hashIndex);\n const withoutFragment = hashIndex === -1 ? uri : uri.slice(0, hashIndex);\n const queryIndex = withoutFragment.indexOf('?');\n return new HttpRequestBuilder(\n client,\n method,\n queryIndex === -1 ? withoutFragment : withoutFragment.slice(0, queryIndex),\n new URLSearchParams(queryIndex === -1 ? '' : withoutFragment.slice(queryIndex + 1)),\n new Headers(),\n undefined,\n {},\n [],\n fragment,\n );\n }\n /**\n * @param {HttpClient} client\n * @param {string} method\n * @param {string} uri the url without query and fragment\n * @param {URLSearchParams} params\n * @param {Headers} headers\n * @param {any} body\n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} options\n * @param {HttpInterceptor[]} interceptors\n * @param {string} [fragment]\n */\n constructor(client, method, uri, params, headers, body, options, interceptors, fragment = '') {\n this.#client = client;\n this.#method = method;\n this.#uri = uri;\n this.#params = params;\n this.#body = body;\n this.#headers = headers;\n this.#options = options;\n this.#interceptors = interceptors;\n this.#fragment = fragment;\n }\n /**\n * Sets each header, replacing a header of the same name; a null or undefined value removes it.\n * @param {HeadersInit|Record<string,string|null|undefined>} hs\n * @returns {HttpRequestBuilder} this builder\n */\n headers(hs) {\n for (const [k, v] of rawEntries(hs)) {\n this.header(k, v);\n }\n return this;\n }\n /**\n * Sets a header, replacing one of the same name; a null or undefined value removes it.\n * @param {string} k\n * @param {string|null|undefined} v\n * @returns {HttpRequestBuilder} this builder\n */\n header(k, v) {\n if (v == null) {\n this.#headers.delete(k);\n } else {\n this.#headers.set(k, v);\n }\n return this;\n }\n /**\n * Sets each query parameter in place, replacing a parameter of the same name; a null or undefined value removes it.\n * @param {URLSearchParams|Record<string,string|null|undefined>|string[][]|string} ps\n * @returns {HttpRequestBuilder} this builder\n */\n params(ps) {\n for (const [k, v] of rawEntries(ps)) {\n if (v == null) {\n this.#params.delete(k);\n } else {\n this.#params.set(k, v);\n }\n }\n return this;\n }\n /**\n * Sets a query parameter to the values given, as repeated entries moved to the end of the query; nullish values are skipped, and none left removes the parameter.\n * @param {string} k\n * @param {...string} vs\n * @returns {HttpRequestBuilder} this builder\n */\n param(k, ...vs) {\n this.#params.delete(k);\n for (const v of vs.filter((v) => v != null)) {\n this.#params.append(k, v);\n }\n return this;\n }\n /**\n * Sets the request body.\n * `Content-Type: multipart/form-data` header is automatically added by fetch when data is a FormData instance if not explicitly set.\n * `Content-Type: application/x-www-form-urlencoded` header is automatically added by fetch when data is an URLSearchParams instance if not explicitly set.\n * `Content-Type: text/plain` header is automatically added by fetch when data is a string instance if not explicitly set.\n * @param {string|ArrayBuffer|Blob|DataView|File|FormData|TypedArray|URLSearchParams|ReadableStream} data\n * @returns {HttpRequestBuilder} this builder\n */\n body(data) {\n this.#body = data;\n return this;\n }\n /**\n * Sets the request body that will be serialized as json. Calling this method adds the `Content-Type application/json` header for the request.\n * @param {any} body - the body to be serialized as json\n * @returns {HttpRequestBuilder} this builder\n */\n json(body) {\n if (body === undefined) {\n return this;\n }\n const serialized = JSON.stringify(body);\n this.#headers.set('Content-Type', 'application/json');\n this.#body = serialized;\n return this;\n }\n /**\n * Sets the request body as a FormData configured using the callback.\n * `Content-Type: multipart/form-data` header is automatically added by fetch if not explicitly set.\n * @param {(c: HttpMultipartRequestCustomizer) => void} callback\n * @returns {HttpRequestBuilder} this builder\n */\n multipart(callback) {\n const formData = new FormData();\n const builder = new HttpMultipartRequestCustomizer(formData);\n callback(builder);\n this.#body = formData;\n return this;\n }\n /**\n * Merges fetch options into the request's.\n * @param {Omit<RequestInit,\"headers\"|\"method\"|\"body\">} kvs\n * @returns {HttpRequestBuilder} this builder\n */\n options(kvs) {\n for (const [k, v] of Object.entries(kvs)) {\n this.#options[k] = v;\n }\n return this;\n }\n /**\n * Sets a fetch option for the request.\n * @param {keyof Omit<RequestInit,\"headers\"|\"method\"|\"body\">} k\n * @param {*} v\n * @returns {HttpRequestBuilder} this builder\n */\n option(k, v) {\n this.#options[k] = v;\n return this;\n }\n /**\n * Adds interceptors run for this request only, after the client's.\n * @param {HttpInterceptor[]} is\n * @returns {HttpRequestBuilder} this builder\n */\n interceptors(is) {\n for (const i of is) {\n this.#interceptors.push(i);\n }\n return this;\n }\n /**\n * Adds one interceptor run for this request only, after the client's.\n * @param {HttpInterceptor} i\n * @returns {HttpRequestBuilder} this builder\n */\n interceptor(i) {\n this.#interceptors.push(i);\n return this;\n }\n /**\n * Sends the request and answers the Response, whatever its status.\n * @returns {Promise<Response>} rejecting as `HttpClient.exchange` does\n */\n async exchange() {\n const query = this.#params.size ? `?${this.#params}` : '';\n const opts = {\n ...this.#options,\n headers: this.#headers,\n method: this.#method,\n body: this.#body,\n };\n return await this.#client.exchange(`${this.#uri}${query}${this.#fragment}`, opts, this.#interceptors);\n }\n /**\n * Sends the request and answers the Response when its status is 200-299.\n * Always rejects with an HttpClientError: `HttpClientError.fromResponse`\n * for an error status, CONNECTION_PROBLEM for a transport failure, and\n * UNEXPECTED_PROBLEM, carrying the error as its cause, for anything an\n * interceptor throws that is not already a Failure.\n * @returns {Promise<Response>}\n */\n async fetch() {\n try {\n const response = await this.exchange();\n if (!response.ok) {\n throw await HttpClientError.fromResponse(response);\n }\n return response;\n } catch (ex) {\n if (ex instanceof Failure) {\n throw ex;\n }\n throw HttpClientError.of('UNEXPECTED_PROBLEM', ex);\n }\n }\n /**\n * `fetch()`, then the body as text; a body that cannot be read rejects with UNMARSHALING_PROBLEM.\n * @returns {Promise<string>}\n */\n async fetchText() {\n const response = await this.fetch();\n return await unmarshal(response, 'text');\n }\n /**\n * `fetch()`, then the body parsed as json. A 204 yields null without reading\n * the body; any other body that does not parse rejects with UNMARSHALING_PROBLEM.\n * @returns {Promise<any>}\n */\n async fetchJson() {\n const response = await this.fetch();\n if (response.status === 204) {\n return null;\n }\n return await unmarshal(response, 'json');\n }\n /**\n * `fetch()`, then the body as a Blob; a body that cannot be read rejects with UNMARSHALING_PROBLEM.\n * @returns {Promise<Blob>}\n */\n async fetchBlob() {\n const response = await this.fetch();\n return await unmarshal(response, 'blob');\n }\n /**\n * `fetch()`, then the body as an ArrayBuffer; a body that cannot be read rejects with UNMARSHALING_PROBLEM.\n * @returns {Promise<ArrayBuffer>}\n */\n async fetchArrayBuffer() {\n const response = await this.fetch();\n return await unmarshal(response, 'arrayBuffer');\n }\n}\n\n/** Builds a multipart body: text fields, json parts, and single or repeated blobs. */\nclass HttpMultipartRequestCustomizer {\n #formData;\n /** @param {FormData} formData the body being built */\n constructor(formData) {\n this.#formData = formData;\n }\n /**\n * Appends a value to the FormData.\n * @param {string} name\n * @param {*} value\n * @returns {HttpMultipartRequestCustomizer} this builder\n */\n field(name, value) {\n this.#formData.append(name, value);\n return this;\n }\n /**\n * Appends a Blob to the FormData. Without a filename a File keeps its own\n * and any other Blob is named \"blob\".\n * @param {string} name\n * @param {Blob} value\n * @param {string} [filename]\n * @returns {HttpMultipartRequestCustomizer} this builder\n */\n blob(name, value, filename) {\n this.#formData.append(name, value, filename);\n return this;\n }\n /**\n * Appends each Blob under the same name, a File keeping its own filename and\n * any other Blob named \"blob\".\n * @param {string} name\n * @param {Blob[]} values\n * @returns {HttpMultipartRequestCustomizer} this builder\n */\n blobs(name, values) {\n for (const v of values) {\n this.#formData.append(name, v);\n }\n return this;\n }\n /**\n * Appends the value serialized as an `application/json` blob.\n * @param {string} name\n * @param {any} value\n * @param {string} [filename]\n * @returns {HttpMultipartRequestCustomizer} this builder\n */\n json(name, value, filename) {\n const blob = new Blob([JSON.stringify(value)], { type: 'application/json' });\n this.#formData.append(name, blob, filename);\n return this;\n }\n}\n\nexport {\n MediaType,\n HttpClient,\n HttpClientBuilder,\n HttpClientError,\n HttpInterceptorChain,\n HttpRequestBuilder,\n HttpMultipartRequestCustomizer,\n};\n","/**\n * One of the page's storages, holding values encoded as json. The functions\n * do not use `this`, so they keep working when destructured. Reads never\n * throw: where the storage cannot be reached at all (blocked cookies, some\n * embedded or private contexts) a read is a miss and a removal does nothing.\n * @typedef {Object} JsonStorage\n * @property {(k: string, v: any) => void} save stores `JSON.stringify(v)`\n * under `k`, throwing what the encoding or the storage throws: an unreachable\n * storage, a full quota, a value json cannot encode\n * @property {(k: string) => any} load the value stored under `k`, decoded;\n * undefined when there is none, when the storage cannot be reached, or when the\n * stored text is not json, in which case the entry is also removed\n * @property {(k: string) => void} remove removes the entry under `k`\n * @property {(k: string) => any} pop what `load` answers for `k`, removing the\n * entry\n */\n/**\n * One of the page's storages holding values beside a revision.\n * @typedef {Object} VersionedJsonStorage\n * @property {(key: string, revision: string, data: any) => void} save stores\n * `data` with `revision` under `key`, throwing what `JsonStorage.save` throws\n * @property {(key: string, revision: string) => any} load the data stored under\n * `key` when it was saved with this exact revision; otherwise undefined, and the\n * entry is removed, whether it holds another revision, holds no revision at\n * all, or is missing\n */\n/**\n * @param {() => globalThis.Storage} backing called on every operation, so an\n * unreachable storage fails that operation rather than the module's load\n * @returns {JsonStorage}\n */\nconst storage = (backing) => {\n const remove = (k) => {\n try {\n backing().removeItem(k);\n } catch {}\n };\n const load = (k) => {\n let got;\n try {\n got = backing().getItem(k);\n } catch {\n return undefined;\n }\n if (got === null) {\n return undefined;\n }\n try {\n return JSON.parse(got);\n } catch {\n remove(k);\n return undefined;\n }\n };\n const save = (k, v) => {\n backing().setItem(k, JSON.stringify(v));\n };\n const pop = (k) => {\n const decoded = load(k);\n remove(k);\n return decoded;\n };\n return { save, load, remove, pop };\n};\n\n/**\n * @param {JsonStorage} store\n * @returns {VersionedJsonStorage}\n */\nconst versioned = (store) => ({\n save(key, revision, data) {\n store.save(key, { revision, data });\n },\n load(key, revision) {\n const stored = store.load(key);\n if (stored == null || typeof stored !== 'object' || stored.revision !== revision) {\n store.remove(key);\n return undefined;\n }\n return stored.data;\n },\n});\n\n/** `localStorage`, holding json. */\nconst LocalStorage = storage(() => localStorage);\n/** `sessionStorage`, holding json. */\nconst SessionStorage = storage(() => sessionStorage);\n/** `localStorage`, holding json beside a revision. */\nconst VersionedLocalStorage = versioned(LocalStorage);\n/** `sessionStorage`, holding json beside a revision. */\nconst VersionedSessionStorage = versioned(SessionStorage);\n\nexport { LocalStorage, VersionedLocalStorage, SessionStorage, VersionedSessionStorage };\n","/**\n * @typedef {Object} AsyncExtension\n * @property {Promise<any>[]} promises one per `asyncOn` listener the event\n * reached, in the order they ran\n * @typedef {Event & { async?: AsyncExtension }} AsyncEvent\n */\n/**\n * Dispatching an event and waiting for what its listeners answer. A listener\n * registered through `asyncOn` attaches its promise to the event, and\n * `fireAsync` resolves once they have all settled: `broadcast` collects every\n * answer, `pipeline` allows at most one, `delegate` requires exactly one.\n */\nclass AsyncEvents {\n /**\n * Dispatches `evt` on `el` synchronously, then waits for the answers of the\n * `asyncOn` listeners it reached, on `el` or, for a bubbling event, on its\n * ancestors. Listeners added with a plain `addEventListener` run but are not\n * awaited. In `broadcast` mode, the default, it resolves with every answer\n * in the order the listeners ran, an empty array when none did. In\n * `pipeline` mode it accepts at most one listener and resolves with its\n * answer, or undefined when none ran. In `delegate` mode it requires exactly\n * one listener and resolves with its answer.\n * @param {HTMLElement} el the element to dispatch on\n * @param {AsyncEvent} evt the event to dispatch\n * @param {{mode?: 'broadcast' | 'pipeline' | 'delegate'}} [options]\n * @returns {Promise<any>} the answer or answers as the mode describes\n * @throws what the first answer to fail threw or rejected with; or an\n * Error naming the event and the mode when `pipeline` reached more than one\n * listener or `delegate` did not reach exactly one, in which case the\n * listeners have already run and their outcome is discarded. Both arrive as\n * the rejection of the returned promise.\n */\n static async fireAsync(el, evt, options) {\n el.dispatchEvent(evt);\n const promises = evt.async?.promises ?? [];\n const mode = options?.mode ?? 'broadcast';\n if ((mode === 'pipeline' && promises.length > 1) || (mode === 'delegate' && promises.length !== 1)) {\n Promise.all(promises).catch(() => {});\n throw new Error(\n mode === 'pipeline'\n ? `[AsyncEvents] Event \"${evt.type}\" is configured in 'pipeline' mode and expects at most one async listener, but ${promises.length} listeners were triggered on this element.`\n : `[AsyncEvents] Event \"${evt.type}\" is configured in 'delegate' mode and requires exactly one async listener, but ${promises.length} were registered.`,\n );\n }\n return mode === 'broadcast' ? Promise.all(promises) : Promise.resolve(promises[0]);\n }\n\n /**\n * Adds a listener whose answer `fireAsync` can await. When the event\n * reaches it, the listener attaches a promise to `evt.async.promises`,\n * creating the list when it is the first, then calls `fn` with the event;\n * the promise settles with what `fn` returns or throws, awaited when it is a\n * promise. The event is dispatched the usual way, so an event fired with a\n * plain `dispatchEvent` runs `fn` too, and nobody awaits its answer.\n * @param {HTMLElement} el the element to listen on\n * @param {string} type the event type\n * @param {(evt: any) => any} fn called with the event; its result is the answer\n * @param {AddEventListenerOptions} [options] passed to `addEventListener`\n * @returns {EventListener} the listener actually added, which `asyncOff` takes\n */\n static asyncOn(el, type, fn, options) {\n /** @type {(evt: Event) => Promise<void>} */\n const listener = async (event) => {\n const ae = /** @type {AsyncEvent} */ (event);\n if (!ae.async) {\n ae.async = { promises: [] };\n }\n const { promise, resolve, reject } = Promise.withResolvers();\n ae.async.promises.push(promise);\n try {\n resolve(await fn(ae));\n } catch (e) {\n reject(e);\n }\n };\n\n el.addEventListener(type, listener, options);\n return listener;\n }\n\n /**\n * Removes a listener added by `asyncOn`.\n * @param {HTMLElement} el the element it listens on\n * @param {string} type the event type it was added for\n * @param {EventListener} listener what `asyncOn` returned, not the `fn` given to it\n * @param {EventListenerOptions} [options] passed to `removeEventListener`\n * @returns {void}\n */\n static asyncOff(el, type, listener, options) {\n el.removeEventListener(type, listener, options);\n }\n /**\n * Assigns `fireAsync(evt, options)`, `asyncOn(type, fn, options)` and\n * `asyncOff(type, listener, options)` onto each class's prototype, each\n * calling the static of the same name with the instance as the element.\n * Members of those names already on the prototype are overwritten.\n * @param {...Function} classes the classes to extend\n * @returns {void}\n */\n static mixInto(...classes) {\n for (const k of classes) {\n Object.assign(k.prototype, {\n /**\n * @this {HTMLElement}\n * @param {AsyncEvent} evt\n * @param {{mode?: 'broadcast' | 'pipeline' | 'delegate'}} [options]\n * @returns {Promise<any>}\n */\n async fireAsync(evt, options) {\n return await AsyncEvents.fireAsync(this, evt, options);\n },\n\n /**\n * @this {HTMLElement}\n * @param {string} type\n * @param {(evt: any) => any} fn\n * @param {AddEventListenerOptions} [options]\n * @returns {EventListener}\n */\n asyncOn(type, fn, options) {\n return AsyncEvents.asyncOn(this, type, fn, options);\n },\n\n /**\n * @this {HTMLElement}\n * @param {string} type\n * @param {EventListener} listener\n * @param {EventListenerOptions} [options]\n * @returns {void}\n */\n asyncOff(type, listener, options) {\n AsyncEvents.asyncOff(this, type, listener, options);\n },\n });\n }\n }\n}\n\nexport { AsyncEvents };\n","/**\n * Asks before the page is left, through the browser's own `beforeunload`\n * prompt.\n */\nclass PageLeave {\n /**\n * Asks before the page is left while `isDirty()` answers true, until\n * `signal` aborts. The browser words the prompt, and asks only once the\n * user has interacted with the page.\n * @param {() => boolean} isDirty\n * @param {AbortSignal} [signal]\n */\n static guard(isDirty, signal) {\n window.addEventListener(\n 'beforeunload',\n (evt) => {\n if (isDirty()) {\n evt.preventDefault();\n }\n },\n { signal },\n );\n }\n}\n\nexport { PageLeave };\n","/**\n * A hold on one generation of a `Claims`: `stale` turns true once a later\n * `take()` or `invalidate()` on it starts a newer generation.\n * @typedef {{ readonly stale: boolean }} Claim\n */\n/**\n * The generations of claims over one contended resource. Every take() starts a\n * new generation, superseding every claim before it, and a holder asks its\n * claim `stale` before painting chrome, storing state or throwing towards a\n * caller: a superseded outcome owns nothing. hold() joins the current\n * generation without superseding it (a fetch that any later reconfiguration\n * must detach), and invalidate() supersedes without claiming (a hide ending\n * every pending show). One Claims per contended resource: a component whose\n * dropdown, value labels and loader configuration contend separately holds one\n * each.\n */\nclass Claims {\n #generation = 0;\n /**\n * Starts a new generation, superseding every earlier claim, and holds it.\n * @returns {Claim}\n */\n take() {\n ++this.#generation;\n return this.hold();\n }\n /**\n * Holds the current generation without superseding anything.\n * @returns {Claim}\n */\n hold() {\n const held = this.#generation;\n const claims = this;\n return {\n /** true once a later take() or invalidate() superseded this claim */\n get stale() {\n return held !== claims.#generation;\n },\n };\n }\n /**\n * Supersedes every claim without holding a new one.\n * @returns {void}\n */\n invalidate() {\n ++this.#generation;\n }\n}\n\nexport { Claims };\n","/**\n * Something that adds elements to the accessible description of the control it\n * owns, such as a field: `describedBy(el)` adds `el` to the control's\n * `aria-describedby` and answers whether it did.\n * @typedef {{ describedBy(el: HTMLElement): boolean }} Describable\n */\n\n/**\n * The nearest ancestor of `el` that has a `describedBy` method. Content\n * slotted inside a field does not write the control's `aria-describedby`\n * itself: once it has something to offer, it hands the element carrying the\n * words to the `describedBy` of the ancestor this answers.\n * @param {Element} el\n * @returns {(Element & Describable) | null} null when no ancestor has one\n */\nconst describable = (el) => {\n for (let at = el.parentElement; at; at = at.parentElement) {\n if (typeof (/** @type {any} */ (at).describedBy) === 'function') {\n return /** @type {any} */ (at);\n }\n }\n return null;\n};\n\nexport { describable };\n","/**\n * Sleeping, debouncing and throttling. `debounce` and `throttle` both return\n * the wrapped function together with an abort function, which cancels the call\n * pending and leaves the wrapped function working.\n */\nclass Timing {\n /**\n * @param {number} ms\n * @returns {Promise<void>} resolving after `ms` milliseconds\n */\n static sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n /**\n * Collapses a burst of calls into one call of `func`, a burst ending once\n * `timeoutMs` pass without a call. By default `func` is called at the end\n * of the burst with the arguments of its last call. With `immediate` it is\n * called at the first call of a burst, with that call's arguments, and not\n * at the end. Without `immediate`, a call the wrapped function receives\n * from inside `func` starts a new burst.\n * @param {number} timeoutMs\n * @param {(...args: any[]) => any} func\n * @param {{ immediate?: boolean }} [options]\n * @returns {[(...args: any[]) => void, () => void]} the wrapped function\n * and the abort function\n */\n static debounce(timeoutMs, func, options) {\n const immediate = options?.immediate ?? false;\n let tid = /** @type {number | null} */ (null);\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n const elapsed = performance.now() - previousTimestamp;\n if (timeoutMs > elapsed) {\n tid = setTimeout(later, timeoutMs - elapsed);\n return;\n }\n tid = null;\n if (!immediate) {\n func(...args);\n }\n if (tid === null) {\n args = [];\n }\n };\n\n const debounced = (...called) => {\n args = called;\n previousTimestamp = performance.now();\n if (tid === null) {\n tid = setTimeout(later, timeoutMs);\n if (immediate) {\n func(...args);\n }\n }\n };\n const abort = () => {\n clearTimeout(tid ?? undefined);\n tid = null;\n args = [];\n };\n return [debounced, abort];\n }\n /**\n * Calls `func` at most once per `timeoutMs`, always with the arguments of\n * the latest call. With `leading`, on by default, a call arriving once the\n * interval since the previous call of `func` has passed calls it at once;\n * without it, the first call only starts the interval. With `trailing`, on\n * by default, a call arriving inside the interval schedules `func` for the\n * interval's end; without it, such a call is dropped.\n * @param {number} timeoutMs\n * @param {(...args: any[]) => any} func\n * @param {{ leading?: boolean, trailing?: boolean }} [options]\n * @returns {[(...args: any[]) => void, () => void]} the wrapped function\n * and the abort function\n */\n static throttle(timeoutMs, func, options) {\n const leading = options?.leading ?? true;\n const trailing = options?.trailing ?? true;\n let tid = /** @type {number | null} */ (null);\n let args = [];\n let previousTimestamp = 0;\n\n const later = () => {\n previousTimestamp = leading ? performance.now() : 0;\n tid = null;\n func(...args);\n if (tid === null) {\n args = [];\n }\n };\n const throttled = (...called) => {\n const now = performance.now();\n if (!previousTimestamp && !leading) {\n previousTimestamp = now;\n }\n const remaining = previousTimestamp === 0 ? 0 : timeoutMs - (now - previousTimestamp);\n args = called;\n if (remaining <= 0 || remaining > timeoutMs) {\n if (tid !== null) {\n clearTimeout(tid);\n tid = null;\n }\n previousTimestamp = now;\n func(...args);\n if (tid === null) {\n args = [];\n }\n } else if (tid === null && trailing) {\n tid = setTimeout(later, remaining);\n }\n };\n const abort = () => {\n clearTimeout(tid ?? undefined);\n tid = null;\n args = [];\n };\n return [throttled, abort];\n }\n}\n\nexport { Timing };\n","/**\n * Moves values between a form's named controls and a nested object, and pins\n * problems onto the controls they name. Works on any native form, not only\n * the one inside a `ful-form`. Every method reads the controls through\n * `form.elements`, so a control in the subtree that belongs to another form\n * (a nested form, a `form` attribute pointing elsewhere) is never read,\n * written or marked.\n */\nclass Bindings {\n /**\n * Flattens a nested object into dotted keys, array indexes becoming numeric\n * segments (`a.0.b`). It does not descend below a key that `stops` names, so\n * with a field named `address` the whole object is kept under `address`,\n * while with one named `address.city` the leaf is kept under `address.city`.\n * A null value is kept as a leaf.\n * @param {{ [x: string]: any; }} obj\n * @param {string} prefix prepended to every key, `''` at the root\n * @param {Set<string>} stops the dotted keys to keep whole\n * @returns {{ [x: string]: any; }} a flat object keyed by dotted path\n */\n static flatten(obj, prefix, stops) {\n return Object.keys(obj).reduce((acc, k) => {\n const pre = prefix.length ? `${prefix}.${k}` : k;\n if (!stops.has(pre) && typeof obj[k] === 'object' && obj[k] !== null) {\n Object.assign(acc, Bindings.flatten(obj[k], pre, stops));\n } else {\n acc[pre] = obj[k];\n }\n return acc;\n }, {});\n }\n\n static #FORBIDDEN = new Set(['__proto__', 'prototype', 'constructor']);\n /**\n * Writes a value into an object at a dotted path, creating the intermediate\n * objects and arrays the path implies: a numeric segment makes its container\n * an array. Brackets are not parsed, so `a[0]` is a plain key.\n *\n * An undefined value declares the path without filling it: an entry already\n * there is kept, a missing one is set to null. A scalar or a null left on the\n * path by a shorter overlapping name (`a` written before `a.b`) is replaced\n * by a container, so the longer name wins whichever order they arrive in.\n * @param {any} result the object or array to write into\n * @param {string} path a dotted name such as `a.b` or `a.0.b`\n * @param {any} value\n * @returns {any} the root written into, to be used in place of `result`: a\n * new array replaces it when the first segment is numeric and `result` is\n * not an array\n * @throws {Error} when a segment is `__proto__`, `prototype` or `constructor`,\n * before anything is written\n */\n static providePath(result, path, value) {\n const keys = path.split('.').map((k) => (/^[0-9]+$/.test(k) ? +k : k));\n for (const key of keys) {\n if (Bindings.#FORBIDDEN.has(/** @type any */ (key))) {\n throw new Error(`unsupported name segment '${key}' in '${path}'`);\n }\n }\n let current = result ?? {};\n let previous = /** @type {any} */ (null);\n for (let i = 0; ; ++i) {\n const ckey = keys[i];\n const pkey = keys[i - 1];\n if (Number.isInteger(ckey) && !Array.isArray(current)) {\n if (previous !== null) {\n previous[pkey] = current = [];\n } else {\n result = current = [];\n }\n }\n if (i === keys.length - 1) {\n current[ckey] = value !== undefined ? value : ckey in current ? current[ckey] : null;\n return result;\n }\n if (typeof current[ckey] !== 'object' || current[ckey] === null) {\n current[ckey] = {};\n }\n previous = current;\n current = current[ckey];\n }\n }\n /**\n * Reads one control's value by its kind. The kind is read from the `type`\n * attribute and the tag, so a ful element answers its own `value`.\n *\n * - a radio answers its `value` when checked and undefined otherwise\n * - a checkbox answers its `checked` state\n * - `data-ful-bind-type=\"boolean\"` decodes the value: a radio answers\n * whether its value is `'true'`, any other control answers null when\n * blank and whether its value is `'true'` otherwise\n * - a multiple select answers the array of its selected values\n * - a native input, select or textarea answers null when blank\n * - anything else answers its `value` unchanged\n * @param {Element & {dataset?: any} & {checked?: boolean} & {value?: any}} el\n * @returns {any} the value; undefined for an unchecked radio\n */\n static extract(el) {\n if (el.getAttribute('type') === 'radio') {\n if (!el.checked) {\n return undefined;\n }\n return el.dataset.fulBindType === 'boolean' ? el.value === 'true' : el.value;\n }\n if (el.getAttribute('type') === 'checkbox') {\n return el.checked;\n }\n if (el.dataset.fulBindType === 'boolean') {\n return !el.value ? null : el.value === 'true';\n }\n if (el.tagName === 'SELECT' && /** @type {HTMLSelectElement} */ (el).multiple) {\n return Array.from(/** @type {HTMLSelectElement} */ (el).selectedOptions).map((o) => o.value);\n }\n if (el.tagName === 'INPUT' || el.tagName === 'SELECT' || el.tagName === 'TEXTAREA') {\n return el.value === '' || el.value === undefined ? null : el.value;\n }\n return el.value;\n }\n\n /**\n * @param {Element & {type?: string}} el\n */\n static #submits(el) {\n return el.type === 'submit' || el.type === 'reset' || el.type === 'button';\n }\n /**\n * Reads the form's named controls into a nested object, the dotted names\n * deciding its shape (see `providePath`) and each value read by `extract`.\n * Controls are read in document order, so of two overlapping names the\n * later one decides. A control is skipped when it has no `name`, when it\n * matches `:disabled` (its own `disabled` or a disabled fieldset's), or when\n * it is a submit, reset or plain button. The submitter is the exception to\n * both of the last two: it contributes its name and value even while\n * disabled.\n * @param {HTMLFormElement} form\n * @param {HTMLElement} [submitter] the button that submitted, when there is one\n * @returns {any} the nested values; an array when the first segment of a name is numeric\n * @throws {Error} when a name has a segment `providePath` refuses\n */\n static extractFrom(form, submitter) {\n let result = {};\n for (const el of form.elements) {\n if (!el.hasAttribute('name')) {\n continue;\n }\n if (Bindings.#submits(el) && el !== submitter) {\n continue;\n }\n if (el.matches(':disabled') && el !== submitter) {\n continue;\n }\n result = Bindings.providePath(\n result,\n /** @type {string} */ (el.getAttribute('name')),\n Bindings.extract(el),\n );\n }\n return result;\n }\n\n /**\n * Writes a value into one control, the inverse of `extract`.\n *\n * - a radio is checked when `raw` is not null and its `value` attribute\n * equals `String(raw)`, so a number or a boolean matches its text\n * - a checkbox takes `raw` as its `checked` state\n * - a multiple select selects the options whose value is in `raw`, compared\n * as text: an array selects each entry, a scalar selects one, null selects none\n * - anything else takes `raw` as its `value`\n * @param {Element & {dataset?: any} & {checked?: boolean} & {value?: any}} el\n * @param {any} raw\n */\n static mutate(el, raw) {\n if (el.getAttribute('type') === 'radio') {\n el.checked = raw != null && el.getAttribute('value') === String(raw);\n return;\n }\n if (el.getAttribute('type') === 'checkbox') {\n el.checked = raw;\n return;\n }\n if (el.tagName === 'SELECT' && /** @type {HTMLSelectElement} */ (el).multiple) {\n const values = Array.isArray(raw) ? raw.map(String) : raw == null ? [] : [String(raw)];\n Array.from(/** @type {HTMLSelectElement} */ (el).options).forEach((o) => {\n o.selected = values.includes(o.value);\n });\n return;\n }\n el.value = raw;\n }\n\n /**\n * Writes a nested object onto the form's named controls: the object is\n * flattened with the control names as stops (see `flatten`), and each key\n * is written by `mutate` into every control carrying exactly that name. A\n * key naming no control is ignored, and a control the object does not name\n * keeps its value.\n * @param {HTMLFormElement} form\n * @param {{ [x: string]: any; }} values\n */\n static mutateIn(form, values) {\n const named = Bindings.#named(form);\n for (const [flattenedKey, value] of Object.entries(Bindings.flatten(values, '', new Set(named.keys())))) {\n for (const el of named.get(flattenedKey) ?? []) {\n Bindings.mutate(el, value);\n }\n }\n }\n\n /**\n * @param {HTMLFormElement} form\n * @returns {Map<string, any[]>} the controls of `form.elements` grouped by name\n */\n static #named(form) {\n const named = new Map();\n for (const el of form.elements) {\n const name = el.getAttribute('name');\n if (!name) {\n continue;\n }\n const bucket = named.get(name);\n if (bucket) {\n bucket.push(el);\n } else {\n named.set(name, [el]);\n }\n }\n return named;\n }\n\n /**\n * Shows problems on the form, replacing whatever the previous call showed.\n *\n * Every named control's custom validity is first cleared. A problem whose\n * `type` is `FIELD_ERROR` or `INVALID_FORMAT` and whose `context` is not\n * empty is pinned to a control: brackets in the context are turned into\n * dots (`users[0].name` becomes `users.0.name`), and the longest leading\n * part of it that names a control wins, so an exact field takes the problem\n * alone and a composite field named for a prefix catches the problems of its\n * subtree. Each control of that name gets `setCustomValidity(reason, rest)`,\n * `rest` being the remainder of the path (`''` on an exact match) that a\n * composite can use to route the problem to an inner control.\n *\n * Every other problem, and a field problem naming no control, is shown in\n * each `ful-errors` banner of the form: the banner gets `role=\"alert\"`, is\n * revealed and holds the reasons one per line. With no such problem the\n * banner is emptied and hidden.\n *\n * Each `ful-field-error` of the form gets `aria-live=\"off\"` when\n * `scrollOnError` is set, since focusing the field announces its error, and\n * `aria-live=\"polite\"` otherwise. With `scrollOnError` and at least one\n * problem, the topmost `:invalid` control is focused.\n *\n * A banner or `ful-field-error` belongs to the nearest enclosing form, so\n * those of a nested form are left alone.\n * @param {HTMLFormElement} form\n * @param {{ type: string; context?: string | null; reason: string; }[]} es the problems, as an httpc `Failure` carries them\n * @param {boolean} scrollOnError\n */\n static errors(form, es, scrollOnError) {\n const ofForm = (el) => el.closest('form') === form;\n Array.from(form.querySelectorAll('ful-field-error'))\n .filter(ofForm)\n .forEach((el) => {\n el.setAttribute('aria-live', scrollOnError ? 'off' : 'polite');\n });\n const pinned = (e) => (e.type === 'FIELD_ERROR' || e.type === 'INVALID_FORMAT') && e.context;\n const fieldErrors = es.filter(pinned);\n const globalErrors = es.filter((e) => !pinned(e));\n const named = Bindings.#named(form);\n for (const targets of named.values()) {\n targets.forEach((el) => {\n el.setCustomValidity?.('');\n });\n }\n const unmatched = [];\n fieldErrors.forEach((e) => {\n const name = /** @type {string} */ (e.context).replace(/\\[/g, '.').replace(/\\]\\./g, '.').replace(/\\]/g, '');\n const parts = name.split('.');\n for (let i = parts.length; i !== 0; --i) {\n const prefix = parts.slice(0, i).join('.');\n const targets = named.get(prefix) ?? [];\n if (targets.length === 0) {\n continue;\n }\n const context = parts.slice(i).join('.');\n targets.forEach((input) => {\n input.setCustomValidity?.(e.reason, context);\n });\n return;\n }\n unmatched.push(e);\n });\n const bannered = [...globalErrors, ...unmatched];\n form.querySelectorAll('ful-errors').forEach((el) => {\n if (!ofForm(el)) {\n return;\n }\n const hel = /** @type {HTMLElement} */ (el);\n el.setAttribute('role', 'alert');\n if (bannered.length === 0) {\n el.replaceChildren();\n el.setAttribute('hidden', '');\n return;\n }\n el.removeAttribute('hidden');\n hel.innerText = bannered.map((e) => e.reason).join('\\n');\n });\n if (es.length === 0 || !scrollOnError) {\n return;\n }\n /** @type {HTMLElement[]} */ (Array.from(form.elements))\n .filter((el) => el.matches(':invalid'))\n .sort((a, b) => a.getBoundingClientRect().y - b.getBoundingClientRect().y)[0]\n ?.focus();\n }\n}\n\nexport { Bindings };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\n\n/**\n * The base of every form-associated ful field: a form-associated custom element\n * carrying the validity protocol, the field error live region, focus\n * delegation, the label chrome and the disabled, readonly and required claims.\n *\n * A subclass owns its template, its value semantics and its change events. It\n * implements `_build(conf)`, which builds its dom and returns the pieces the\n * base drives (see `_build`), and the `value` pair. The base wires the pieces,\n * mounts the fragment and applies the declared state. Nothing in the base is\n * there to be called from a subclass's build.\n *\n * The claim setters, the validity protocol and the aria wiring all act on the\n * pieces, so a field with no native control returns a focusable piece of its\n * own chrome as the control. The claim getters and `focus()` are the only\n * members that tolerate a not yet rendered element; the other members need the\n * pieces and so work only after the render.\n *\n * The inner controls carry `form=\"\"`, so the host is the only element the form\n * sees. Enter pressed in an inner `<input>` of any type but `file`, `button`,\n * `submit`, `reset` and `image` submits the field's form through\n * `_requestSubmit()`, as Enter in a native input would. It does not when a\n * listener inside the field already called `preventDefault()` on the keydown,\n * while an input method is composing, or when the input is still associated\n * with the form itself and so submits on its own.\n */\nclass Field extends ParsedElement {\n static formAssociated = true;\n /**\n * The claim attributes and the value, observed so that every field,\n * including a custom one that never lists them, keeps them live after the\n * upgrade. A subclass's own `static observed` adds to this list. The value\n * is read with the string mapper; a field with another vocabulary redeclares\n * it with its own (`value:bool`, `value:csv`, `value:json`).\n * @type {string[]}\n */\n static observed = ['disabled:presence', 'readonly:presence', 'required:presence', 'value'];\n /**\n * The role set on the element internals at construction. A field whose host\n * is the widget itself overrides it, as `RadioGroup` does with `'radiogroup'`.\n * @type {string}\n */\n static ROLE = 'presentation';\n #control;\n #pendingFocus = /** @type {FocusOptions | null} */ (null);\n #described;\n #descriptions = [];\n #errorId = null;\n #fieldError;\n #claims;\n #announces;\n #also = [];\n /** Sets the internals' role from the subclass's `static ROLE`. */\n constructor() {\n super();\n this.internals.role = /** @type {typeof Field} */ (this.constructor).ROLE;\n }\n #mirrors() {\n return [this.#claims ?? this.#control, ...this.#also].filter((el) => el);\n }\n /**\n * @param {{fragment: any, control: any, error?: any, label?: any, described?: any,\n * claims?: any, announces?: any, freeze?: any, also?: any[]}} pieces\n */\n #wire({\n fragment,\n control,\n error,\n label = null,\n described = null,\n claims = null,\n announces = control,\n freeze = null,\n also = [],\n }) {\n this.#control = control;\n this.#fieldError = error;\n this.#claims = claims;\n this.#announces = announces;\n this.#also = also;\n if (freeze) {\n freeze.addEventListener(\n 'click',\n (evt) => {\n if (this.readonly) {\n evt.preventDefault();\n }\n },\n true,\n );\n }\n this.#described = described ?? control;\n if (error) {\n error.id = error.id || Attributes.uid('ful-field-error');\n this.#errorId = error.id;\n }\n this.#describe();\n if (label) {\n Field.#name(this, label, control);\n }\n this.addEventListener('keydown', (evt) => {\n if (evt.key !== 'Enter' || evt.defaultPrevented || evt.isComposing) {\n return;\n }\n const target = /** @type {HTMLInputElement} */ (evt.target);\n if (target.form === this.form || !Field.#submitsOnEnter(target)) {\n return;\n }\n this._requestSubmit();\n });\n this.replaceChildren(fragment);\n if (this.#pendingFocus !== null) {\n const options = this.#pendingFocus;\n this.#pendingFocus = null;\n control.focus(options);\n }\n }\n /**\n * @param {EventTarget} el\n * @returns {boolean} whether Enter in `el` submits a form on the platform\n */\n static #submitsOnEnter(el) {\n return el instanceof HTMLInputElement && !['file', 'button', 'submit', 'reset', 'image'].includes(el.type);\n }\n /**\n * Adds an element to the accessible description of the field and answers\n * whether the field took it.\n *\n * The field takes a description before its own render as readily as after:\n * one handed over early is written as soon as the field has rendered, so the\n * caller does not need to know which of the two upgraded first. The element\n * is given an id (`ful-described-*`) when it has none, is added once however\n * often it is offered, and is referenced from the `aria-describedby`\n * attribute of the `described` piece (the control by default). The\n * descriptions come in the order they were offered, the error region always\n * last.\n *\n * Pass the element that carries the words rather than a wrapper around it:\n * a hidden element is part of a description only where it is referenced\n * directly, so a popover that is closed until opened must be passed itself.\n *\n * This is the field's half of the description protocol; `describable` in\n * `ful/descriptions.mjs` is the half the content uses to find the field.\n * @param {HTMLElement | null | undefined} el\n * @returns {boolean} false only when `el` is missing\n */\n describedBy(el) {\n if (!el) {\n return false;\n }\n if (!el.id) {\n el.id = Attributes.uid('ful-described');\n }\n if (!this.#descriptions.includes(el.id)) {\n this.#descriptions.push(el.id);\n }\n this.#describe();\n return true;\n }\n #describe() {\n if (!this.#described) {\n return;\n }\n const ids = [...this.#descriptions, this.#errorId].filter((id) => id);\n if (ids.length) {\n this.#described.setAttribute('aria-describedby', ids.join(' '));\n }\n }\n /**\n * Moves the focus to the `control` piece. Asked before the render, the\n * request is kept (the last one wins) and applied once the control is\n * mounted.\n * @param {FocusOptions} [options]\n */\n focus(options) {\n if (this.#control) {\n this.#control.focus(options);\n return;\n }\n this.#pendingFocus = options ?? {};\n }\n /**\n * Clears or reports one validation problem. A message sets a custom error on\n * the element internals, which makes the host match `:invalid`, renders the\n * message into the `error` piece and sets `aria-invalid=\"true\"` on the\n * `announces` piece, or on the `control` when the field announces nowhere.\n * An empty or missing message clears all three.\n *\n * Validation is the server's: the submit is sent regardless, and the form's\n * error mapping calls this with the problems that come back. It calls the\n * field with the most specific name a problem's context reaches and passes\n * the rest of the path as `context`. The base ignores `context`; a composite\n * field owning a whole subtree overrides this to route the message to the\n * inner control the path names.\n *\n * Needs the render: before it there is no error region to write to.\n * @param {string} [error] the message, empty or missing to clear\n * @param {string} [context] the path below this field's name, '' on an exact match\n */\n setCustomValidity(error, context) {\n Attributes.set(this.#announces ?? this.#control, 'aria-invalid', error ? 'true' : null);\n if (!error) {\n this.internals.setValidity({});\n this.#fieldError.innerText = '';\n return;\n }\n this.internals.setValidity({ customError: true }, ' ');\n this.#fieldError.innerText = error;\n }\n /**\n * The form the platform associated the field with, as a native control's\n * own `form`.\n * @returns {HTMLFormElement | null} null outside a form\n */\n get form() {\n return this.internals.form;\n }\n /**\n * Submits the associated form with `requestSubmit`, so constraint validation\n * and the `submit` event run as for a user's submit. The submitter is the\n * first enabled `button` or `input` of type `submit` in the form whose own\n * `form` is that form; with none the form is submitted without one. Does\n * nothing outside a form.\n */\n _requestSubmit() {\n const form = this.form;\n if (!form) {\n return;\n }\n const candidates = /** @type {NodeListOf<HTMLButtonElement|HTMLInputElement>} */ (\n form.querySelectorAll('button:not(:disabled), input:not(:disabled)')\n );\n form.requestSubmit([...candidates].find((el) => el.type === 'submit' && el.form === form));\n }\n /**\n * Dispatches the field's `change` event on the host: bubbling, not\n * cancelable, with `{ value: this.value, ...extras }` as the detail. Call it\n * for a change the user made. Every field in the library announces through this method and\n * passes no `value` key in `extras`, so a listener can rely on\n * `el.value === evt.detail.value`. The extras are spread after `value`, so a\n * `value` key among them would replace it.\n * @param {Record<string, any>} [extras] further detail keys beside `value`\n */\n _notifyChange(extras = {}) {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { value: this.value, ...extras },\n }),\n );\n }\n static #LABELABLE = new Set(['BUTTON', 'INPUT', 'METER', 'OUTPUT', 'PROGRESS', 'SELECT', 'TEXTAREA']);\n /**\n * @param {Field} field\n * @param {HTMLElement} label\n * @param {HTMLElement} control\n */\n static #name(field, label, control) {\n const labelable =\n Field.#LABELABLE.has(control.tagName) && control.getAttribute('type') !== 'hidden';\n if (!labelable) {\n if (!label.id) {\n label.id = Attributes.uid('ful-label');\n }\n control.setAttribute('aria-labelledby', label.id);\n label.addEventListener('click', () => field.focus());\n return;\n }\n if (!control.id) {\n control.id = Attributes.uid('ful-control');\n }\n label.setAttribute('for', control.id);\n }\n /**\n * Whether the field's own chrome should act on a gesture. Badges, dropzones,\n * menus and labels are not form controls, so the platform does not disable\n * them: every handler on them asks this first. False while the host matches\n * `:disabled`, which covers a disabled `<fieldset>` ancestry as well as the\n * claim, or while the readonly claim holds.\n * @returns {boolean}\n */\n _interactive() {\n return !this.matches(':disabled') && !this.readonly;\n }\n /**\n * The field's value, `null` when empty. Every concrete field overrides the\n * pair with its own semantics; the form extraction, `values =` assignment,\n * the `change` detail and `formResetCallback` all go through it. The base\n * pair reads `undefined` and ignores writes.\n * @type {any}\n */\n get value() {\n return undefined;\n }\n set value(v) {}\n /**\n * Restores the declared value on a form reset, as a native control restores\n * its markup default: the current `value` attribute is decoded with the\n * element's own mapper and written through the `value` setter. A field whose\n * value is not attribute backed overrides this.\n */\n formResetCallback() {\n this.value = this.unmarshal('value', this.getAttribute('value'));\n }\n /**\n * The field's own disabled claim, which follows a native form control:\n *\n * - the `disabled` attribute on the host is the claim. Only the author writes\n * or removes it, in markup or through this property; the library never\n * claims on a form's or fieldset's behalf. A field declared disabled inside\n * a disabled `<fieldset>` stays disabled when the fieldset is re-enabled.\n * - the effective state is the claim or a disabled `<fieldset>` ancestry:\n * `:disabled` matches both, and a disabled field is left out of the\n * submitted values.\n * - the property reads the claim only: a field disabled by its ancestry reads\n * `false` while `matches(':disabled')` is true. Removing the claim inside a\n * disabled fieldset does not enable the field.\n * - writing it sets or removes the `disabled` attribute on the `claims`\n * piece (the control by default) and on every `also` control. The\n * ancestry is never written anywhere: the browser disables those controls\n * as descendants of the fieldset. A subclass setter calls super, then\n * reaches any further controls of its own.\n * @type {boolean}\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n set disabled(d) {\n this.reflectTo('disabled', d);\n for (const el of this.#mirrors()) {\n el.toggleAttribute('disabled', d);\n }\n }\n /**\n * The readonly claim, read from the host attribute. Writing it sets\n * `readOnly` on the `claims` piece (the control by default) and on every\n * `also` control, sets `aria-readonly` on the `announces` piece, and\n * reflects the attribute. A text control stays focusable and selectable\n * with only editing off. A field whose control has no usable native\n * `readOnly` names a `freeze` piece, whose clicks are cancelled while the\n * claim holds.\n * @type {boolean}\n */\n get readonly() {\n return this.hasAttribute('readonly');\n }\n set readonly(v) {\n for (const el of this.#mirrors()) {\n el.readOnly = v;\n }\n if (this.#announces) {\n Attributes.set(this.#announces, 'aria-readonly', v ? 'true' : null);\n }\n this.reflectTo('readonly', v);\n }\n /**\n * The required claim, read from the host attribute. Writing it sets\n * `aria-required` on the `announces` piece and reflects the attribute; no\n * native `required` is set, since validation is the server's.\n * @type {boolean}\n */\n get required() {\n return this.hasAttribute('required');\n }\n set required(d) {\n if (this.#announces) {\n Attributes.set(this.#announces, 'aria-required', d ? 'true' : null);\n }\n this.reflectTo('required', d);\n }\n /**\n * Calls `_build(conf)` and wires the pieces it answers. When `_build`\n * returns a promise the pieces are wired once it settles; a field that\n * builds synchronously renders synchronously.\n * @param {{ slots: Record<string, DocumentFragment> | undefined }} conf\n * @returns {void | Promise<void>}\n */\n render(conf) {\n const built = /** @type {any} */ (this._build(conf));\n if (built instanceof Promise) {\n return built.then((pieces) => this.#wire(pieces));\n }\n this.#wire(built);\n return undefined;\n }\n /**\n * Builds the field's dom and answers the pieces the base drives, or a\n * promise of them. The one method a concrete field implements beside its\n * value pair, and the only place its dom is created. A subclass extending\n * another field's build spreads the pieces it answered and overrides the\n * keys it owns.\n *\n * - `fragment` (required) replaces the host's children.\n * - `control` (required) is the focus target of `focus()`. By default it also\n * carries the description, `aria-invalid`, `aria-readonly`,\n * `aria-required`, and the mirrored `disabled` and `readOnly`.\n * - `error` (required) is the live region `setCustomValidity` writes into.\n * It is given an id (`ful-field-error-*`) when it has none and is always\n * the last entry of the description.\n * - `label` names the control. For a labelable control (`button`, `input`\n * other than hidden, `meter`, `output`, `progress`, `select`, `textarea`)\n * the control is given an id when it has none and the label's `for`\n * points at it, so a click on the label does what it does in a plain\n * form. For any other control the label is given an id, the control's\n * `aria-labelledby` points at it, and a click on the label calls `focus()`.\n * - `described` carries `aria-describedby` in place of the control: the\n * host, for a field with no single control to describe.\n * - `claims` receives the mirrored `disabled` and `readOnly` in place of the\n * control, for a wrapper such as a `<fieldset>` the field disables as a\n * whole. Focus and the aria stay on the control.\n * - `announces` carries `aria-readonly`, `aria-required` and `aria-invalid`\n * in place of the control: the host, where the widget role lives there.\n * `null` for a field whose control has no role that accepts\n * `aria-readonly` and `aria-required`; `aria-invalid` then goes on the\n * control.\n * - `freeze` is for a field with no usable native `readOnly`: a capturing\n * click listener on it cancels the default action of every click inside\n * it while the readonly claim holds. It stays focusable and in the\n * accessibility tree.\n * - `also` are further controls that mirror `disabled` and `readOnly`\n * beside the claim target.\n * @param {{ slots: Record<string, DocumentFragment> | undefined }} conf\n * @returns {any} the pieces, or a promise of them\n * @throws {Error} when the subclass does not implement it\n */\n _build(conf) {\n throw new Error(`${this.constructor.name} must implement _build`);\n }\n}\n\nexport { Field };\n","import { Attributes, Localization, ParsedElement, Rendering } from '../../ftl/index.mjs';\nimport { Failure } from '../../httpc/index.mjs';\nimport { Bindings } from './bindings.mjs';\nimport { AsyncEvents } from '../events/async.mjs';\nimport { PageLeave } from '../events/leave.mjs';\n\n/** Sends a form's request as a json body to a url, mapping the request and the response through the configured mappers. */\nclass RemoteJsonFormLoader {\n #http;\n #url;\n #method;\n #requestMapper;\n #responseMapper;\n /**\n * @param {{ request(method: string, url: string): { json(body: any): { fetch(): Promise<any> } } }} http the `http-client` component\n * @param {string} url\n * @param {string} method\n * @param {(value: any, form: Form) => any} requestMapper\n * @param {(value: any, form: Form) => any} responseMapper\n */\n constructor(http, url, method, requestMapper, responseMapper) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#requestMapper = requestMapper;\n this.#responseMapper = responseMapper;\n }\n /**\n * @param {any} values\n * @param {Form} form\n * @returns {any} what the request mapper returns\n */\n prepare(values, form) {\n return this.#requestMapper(values, form);\n }\n /**\n * @param {any} request\n * @param {Form} form\n * @returns {Promise<any>} what the client's `fetch()` resolves to: with the\n * library's client, the `Response` of a 2xx status, rejecting with an\n * `HttpClientError` (a `Failure`) otherwise\n */\n async submit(request, form) {\n return await this.#http.request(this.#method, this.#url).json(request).fetch();\n }\n /**\n * @param {any} response\n * @param {Form} form\n * @returns {any} what the response mapper returns\n */\n transform(response, form) {\n return this.#responseMapper(response, form);\n }\n}\n\n/** Submits a form without a request: the request mapper produces the result the response mapper then reads, for a form handled entirely on the page. */\nclass LocalFormLoader {\n #requestMapper;\n #responseMapper;\n /**\n * @param {(value: any, form: Form) => any} requestMapper\n * @param {(value: any, form: Form) => any} responseMapper\n */\n constructor(requestMapper, responseMapper) {\n this.#requestMapper = requestMapper;\n this.#responseMapper = responseMapper;\n }\n /**\n * @param {any} values\n * @param {Form} form\n * @returns {Promise<any>} what the request mapper returns or resolves to\n */\n async prepare(values, form) {\n return await this.#requestMapper(values, form);\n }\n /**\n * Sends nothing.\n * @param {any} request\n * @param {Form} form\n * @param {any} response what a `submit:requested` listener answered\n * @returns {Promise<any>} `response`, unchanged\n */\n async submit(request, form, response) {\n return response;\n }\n /**\n * @param {any} response\n * @param {Form} form\n * @returns {Promise<any>} what the response mapper returns or resolves to\n */\n async transform(response, form) {\n return await this.#responseMapper(response, form);\n }\n}\n\n/**\n * Builds the form's loader from its attributes: a local one when no action is\n * declared, a json post to it otherwise.\n *\n * A component registered under the `loader` attribute replaces this one and\n * must implement three methods, called in this order:\n *\n * - `prepare(values, form)` turns the extracted values into the request to send\n * - `submit(request, form, response)` performs it and returns the response. The\n * third argument is whatever a `submit:requested` listener already answered,\n * which is how a loader with nothing to send returns it unchanged\n * - `transform(response, form)` turns that response into the `response` of the\n * `submit:success` detail\n *\n * A rejection from any of the three is reported as a `submit:failure`.\n */\nclass FormLoader {\n /**\n * The `request-mapper` and `response-mapper` attributes name registry\n * components called as `(value, form)`; each defaults to the identity. A\n * remote loader sends through the `http-client` component, with the\n * `method` attribute or `POST`.\n * @param {Form} el the form submitting\n * @param {unknown} [conf] not read\n * @returns {LocalFormLoader | RemoteJsonFormLoader}\n */\n static create(el, conf) {\n const http = el.component('http-client');\n const requestMapper = el.declared('request-mapper') ? el.component(el.declared('request-mapper')) : (v) => v;\n const responseMapper = el.declared('response-mapper') ? el.component(el.declared('response-mapper')) : (v) => v;\n const url = el.declared('action');\n if (!url) {\n return new LocalFormLoader(requestMapper, responseMapper);\n }\n const method = el.declared('method') ?? 'POST';\n return new RemoteJsonFormLoader(http, url, method, requestMapper, responseMapper);\n }\n}\n\n/**\n * Moves its children into a native `<form novalidate>`, extracts their values\n * on submit and hands them to a loader, reporting problems through `errors`.\n * Being `novalidate`, the form submits whatever the validity of its fields:\n * the browser does not block a submit on a field still marked invalid.\n *\n * Attributes on the host starting with `form-` are forwarded, without the\n * prefix, to the native form. `autocomplete` is copied onto the native form as\n * well and stays on the host, the fields reading it from either.\n * `clear-invalid-on-change` clears the custom validity of a field of this form\n * when a `change` event bubbles from it; the field's form is read from its\n * `form` property, or from `internals.form` for a form-associated element\n * that has none. `scroll-on-error` is passed to `Bindings.errors` as\n * `scrollOnError`.\n *\n * A native submit, by a button or by Enter in a field, is stopped and runs\n * `submit` instead.\n *\n * `track-changes` keeps track of the edits not saved yet (see `dirty`), and\n * `guard-leave`, which implies it, asks before the page is left while there\n * are any.\n */\nclass Form extends ParsedElement {\n /** Read once at the upgrade: changing one afterwards has no effect. */\n static attributes = [\n 'action',\n 'method',\n 'loader',\n 'request-mapper',\n 'response-mapper',\n 'clear-invalid-on-change:presence',\n 'scroll-on-error:presence',\n 'autocomplete',\n 'track-changes:presence',\n 'guard-leave:presence',\n ];\n /** The native form holding the fields, created by the render. */\n form;\n /** Builds the native form and moves the element's children into it. */\n render() {\n const form = document.createElement('form');\n this.form = form;\n form.setAttribute('novalidate', '');\n Attributes.forward('form-', this, form);\n Attributes.set(form, 'autocomplete', this.declared('autocomplete'));\n form.replaceChildren(...this.childNodes);\n form.addEventListener('submit', async (e) => {\n e.preventDefault();\n e.stopPropagation();\n await this.submit(e.submitter ?? undefined);\n });\n this.addEventListener(\n 'click',\n (evt) => {\n const target = /** @type Element */ (evt.target);\n if (!target.closest?.('[aria-disabled=\"true\"]')) {\n return;\n }\n evt.preventDefault();\n evt.stopImmediatePropagation();\n },\n true,\n );\n if (this.declared('clear-invalid-on-change')) {\n this.addEventListener('change', (/** @type any */ evt) => {\n if ((evt.target.form ?? evt.target.internals?.form) !== this.form) {\n return;\n }\n evt.target.setCustomValidity?.('');\n });\n }\n this.replaceChildren(form);\n this.#tracking = this.declared('track-changes') || this.declared('guard-leave');\n if (!this.#tracking) {\n return;\n }\n this.addEventListener('input', (evt) => this.#touch(evt.target));\n this.addEventListener('change', (evt) => this.#touch(evt.target));\n this.addEventListener('focusin', (evt) => this.#focus(evt.target));\n Rendering.waitForChildren(this)\n .catch(() => undefined)\n .then(() => this.commit());\n this.#guard();\n }\n connectedCallback() {\n super.connectedCallback();\n if (this.#tracking) {\n this.#guard();\n }\n }\n disconnectedCallback() {\n this.#leave?.abort();\n this.#leave = null;\n }\n #submitting = false;\n /**\n * Runs the submit pipeline, with the spinner up for its whole length:\n *\n * 1. builds the loader: the component the `loader` attribute names\n * (`loaders:form` by default), called as `create(form)`\n * 2. extracts the values with `Bindings.extractFrom` and has the loader\n * `prepare` them into the request\n * 3. fires a cancelable `submit` with `{ submitter, values, request }`.\n * Cancelling it ends the submit there, reporting nothing and leaving the\n * problems shown; a listener may replace `values` or `request` on the detail\n * 4. clears the problems shown\n * 5. fires `submit:requested` through `AsyncEvents.fireAsync` in `pipeline`\n * mode: at most one async listener, whose answer is handed to the\n * loader's `submit` as its third argument. A listener may replace\n * `request` on the detail\n * 6. has the loader `submit` the request and `transform` the response\n * 7. under `track-changes`, commits the values extracted at step 2 (see\n * `commit`): an edit made while the submit was in flight stays unsaved\n * 8. fires `submit:success` with `{ submitter, values, request, response }`,\n * `response` being the transformed one\n *\n * Anything thrown from step 1 on, a missing loader or a throwing mapper\n * included, fires `submit:failure` with `{ submitter, values, request,\n * exception }` instead; the returned promise does not reject. A `Failure`\n * has its problems shown through `errors`, anything else is logged with\n * `console.warn`. The `values` of both outcome events are the extracted\n * ones, not a replacement a `submit` listener put on its detail.\n *\n * A call while a submit is in flight returns at once, doing nothing.\n * @param {HTMLElement} [submitter] the button that submitted, if any; it is\n * the only button whose name and value are submitted\n * @returns {Promise<void>} settling once the submit has finished, whatever its outcome\n */\n async submit(submitter) {\n if (this.#submitting) {\n return;\n }\n this.#submitting = true;\n this.spinner(true);\n let values;\n let request;\n try {\n const loader = this.component(this.declared('loader') ?? 'loaders:form').create(this);\n values = Bindings.extractFrom(this.form, submitter);\n const submitted = this.#tracking ? { saved: this.#snapshot(), upTo: this.#sequence } : null;\n request = await loader.prepare(values, this);\n const se = new CustomEvent('submit', {\n bubbles: true,\n cancelable: true,\n detail: { submitter, values, request },\n });\n if (!this.dispatchEvent(se)) {\n return;\n }\n this.errors = [];\n const sre = new CustomEvent('submit:requested', {\n bubbles: true,\n cancelable: false,\n detail: { submitter, values: se.detail.values, request: se.detail.request },\n });\n let response = await AsyncEvents.fireAsync(this, sre, { mode: 'pipeline' });\n request = sre.detail.request;\n\n response = await loader.submit(request, this, response);\n const mapped = await loader.transform(response, this);\n if (submitted) {\n this.#commitFrom(submitted.saved, submitted.upTo);\n }\n this.dispatchEvent(\n new CustomEvent('submit:success', {\n bubbles: true,\n cancelable: false,\n detail: { submitter, values, request, response: mapped },\n }),\n );\n } catch (e) {\n this.dispatchEvent(\n new CustomEvent('submit:failure', {\n bubbles: true,\n cancelable: false,\n detail: { submitter, values, request, exception: e },\n }),\n );\n if (e instanceof Failure) {\n this.errors = e.problems;\n } else {\n console.warn('failed to submit form', this, 'reason:', e);\n }\n } finally {\n this.#submitting = false;\n this.spinner(false);\n }\n }\n /**\n * Resets the native form, each field returning to its default value. Under\n * `track-changes` every control counts as edited: the form is dirty if the\n * defaults differ from what was last committed.\n */\n reset() {\n this.form.reset();\n if (!this.#tracking) {\n return;\n }\n for (const name of new Set([...this.#saved.keys(), ...this.#snapshot().keys()])) {\n this.#edits.set(name, ++this.#sequence);\n }\n this.#refresh();\n }\n /** name → the serialized values the last commit recorded */\n #saved = new Map();\n /** name → the serialized values when first focused, for a name the last commit did not see */\n #focused = new Map();\n /** name → the sequence number of its latest edit since the last commit */\n #edits = new Map();\n #sequence = 0;\n #wasDirty = false;\n #frame = 0;\n /** @type {AbortController|null} */\n #leave = null;\n #tracking = false;\n /**\n * Whether, under `track-changes`, a control the user edited since the last\n * commit holds a value other than the one committed. An edit is what the\n * controls report as one: an `input` or a `change` bubbling from a control\n * of this form (0019), so assigning `value`, a select's vocabulary dropping\n * a key or a section delivering its fields is not one, and an edit undone\n * is no longer dirty. A control the last commit did not see compares with\n * its value when it was first focused. Always false without\n * `track-changes`.\n *\n * While dirty, the host matches `:state(dirty)` and the submit buttons of\n * this form carry `data-ful-dirty`; a change of the state dispatches\n * `dirty:change` with `{ dirty }`. Both are refreshed at the next frame\n * after an edit, while the property is exact at any time.\n * @returns {boolean}\n */\n get dirty() {\n if (!this.#tracking) {\n return false;\n }\n for (const name of this.#edits.keys()) {\n const now = this.#valuesOf(name);\n if (!this.#saved.has(name) && now === '[]') {\n continue;\n }\n const was = this.#saved.get(name) ?? this.#focused.get(name);\n if (was !== now) {\n return true;\n }\n }\n return false;\n }\n /**\n * Records the values of the controls as saved, so that the form is no\n * longer dirty. A submit commits by itself on success, and the form\n * commits once its fields have rendered: a page calls this for a save of\n * its own, or after writing the values it loaded. Does nothing without\n * `track-changes`.\n */\n commit() {\n if (this.#tracking) {\n this.#commitFrom(this.#snapshot(), this.#sequence);\n }\n }\n /**\n * Counts a control as edited by the user, for a value the page writes on\n * the user's behalf: assigning `value` reports nothing, as 0019 wants.\n * @param {Element} el the control, or an element inside it\n */\n edited(el) {\n this.#touch(el);\n }\n /**\n * @param {Map<string, string>} saved\n * @param {number} upTo the sequence number of the latest edit the values include\n */\n #commitFrom(saved, upTo) {\n this.#saved = saved;\n for (const [name, sequence] of this.#edits) {\n if (sequence <= upTo) {\n this.#edits.delete(name);\n }\n }\n for (const name of this.#focused.keys()) {\n if (saved.has(name)) {\n this.#focused.delete(name);\n }\n }\n this.#refresh();\n }\n /**\n * The named control of this form `target` is or sits in, if any: a field's\n * inner control is unnamed or carries `form=\"\"`, a control of a form nested\n * in this one, like a table's filters, belongs to that form, and a\n * form-associated element with no `form` property answers its owner\n * through `internals.form`.\n * @param {any} target\n * @returns {string|null} its name\n */\n #nameOf(target) {\n for (let el = target; el && el !== this; el = el.parentElement) {\n if ((el.form ?? el.internals?.form) === this.form && el.hasAttribute('name')) {\n return el.getAttribute('name');\n }\n }\n return null;\n }\n /** @param {EventTarget|null} target */\n #touch(target) {\n if (!this.#tracking) {\n return;\n }\n const name = this.#nameOf(target);\n if (name === null) {\n return;\n }\n this.#edits.set(name, ++this.#sequence);\n if (this.#frame === 0) {\n this.#frame = requestAnimationFrame(() => this.#refresh());\n }\n }\n /** @param {EventTarget|null} target */\n #focus(target) {\n const name = this.#nameOf(target);\n if (name !== null && !this.#saved.has(name) && !this.#focused.has(name)) {\n this.#focused.set(name, this.#valuesOf(name));\n }\n }\n /**\n * The controls that contribute to the values, as `Bindings.extractFrom`\n * reads them, with no submitter.\n * @returns {any[]}\n */\n #contributing() {\n return Array.from(this.form.elements).filter(\n (el) =>\n el.hasAttribute('name') &&\n !['submit', 'reset', 'button'].includes(/** @type {any} */ (el).type) &&\n !el.matches(':disabled'),\n );\n }\n /** @returns {Map<string, string>} each name to its serialized values */\n #snapshot() {\n /** @type {Map<string, any[]>} */\n const values = new Map();\n for (const el of this.#contributing()) {\n const name = el.getAttribute('name');\n values.set(name, [...(values.get(name) ?? []), Bindings.extract(el)]);\n }\n return new Map(Array.from(values, ([name, vs]) => [name, JSON.stringify(vs)]));\n }\n /**\n * @param {string} name\n * @returns {string} the serialized values of the controls carrying it\n */\n #valuesOf(name) {\n return JSON.stringify(\n this.#contributing()\n .filter((el) => el.getAttribute('name') === name)\n .map((el) => Bindings.extract(el)),\n );\n }\n #refresh() {\n cancelAnimationFrame(this.#frame);\n this.#frame = 0;\n const dirty = this.dirty;\n this.querySelectorAll('button').forEach((el) => {\n const button = /** @type HTMLButtonElement */ (el);\n if (button.form === this.form && button.type === 'submit') {\n button.toggleAttribute('data-ful-dirty', dirty);\n }\n });\n if (dirty === this.#wasDirty) {\n return;\n }\n this.#wasDirty = dirty;\n if (dirty) {\n this.internals.states.add('dirty');\n } else {\n this.internals.states.delete('dirty');\n }\n this.dispatchEvent(\n new CustomEvent('dirty:change', {\n bubbles: true,\n cancelable: false,\n detail: { dirty },\n }),\n );\n }\n #guard() {\n if (!this.declared('guard-leave') || this.#leave) {\n return;\n }\n this.#leave = new AbortController();\n PageLeave.guard(() => this.dirty, this.#leave.signal);\n }\n #spinning = 0;\n /**\n * @param {HTMLElement} el\n */\n #announce(el) {\n Attributes.defaultValue(el, 'role', 'status');\n el.hidden = false;\n if (el.textContent.trim() !== '') {\n return;\n }\n const label = document.createElement('span');\n label.className = 'ful-sr-only';\n label.dataset.ref = 'spinner-label';\n el.append(label);\n label.textContent = Localization.of().t('spinner.loading');\n }\n /**\n * Marks the form busy or releases it. Calls nest: only the first\n * `spinner(true)` and the matching last `spinner(false)` act, so a caller's\n * own spin may wrap a submit.\n *\n * Busy, the host carries `aria-busy=\"true\"` and each `ful-spinner` of this\n * form is revealed; one without text of its own is given `role=\"status\"`\n * (unless it has a role) and a visually hidden localized `spinner.loading`\n * label. Each submit and reset button of this form is held off with\n * `aria-disabled=\"true\"`, keeping its focus, and a click on it is refused\n * ahead of any listener on the button. Holding the buttons off does not\n * stop a programmatic `submit`.\n *\n * Released, the spinners are hidden and lose the label they were given, and\n * each held button gets back the `aria-disabled` it had. A button that\n * joined the form while it was busy keeps its own state.\n * @param {boolean} spin\n */\n spinner(spin) {\n if (spin) {\n ++this.#spinning;\n if (this.#spinning !== 1) {\n return;\n }\n } else {\n this.#spinning = Math.max(0, this.#spinning - 1);\n if (this.#spinning !== 0) {\n return;\n }\n }\n Attributes.set(this, 'aria-busy', spin ? 'true' : null);\n this.querySelectorAll('ful-spinner').forEach((el) => {\n if (el.closest('form') !== this.form) {\n return;\n }\n const hel = /** @type HTMLElement */ (el);\n if (spin) {\n this.#announce(hel);\n return;\n }\n hel.hidden = true;\n hel.querySelector(':scope > [data-ref=spinner-label]')?.remove();\n });\n this.querySelectorAll('input,button').forEach((el) => {\n const hel = /** @type HTMLButtonElement|HTMLInputElement */ (el);\n if (hel.form !== this.form || (hel.type !== 'submit' && hel.type !== 'reset')) {\n return;\n }\n if (spin) {\n hel.dataset.wd = hel.getAttribute('aria-disabled') ?? '';\n hel.setAttribute('aria-disabled', 'true');\n } else {\n if (hel.dataset.wd === undefined) {\n return;\n }\n Attributes.set(hel, 'aria-disabled', hel.dataset.wd || null);\n delete hel.dataset.wd;\n }\n });\n }\n /**\n * Writes a nested object onto the fields of this form through\n * `Bindings.mutateIn`: fields the object does not name keep their values.\n * @param {{ [x: string]: any; }} vs\n */\n set values(vs) {\n Bindings.mutateIn(this.form, vs);\n }\n /**\n * The fields of this form read into a nested object by\n * `Bindings.extractFrom`, with no submitter, so no button contributes.\n * @returns {any}\n */\n get values() {\n return Bindings.extractFrom(this.form);\n }\n /**\n * Shows problems through `Bindings.errors`, replacing the ones shown\n * before: each is pinned to the field it names, and the rest go to the\n * form's `ful-errors` banners. An empty array clears them.\n * @param {{ type: string; context?: string | null; reason: string; }[]} es\n */\n set errors(es) {\n Bindings.errors(this.form, es, this.declared('scroll-on-error'));\n }\n}\n\nexport { FormLoader, Form };\n","import { Attributes, BoundedCache } from '../../ftl/index.mjs';\nimport { Field } from './field.mjs';\n\nconst patternCache = new BoundedCache(100);\nconst compiled = (attr, pattern) =>\n patternCache.getOrCompute(`${attr}:${pattern}`, () => {\n try {\n return new RegExp(pattern, 'g');\n } catch (/** @type any */ e) {\n console.warn(`invalid ${attr} attribute`, pattern, e);\n return null;\n }\n });\n\nconst inheritedAutocomplete = (el) => el.closest('form')?.getAttribute('autocomplete') ?? null;\n\nconst INPUT_MODES = { numeric: 'numeric', decimal: 'decimal' };\n\nconst SEGMENTED = new Set(['date', 'time', 'datetime-local', 'month', 'week']);\n\nconst signed = (v, digits) => (v.startsWith('-') ? '-' : '') + digits(v);\n\nconst NUMERIC_DIGITS = {\n numeric: (t) => t.replace(/\\D/g, ''),\n decimal: (t) => {\n const kept = t.replace(/[^\\d.,]/g, '');\n const at = kept.search(/[.,]/);\n return at === -1 ? kept : kept.slice(0, at + 1) + kept.slice(at + 1).replace(/[.,]/g, '');\n },\n};\n\nconst numericFilter = (type, unsigned) => {\n const digits = NUMERIC_DIGITS[type];\n if (!digits) {\n return null;\n }\n return unsigned ? digits : (v) => signed(v, digits);\n};\n\nconst filterOf = (el) => {\n const keep = el.declared('keep');\n const reject = el.declared('reject');\n if (keep !== null && reject !== null) {\n console.warn('a ful-input declares both keep and reject: keep is applied, reject is ignored', el);\n }\n if (keep !== null) {\n const re = compiled('keep', keep);\n return re && ((v) => (v.match(re) ?? []).join(''));\n }\n if (reject !== null) {\n const re = compiled('reject', reject);\n return re && ((v) => v.replace(re, ''));\n }\n return numericFilter(el._type(), el.declared('unsigned'));\n};\n\n/**\n * A labelled text input over any native input type, or a `<textarea>` under\n * `type=\"textarea\"`; the temporal inputs are its subclasses. The label is the\n * default slot, `info` follows it, and `before` and `after` are rendered as\n * affixes around the control. Every `input-*` attribute is forwarded onto the\n * control, after everything the field sets there, so it has the last word.\n *\n * `type`, `v-type`, `keep`, `reject`, `uppercase`, `trim`, `unsigned` and\n * `autocomplete` are configuration: read once at the upgrade, so a later write\n * to them changes nothing. `placeholder` stays live.\n *\n * - `type=\"numeric\"` and `type=\"decimal\"` render a text input carrying that\n * `inputmode`, so the native `min`, `max` and `step` do not apply. Typing is\n * filtered to digits and a leading minus; a decimal also keeps its first `.`\n * or `,` and drops any later one; `unsigned` drops the minus.\n * - `keep` and `reject` are regular expressions filtering what is typed:\n * `keep` leaves every match, concatenated, and `reject` removes every match.\n * Either replaces the type's own filter, and `keep` wins over `reject` with a\n * warning. A pattern that does not compile is warned about once and filters\n * nothing. The caret stays next to the same character when text before it\n * is removed.\n * - `autocomplete` is put on the control. Without one the field takes the\n * `autocomplete` attribute of the nearest enclosing `<form>`, which the\n * platform does not pass on because the control carries `form=\"\"`.\n * - `uppercase`, `trim` and `v-type` shape the value as it is read; see `value`.\n * - The control's native `change` is stopped and the field dispatches its own\n * once the user commits a new value, as a text input does. A date, time,\n * datetime-local, month or week control fires its native `change` while its\n * segments are typed, as soon as they make a valid value; for those the field\n * reports when the control is left or Enter is pressed, at once for a value\n * picked from the browser's picker, never with the dates a year passes\n * through while it is typed. A control left incomplete reads as `null`, as\n * the native one does.\n *\n * A subclass template may render more than one control, as the compare filters\n * render the two bounds of a range: the first is `_input`, the one the field is\n * named by, and every one of them gets the inputmode, `autocomplete`, the\n * `input-` passthrough, the keystroke filter, the placeholder and the `change`\n * reporting. The passthrough leaves `input-id` to the first alone, so no\n * two controls share an id.\n */\nclass Input extends Field {\n /** @type {string[]} */\n static observed = ['placeholder'];\n /** @type {string[]} */\n static attributes = [\n 'type',\n 'v-type',\n 'keep',\n 'reject',\n 'uppercase:presence',\n 'trim:presence',\n 'unsigned:presence',\n 'autocomplete',\n ];\n static slots = true;\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <input data-tpl-if=\"type != 'textarea'\" data-tpl-type=\"type\" placeholder=\" \" form=\"\">\n <textarea data-tpl-if=\"type == 'textarea'\" placeholder=\" \" form=\"\"></textarea>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n /**\n * The inner control, set by `_build`: the `<input>`, or the `<textarea>`\n * under `type=\"textarea\"`. A subclass reads and writes it for the\n * attributes it adds. Typed `any` so that a subclass can treat it as the\n * one of the two it renders.\n * @type {any}\n */\n _input;\n /** @type {(HTMLInputElement|HTMLTextAreaElement)[]} */\n #controls = [];\n /**\n * The type the field renders, which a subclass overrides to wrap another\n * native type. The base answers the declared `type`, else `number` under\n * `v-type=\"number\"`, else `text`. It is also what selects the keystroke\n * filter of `numeric` and `decimal` and the separator handling of `value`.\n * @returns {string}\n */\n _type() {\n return this.declared('type') ?? (this.declared('v-type') === 'number' ? 'number' : 'text');\n }\n /**\n * @param {{ slots: Record<string, DocumentFragment> | undefined }} conf\n * @returns {{fragment: DocumentFragment, control: any, error: Element | null, label: HTMLLabelElement | null}}\n */\n _build({ slots }) {\n const declared = this._type();\n const mode = INPUT_MODES[declared];\n const type = mode ? 'text' : declared;\n const fragment = this.template().withOverlay({ type, slots }).render();\n this.#controls = /** @type {(HTMLInputElement|HTMLTextAreaElement)[]} */ ([\n ...fragment.querySelectorAll(':is(ful-control-group, ful-control) > :is(input, textarea)'),\n ]);\n this._input = this.#controls[0];\n const autocomplete = this.declared('autocomplete') ?? inheritedAutocomplete(this);\n const strip = filterOf(this);\n for (const control of this.#controls) {\n this.#configure(control, mode, autocomplete, strip);\n }\n return {\n fragment,\n control: this._input,\n error: fragment.querySelector('ful-field-error'),\n label: fragment.querySelector('label'),\n };\n }\n /**\n * @param {HTMLInputElement|HTMLTextAreaElement} control\n * @param {string|undefined} mode the inputmode the type names\n * @param {string|null} autocomplete\n * @param {((text: string) => string)|null} strip the keystroke filter\n */\n #configure(control, mode, autocomplete, strip) {\n if (mode) {\n Attributes.set(control, 'inputmode', mode);\n }\n Attributes.set(control, 'autocomplete', autocomplete);\n const id = control.id;\n Attributes.forward('input-', this, control);\n if (control !== this._input) {\n Attributes.set(control, 'id', id || null);\n }\n this.#reportChanges(control);\n control.addEventListener('input', () => {\n if (!strip) {\n return;\n }\n const before = control.value;\n const after = strip(before);\n if (before === after) {\n return;\n }\n const start = control.selectionStart;\n control.value = after;\n if (start === null) {\n return;\n }\n const caret = strip(before.slice(0, start)).length;\n control.setSelectionRange(caret, caret);\n });\n }\n /** @param {HTMLInputElement|HTMLTextAreaElement} control */\n #reportChanges(control) {\n if (!SEGMENTED.has(control.type)) {\n control.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this._notifyChange();\n });\n return;\n }\n /** @type {string|null} */\n let committed = null;\n let typed = false;\n const commit = () => {\n typed = false;\n const now = JSON.stringify(this.value);\n if (now === committed) {\n return;\n }\n committed = now;\n this._notifyChange();\n };\n control.addEventListener('focus', () => {\n committed = JSON.stringify(this.value);\n });\n control.addEventListener('keydown', (/** @type any */ evt) => {\n if (evt.key === 'Enter' && !evt.isComposing) {\n commit();\n return;\n }\n typed = true;\n });\n control.addEventListener('blur', commit);\n control.addEventListener('change', (evt) => {\n evt.stopPropagation();\n if (!typed) {\n commit();\n }\n });\n }\n /**\n * The control's text, shaped in this order: upper cased under `uppercase`,\n * trimmed under `trim`, `null` when that leaves it empty, every `,` read as\n * `.` for `type=\"decimal\"`, and decoded to a number under\n * `v-type=\"number\"`, where text that does not decode is answered as it is.\n * Writing `null`, `undefined` or `''` empties the control; anything else is\n * written as its string, replacing whatever was being typed, as a native\n * control's value does. Answers a `string`, a `number` or `null`; typed\n * `any` because subclasses answer other values.\n * @type {any}\n */\n get value() {\n const uppercase = this.declared('uppercase');\n const trim = this.declared('trim');\n const v = this._input.value;\n const uppercased = uppercase ? v.toUpperCase() : v;\n const trimmed = trim ? uppercased.trim() : uppercased;\n if (trimmed === '') {\n return null;\n }\n const normalized = this._type() === 'decimal' ? trimmed.replaceAll(',', '.') : trimmed;\n if (this.declared('v-type') === 'number') {\n const n = Number(normalized);\n return Number.isNaN(n) ? normalized : n;\n }\n return normalized;\n }\n set value(value) {\n this._input.value = value === '' || value === undefined || value === null ? '' : `${value}`;\n }\n /**\n * The control's placeholder, `null` when there is none. The control always\n * carries one, a single space standing in for none, so `:placeholder-shown`\n * matches an empty control and a floating label can rely on it; the blank\n * one is neither answered here nor reflected onto the host.\n * @type {string | null}\n */\n get placeholder() {\n const v = this._input.getAttribute('placeholder');\n return v === ' ' ? null : v;\n }\n set placeholder(d) {\n for (const control of this.#controls) {\n Attributes.set(control, 'placeholder', d ?? ' ');\n }\n this.reflectTo('placeholder', d);\n }\n}\n\nexport { Input };\n","import { ParsedElement, Localization } from '../../ftl/index.mjs';\nimport { Input } from './input.mjs';\n\nconst blankAsNull = (v) => (v === '' ? null : v);\n\n/**\n * Formats the yyyy-mm-dd date in its content as a numeric date, in the locale\n * its `locale` attribute names, else the page's, else the platform default.\n * Blank content, or content that does not name a date, renders the `default`\n * attribute, or nothing without one.\n */\nclass LocalDate extends ParsedElement {\n static attributes = ['locale', 'default'];\n render() {\n const content = this.textContent.trim();\n const [y, m, d] = content.split('-').map(Number);\n const parsed = content === '' ? null : new Date(y, m - 1, d);\n if (parsed === null || Number.isNaN(parsed.getTime())) {\n this.replaceChildren(this.declared('default') ?? '');\n return;\n }\n const { date } = Localization.of({ locale: this.declared('locale') ?? undefined });\n this.replaceChildren(date(parsed, { year: 'numeric', month: 'numeric', day: 'numeric' }));\n }\n}\n\n/**\n * Formats the ISO instant in its content as a numeric date and 24 hour time\n * with seconds, in the page's timezone and in the locale chosen as ful-local-date\n * chooses it. Blank content, or content that does not name an instant, renders\n * the `default` attribute, or nothing without one. A date-only value is read as\n * local midnight of that day.\n */\nclass Instant extends ParsedElement {\n static attributes = ['locale', 'default'];\n render() {\n const content = this.textContent.trim();\n const parsed = content === '' ? null : new Date(Instant.isoToLocal(content));\n if (parsed === null || Number.isNaN(parsed.getTime())) {\n this.replaceChildren(this.declared('default') ?? '');\n return;\n }\n const { date } = Localization.of({ locale: this.declared('locale') ?? undefined });\n this.replaceChildren(\n date(parsed, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n hour12: false,\n }),\n );\n }\n static #parse(v) {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(v) ? new Date(`${v}T00:00:00`) : new Date(v);\n }\n /**\n * Converts an ISO instant to the `yyyy-mm-ddThh:mm:ss.sss` wall clock time\n * a datetime-local input takes, in the page's timezone. A date-only value is\n * read as local midnight of the day it names, not as UTC midnight.\n * @param {string} iso\n * @returns {string} with NaN fields for a value that does not parse\n */\n static isoToLocal(iso) {\n const d = Instant.#parse(iso);\n const pad = (n, v) => String(v).padStart(n, '0');\n const date = `${d.getFullYear()}-${pad(2, d.getMonth() + 1)}-${pad(2, d.getDate())}`;\n const time = `${pad(2, d.getHours())}:${pad(2, d.getMinutes())}:${pad(2, d.getSeconds())}.${pad(3, d.getMilliseconds())}`;\n return `${date}T${time}`;\n }\n /**\n * Converts a datetime-local wall clock time in the page's timezone to a UTC\n * ISO instant. A date-only value is read as local midnight of that day.\n * @param {string} local\n * @returns {string|null} null for a value that does not parse\n */\n static localToIso(local) {\n const d = Instant.#parse(local);\n return Number.isNaN(d.getTime()) ? null : d.toISOString();\n }\n}\n\n/**\n * A date input whose `min` and `max` accept a yyyy-mm-dd date, `now` for\n * today, or an offset from today such as `+1d`, `-2m` or `+1y` (days, months,\n * years). A month offset landing past the end of the target month takes its\n * last day. Anything else is passed to the input unchanged. The `step`\n * attribute is applied before `min` and `max`.\n */\nclass InputLocalDate extends Input {\n static observed = ['step', 'min', 'max'];\n _type() {\n return 'date';\n }\n /**\n * The resolved lower bound, a yyyy-mm-dd date or whatever the input was given.\n * @returns {string|null} null when unset\n */\n get min() {\n return blankAsNull(this._input.min);\n }\n /** @param {string|null} v a date, `now` or an offset; null or blank removes the bound */\n set min(v) {\n this._input.min = InputLocalDate.#fromIsoOrOffset(v);\n }\n /**\n * The resolved upper bound, a yyyy-mm-dd date or whatever the input was given.\n * @returns {string|null} null when unset\n */\n get max() {\n return blankAsNull(this._input.max);\n }\n /** @param {string|null} v a date, `now` or an offset; null or blank removes the bound */\n set max(v) {\n this._input.max = InputLocalDate.#fromIsoOrOffset(v);\n }\n /**\n * The input's native step, in days on a date input and in seconds on a time input.\n * @returns {string|null} null when unset\n */\n get step() {\n return blankAsNull(this._input.step);\n }\n /** @param {string|null} v */\n set step(v) {\n this._input.step = v ?? '';\n }\n static #fromIsoOrOffset(v) {\n if (!v) {\n return '';\n }\n const formatLocalDate = (date) =>\n new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString().split('T')[0];\n if (v === 'now') {\n return formatLocalDate(new Date());\n }\n const re = /^([+-])(\\d+)([dmy])$/;\n const match = re.exec(v);\n if (!match) {\n return v;\n }\n const sign = match[1] === '-' ? -1 : 1;\n const offset = +match[2];\n const r = new Date();\n r.setHours(0, 0, 0, 0);\n switch (match[3]) {\n case 'd':\n r.setDate(r.getDate() + offset * sign);\n break;\n case 'm': {\n const originalDay = r.getDate();\n r.setMonth(r.getMonth() + offset * sign);\n if (r.getDate() !== originalDay) {\n r.setDate(0);\n }\n break;\n }\n case 'y':\n r.setFullYear(r.getFullYear() + offset * sign);\n break;\n }\n return formatLocalDate(r);\n }\n}\n\n/**\n * A time input whose `min` and `max` accept a hh:mm time, `now`, or an offset\n * from now such as `+2h` or `-30m` (hours, minutes: `m` is minutes here, not\n * months), wrapping around midnight. A bound resolved from `now` or an offset\n * is floored to the `step` grid (60 seconds when unset), so that the values\n * on the grid stay valid, and carries seconds only when the step is not whole\n * minutes. A literal bound, and anything else, is passed to the input unchanged.\n */\nclass InputLocalTime extends InputLocalDate {\n _type() {\n return 'time';\n }\n /**\n * The resolved lower bound, a time or whatever the input was given.\n * @returns {string|null} null when unset\n */\n get min() {\n return blankAsNull(this._input.min);\n }\n /** @param {string|null} v a time, `now` or an offset; null or blank removes the bound */\n set min(v) {\n this._input.min = this.#fromNowOrOffset(v);\n }\n /**\n * The resolved upper bound, a time or whatever the input was given.\n * @returns {string|null} null when unset\n */\n get max() {\n return blankAsNull(this._input.max);\n }\n /** @param {string|null} v a time, `now` or an offset; null or blank removes the bound */\n set max(v) {\n this._input.max = this.#fromNowOrOffset(v);\n }\n #fromNowOrOffset(v) {\n if (!v) {\n return '';\n }\n const resolved = new Date();\n if (v !== 'now') {\n const re = /^([+-])(\\d+)([hm])$/;\n const match = re.exec(v);\n if (!match) {\n return v;\n }\n const sign = match[1] === '-' ? -1 : 1;\n const offset = +match[2] * sign;\n if (match[3] === 'h') {\n resolved.setHours(resolved.getHours() + offset);\n } else {\n resolved.setMinutes(resolved.getMinutes() + offset);\n }\n }\n return InputLocalTime.#snapped(resolved, Number(this._input.step) || 60);\n }\n static #snapped(date, stepSeconds) {\n const pad = (n) => String(n).padStart(2, '0');\n const seconds = date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds();\n const snapped = Math.floor(seconds / stepSeconds) * stepSeconds;\n const hh = pad(Math.floor(snapped / 3600));\n const mm = pad(Math.floor((snapped % 3600) / 60));\n return stepSeconds % 60 === 0 ? `${hh}:${mm}` : `${hh}:${mm}:${pad(snapped % 60)}`;\n }\n}\n\n/**\n * A datetime-local input whose value and bounds are read and written as UTC\n * ISO instants, shown as wall clock time in the page's timezone. A date-only\n * value is read as local midnight of that day.\n */\nclass InputInstant extends Input {\n static observed = ['step', 'min', 'max'];\n _type() {\n return 'datetime-local';\n }\n /**\n * The entered time as a UTC ISO instant.\n * @returns {string|null} null when empty or when the input holds text that does not parse\n */\n get value() {\n return Instant.localToIso(this._input.value);\n }\n /** @param {string|null|undefined} v an ISO instant; a falsy value empties the input */\n set value(v) {\n super.value = v ? Instant.isoToLocal(v) : '';\n }\n /**\n * The lower bound as a UTC ISO instant.\n * @returns {string|null} null when unset\n */\n get min() {\n return Instant.localToIso(this._input.min);\n }\n /** @param {string|null} v an ISO instant; a falsy value removes the bound */\n set min(v) {\n this._input.min = v ? Instant.isoToLocal(v) : '';\n }\n /**\n * The upper bound as a UTC ISO instant.\n * @returns {string|null} null when unset\n */\n get max() {\n return Instant.localToIso(this._input.max);\n }\n /** @param {string|null} v an ISO instant; a falsy value removes the bound */\n set max(v) {\n this._input.max = v ? Instant.isoToLocal(v) : '';\n }\n /**\n * The input's native step, in seconds.\n * @returns {string|null} null when unset\n */\n get step() {\n return blankAsNull(this._input.step);\n }\n /** @param {string|null} v */\n set step(v) {\n this._input.step = v ?? '';\n }\n}\n\nexport { Instant, LocalDate, InputLocalDate, InputLocalTime, InputInstant };\n","import { Fragments, Localization, Templates } from '../../ftl/index.mjs';\nimport { Input } from './input.mjs';\n\n/**\n * A file input with an optional dropzone and item list, enforcing the type,\n * size and count limits it declares.\n *\n * The `dropzone` and `item-list` attributes show the dropzone and the list of\n * chosen files. A `dropzone` slot replaces the default dropzone's content, and\n * an `items` slot holding a template replaces the stock item, rendered with the\n * same `files` overlay so that it reads the File objects it lists. Clicking the\n * dropzone opens the picker, and the host carries a `dragover` attribute while\n * a drag hovers it. A drop selects the files it carries, ignoring entries that\n * are not files; a drop with no file, or with several on a field that is not\n * `multiple`, changes nothing.\n *\n * Every selection, picked, dropped or assigned, goes through the constraints\n * in order: `accept` and `max-file-size` drop the files they refuse,\n * `max-total-size` and `max-files` clear the whole selection. Each violation\n * shows a warning. The change event fires for a pick, a drop and a removal\n * through an item's button; the `files`, `file` and `value` setters are silent,\n * like a native input's.\n *\n * While disabled or readonly, the picker, the dropzone and the item removals\n * do nothing, and a drop still does not reach the browser's default handling.\n */\nclass InputFile extends Input {\n /**\n * Milliseconds a warning stays before the field removes it, whether or not\n * its css animation ran; read each time a warning is shown.\n * @type {number}\n */\n static WARNING_TIMEOUT = 5000;\n /**\n * Builds a FileList holding exactly these files, the form `files` takes.\n * @param {Iterable<File>} [files]\n * @returns {FileList}\n */\n static list(files = []) {\n const dt = new DataTransfer();\n for (const file of files) {\n dt.items.add(file);\n }\n return dt.files;\n }\n static observed = [\n 'placeholder',\n 'accept:csv',\n 'multiple:presence',\n 'item-list:presence',\n 'dropzone:presence',\n 'max-files:number',\n 'max-file-size:number',\n 'max-total-size:number',\n 'value',\n ];\n #accept;\n #items;\n #dropzone;\n #warnings;\n #group;\n _type() {\n return 'file';\n }\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <input data-tpl-type=\"type\" placeholder=\" \" form=\"\">\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <div data-ref=\"dropzone\" class=\"dropzone\" data-tpl-if=\"slots.dropzone\">\n {{{{ slots.dropzone }}}}\n </div>\n <div data-ref=\"dropzone\" class=\"default-dropzone\" data-tpl-if=\"!slots.dropzone\">\n {{ #l10n:t('files.dropzone-label') }}\n </div>\n <ful-item-list></ful-item-list>\n <ful-field-warnings role=\"status\" aria-live=\"polite\"></ful-field-warnings>\n <ful-field-error></ful-field-error>\n `;\n static templates = {\n items: `\n <ful-item data-tpl-each=\"files\" data-tpl-var=\"file\" data-tpl-data-name=\"file.name\">\n <div><span>{{ file.name }}</span><span>{{ #l10n:bytes(file.size) }}</span><button type=\"button\" data-tpl-aria-label=\"#l10n:t('files.remove')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button></div>\n </ful-item>\n `,\n warning: `<ful-field-warning>{{ #l10n:t(key, args) }}</ful-field-warning>`,\n };\n #itemstemplate;\n _build(conf) {\n const pieces = super._build(conf);\n const fragment = pieces.fragment;\n this.#items = fragment.querySelector('ful-item-list');\n this.#itemstemplate =\n conf.slots?.items && !Fragments.isBlank(conf.slots.items) ? Templates.fromFragment(conf.slots.items) : null;\n this.#dropzone = fragment.querySelector('[data-ref=dropzone]');\n this.#warnings = fragment.querySelector('ful-field-warnings');\n this.#group = fragment.querySelector('ful-control-group');\n this.#warnings.addEventListener('animationend', (e) => {\n e.target.remove();\n });\n this.#items.addEventListener('click', (e) => {\n if (!e.target.closest('button')) {\n return;\n }\n if (!this._interactive()) {\n return;\n }\n const idx = [...this.#items.children].indexOf(e.target.closest('ful-item'));\n if (idx === -1) {\n return;\n }\n this.files = InputFile.list([...this.files].filter((f, i) => i !== idx));\n this._notifyChange();\n });\n this.#dropzone.addEventListener('click', (e) => {\n if (!this._interactive()) {\n return;\n }\n this._input.click();\n });\n\n this.#dropzone.addEventListener('dragover', (e) => {\n e.preventDefault();\n this.toggleAttribute('dragover', true);\n });\n this.#dropzone.addEventListener('dragleave', () => {\n this.toggleAttribute('dragover', false);\n });\n this.#dropzone.addEventListener('drop', (e) => {\n e.preventDefault();\n this.toggleAttribute('dragover', false);\n if (!this._interactive()) {\n return;\n }\n const dropped = [...e.dataTransfer.items].filter((i) => i.kind === 'file');\n const files = dropped.map((i) => i.getAsFile()).filter((f) => f !== null);\n if (files.length === 0 || (files.length > 1 && !this.multiple)) {\n return;\n }\n this.files = InputFile.list(files);\n this._notifyChange();\n });\n this._input.addEventListener('change', (e) => {\n this.#update();\n });\n return { ...pieces, freeze: this.#group };\n }\n #update() {\n this.setCustomValidity();\n this.#warnings.replaceChildren();\n this.#ensureAcceptable();\n this.#ensureFileSizes();\n this.#ensureTotalSize();\n this.#ensureFilesCount();\n (this.#itemstemplate ?? this.template('items')).withOverlay({ files: this.files }).renderTo(this.#items);\n }\n /**\n * Shows a warning in the field's polite live region: the localized message\n * for an l10n key and its arguments. It is removed when its animation ends,\n * or after `WARNING_TIMEOUT` milliseconds at the latest. The warnings are\n * cleared whenever the selection changes.\n * @param {string} key\n * @param {Record<string, any>} [args]\n */\n warning(key, args) {\n this.template('warning').withOverlay({ key, args }).appendTo(this.#warnings);\n const warning = /** @type HTMLElement */ (this.#warnings.lastElementChild);\n setTimeout(() => warning.remove(), InputFile.WARNING_TIMEOUT);\n }\n #acceptable(file) {\n const name = file.name.toLowerCase();\n return this.#accept.some((token) => {\n const t = token.toLowerCase().split(';')[0].trim();\n if (t.startsWith('.')) {\n return name.endsWith(t);\n }\n if (t.endsWith('/*')) {\n return file.type.startsWith(`${t.slice(0, -1)}`);\n }\n return t.includes('/') && file.type === t;\n });\n }\n #ensureAcceptable() {\n if (!this.#accept.length) {\n return;\n }\n const unacceptable = [...this.files].filter((file) => !this.#acceptable(file));\n\n if (unacceptable.length === 0) {\n return;\n }\n this.warning('files.unacceptable-file-type', { types: this.#accept.join(', ') });\n this._input.files = InputFile.list([...this.files].filter((f) => !unacceptable.includes(f)));\n }\n #ensureFilesCount() {\n if (this.#maxFiles === null) {\n return;\n }\n if (this.files.length <= this.#maxFiles) {\n return;\n }\n this.warning('files.max-files-exceeded', { count: this.#maxFiles });\n this._input.files = InputFile.list();\n }\n\n #ensureFileSizes() {\n if (this.#maxFileSize === null) {\n return;\n }\n const oversized = [...this.files].filter((file) => file.size > this.#maxFileSize);\n if (oversized.length === 0) {\n return;\n }\n this.warning('files.max-file-size-exceeded', { size: Localization.of().bytes(this.#maxFileSize) });\n this._input.files = InputFile.list([...this.files].filter((f) => !oversized.includes(f)));\n }\n #ensureTotalSize() {\n if (this.#maxTotalSize === null) {\n return;\n }\n const totalSize = [...this.files].reduce((acc, file) => acc + file.size, 0);\n if (totalSize <= this.#maxTotalSize) {\n return;\n }\n this.warning('files.max-total-size-exceeded', { size: Localization.of().bytes(this.#maxTotalSize) });\n this._input.files = InputFile.list();\n }\n\n /**\n * The accepted types, also set on the native input for its picker. A token\n * is a dot-prefixed extension matched against the end of the file name, a\n * mime type matched against the file's type with any parameters ignored, or\n * a family such as `image/*`; case is ignored, and any other token matches\n * nothing. A file matching no token is dropped with a warning; an empty list\n * accepts every file. Enforced from the next selection on.\n * @returns {string[]}\n */\n get accept() {\n return this.#accept;\n }\n /** @param {string[]} vs */\n set accept(vs) {\n this._input.accept = vs.join(',');\n this.#accept = vs;\n this.reflectTo('accept', vs);\n }\n /**\n * Whether the field takes several files; a single-file field ignores a drop of several.\n * @returns {boolean}\n */\n get multiple() {\n return this._input.multiple;\n }\n /** @param {boolean} v */\n set multiple(v) {\n this._input.multiple = v;\n this.reflectTo('multiple', v);\n }\n /**\n * The selected files, after the constraints.\n * @returns {FileList}\n */\n get files() {\n return this._input.files;\n }\n /**\n * Replaces the selection and runs the constraints over it, refreshing the\n * warnings and the item list, without firing change.\n * @param {FileList} vs\n */\n set files(vs) {\n this._input.files = vs;\n this.#update();\n }\n /**\n * The first selected file.\n * @returns {File|null}\n */\n get file() {\n return this.files[0] ?? null;\n }\n /**\n * Replaces the selection with this one file, or empties it, as `files` does.\n * @param {File|null|undefined} v\n */\n set file(v) {\n this.files = InputFile.list(v ? [v] : []);\n }\n /**\n * The names of the selected files: an array when `multiple`, otherwise the\n * one name or null.\n * @returns {string[]|string|null}\n */\n get value() {\n const names = Array.from(this._input.files).map((f) => f.name);\n return this.multiple ? names : (names[0] ?? null);\n }\n /**\n * Empties the selection for a falsy value and ignores any other, since a\n * file name cannot select a file.\n * @param {any} v\n */\n set value(v) {\n if (v) {\n return;\n }\n this.files = InputFile.list();\n }\n /** Empties the selection, as a native file input's reset does, whatever the `value` attribute says. */\n formResetCallback() {\n this.value = null;\n }\n /**\n * The size of the selected files together, in bytes.\n * @returns {number}\n */\n get totalsize() {\n return Array.from(this.files).reduce((a, f) => a + f.size, 0);\n }\n #maxFiles;\n /**\n * The most files a selection may hold; a larger selection is cleared\n * entirely with a warning. Enforced from the next selection on.\n * @returns {number|null} null for no limit\n */\n get maxFiles() {\n return this.#maxFiles;\n }\n /** @param {number|null} v */\n set maxFiles(v) {\n this.#maxFiles = v;\n this.reflectTo('max-files', v);\n }\n #maxFileSize;\n /**\n * The largest size one file may have, in bytes; a larger file is dropped\n * from the selection with a warning. Enforced from the next selection on.\n * @returns {number|null} null for no limit\n */\n get maxFileSize() {\n return this.#maxFileSize;\n }\n /** @param {number|null} v */\n set maxFileSize(v) {\n this.#maxFileSize = v;\n this.reflectTo('max-file-size', v);\n }\n #maxTotalSize;\n /**\n * The largest size the selected files may have together, in bytes; a\n * larger selection is cleared entirely with a warning. Enforced from the\n * next selection on.\n * @returns {number|null} null for no limit\n */\n get maxTotalSize() {\n return this.#maxTotalSize;\n }\n /** @param {number|null} v */\n set maxTotalSize(v) {\n this.#maxTotalSize = v;\n this.reflectTo('max-total-size', v);\n }\n #useItemList;\n /**\n * Whether the chosen files are listed, each with a button removing it; the\n * stylesheet shows the list from the reflected `item-list` attribute.\n * @returns {boolean}\n */\n get itemList() {\n return this.#useItemList;\n }\n /** @param {boolean} v */\n set itemList(v) {\n this.#useItemList = v;\n this.reflectTo('item-list', v);\n }\n #useDropzone;\n /**\n * Whether the dropzone is shown; the stylesheet shows it from the reflected\n * `dropzone` attribute.\n * @returns {boolean}\n */\n get dropzone() {\n return this.#useDropzone;\n }\n /** @param {boolean} v */\n set dropzone(v) {\n\n this.#useDropzone = v;\n this.reflectTo('dropzone', v);\n }\n}\n\nexport { InputFile };\n","import { Attributes } from '../../ftl/index.mjs';\n\n/** the viewport's breathing room when clamping, in pixels */\nconst PAD = 8;\nconst open = new Map();\nlet frame = 0;\nlet reflowWired = false;\n\nconst platformAnchors = () =>\n CSS.supports('anchor-name: --ful-probe') &&\n CSS.supports('position-anchor: --ful-probe') &&\n CSS.supports('position-area: bottom') &&\n CSS.supports('top: anchor(bottom)') &&\n CSS.supports('width: anchor-size(width)');\n\nconst clamp = (value, low, high) => Math.min(Math.max(value, low), Math.max(low, high));\n\n/** a popover that reads `placement` and gets the callout offsets */\nconst isNote = (popover) => popover.matches('ful-note, .ful-note, [placement]');\n\n/**\n * Writes the invoker's centre, measured from the popover's padding box, as\n * `--ful-note-callout-inline` and `--ful-note-callout-block` on the popover.\n */\nconst reportCallout = (popover, invoker) => {\n const box = invoker.getBoundingClientRect();\n const here = popover.getBoundingClientRect();\n popover.style.setProperty(\n '--ful-note-callout-inline',\n `${box.left + box.width / 2 - here.left - popover.clientLeft}px`,\n );\n popover.style.setProperty(\n '--ful-note-callout-block',\n `${box.top + box.height / 2 - here.top - popover.clientTop}px`,\n );\n};\n\nconst place = (popover, anchored) => {\n const { invoker, stretch } = anchored;\n const box = invoker.getBoundingClientRect();\n const viewport = document.documentElement;\n const vw = viewport.clientWidth;\n const vh = viewport.clientHeight;\n popover.style.removeProperty('margin');\n const computed = getComputedStyle(popover);\n const gap = {\n top: parseFloat(computed.marginTop) || 0,\n right: parseFloat(computed.marginRight) || 0,\n bottom: parseFloat(computed.marginBottom) || 0,\n left: parseFloat(computed.marginLeft) || 0,\n };\n popover.style.right = 'auto';\n popover.style.bottom = 'auto';\n popover.style.margin = '0';\n if (stretch) {\n popover.style.removeProperty('width');\n popover.style.removeProperty('min-width');\n popover.style.removeProperty('max-width');\n const cap = Math.min(parseFloat(computed.maxWidth) || vw, vw - 2 * PAD);\n popover.style.minWidth = `${Math.min(box.width, vw - 2 * PAD)}px`;\n popover.style.maxWidth = `${cap}px`;\n const width = popover.getBoundingClientRect().width;\n popover.style.left = `${clamp(box.left, PAD, vw - width - PAD)}px`;\n const height = popover.getBoundingClientRect().height;\n const below = box.bottom + gap.top;\n const top = below + height <= vh - PAD ? below : box.top - gap.bottom - height;\n popover.style.top = `${clamp(top, PAD, vh - height - PAD)}px`;\n return;\n }\n const note = isNote(popover);\n const placement = note ? (popover.getAttribute('placement') ?? 'bottom') : 'bottom';\n popover.style.removeProperty('max-width');\n const cap = Math.min(parseFloat(computed.maxWidth) || vw, vw - 2 * PAD);\n popover.style.maxWidth = `${cap}px`;\n popover.style.left = `${PAD}px`;\n const wide = popover.getBoundingClientRect().width;\n let left =\n placement === 'right'\n ? box.right + gap.left\n : placement === 'left'\n ? box.left - gap.right - wide\n : note\n ? box.left + box.width / 2 - wide / 2\n : box.left;\n left = clamp(left, PAD, vw - wide - PAD);\n popover.style.left = `${left}px`;\n popover.style.maxWidth = `${Math.min(cap, vw - PAD - left)}px`;\n const height = popover.getBoundingClientRect().height;\n const top =\n placement === 'top'\n ? box.top - gap.bottom - height\n : placement === 'right' || placement === 'left'\n ? box.top + box.height / 2 - height / 2\n : box.bottom + gap.top;\n popover.style.top = `${clamp(top, PAD, vh - height - PAD)}px`;\n if (note) {\n reportCallout(popover, invoker);\n }\n};\n\nconst unplace = (popover) => {\n for (const property of [\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'margin',\n 'max-width',\n 'min-width',\n 'width',\n 'visibility',\n '--ful-note-callout-inline',\n '--ful-note-callout-block',\n ]) {\n popover.style.removeProperty(property);\n }\n};\n\nconst showOncePlaced = (popover, anchored) => {\n popover.style.visibility = 'hidden';\n queueMicrotask(() => {\n if (popover.matches(':popover-open')) {\n place(popover, anchored);\n }\n popover.style.removeProperty('visibility');\n });\n};\n\nconst reflow = () => {\n frame = 0;\n for (const [popover, anchored] of open) {\n if (!popover.isConnected || !anchored.invoker.isConnected) {\n open.delete(popover);\n continue;\n }\n place(popover, anchored);\n }\n};\n\nconst schedule = () => {\n if (!frame && open.size > 0) {\n frame = requestAnimationFrame(reflow);\n }\n};\n\n/**\n * Places a popover beside the element or the rectangle it belongs to.\n *\n * `wire` pairs a popover with one invoker for its lifetime and relies on css\n * anchor positioning, placing the popover in script only where the platform\n * lacks it or the caller asks for it. `show` places a popover once, beside\n * whatever anchor the call hands over.\n */\nclass Anchors {\n /**\n * Anchors a popover to its invoker for the popover's lifetime.\n *\n * On every platform the invoker is given an inline `anchor-name` and the\n * popover a `position-anchor` naming it, `--` followed by a unique id\n * built from `prefix`. That is what a stylesheet needs to place the popover\n * itself: the library's own menus say `top: anchor(bottom); left:\n * anchor(left)`. **Writing that css is the caller's half of this.** Without\n * it the popover lands wherever the user agent puts a popover, which is not\n * beside the invoker.\n *\n * Where the platform has no css anchor positioning, or under `handPlace`,\n * the popover is placed in script instead: beside the invoker whenever it\n * opens, clamped 8px inside the viewport, placed again on every scroll and\n * resize while open, and its inline placement removed on close. The gap to\n * the invoker is read from the popover's css margins. From `beforetoggle`\n * to the placing, in a microtask before the `toggle` event, the popover\n * carries an inline `visibility: hidden`, so a stylesheet setting\n * `visibility` on it competes with that. A popover removed from the\n * document while open, or whose invoker was removed, stops being placed.\n *\n * The script placement puts a plain popover below the invoker,\n * start-aligned. A popover matching `ful-note`, `.ful-note` or\n * `[placement]` reads its `placement` attribute instead: `top`, `right`,\n * `left`, or `bottom` by default, centred on the invoker along the other\n * axis. Such a popover is also given `--ful-note-callout-inline` and\n * `--ful-note-callout-block`: the invoker's centre, in pixels, measured\n * from the popover's padding box, which stays on the invoker when the\n * viewport pushes the popover off it.\n *\n * Wiring the same pair twice adds its listeners twice.\n *\n * @param {HTMLElement} invoker the element the popover belongs to\n * @param {HTMLElement} popover the `[popover]` element to place\n * @param {object} [options]\n * @param {string} [options.prefix] prefixes the generated anchor name and\n * id, `ful-anchor` by default, so the dom says which component a name\n * belongs to\n * @param {boolean} [options.invoke] makes the invoker toggle the popover,\n * which light dismiss then closes with no script of your own. The popover\n * is given the generated id when it has none. A `button` or `input`\n * invoker gets a `popovertarget` naming it; any other element toggles it\n * on click and on the Enter and Space keys\n * @param {boolean} [options.expanded] sets the invoker's `aria-expanded` to\n * `false` at once and keeps it in step with the popover's `toggle` events\n * @param {boolean} [options.stretch] in the script placement, sizes the\n * popover to at least its invoker's width, capped by its own `max-width`\n * and the viewport, and flips it above the invoker where the viewport\n * leaves no room below, which is what a combobox dropdown wants. The\n * `placement` attribute is not read\n * @param {boolean} [options.handPlace] places in script on every platform\n * rather than only as a fallback, for a popover that needs to know where\n * its invoker ended up, such as a note pointing a callout at it. Such a\n * popover declares no anchor placement in css\n */\n static wire(\n invoker,\n popover,\n { prefix = 'ful-anchor', invoke = false, expanded = false, stretch = false, handPlace = false } = {},\n ) {\n const uid = Attributes.uid(prefix);\n if (invoke) {\n popover.id = popover.id || uid;\n if (invoker.localName === 'button' || invoker.localName === 'input') {\n invoker.setAttribute('popovertarget', popover.id);\n } else {\n invoker.addEventListener('click', () => popover.togglePopover());\n invoker.addEventListener('keydown', (/** @type any */ evt) => {\n if (evt.key !== 'Enter' && evt.key !== ' ') {\n return;\n }\n evt.preventDefault();\n popover.togglePopover();\n });\n }\n }\n const anchor = `--${uid}`;\n invoker.style.anchorName = anchor;\n popover.style.positionAnchor = anchor;\n if (expanded) {\n invoker.setAttribute('aria-expanded', 'false');\n popover.addEventListener('toggle', (/** @type any */ evt) => {\n invoker.setAttribute('aria-expanded', evt.newState === 'open' ? 'true' : 'false');\n });\n }\n if (!handPlace && platformAnchors()) {\n return;\n }\n const anchored = { invoker, stretch };\n popover.addEventListener('beforetoggle', (/** @type any */ evt) => {\n if (evt.newState === 'open') {\n showOncePlaced(popover, anchored);\n }\n });\n popover.addEventListener('toggle', (/** @type any */ evt) => {\n if (evt.newState === 'open') {\n open.set(popover, anchored);\n place(popover, anchored);\n } else {\n open.delete(popover);\n unplace(popover);\n }\n });\n if (!reflowWired) {\n reflowWired = true;\n document.addEventListener('scroll', schedule, true);\n window.addEventListener('resize', schedule);\n }\n }\n /**\n * Shows a popover and places it beside an anchor, once. It serves a\n * popover shared by many invokers, each open handing over its own anchor,\n * and an anchor that is a rectangle rather than an element, such as one\n * read out of an iframe. Nothing is paired and nothing follows a later\n * scroll or resize; closing is the caller's, or the platform's for a\n * light-dismissing popover.\n *\n * The popover goes below the anchor, start-aligned, clamped 8px inside the\n * viewport. `flip` moves it above the anchor where there is no room below\n * and there is room above. The placement is written as inline `top`, `left`,\n * `right`, `bottom` and `margin`, which stay after the popover closes and\n * are overwritten by the next call.\n *\n * A popover not already open is shown with `showPopover()` and placed\n * before the call returns, so the first position anybody sees is the right\n * one and the caller can move the focus into it on the next line. One\n * already open is placed without being shown again.\n *\n * @param {HTMLElement} popover the `[popover]` element to show, or an\n * already-shown element to place\n * @param {Element|DOMRect} anchor the element, or the rectangle in\n * viewport coordinates, to place beside\n * @param {object} [options]\n * @param {boolean} [options.flip] place above the anchor where no room is\n * left below, `false` by default\n * @param {number} [options.gap] the distance from the anchor, in pixels,\n * `0` by default\n * @returns {HTMLElement} the popover\n */\n static show(popover, anchor, { flip = false, gap = 0 } = {}) {\n const placeShown = () => {\n const box = anchor instanceof Element ? anchor.getBoundingClientRect() : anchor;\n const viewport = document.documentElement;\n const here = popover.getBoundingClientRect();\n const below = box.bottom + gap;\n const above = box.top - gap - here.height;\n const top = flip && below + here.height > viewport.clientHeight - PAD && above >= PAD ? above : below;\n popover.style.right = 'auto';\n popover.style.bottom = 'auto';\n popover.style.margin = '0';\n popover.style.left = `${clamp(box.left, PAD, Math.max(PAD, viewport.clientWidth - here.width - PAD))}px`;\n popover.style.top = `${clamp(top, PAD, Math.max(PAD, viewport.clientHeight - here.height - PAD))}px`;\n };\n if (typeof popover.showPopover === 'function' && !popover.matches(':popover-open')) {\n popover.showPopover();\n }\n placeShown();\n return popover;\n }\n}\n\nexport { Anchors };\n","import { Attributes, Fragments, ParsedElement, Templates } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\nimport { Anchors } from '../disclosures/anchors.mjs';\nimport { Field } from './field.mjs';\nimport { VersionedLocalStorage } from '../storage.mjs';\nimport { Timing } from '../timing.mjs';\n\n/**\n * @typedef {{ key: any, label: string, metadata: any }} SelectEntry\n */\n/**\n * @typedef {{ request(method: string, url: string): any }} SelectHttpClient\n */\n\nconst byKeys = (entries, keys) => entries.filter(({ key }) => keys.some((r) => r == key));\nconst byLabel = (entries, needle) =>\n entries.filter(({ label }) => (label ?? '').toLowerCase().includes(needle?.toLowerCase() ?? ''));\n\n/**\n * Fetches a select's whole vocabulary from a url and serves every later read\n * from it. Concurrent callers share one request, the options may be cached in\n * local storage under a revision, and invalidating discards both.\n */\nclass RemoteLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n #prefetch;\n #revision;\n #data = null;\n /** @type {Promise<void>|null} */\n #inFlight = null;\n #configs = new Claims();\n /**\n * @param {{ http: SelectHttpClient, url: string, method: string, responseMapper: (response: any) => SelectEntry[], prefetch: boolean, revision: string|null }} conf\n * a null revision never reads nor writes local storage\n */\n constructor({ http, url, method, responseMapper, prefetch, revision }) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#responseMapper = responseMapper;\n this.#prefetch = prefetch;\n this.#revision = revision;\n }\n /**\n * Fetches the vocabulary now when the loader was built with prefetch, and\n * does nothing otherwise.\n * @returns {Promise<void>}\n * @throws when the fetch fails, or when an invalidation supersedes it\n */\n async prefetch() {\n if (!this.#prefetch) {\n return;\n }\n await this.#ensureFetched();\n }\n /**\n * The entries whose key loosely equals one of the keys, in vocabulary order.\n * @param {...any} keys\n * @returns {Promise<SelectEntry[]>}\n * @throws when the fetch fails, or when an invalidation supersedes it\n */\n async exact(...keys) {\n return byKeys(await this.#ensureFetched(), keys);\n }\n /**\n * The entries whose label contains the needle, ignoring case; every entry\n * for a nullish or empty needle.\n * @param {string|null} [needle]\n * @returns {Promise<SelectEntry[]>}\n * @throws when the fetch fails, or when an invalidation supersedes it\n */\n async load(needle) {\n return byLabel(await this.#ensureFetched(), needle);\n }\n /**\n * Drops the vocabulary held in memory so the next question refetches it,\n * which may still be answered from local storage under the same revision.\n * A fetch still in flight is detached: its outcome is neither served nor\n * stored, and the callers waiting on it reject.\n * @returns {Promise<void>}\n */\n async invalidate() {\n this.#configs.invalidate();\n this.#data = null;\n this.#inFlight = null;\n }\n async #ensureFetched() {\n if (this.#data === null) {\n if (this.#inFlight === null) {\n const claim = this.#configs.hold();\n this.#inFlight = RemoteLoader.#revisionedData(this.#http, this.#method, this.#url, this.#revision)\n .then((raw) => {\n if (!claim.stale) {\n this.#data = this.#responseMapper(raw);\n }\n })\n .finally(() => {\n if (!claim.stale) {\n this.#inFlight = null;\n }\n });\n }\n await this.#inFlight;\n }\n if (this.#data === null) {\n throw new Error('superseded by an invalidation');\n }\n return this.#data;\n }\n static async #revisionedData(http, method, url, revision) {\n const storageKey = `${method}@${url}`;\n if (revision !== null) {\n const data = VersionedLocalStorage.load(storageKey, revision);\n if (data !== undefined) {\n return data;\n }\n }\n const data = await http.request(method, url).fetchJson();\n if (revision !== null) {\n try {\n VersionedLocalStorage.save(storageKey, revision, data);\n } catch (/** @type any */ e) {\n console.warn('failed to cache the select options', e);\n }\n }\n return data;\n }\n}\n\n/** Asks the endpoint per query instead of fetching the vocabulary once, for a list too large to hold in memory. */\nclass PartialRemoteLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n /**\n * @param {{ http: SelectHttpClient, url: string, method: string, responseMapper: (response: any) => SelectEntry[] }} conf\n */\n constructor({ http, url, method, responseMapper }) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#responseMapper = responseMapper;\n }\n /**\n * Does nothing, since nothing is held between queries.\n * @returns {Promise<void>}\n */\n async invalidate() {}\n /**\n * Asks the endpoint for the entries of the keys, sent as repeated `k`\n * parameters.\n * @param {...any} keys\n * @returns {Promise<SelectEntry[]>}\n * @throws when the request fails\n */\n async exact(...keys) {\n const response = await this.#http\n .request(this.#method, this.#url)\n .param('k', ...keys)\n .fetchJson();\n return this.#responseMapper(response);\n }\n /**\n * Asks the endpoint for the entries matching the needle, sent as the `s`\n * parameter; the filtering is the endpoint's.\n * @param {string|null} [needle]\n * @returns {Promise<SelectEntry[]>}\n * @throws when the request fails\n */\n async load(needle) {\n const response = await this.#http.request(this.#method, this.#url).param('s', needle).fetchJson();\n return this.#responseMapper(response);\n }\n}\n\n/** Serves a select's options from an array held in memory, which is what the slotted `<option>` elements become. */\nclass InMemoryLoader {\n #data;\n /**\n * @param {SelectEntry[]} data\n */\n constructor(data) {\n this.#data = data;\n }\n /**\n * Replaces the vocabulary every later question is answered from.\n * @param {SelectEntry[]} data\n */\n update(data) {\n this.#data = data;\n }\n /**\n * Does nothing: the vocabulary is the data itself, which only update replaces.\n * @returns {Promise<void>}\n */\n async invalidate() {}\n /**\n * The entries whose key loosely equals one of the keys, in vocabulary order.\n * @param {...any} keys\n * @returns {SelectEntry[]}\n */\n exact(...keys) {\n return byKeys(this.#data, keys);\n }\n /**\n * The entries whose label contains the needle, ignoring case; every entry\n * for a nullish or empty needle.\n * @param {string|null} [needle]\n * @returns {SelectEntry[]}\n */\n load(needle) {\n return byLabel(this.#data, needle);\n }\n}\n\n/**\n * Builds the select's loader from its attributes: the slotted options in\n * memory, or a remote or chunked loader over src. It is registered as the\n * `loaders:select` component.\n *\n * A component named by the select's `loader` attribute replaces this one: its\n * `create(el, conf)` answers an object with these methods, each answering\n * `{ key, label, metadata }` entries, directly or through a promise:\n *\n * - `load(needle)` answers the entries matching the typed text, all of them\n * when the needle is empty, which is the search the list opens with\n * - `exact(...keys)` answers the entries for those keys, used to label a value\n * assigned without going through the list; a key it leaves out is dropped\n * from the selection\n * - `prefetch()`, optional, warms the vocabulary; the select calls it at the\n * upgrade without waiting, and awaits it in `reload()`\n * - `invalidate()`, optional, drops whatever the loader holds, called by\n * `reload()`\n *\n * An entry whose `metadata.disabled` is truthy is shown and cannot be picked,\n * with `metadata.reason`, when present, as the row's title.\n */\nclass SelectLoader {\n /**\n * Builds a loader from a plain configuration, reading no dom: `data` alone\n * is the in-memory vocabulary, a `url` is fetched whole or, under\n * `mode: 'chunked'`, per query. A test, or a caller holding its own\n * configuration, builds a loader this way; `create` is the same thing with\n * an element's attributes parsed first.\n *\n * A remote loader fetches once and filters in memory, caching the response\n * in local storage under `method@url` when a revision is given; a chunked\n * one sends every search as `s` and every key lookup as `k`. The response\n * mapper turns the parsed response body into entries.\n * @param {{ data?: SelectEntry[], url?: undefined, http?: undefined, method?: undefined, mode?: undefined, prefetch?: undefined, revision?: undefined, responseMapper?: undefined }\n * | { data?: undefined, url: string, http: SelectHttpClient, method?: string, mode?: string, prefetch?: boolean, revision?: string|null, responseMapper: (response: any) => SelectEntry[] }} conf\n * `method` defaults to POST\n * @returns {InMemoryLoader|PartialRemoteLoader|RemoteLoader}\n */\n static from({ data, http, url, method = 'POST', mode, prefetch = false, revision = null, responseMapper }) {\n if (!url) {\n return new InMemoryLoader(data ?? []);\n }\n if ('chunked' === mode) {\n return new PartialRemoteLoader({ http, url, method, responseMapper });\n }\n return new RemoteLoader({ http, url, method, responseMapper, prefetch, revision });\n }\n /**\n * Builds the loader an element's attributes describe. Without `src` the\n * vocabulary is the `<option>` elements of `conf.options`, each keyed by its\n * `value` attribute or else its trimmed text. With `src` the url is\n * requested through the `http-client` component with `method` (POST by\n * default): once on first use, or at the upgrade under `preload`, or per\n * query under `mode=\"chunked\"`. A `revision` caches the whole response in local storage; a\n * valueless one takes the `revision` component, calling it when it is a\n * function, and warns and does not cache when none is registered.\n *\n * The response becomes entries through `k-expr` and `l-expr` evaluated on\n * each row of `d-expr` (the response itself by default), with `m-expr` as\n * the metadata (the row by default); else through the `response-mapper`\n * component; else each row is read as a `[key, label, metadata]` array.\n * @param {ParsedElement} el the element declaring the loader attributes\n * @param {{ options?: DocumentFragment }} conf\n * @returns {InMemoryLoader|PartialRemoteLoader|RemoteLoader}\n */\n static create(el, conf) {\n if (!el.declared('src')) {\n const els = Array.from(conf.options?.querySelectorAll('option') ?? []);\n return SelectLoader.from({\n data: els.map((e) => ({\n key: e.getAttribute('value') ?? e.innerText.trim(),\n label: e.innerText.trim(),\n metadata: undefined,\n })),\n });\n }\n return SelectLoader.from({\n http: el.component('http-client'),\n url: el.declared('src'),\n method: el.declared('method') ?? 'POST',\n mode: el.declared('mode'),\n prefetch: el.declared('preload'),\n revision: SelectLoader.#revisionFrom(el),\n responseMapper: SelectLoader.#responseMapperFrom(el),\n });\n }\n static #revisionFrom(el) {\n const declared = el.declared('revision');\n if (declared !== '') {\n return declared;\n }\n const configured = el.component('revision');\n if (configured === undefined || configured === null) {\n console.warn(\n \"a valueless revision asks the registry for one, and no 'revision' component is defined: the vocabulary will not be cached\",\n el,\n );\n return null;\n }\n return typeof configured === 'function' ? configured() : configured;\n }\n static #responseMapperFrom(el) {\n if (el.declared('k-expr') && el.declared('l-expr')) {\n return (response) => {\n const rows = el._registry\n .evaluator()\n .withOverlay(response)\n .evaluateExpression(el.declared('d-expr') ?? 'self');\n return rows.map((row) => {\n const evaluator = el._registry.evaluator().withOverlay(row);\n return {\n key: evaluator.evaluateExpression(el.declared('k-expr')),\n label: evaluator.evaluateExpression(el.declared('l-expr')),\n metadata: evaluator.evaluateExpression(el.declared('m-expr') ?? 'self'),\n };\n });\n };\n }\n if (el.declared('response-mapper')) {\n return el.component(el.declared('response-mapper'));\n }\n return (/** @type any[] */ response) => response.map(([key, label, metadata]) => ({ key, label, metadata }));\n }\n}\n\n/**\n * The options popup of a select, a `<ful-dropdown>` the owner shows as a\n * popover: a spinner while the loader runs, a localized empty state, and a\n * `role=\"listbox\"` menu of `role=\"option\"` rows.\n *\n * The owner drives it and listens to it. A pick dispatches a bubbling\n * `change` whose detail is `{ index, entry }`, the row's index as a string\n * and the entry it was rendered from. The active row is announced by a\n * non-bubbling `activechange` whose detail is `{ id }`, the row's id or null\n * when none is active, for the owner to set `aria-activedescendant`. A\n * pressed row does not take the focus from the owner's control.\n */\nclass Dropdown extends ParsedElement {\n /**\n * `listbox` is the id given to the menu, so an owner can set\n * `aria-controls` before this element upgrades; a generated id otherwise.\n */\n static attributes = ['listbox'];\n /** The default slot, when not blank, is the row template in place of the `options` template. */\n static slots = true;\n static template = `\n <ful-spinner class=\"centered\" role=\"status\" hidden><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></ful-spinner>\n <ful-empty data-ref=\"empty\" aria-live=\"polite\" hidden>{{ #l10n:t('dropdown.empty') }}</ful-empty>\n <menu tabindex=\"-1\" role=\"listbox\" hidden></menu>\n `;\n /**\n * `options` renders one row per entry, each entry carrying its `index`\n * beside its own keys. A replacement must keep one `<li>` per entry, in\n * order, with the index as its `value`: picking reads the entry back from it.\n */\n static templates = {\n options: `\n <li data-tpl-each=\"self\" data-tpl-selected=\"index == 0\" data-tpl-value=\"index\" role=\"option\">\n {{ label }}\n </li>\n `,\n };\n #spinner;\n #menu;\n #empty;\n #optionstemplate;\n #options = new Map();\n #shows = new Claims();\n /**\n * @param {{ slots: Record<string, DocumentFragment> }} conf\n */\n render({ slots }) {\n const fragment = this.template().render();\n this.#optionstemplate = Fragments.isBlank(slots.default)\n ? this.template('options')\n : Templates.fromFragment(slots.default);\n this.#spinner = fragment.querySelector('ful-spinner');\n this.#empty = fragment.querySelector('[data-ref=empty]');\n this.#menu = fragment.querySelector('menu');\n this.#menu.id = this.declared('listbox') || Attributes.uid('ful-listbox');\n this.#menu.addEventListener('mousedown', (evt) => {\n if (evt.target.closest('li')) {\n evt.preventDefault();\n }\n });\n this.#menu.addEventListener('click', (evt) => {\n evt.stopPropagation();\n const li = evt.target.closest('li');\n if (!li) {\n this.hide();\n return;\n }\n if (li.matches('[aria-disabled=\"true\"]')) {\n return;\n }\n this.#change(li);\n });\n this.replaceChildren(fragment);\n }\n #selected() {\n return (\n this.#menu?.querySelector('[selected]:not([aria-disabled=\"true\"])') ??\n this.#menu?.querySelector('li:not([aria-disabled=\"true\"])') ??\n null\n );\n }\n #highlight(li) {\n if (!li) {\n this.#activated(null);\n return;\n }\n for (const el of this.#menu.querySelectorAll('li')) {\n el.toggleAttribute('selected', el === li);\n }\n li.id ||= Attributes.uid('ful-option');\n this.#activated(li.id);\n li.scrollIntoView({\n block: 'nearest',\n behavior: matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth',\n });\n }\n /**\n * Picks the highlighted row, or the first enabled one when none is: hides\n * the dropdown and dispatches `change`. Does nothing when no row is enabled.\n */\n acceptSelection() {\n const selected = this.#selected();\n if (!selected) {\n return;\n }\n this.#change(selected);\n }\n /**\n * Renders the entries as rows and highlights the first one whose key is\n * picked, else the row the template marked `selected`, else the first\n * enabled row. A row is marked `picked` and\n * `aria-selected=\"true\"` when its key loosely equals one of the keys, and\n * `aria-disabled=\"true\"` when its `metadata.disabled` is truthy, titled with\n * `metadata.reason`. No entries shows the empty state instead of the menu.\n * @param {SelectEntry[]} values\n * @param {any[]} [keys] the keys currently selected\n * @throws {Error} when values is undefined\n */\n update(values, keys = []) {\n if (values === undefined) {\n throw new Error('null data');\n }\n this.#options = new Map(values.map((v, i) => [String(i), v]));\n const data = values.map((entry, index) => ({ index, ...entry }));\n this.#optionstemplate.withOverlay(data).renderTo(this.#menu);\n for (const [index, li] of [...this.#menu.children].entries()) {\n const entry = values[index];\n const picked = keys.some((r) => r == entry?.key);\n li.toggleAttribute('picked', picked);\n li.setAttribute('aria-selected', picked ? 'true' : 'false');\n const disabled = !!entry?.metadata?.disabled;\n if (disabled) {\n li.setAttribute('aria-disabled', 'true');\n } else {\n li.removeAttribute('aria-disabled');\n }\n if (disabled && entry.metadata.reason) {\n li.setAttribute('title', String(entry.metadata.reason));\n } else {\n li.removeAttribute('title');\n }\n }\n this.#empty.toggleAttribute('hidden', values.length !== 0);\n this.#menu.toggleAttribute('hidden', values.length === 0);\n const current = values.findIndex(({ key }) => keys.some((r) => r == key));\n this.#highlight(current >= 0 ? this.#menu.children[current] : this.#selected());\n }\n #change(target) {\n const index = target.getAttribute('value');\n const entry = this.#options.get(index);\n this.hide();\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n cancelable: false,\n detail: { index, entry },\n }),\n );\n }\n /**\n * Closes the popover, if open, and announces that no row is active. A\n * `show` still waiting on its loader is superseded: its outcome is neither\n * rendered nor thrown.\n */\n hide() {\n this.#shows.invalidate();\n if (this.matches(':popover-open')) {\n this.hidePopover();\n }\n this.#activated(null);\n }\n #activated(id) {\n this.dispatchEvent(new CustomEvent('activechange', { bubbles: false, cancelable: false, detail: { id } }));\n }\n /**\n * Whether the popover is open.\n * @returns {boolean}\n */\n get shown() {\n return this.matches(':popover-open');\n }\n /**\n * Opens the popover with the spinner showing, then renders what the loader\n * answers as `update` does. A show overtaken by a later `show` or by `hide`\n * before its loader settles leaves the dropdown alone and resolves, even\n * when its loader rejected.\n * @param {() => SelectEntry[]|Promise<SelectEntry[]>} loader\n * @param {any[]} [keys] the keys currently selected\n * @returns {Promise<void>}\n * @throws what the loader threw, after hiding the dropdown, when this show\n * is still the current one\n */\n async show(loader, keys = []) {\n const claim = this.#shows.take();\n if (!this.matches(':popover-open')) {\n this.showPopover();\n }\n this.#menu.setAttribute('hidden', '');\n this.#spinner.removeAttribute('hidden');\n try {\n const data = await loader();\n if (claim.stale) {\n return;\n }\n this.update(data, keys);\n } catch (/** @type any */ e) {\n if (claim.stale) {\n return;\n }\n this.hide();\n throw e;\n } finally {\n if (!claim.stale) {\n this.#spinner.setAttribute('hidden', '');\n }\n }\n }\n /**\n * Moves the highlight to the next or previous enabled row when the dropdown\n * is shown, staying put at the edge, and shows it otherwise.\n * @param {boolean} forward\n * @param {() => SelectEntry[]|Promise<SelectEntry[]>} loader used only to show\n * @param {any[]} [keys] the keys currently selected, used only to show\n * @returns {Promise<void>}\n * @throws what `show` throws\n */\n async moveOrShow(forward, loader, keys = []) {\n if (this.shown) {\n const selected = this.#selected();\n const candidate = selected?.[`${forward ? 'next' : 'previous'}ElementSibling`];\n const target = candidate ? this.#walk(candidate, forward) : null;\n if (selected && target) {\n this.#highlight(target);\n }\n return;\n }\n await this.show(loader, keys);\n }\n #walk(from, forward) {\n for (let li = from; li; li = li[`${forward ? 'next' : 'previous'}ElementSibling`]) {\n if (!li.matches('[aria-disabled=\"true\"]')) {\n return li;\n }\n }\n return null;\n }\n /**\n * Highlights the first enabled row, or the last one.\n * @param {boolean} first\n */\n jump(first) {\n const edge = first ? this.#menu.firstElementChild : this.#menu.lastElementChild;\n const target = this.#walk(edge, first);\n if (target) {\n this.#highlight(target);\n }\n }\n /**\n * Moves the highlight by as many enabled rows as the menu shows at once,\n * one when that cannot be measured, stopping at the last enabled row.\n * @param {boolean} forward\n */\n page(forward) {\n const selected = this.#selected();\n if (!selected) {\n return;\n }\n let target = selected;\n for (let i = 0; i !== this.#page(); ++i) {\n const next = this.#walk(target[`${forward ? 'next' : 'previous'}ElementSibling`], forward);\n if (!next) {\n break;\n }\n target = next;\n }\n this.#highlight(target);\n }\n #page() {\n const first = this.#menu.firstElementChild;\n if (!first || first.offsetHeight === 0) {\n return 1;\n }\n return Math.max(1, Math.trunc(this.#menu.clientHeight / first.offsetHeight));\n }\n}\n\n/**\n * A `<ful-select>`: a combobox over a loader's vocabulary of\n * `{ key, label, metadata }` entries, holding one key or, under `multiple`,\n * several. Typing filters the list, opening it from rest offers the whole\n * vocabulary, and the keyboard follows the combobox pattern: arrows move and\n * open (Alt+ArrowDown opens, Alt+ArrowUp closes), Home, End, PageUp and\n * PageDown move in the open list, Enter accepts the highlighted entry or,\n * with the list closed, submits the form, Escape reverts the edit, and Tab\n * or leaving the field commits it. Emptying the text of a single select and\n * leaving the field clears it. Backspace with the caret at the start removes\n * the last entry, and ArrowLeft there moves the focus to the badges of a\n * multiple select, where Enter, Space, Backspace or Delete remove one.\n *\n * Slots: the default one is the label, `info` sits beside it, `before` and\n * `after` are affixes around the control, `options` holds the `<option>`\n * elements of an in-memory vocabulary, `dropdown` replaces the dropdown's\n * row template and `items` the `items` template.\n *\n * Every change of the selection made through the element dispatches a\n * bubbling `change` whose detail carries `value` and `entry`, as the getters\n * answer them; assigning `value` dispatches none.\n */\nclass Select extends Field {\n /**\n * Read once at the upgrade, so a later write changes nothing: `name`,\n * `loader` (the component building the loader, `loaders:select` by\n * default), `k-type` (`number` or `boolean` coerce the keys, strings\n * otherwise), and the loader configuration `SelectLoader.create` reads,\n * but for `src` and `method`, which stay live.\n */\n static attributes = [\n 'name',\n 'loader',\n 'k-type',\n 'mode',\n 'preload:presence',\n 'revision',\n 'k-expr',\n 'l-expr',\n 'd-expr',\n 'm-expr',\n 'response-mapper',\n ];\n /**\n * Beside the field's claims: `multiple`, `item-list`, `value` as a comma\n * separated list of keys, trimmed, whether or not the select is multiple,\n * and `src` and `method`.\n */\n static observed = ['multiple:presence', 'item-list:presence', 'value:csv', 'src', 'method'];\n /**\n * Reads a present but empty `value` attribute of a single select as the\n * empty key, which an `<option value=\"\">` can carry; a multiple select reads\n * it as no keys.\n * @param {string} attr\n * @param {string|null} str\n * @returns {any}\n * @throws when the class declares no such attribute\n */\n unmarshal(attr, str) {\n if (attr === 'value' && str === '' && !this.hasAttribute('multiple')) {\n return [''];\n }\n return super.unmarshal(attr, str);\n }\n static slots = true;\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-control>\n <input type=\"text\" form=\"\" autocomplete=\"off\" role=\"combobox\" aria-autocomplete=\"list\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\n </ful-control>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n <ful-dropdown popover=\"manual\">{{{{ slots.dropdown }}}}</ful-dropdown>\n </ful-control-group>\n <ful-item-list></ful-item-list>\n <ful-field-error></ful-field-error>\n `;\n /**\n * `items` renders the selection below the control, shown under `item-list`,\n * over `entries`, the selected entries in order. A replacement must keep one\n * `<ful-item>` per entry, in order, each with a `<button>` that removes it.\n */\n static templates = {\n items: `\n <ful-item data-tpl-each=\"entries\" data-tpl-var=\"entry\" data-tpl-data-key=\"entry.key\">\n <div><span>{{ entry.label }}</span><button type=\"button\" data-tpl-aria-label=\"#l10n:t('select.remove')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button></div>\n </ful-item>\n `,\n };\n #loader;\n /** @type {{ src: string|null, method: string|null }} */\n #builtFrom = { src: null, method: null };\n #options;\n #control;\n #ddmenu;\n #input;\n #items;\n #itemstemplate;\n #multiple;\n #warnedComma = false;\n #values = new Map();\n #assignments = new Claims();\n #editing = false;\n #dload;\n #abortdload;\n /**\n * @param {{ slots: Record<string, DocumentFragment> }} conf\n * @returns {{ fragment: DocumentFragment, control: HTMLInputElement, error: Element|null, label: Element|null }}\n */\n _build({ slots }) {\n const name = this.declared('name');\n this.#options = slots.options;\n this.#buildLoader();\n\n this.#multiple = this.declared('multiple');\n this.#loader.prefetch?.()?.catch((/** @type any */ e) => {\n console.warn('failed to prefetch select options', this, 'reason:', e);\n });\n const fragment = this.template().withOverlay({ slots, name }).render();\n this.#input = fragment.querySelector('ful-control > input');\n this.#items = fragment.querySelector('ful-item-list');\n this.#itemstemplate =\n slots.items && !Fragments.isBlank(slots.items) ? Templates.fromFragment(slots.items) : null;\n Attributes.forward('input-', this, this.#input);\n this.#control = fragment.querySelector('ful-control');\n\n this.#ddmenu = fragment.querySelector('ful-dropdown');\n const listbox = Attributes.uid('ful-listbox');\n this.#ddmenu.setAttribute('listbox', listbox);\n this.#input.setAttribute('aria-controls', listbox);\n this.#ddmenu.addEventListener('beforetoggle', (/** @type any */ e) => {\n const open = e.newState === 'open';\n this.#input.setAttribute('aria-expanded', open ? 'true' : 'false');\n if (!open) {\n this.#input.removeAttribute('aria-activedescendant');\n }\n });\n this.#ddmenu.addEventListener('activechange', (/** @type any */ e) => {\n Attributes.set(this.#input, 'aria-activedescendant', e.detail.id);\n });\n const group = /** @type {HTMLElement} */ (fragment.querySelector('ful-control-group'));\n Anchors.wire(group, this.#ddmenu, { prefix: 'ful-select', stretch: true });\n [this.#dload, this.#abortdload] = Timing.throttle(400, () => this.#open());\n this.#wireChrome();\n this.#wireChips();\n this.#wireInput();\n this.#wireSelection();\n return {\n fragment,\n control: this.#input,\n error: fragment.querySelector('ful-field-error'),\n label: fragment.querySelector('label'),\n };\n }\n /**\n * Pointer interaction: the element toggles the dropdown, the item list's\n * remove buttons and the control's badges drop their entry.\n */\n #wireChrome() {\n this.addEventListener('click', (/** @type any */ e) => {\n if (!this._interactive()) {\n return;\n }\n const elsewhere = e.target.closest('button, [role=\"button\"], a[href], input, select, textarea');\n if (elsewhere && elsewhere !== this.#input) {\n return;\n }\n if (this.#ddmenu.shown) {\n this.#close();\n return;\n }\n this.#input.focus();\n this.#dload();\n });\n this.#items.addEventListener('click', (e) => {\n e.stopPropagation();\n if (!e.target.closest('button')) {\n return;\n }\n if (!this._interactive()) {\n return;\n }\n this.#removeKeyAt([...this.#items.children].indexOf(e.target.closest('ful-item')));\n });\n this.#control.addEventListener('click', (e) => {\n const badge = e.target instanceof Element ? e.target.closest('ful-badge') : null;\n if (!badge) {\n return;\n }\n e.stopPropagation();\n this.#removeBadge(badge);\n });\n }\n /**\n * Keyboard interaction over the chips: Enter/Space/Backspace/Delete remove,\n * arrows move between badges and the input, Escape returns to the input.\n */\n #wireChips() {\n this.addEventListener('keydown', (/** @type any */ e) => {\n const badge = e.target instanceof Element ? e.target.closest('ful-badge') : null;\n if (badge) {\n this.#chipKeydown(e, badge);\n return;\n }\n if (\n 'ArrowLeft' === e.code &&\n e.target === this.#input &&\n this.#input.selectionStart === 0 &&\n this.#input.selectionEnd === 0\n ) {\n this.#badges().at(-1)?.focus();\n }\n });\n }\n #wireInput() {\n this.#input.addEventListener('change', (e) => {\n e.stopPropagation();\n });\n this.#input.addEventListener('focus', () => {\n if (this.#editing) {\n return;\n }\n this.#input.select();\n });\n this.#input.addEventListener('blur', (e) => {\n e.stopPropagation();\n if (e.relatedTarget && this.contains(e.relatedTarget)) {\n return;\n }\n this.#abortdload();\n this.#close(true);\n });\n this.#input.addEventListener('keydown', (e) => {\n if (!this._interactive()) {\n return;\n }\n this.#comboboxKeydown(e);\n });\n this.#input.addEventListener('input', (e) => {\n e.stopPropagation();\n if (!this._interactive()) {\n return;\n }\n this.#editing = true;\n this.#dload();\n });\n }\n #wireSelection() {\n this.#ddmenu.addEventListener('change', (e) => {\n e.stopPropagation();\n if (!this._interactive()) {\n this.#close();\n return;\n }\n if (!this.#multiple) {\n this.#values.clear();\n }\n this.#editing = false;\n this.#values.set(this.#coerceKey(e.detail.entry.key), e.detail.entry);\n this.#changed();\n this.#input.focus();\n this.#ddmenu.hide();\n if (!this.#multiple) {\n this.#input.select();\n }\n });\n }\n /**\n * Hands the loader to the callback, for runtime changes such as\n * `update(entries)` on an in-memory loader.\n * @template T\n * @param {(loader: any) => T|Promise<T>} fn\n * @returns {Promise<T>} what the callback answers\n */\n async withLoader(fn) {\n return await fn(this.#loader);\n }\n /**\n * Drops whatever the loader is holding, awaits its prefetch (which fetches\n * again when the select declares `preload`), and asks it about the current\n * selection again, which is what a select whose vocabulary depends on\n * another control needs when that control changes. A key the loader no\n * longer knows is dropped from the selection, so a value invalidated by the\n * change does not survive it, and one it still knows keeps its place with a\n * fresh label. The badges and items follow, and no `change` is dispatched.\n *\n * Where the vocabulary lives at a different address, write `src` or call\n * `reconfigure`, which build the loader for the new url and reload.\n * @returns {Promise<void>}\n * @throws what the loader's invalidate, prefetch or key lookup throws\n */\n async reload() {\n await this.#loader.invalidate?.();\n await this.#loader.prefetch?.();\n const keys = [...this.#values.keys()];\n if (keys.length === 0) {\n return;\n }\n await this.#resolve(keys, this.#assignments.take());\n }\n /**\n * The url the loader asks for the vocabulary, reflected as the `src`\n * attribute.\n * @returns {string|null}\n */\n get src() {\n return this.getAttribute('src');\n }\n /**\n * Points the select at another vocabulary: the dropdown closes, the loader\n * is built again through its component's `create`, as at the render, and\n * the select reloads as `reload()` does, so a selected key the new\n * vocabulary does not know is dropped and one it knows is labelled again,\n * with no `change` dispatched. A write that does not change the url does\n * nothing.\n *\n * The reload is not awaited: a failed fetch or lookup surfaces as an\n * unhandled rejection.\n * @param {string|null|undefined} value null or undefined removes the url,\n * which the default loader answers with the slotted options\n */\n set src(value) {\n this.reflectTo('src', value ?? null);\n if (this.#followAttributes()) {\n this.reload();\n }\n }\n /**\n * The http method the default loader sends, reflected as the `method`\n * attribute; `POST` when absent.\n * @returns {string|null}\n */\n get method() {\n return this.getAttribute('method');\n }\n /**\n * Changes the http method the way `src` changes the url: the loader is\n * built again and the select reloads.\n * @param {string|null|undefined} value\n */\n set method(value) {\n this.reflectTo('method', value ?? null);\n if (this.#followAttributes()) {\n this.reload();\n }\n }\n /**\n * Writes `src` and `method` together and reloads once: the loader is built\n * again for the pair when either changed, as a single write of either does,\n * and the select then reloads as `reload()` does, whether or not they\n * changed.\n *\n * citta.addEventListener('change', () => {\n * cap.reconfigure({ src: `/api/cap?citta=${citta.value}` }, { notify: true });\n * });\n * @param {{ src?: string|null, method?: string|null }} attributes a name\n * left out keeps its value, null removes the attribute\n * @param {{ notify?: boolean }} [options] `notify` dispatches `change` when\n * the reload dropped a selected key, so a form or a table filtered by the\n * select sees the value it lost; nothing is dispatched otherwise\n * @returns {Promise<void>} settling once the reload has\n * @throws what the loader's invalidate, prefetch or key lookup throws\n */\n async reconfigure(attributes, { notify = false } = {}) {\n for (const name of ['src', 'method']) {\n if (name in attributes) {\n this.reflectTo(name, attributes[name] ?? null);\n }\n }\n this.#followAttributes();\n const before = [...this.#values.keys()];\n await this.reload();\n const after = [...this.#values.keys()];\n if (notify && after.length !== before.length) {\n this._notifyChange({ entry: this.entry });\n }\n }\n #buildLoader() {\n this.#builtFrom = { src: this.getAttribute('src'), method: this.getAttribute('method') };\n this.#loader = this.component(this.declared('loader') ?? 'loaders:select').create(this, {\n options: this.#options,\n });\n }\n /** @returns {boolean} whether the loader was built again */\n #followAttributes() {\n if (\n this.getAttribute('src') === this.#builtFrom.src &&\n this.getAttribute('method') === this.#builtFrom.method\n ) {\n return false;\n }\n this.#abortdload();\n this.#close();\n this.#buildLoader();\n return true;\n }\n #badges() {\n return Array.from(this.#control.querySelectorAll(':scope > ful-badge'));\n }\n #removeBadge(badge) {\n if (!this._interactive()) {\n return;\n }\n this.#removeKeyAt(this.#badges().indexOf(badge));\n }\n /** Badges and item list entries share the selection's order, so one index serves both. */\n #removeKeyAt(index) {\n const key = Array.from(this.#values.keys())[index];\n if (key === undefined) {\n return;\n }\n this.#values.delete(key);\n this.#changed();\n }\n #chipKeydown(e, badge) {\n switch (e.code) {\n case 'NumpadEnter':\n case 'Enter':\n case 'Space':\n case 'Backspace':\n case 'Delete': {\n e.preventDefault();\n this.#removeBadge(badge);\n this.#input.focus();\n break;\n }\n case 'ArrowLeft': {\n e.preventDefault();\n (this.#badges()[this.#badges().indexOf(badge) - 1] ?? this.#input).focus();\n break;\n }\n case 'ArrowRight': {\n e.preventDefault();\n (this.#badges()[this.#badges().indexOf(badge) + 1] ?? this.#input).focus();\n break;\n }\n case 'Escape': {\n this.#input.focus();\n break;\n }\n }\n }\n /**\n * The combobox keyboard contract: arrows browse and move, Home/End and\n * PageUp/PageDown navigate the open list, Enter accepts or submits,\n * Escape/Tab close, Backspace at the caret's leftmost spot drops the last\n * entry.\n */\n #comboboxKeydown(e) {\n switch (e.code) {\n case 'ArrowUp':\n case 'ArrowDown': {\n e.preventDefault();\n this.#arrowKeydown(e);\n break;\n }\n case 'Home': {\n if (this.#ddmenu.shown) {\n e.preventDefault();\n this.#ddmenu.jump(true);\n }\n break;\n }\n case 'End': {\n if (this.#ddmenu.shown) {\n e.preventDefault();\n this.#ddmenu.jump(false);\n }\n break;\n }\n case 'PageDown':\n case 'PageUp': {\n if (this.#ddmenu.shown) {\n e.preventDefault();\n this.#ddmenu.page('PageDown' === e.code);\n }\n break;\n }\n case 'Escape': {\n this.#abortdload();\n this.#close();\n break;\n }\n case 'NumpadEnter':\n case 'Enter': {\n if (!this.#ddmenu.shown) {\n return;\n }\n e.preventDefault();\n this.#editing = false;\n this.#display();\n this.#ddmenu.acceptSelection();\n break;\n }\n case 'Backspace': {\n if (this.#input.selectionStart === 0 && this.#input.selectionEnd === 0) {\n this.#removeKeyAt(this.#values.size - 1);\n }\n break;\n }\n case 'Tab': {\n this.#abortdload();\n this.#close(true);\n break;\n }\n }\n }\n #arrowKeydown(e) {\n const forward = 'ArrowDown' === e.code;\n if (e.altKey) {\n if (forward && !this.#ddmenu.shown) {\n this.#open();\n } else if (!forward && this.#ddmenu.shown) {\n this.#close();\n }\n return;\n }\n this.#ddmenu.moveOrShow(forward, () => this.#loader.load(this.#query()), [...this.#values.keys()]);\n }\n /**\n * @param {boolean} [commit] whether the user is leaving the field, which\n * only a blur or a Tab is: an emptied single select is then cleared\n */\n #close(commit = false) {\n this.#ddmenu.hide();\n const cleared =\n commit && this.#editing && !this.#multiple && this.#input.value === '' && this.#values.size !== 0;\n this.#editing = false;\n if (cleared) {\n this.#values.clear();\n this.#changed();\n }\n this.#display();\n }\n #open() {\n return this.#ddmenu.show(() => this.#loader.load(this.#query()), [...this.#values.keys()]);\n }\n #query() {\n return this.#editing ? this.#input.value : '';\n }\n /**\n * The text typed to search the vocabulary: what the dropdown was last\n * asked to match. `''` while the field is not being searched, its control\n * then showing the selection's label rather than a query.\n * @returns {string}\n */\n get query() {\n return this.#query();\n }\n #display() {\n const entry = this.#values.values().next().value;\n this.#input.value = this.#multiple ? '' : (entry?.label ?? '');\n }\n #selection() {\n return [...this.#values.values()];\n }\n #changed() {\n this.#syncBadges();\n this._notifyChange({ entry: this.entry });\n }\n #syncBadges() {\n const badges = this.#multiple\n ? Array.from(this.#values.entries()).map(([k, entry], index) => {\n const b = document.createElement('ful-badge');\n b.setAttribute('role', 'button');\n b.setAttribute('tabindex', index === 0 ? '0' : '-1');\n b.setAttribute('value', k);\n b.innerText = entry.label;\n return b;\n })\n : [];\n for (const b of this.#control.querySelectorAll(':scope > ful-badge')) {\n b.remove();\n }\n this.#input.before(...badges);\n if (!this.#editing) {\n this.#display();\n }\n this.#items.replaceChildren();\n (this.#itemstemplate ?? this.template('items'))\n .withOverlay({ entries: this.#selection() })\n .renderTo(this.#items);\n }\n /**\n * The selection is a Map keyed strictly, and keys arrive both as attribute\n * text and as whatever a loader's endpoint carries: every key entering it\n * goes through here. A key that does not decode is left as it is.\n */\n #coerceKey(k) {\n switch (this.declared('k-type')) {\n case 'number': {\n const n = k === '' ? Number.NaN : Number(k);\n return Number.isNaN(n) ? k : n;\n }\n case 'boolean': {\n if (k === true || k === 'true') {\n return true;\n }\n if (k === false || k === 'false') {\n return false;\n }\n return k;\n }\n default:\n return String(k);\n }\n }\n /**\n * Selects the keys, coerced by `k-type`: a key, an array of keys, or null or\n * undefined for none. The empty string is a key like any other. The keys\n * are applied at once, each labeled by itself until the loader's `exact`\n * answers; a key it does not answer is then dropped, a key removed in the\n * meantime stays removed, and a later assignment wins over the late answer.\n * A failed lookup keeps the keys and surfaces as an unhandled rejection.\n * No `change` is dispatched. A key containing a\n * comma, which the value attribute cannot carry, is kept and warned about\n * once per element.\n * @param {any} vs\n */\n set value(vs) {\n const keys = (vs == null ? [] : Array.isArray(vs) ? vs : [vs]).map((k) => this.#coerceKey(k));\n if (!this.#warnedComma && keys.some((k) => typeof k === 'string' && k.includes(','))) {\n this.#warnedComma = true;\n console.warn('a ful-select key cannot contain a comma: it is unexpressible in the value attribute', this);\n }\n this.#values = new Map(keys.map((k) => [k, { key: k, label: k, metadata: undefined }]));\n const claim = this.#assignments.take();\n if (!this.#control) {\n return;\n }\n this.#syncBadges();\n if (keys.length === 0) {\n return;\n }\n this.#resolve(keys, claim);\n }\n async #resolve(keys, claim) {\n const entries = await this.#loader.exact(...keys);\n if (claim.stale) {\n return;\n }\n const resolved = new Map(entries.map((e) => [this.#coerceKey(e.key), e]));\n for (const key of keys) {\n if (!this.#values.has(key)) {\n continue;\n }\n if (resolved.has(key)) {\n this.#values.set(key, resolved.get(key));\n } else {\n this.#values.delete(key);\n }\n }\n this.#syncBadges();\n }\n /**\n * The selected keys, in selection order, for a multiple select; the one\n * key, or null, for a single one.\n * @returns {any}\n */\n get value() {\n if (this.#multiple) {\n return [...this.#values.keys()];\n }\n return [...this.#values.keys()][0] ?? null;\n }\n /**\n * The selection as entries, the ones in the `change` detail: an array for\n * a multiple select, the one entry or null for a single one. An entry whose\n * label has not been resolved yet carries its key as the label.\n * @returns {SelectEntry|SelectEntry[]|null}\n */\n get entry() {\n const selection = this.#selection();\n if (this.#multiple) {\n return selection;\n }\n return selection[0] ?? null;\n }\n #useItemList;\n /**\n * Whether the select holds several keys: `value` and `entry` answer arrays,\n * the input stays empty and the selection shows as removable badges in the\n * control.\n * @returns {boolean}\n */\n get multiple() {\n return this.#multiple;\n }\n /** @param {boolean} v */\n set multiple(v) {\n this.#multiple = v;\n this.reflectTo('multiple', v);\n }\n /**\n * Whether the selection shows as the `items` list below the control instead\n * of as badges in it.\n * @returns {boolean}\n */\n get itemList() {\n return this.#useItemList;\n }\n /** @param {boolean} v */\n set itemList(v) {\n this.#useItemList = v;\n this.reflectTo('item-list', v);\n }\n}\n\nexport { Dropdown, Select, SelectLoader };\n","import { Attributes, Fragments } from '../../ftl/index.mjs';\nimport { Field } from './field.mjs';\n\n/**\n * A group of radios declared as `ful-radio` children. Each `ful-radio` becomes\n * a radio input carrying its attributes, labelled by its content; every\n * `input-*` attribute on the group is forwarded onto each radio as well. The\n * default slot is the `<legend>`, and `header` and `footer` slots frame the\n * list. The radios share a name of their own (derived from `name`, or minted\n * when there is none) and carry `form=\"\"`, so the group is the only element\n * the form sees. A radio's native `change` is stopped and republished as the\n * group's own.\n *\n * The host carries the `radiogroup` role, `aria-readonly`, `aria-required`,\n * `aria-invalid` and the description. The disabled and readonly claims act on\n * the group's `<fieldset>`, and readonly refuses every click inside it.\n * `focus()` lands on the first radio.\n */\nclass RadioGroup extends Field {\n /** @type {string[]} */\n static attributes = ['name', 'type'];\n static slots = true;\n /** @type {string} */\n static ROLE = 'radiogroup';\n static template = `\n <fieldset>\n <legend>\n {{{{ slots.default }}}}\n </legend>\n <header data-tpl-if=\"slots.header\">\n {{{{ slots.header }}}}\n </header>\n <ful-radio-list>\n <div class=\"label-wrapper\" data-tpl-each=\"inputsAndLabels\" data-tpl-var=\"ial\">\n <label>\n {{{{ ial[0] }}}}\n <div>{{{{ ial[1] }}}}</div>\n </label>\n </div>\n </ful-radio-list>\n <ful-field-error></ful-field-error>\n <footer data-tpl-if=\"slots.footer\">\n {{{{ slots.footer }}}}\n </footer>\n </fieldset>\n `;\n #fieldset;\n #firstRadio;\n #booleanType;\n /**\n * @param {{slots: any}} conf\n * @returns {any} the pieces: the first radio as the control, the fieldset\n * as the `claims` and `freeze` pieces, and the host as the `described` and\n * `announces` pieces\n */\n _build({ slots }) {\n const name = this.declared('name') ?? Attributes.uid('ful-radiogroup');\n const radioEls = Array.from(slots.default.querySelectorAll('ful-radio'));\n const inputsAndLabels = radioEls.map((el) => {\n const input = document.createElement('input');\n input.setAttribute('type', 'radio');\n Attributes.forward('input-', this, input);\n Attributes.forward('', el, input);\n input.setAttribute('name', `${name}-ignore`);\n input.setAttribute('form', ``);\n input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this._notifyChange();\n });\n const label = Fragments.fromChildNodes(el);\n return [input, label];\n });\n\n radioEls.forEach((el) => {\n el.remove();\n });\n const fragment = this.template().withOverlay({ name, slots, inputsAndLabels }).render();\n this.#fieldset = /** @type HTMLElement */ (fragment.firstElementChild);\n this.#firstRadio = fragment.querySelector('input[type=radio]');\n this.#booleanType = this.declared('type') === 'boolean';\n return {\n fragment,\n control: this.#firstRadio,\n error: fragment.querySelector('ful-field-error'),\n described: this,\n claims: this.#fieldset,\n announces: this,\n freeze: this.#fieldset,\n };\n }\n /**\n * The value of the checked radio, `null` when none is. Under\n * `type=\"boolean\"` it answers `true` for a radio whose value is `true` and\n * `false` for any other. Writing a value checks the radio carrying it, and\n * writing `null` or a value no radio carries clears the selection.\n * @type {string | boolean | null}\n */\n get value() {\n /** @type {HTMLInputElement|null} */\n const checked = this.querySelector('input[type=radio]:checked');\n return checked ? (this.#booleanType ? checked.value === 'true' : checked.value) : null;\n }\n set value(value) {\n const radios = this.querySelectorAll(`input[type=radio]`);\n const clear = () => {\n radios.forEach((el) => {\n /** @type {HTMLInputElement} */ (el).checked = false;\n });\n };\n if (value === null) {\n clear();\n return;\n }\n /** @type {HTMLInputElement|null} */\n const el = this.querySelector(`input[type=radio][value=${CSS.escape(String(value))}]`);\n if (el === null) {\n clear();\n return;\n }\n el.checked = true;\n }\n}\n\nexport { RadioGroup };\n","import { Attributes } from '../../ftl/index.mjs';\nimport { Field } from './field.mjs';\n\n/**\n * A checkbox, or a switch with the `switch` role under `type=\"switch\"`. The\n * label is the default slot, pointed at the input with `for` and `id`, so a\n * click on it toggles the value. Every `input-*` attribute is forwarded onto\n * the input. The input's native `change` is stopped and republished as the\n * field's own. Readonly freezes the whole choice, label included: no click\n * inside it toggles the value while the claim holds.\n */\nclass Checkbox extends Field {\n /** @type {string[]} */\n static attributes = ['type'];\n /** @type {string[]} */\n static observed = ['value:bool'];\n static slots = true;\n static template = `\n <ful-choice data-tpl-switch=\"isSwitch\">\n <input type=\"checkbox\" data-tpl-role=\"isSwitch ? 'switch' : false\" form=\"\">\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n </ful-choice>\n <ful-field-error></ful-field-error>\n `;\n #container;\n #input;\n /**\n * @param {{ slots: Record<string, DocumentFragment> | undefined }} conf\n * @returns {any} the pieces, the `ful-choice` container being the `freeze` piece\n */\n _build({ slots }) {\n const isSwitch = this.declared('type') === 'switch';\n const fragment = this.template().withOverlay({ slots, isSwitch }).render();\n this.#container = fragment.firstElementChild;\n this.#input = fragment.querySelector('input');\n Attributes.forward('input-', this, this.#input);\n this.#input.addEventListener('change', (evt) => {\n evt.stopPropagation();\n this._notifyChange();\n });\n const label = fragment.querySelector('label');\n return {\n fragment,\n control: this.#input,\n error: fragment.querySelector('ful-field-error'),\n label,\n freeze: this.#container,\n };\n }\n /**\n * Whether the box is checked. The `value` attribute is read with the `bool`\n * mapper, where only the text `true` means checked.\n * @type {boolean}\n */\n get value() {\n return this.#input.checked;\n }\n set value(value) {\n this.#input.checked = value;\n }\n}\n\nexport { Checkbox };\n","import { Attributes, Fragments, Localization, Nodes, ParsedElement, Rendering, Templates } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\n\n/**\n * @typedef {{ page: number, size: number }} TablePageRequest the zero based\n * index of the page and the number of rows in a page\n */\n/**\n * @typedef {{ sorter: string, order: string }} TableSortRequest the sort key\n * of a column and its direction, `asc` or `desc`\n */\n/**\n * @typedef {{ data: any[], size: number }} TablePageResponse the rows of the\n * requested page and the total number of rows across every page\n */\n/**\n * @typedef {{ load(pageRequest: TablePageRequest, sortRequest: TableSortRequest|null, filterRequest: Record<string, any>): Promise<TablePageResponse> }} TableRowLoader\n */\n\n/**\n * The sort control of a table header, `ful-sorter`: a `role=\"button\"` with\n * `tabindex=\"0\"`, activated by a click or by Enter, NumpadEnter or Space.\n *\n * Each activation dispatches `sort:requested` (bubbling, not cancelable) with\n * `detail.value` set to `{ sorter, order }`: `sorter` is the `sorter`\n * attribute, read once at the upgrade, and `order` is the one after the\n * current `order` in the cycle `asc`, `desc`, `null`. The button does not\n * change its own `order`: whoever handles the event sets it, which `ful-table`\n * does once the sorted page has loaded.\n */\nclass SortButton extends ParsedElement {\n static attributes = ['sorter'];\n static observed = ['order'];\n #order;\n render() {\n const sorter = this.declared('sorter');\n const orders = ['asc', 'desc', null];\n this.setAttribute('role', 'button');\n this.setAttribute('tabindex', '0');\n this.addEventListener('click', () => {\n const nextOrder = orders[(orders.indexOf(this.order) + 1) % 3];\n this.dispatchEvent(\n new CustomEvent('sort:requested', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: { sorter, order: nextOrder },\n },\n }),\n );\n });\n this.addEventListener('keydown', (/** @type any */ evt) => {\n if (!['Enter', 'NumpadEnter', 'Space'].includes(evt.code)) {\n return;\n }\n evt.preventDefault();\n this.click();\n });\n }\n\n /**\n * The direction the column is sorted in, `null` when unsorted.\n * @returns {string|null}\n */\n get order() {\n return this.#order || null;\n }\n\n /**\n * Reflects the direction to the `order` attribute and sets `aria-sort` on\n * the enclosing `<th>`, if any: `ascending` for `asc`, `descending` for any\n * other non-empty value, removed for an empty one.\n * @param {string|null} value an empty string or `null` means unsorted\n */\n set order(value) {\n this.#order = value || null;\n this.reflectTo('order', this.#order);\n const th = this.closest('th');\n if (!th) {\n return;\n }\n Attributes.set(th, 'aria-sort', this.#order ? ('asc' === this.#order ? 'ascending' : 'descending') : null);\n }\n}\n\n/**\n * The pager, `ful-pagination`: a previous button, a window of page buttons\n * around the current page, a next button, a reload button and a line saying\n * which page of how many is shown.\n *\n * The window holds at most `pages` buttons (read once at the upgrade, default 5),\n * centred on the current page and shifted back on the last pages so it stays\n * full. The current page's button carries `aria-current=\"page\"` and stays\n * enabled. Previous and next are disabled where there is no page to go to.\n *\n * A click on an enabled button other than the current page dispatches\n * `page:requested` (bubbling, not cancelable) with `detail.value` the zero based\n * index of the page asked for; the reload button asks for the current page.\n * The pager does not move itself: whoever handles the event calls `update`,\n * which `ful-table` does once the page has loaded.\n *\n * The icons are the `ful-icon` names in `Pagination.config`.\n */\nclass Pagination extends ParsedElement {\n static observed = ['total:number', 'current:number'];\n static attributes = ['pages:number'];\n static config = {\n prevIcon: 'chevron-left',\n nextIcon: 'chevron-right',\n reloadIcon: 'arrow-clockwise',\n };\n static template = `\n <ful-pagination-bar role=\"navigation\" data-tpl-aria-label=\"#l10n:t('pagination.navigation')\">\n <ul>\n <li data-ref=\"index\"> {{ #l10n:t('pagination.showing', { 'current': curr.label, 'total': total }) }}</li>\n <li data-ref=\"reload\"><button type=\"button\" data-tpl-aria-label=\"#l10n:t('pagination.reload')\"><ful-icon data-tpl-name=\"config.reloadIcon\" aria-hidden=\"true\"></ful-icon></button></li>\n <li data-ref=\"prev\">\n <button type=\"button\" data-tpl-disabled=\"prev.enabled ? false : true\" data-tpl-aria-label=\"#l10n:t('pagination.previous')\" data-tpl-data-page=\"prev.index\">\n <ful-icon data-tpl-name=\"config.prevIcon\" aria-hidden=\"true\"></ful-icon>\n </button>\n </li>\n <li data-ref=\"page\" data-tpl-each=\"pages\" data-tpl-var=\"page\">\n <button type=\"button\" data-tpl-aria-current=\"curr.index == page.index ? 'page' : false\" data-tpl-data-page=\"page.index\" >\n {{ page.label }}\n </button>\n </li>\n <li data-ref=\"next\">\n <button type=\"button\" data-tpl-disabled=\"next.enabled ? false : true\" data-tpl-aria-label=\"#l10n:t('pagination.next')\" data-tpl-data-page=\"next.index\">\n <ful-icon data-tpl-name=\"config.nextIcon\" aria-hidden=\"true\"></ful-icon>\n </button>\n </li>\n </ul>\n </ful-pagination-bar>\n `;\n #total = 0;\n #current = 0;\n render() {\n this.addEventListener('click', (/** @type any */ evt) => {\n const el = evt.target.closest('button');\n if (!el || el.hasAttribute('disabled')) {\n return;\n }\n if (el.getAttribute('aria-current') === 'page') {\n return;\n }\n this.dispatchEvent(\n new CustomEvent('page:requested', {\n bubbles: true,\n cancelable: false,\n detail: {\n value: Number(el.dataset.page ?? this.#current),\n },\n }),\n );\n });\n }\n /**\n * Moves the pager to a page, a page count, or both, reflects both to their\n * attributes and repaints the bar once. A key left out keeps its value; a\n * `null` one becomes 0. A count below one is shown as one empty page.\n *\n * The bar is replaced on every repaint. When the focus was inside it, it\n * moves to the equivalent control of the new bar: the button of the same\n * page, else the same enabled control, else the current page's button.\n * @param {{ current?: number|null, total?: number|null }} [state] `current`\n * is the zero based index of the page shown, `total` the number of pages\n */\n update({ current: toCurrent, total: toTotal } = {}) {\n if (toCurrent !== undefined) {\n this.#current = toCurrent ?? 0;\n }\n if (toTotal !== undefined) {\n this.#total = toTotal ?? 0;\n }\n this.reflectTo('current', this.#current);\n this.reflectTo('total', this.#total);\n const current = this.#current;\n const total = this.#total;\n const maxRender = this.declared('pages') ?? 5;\n const pageCount = Math.max(total, 1);\n const hasPrev = current > 0;\n const hasNext = current + 1 < pageCount;\n const prev = { index: hasPrev ? current - 1 : null, enabled: hasPrev };\n const curr = { index: current, label: current + 1 };\n const next = { index: hasNext ? current + 1 : null, enabled: hasNext };\n const rendered = Math.max(1, Math.min(maxRender, pageCount));\n const first = Math.max(0, Math.min(current - Math.floor((rendered - 1) / 2), pageCount - rendered));\n const pages = Array.from({ length: rendered }, (_, offset) => ({\n index: first + offset,\n label: first + offset + 1,\n }));\n const focused = this.contains(document.activeElement)\n ? /** @type HTMLElement */ (document.activeElement).closest('li')?.getAttribute('data-ref')\n : null;\n const page = focused === 'page' ? /** @type any */ (document.activeElement).dataset.page : null;\n this.template().withOverlay({ total: pageCount, prev, curr, next, pages }).renderTo(this);\n if (!focused) {\n return;\n }\n const back =\n (page === null ? null : this.querySelector(`li[data-ref=page] button[data-page=\"${page}\"]`)) ??\n this.querySelector(`li[data-ref=${focused}] button:not(:disabled)`) ??\n this.querySelector('li[data-ref=page] button[aria-current=page]');\n /** @type HTMLElement */ (back)?.focus();\n }\n /**\n * The number of pages, as last written.\n * @returns {number}\n */\n get total() {\n return this.#total;\n }\n /**\n * Same as `update({ total: value })`.\n * @param {number|null} value\n */\n set total(value) {\n this.update({ total: value });\n }\n /**\n * The zero based index of the page shown.\n * @returns {number}\n */\n get current() {\n return this.#current;\n }\n /**\n * Same as `update({ current: value })`.\n * @param {number|null} value\n */\n set current(value) {\n this.update({ current: value });\n }\n}\n\n/** Reads the schema declaration into the header and row templates a table renders from. */\nclass TableSchemaParser {\n /**\n * Builds a header `<tr>` and a row `<tr data-tpl-each=\"rows\">` from the\n * `<schema>` child of the slot. The `<schema>` attributes are copied onto\n * both rows. Each `<column>` becomes a `<th>` and a `<td>` carrying the\n * column's attributes except `title`, `sorter` and `order`, so a\n * `data-tpl-*` on a column applies to both cells; the two templates carry\n * `inHeaders` and `inRows` in their scope, so a column can tell them apart,\n * as in `data-tpl-if=\"inRows\"`. The header cell holds the `<title>` child\n * element of the column, else the text of its `title` attribute, wrapped\n * in a `ful-sorter` when the column declares `sorter` or `order`. The body\n * cell holds the column's remaining children.\n *\n * The column elements are consumed: their `<title>`, `title`, `sorter` and\n * `order` are removed and their children moved into the cells.\n * @param {DocumentFragment|Element|undefined} nodeOrFragment the `schema`\n * slot, undefined when the table has none\n * @param {ReturnType<ParsedElement['template']>} template the template the\n * header and row templates derive from, keeping its scope\n * @returns {{ headersTemplate: ReturnType<ParsedElement['template']>, rowsTemplate: ReturnType<ParsedElement['template']>, sort: { sorter: string|null, order: string|null } | null, length: number }}\n * `sort` is the initial sort, taken from the first column declaring both\n * `order` and `sorter` (a column with only `order` gets an arrow but no\n * initial sort), `null` when none does; `length` is the number of columns\n * @throws {Error} when the slot is missing or holds no `<schema>`\n */\n static parse(nodeOrFragment, template) {\n const schema = nodeOrFragment ? Nodes.queryChildren(nodeOrFragment, 'schema') : null;\n if (!schema) {\n throw new Error('missing expected <schema>: ful-table needs a <template slot=\"schema\"> holding one');\n }\n const headersTr = document.createElement('tr');\n const rowsTr = document.createElement('tr');\n rowsTr.setAttribute('data-tpl-each', 'rows');\n for (const attr of schema.getAttributeNames()) {\n const value = schema.getAttribute(attr);\n headersTr.setAttribute(attr, value ?? '');\n rowsTr.setAttribute(attr, value ?? '');\n }\n const columns = Nodes.queryChildrenAll(schema, 'column');\n const sort =\n columns\n .filter((v) => v.hasAttribute('order') && v.hasAttribute('sorter'))\n .map((v) => ({ sorter: v.getAttribute('sorter'), order: v.getAttribute('order') }))[0] ?? null;\n for (const column of columns) {\n const maybeTitleTag = Nodes.queryChildren(column, 'title');\n const sorter = column.getAttribute('sorter');\n const order = column.getAttribute('order');\n const titleNode = maybeTitleTag ?? document.createTextNode(column.getAttribute('title') ?? '');\n maybeTitleTag?.remove();\n column.removeAttribute('sorter');\n column.removeAttribute('order');\n column.removeAttribute('title');\n const wrappedTitleNode =\n !sorter && !order\n ? titleNode\n : (() => {\n const fulSorter = document.createElement('ful-sorter');\n if (sorter) {\n fulSorter.setAttribute('sorter', sorter);\n }\n if (order) {\n fulSorter.setAttribute('order', order);\n }\n fulSorter.append(titleNode);\n return fulSorter;\n })();\n const th = document.createElement('th');\n const td = document.createElement('td');\n for (const attr of column.getAttributeNames()) {\n const value = column.getAttribute(attr);\n th.setAttribute(attr, value ?? '');\n td.setAttribute(attr, value ?? '');\n }\n th.append(wrappedTitleNode);\n td.append(...column.childNodes);\n headersTr.append(th);\n rowsTr.append(td);\n }\n\n return {\n headersTemplate: template\n .withOverlay({ inHeaders: true, inRows: false })\n .withFragment(Fragments.from(headersTr)),\n rowsTemplate: template.withOverlay({ inHeaders: false, inRows: true }).withFragment(Fragments.from(rowsTr)),\n sort,\n length: columns.length,\n };\n }\n}\n\n/** Serves a table's rows from an array held in memory, applying the sort and the paging itself. */\nclass InMemoryTableLoader {\n #data;\n /**\n * @param {any[]} data the rows\n */\n constructor(data) {\n this.#data = data;\n }\n /**\n * Sorts a copy of the rows by the `sorter` property, rows missing it last\n * in either direction and rows with equal values in their original order,\n * then slices the requested page. The filters are ignored.\n * @param {TablePageRequest} pageRequest\n * @param {{ sorter?: string|null, order?: string|null } | null} sortRequest\n * `order` `desc` sorts descending, anything else ascending; no `sorter`\n * keeps the original order\n * @param {Record<string, any>} filterRequest not read\n * @returns {Promise<TablePageResponse>}\n */\n async load(pageRequest, sortRequest, filterRequest) {\n const rows = this.#sorted(sortRequest);\n const begin = pageRequest.page * pageRequest.size;\n const end = begin + pageRequest.size;\n const page = rows.slice(begin, end);\n const totalElements = rows.length;\n return {\n data: page,\n size: totalElements,\n };\n }\n #sorted(sortRequest) {\n if (!sortRequest?.sorter) {\n return this.#data;\n }\n const { sorter, order } = sortRequest;\n const sign = order === 'desc' ? -1 : 1;\n return [...this.#data].sort((l, r) => {\n const a = l?.[sorter];\n const b = r?.[sorter];\n if (a === b) {\n return 0;\n }\n if (a == null) {\n return 1;\n }\n if (b == null) {\n return -1;\n }\n return (a < b ? -1 : 1) * sign;\n });\n }\n /**\n * Replaces the rows. The table shows them at its next load.\n * @param {any[]} data\n */\n update(data) {\n this.#data = data;\n }\n}\n\n/** Requests one page of rows from a url, passing the page, the sort and the filters to the endpoint. */\nclass RemoteTableLoader {\n #http;\n #url;\n #method;\n #responseMapper;\n /**\n * @param {{ request(method: string, url: string): any }} http the `http-client` component\n * @param {string} url\n * @param {string} method\n * @param {(response: any) => TablePageResponse} [responseMapper] turns the\n * parsed json body into the page response; the identity when omitted\n */\n constructor(http, url, method, responseMapper = (response) => response) {\n this.#http = http;\n this.#url = url;\n this.#method = method;\n this.#responseMapper = responseMapper;\n }\n /**\n * Sends the query parameters `page`, `size`, `sort` as `sorter,order`\n * (left out when `sortRequest` is null) and `filters` as a json object of\n * the filters with a truthy value (left out when there is none), and\n * answers the json body through the response mapper.\n * @param {TablePageRequest} pageRequest\n * @param {TableSortRequest|null} sortRequest\n * @param {Record<string, any>} filterRequest\n * @returns {Promise<TablePageResponse>} rejecting with what the client's\n * `fetchJson()` rejects with\n */\n async load(pageRequest, sortRequest, filterRequest) {\n const filters = Object.entries(filterRequest).filter(([k, v]) => v);\n return await this.#http\n .request(this.#method, this.#url)\n .param('page', pageRequest.page)\n .param('size', pageRequest.size)\n .param('sort', sortRequest ? `${sortRequest.sorter},${sortRequest.order}` : null)\n .param('filters', filters.length > 0 ? JSON.stringify(Object.fromEntries(filters)) : null)\n .fetchJson()\n .then((response) => this.#responseMapper(response));\n }\n}\n\n/**\n * Builds the table's loader from its attributes: an in-memory one, or the\n * remote loader over src.\n *\n * A component registered under the `loader` attribute replaces this one and\n * must implement `load(pageRequest, sortRequest, filterRequest)`, answering\n * `{ data, size }`: the rows of the requested page and the total count of\n * rows. `pageRequest` carries the page index and its size, `sortRequest` the column and direction, and\n * `filterRequest` the values of the filters in the slot.\n */\nclass TableLoader {\n /**\n * A table with a `src` attribute gets a `RemoteTableLoader` sending through\n * the `http-client` component with the `method` attribute or `GET`, and\n * mapping the response through the component named by `response-mapper`,\n * if any. A table without `src` gets an empty `InMemoryTableLoader`, which\n * `withLoader` reaches to give it rows.\n * @param {Element & { component(name: string): any }} el the table\n * @param {unknown} [conf] not read\n * @returns {InMemoryTableLoader | RemoteTableLoader}\n */\n static create(el, conf) {\n const url = el.getAttribute('src');\n if (url) {\n const http = el.component('http-client');\n const method = el.getAttribute('method') ?? 'GET';\n const responseMapper = el.hasAttribute('response-mapper')\n ? el.component(/** @type {string} */ (el.getAttribute('response-mapper')))\n : (/** @type any */ response) => response;\n return new RemoteTableLoader(http, url, method, responseMapper);\n }\n return new InMemoryTableLoader([]);\n }\n}\n\n/**\n * A table, `ful-table`, loading its rows a page at a time from a loader, with\n * a header sorter per sortable column, a `ful-pagination` under it and an\n * optional filter form.\n *\n * The loader is the component named by `loader`, default `loaders:table`\n * (see `TableLoader`). The `schema` slot declares the columns (see\n * `TableSchemaParser.parse`); the `filters` slot is wrapped in a `ful-form`,\n * whose values are the filter request; the `caption`, `footer` and `empty`\n * slots go in the table's caption, its `<tfoot>` and the panel shown for a\n * load answering no rows. Attributes starting with `table-` are forwarded,\n * without the prefix, to the inner `<table>`.\n *\n * With `autoload` the first load starts at the upgrade, which does not wait\n * for it. Without it the table shows an initial panel until `load`,\n * `reload` or `resetWithFilter` is called.\n *\n * Inside the table a `page:requested` loads that page with the current size,\n * sort and filters; a `sort:requested` loads the current page with the new\n * sort (none for a `null` order) and, once that load is the one showing, sets\n * the order of the sorter that asked and clears the others; a `submit:success`\n * of the filter form loads the first page with the submitted request as the\n * filters. The loads these start, and the autoload, are not awaited by\n * anything: a failure shows the error panel and its rejection is unhandled.\n */\nclass Table extends ParsedElement {\n /** Read once at the upgrade. */\n static attributes = ['loader', 'autoload:presence'];\n /** These stay live after the upgrade: see `pageSize`, `src` and `method`. */\n static observed = ['page-size:number', 'src', 'method'];\n static slots = true;\n static config = {\n searchIcon: 'search',\n emptyIcon: 'inbox',\n };\n static template = `\n <ful-form data-tpl-if=\"slots.filters\">\n {{{{ slots.filters }}}}\n </ful-form>\n <ful-table-wrapper>\n <table>\n <caption data-tpl-if=\"slots.caption\">{{{{ slots.caption }}}}</caption>\n <thead></thead>\n <tbody></tbody>\n <tbody data-ref=\"initial\">\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <ful-empty>\n <ful-icon data-tpl-if=\"config.searchIcon\" data-tpl-name=\"config.searchIcon\" aria-hidden=\"true\"></ful-icon>\n {{ #l10n:t('table.initial') }}\n </ful-empty>\n </td>\n </tr>\n </tbody>\n <tbody data-ref=\"empty\" hidden>\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <ful-empty data-tpl-if=\"slots.empty\" data-ref=\"empty-authors\"></ful-empty>\n <ful-empty data-tpl-if=\"!slots.empty\">\n <ful-icon data-tpl-if=\"config.emptyIcon\" data-tpl-name=\"config.emptyIcon\" aria-hidden=\"true\"></ful-icon>\n {{ #l10n:t('table.no-data') }}\n </ful-empty>\n </td>\n </tr>\n </tbody>\n <tbody data-ref=\"loading\" hidden>\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <ful-spinner class=\"big\" role=\"status\"><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></ful-spinner>\n </td>\n </tr>\n </tbody>\n <tbody data-ref=\"feedback\" hidden>\n <tr>\n <td data-tpl-colspan=\"schema.length\">\n <div role=\"alert\">\n <p>{{ #l10n:t('table.error') }}</p>\n <div data-ref=\"feedback-error\"></div>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot data-tpl-if=\"slots.footer\">\n {{{{ slots.footer }}}}\n </tfoot>\n </table>\n </ful-table-wrapper>\n <ful-pagination current=\"0\" total=\"1\"></ful-pagination>\n `;\n static templates = {\n row: `\n {{{{ schema.rowsTemplate.withOverlay({'rows': pageResponse.data}).render() }}}}\n `,\n };\n #loader;\n #schema;\n #body;\n #loading;\n #noAutoload;\n #empty;\n #emptyAuthors;\n #emptyTemplate;\n #feedback;\n #paginator;\n #sorters;\n /** @type {{ pageRequest: { page: number, size: number }, sortRequest: any, filterRequest: any }} */\n #latestRequest = { pageRequest: { page: 0, size: 10 }, sortRequest: null, filterRequest: {} };\n /** whether a load has been asked for, by autoload or by a caller */\n #loadRequested = false;\n #loads = new Claims();\n /** @type {{ src: string|null, method: string|null }} */\n #builtFrom = { src: null, method: null };\n /**\n * How many rows a page asks the loader for: the size the next load will\n * carry. Ten before the render.\n * @returns {number}\n */\n get pageSize() {\n return this.#latestRequest.pageRequest.size;\n }\n /**\n * Changes the page size and reloads from the first page, keeping the sort\n * and the filters. A table that has not loaded yet only records it:\n * writing the size is not a request to start loading, which is what\n * `autoload` and `reload()` are for. A write that does not change the size\n * does nothing. A write made before the render is replaced by the declared\n * `page-size` when the table renders.\n *\n * The reload is not awaited: a failure shows the error panel and its\n * rejection is unhandled.\n * @param {number|null|undefined} value absent or null is the default of\n * ten, so removing the attribute restores it\n */\n set pageSize(value) {\n const size = value ?? 10;\n if (size === this.#latestRequest.pageRequest.size) {\n return;\n }\n this.#latestRequest = { ...this.#latestRequest, pageRequest: { page: 0, size } };\n if (!this.#loadRequested) {\n return;\n }\n this.reload();\n }\n /**\n * The url the loader asks for rows, reflected as the `src` attribute.\n * @returns {string|null}\n */\n get src() {\n return this.getAttribute('src');\n }\n /**\n * Points the table at another url: the loader is built again through its\n * component's `create`, as at the render, and the table reloads from the\n * first page, keeping the size, the sort and the filters. A table that has\n * not loaded yet only rebuilds its loader. A write that does not change the\n * url does nothing.\n *\n * The reload is not awaited: a failure shows the error panel and its\n * rejection is unhandled.\n * @param {string|null|undefined} value null or undefined removes the url,\n * which the default loader answers with an empty in-memory loader\n */\n set src(value) {\n this.reflectTo('src', value ?? null);\n if (this.#followAttributes() && this.#loadRequested) {\n this.reload();\n }\n }\n /**\n * The http method the default loader sends with, reflected as the `method`\n * attribute; `GET` when absent.\n * @returns {string|null}\n */\n get method() {\n return this.getAttribute('method');\n }\n /**\n * Changes the http method the way `src` changes the url: the loader is\n * built again and the table reloads from the first page.\n * @param {string|null|undefined} value\n */\n set method(value) {\n this.reflectTo('method', value ?? null);\n if (this.#followAttributes() && this.#loadRequested) {\n this.reload();\n }\n }\n /**\n * Writes `src` and `method` together and loads once: the loader is built\n * again for the pair when either changed, the page going back to the first\n * one as a single write of either does, and the table then reloads as\n * `reload()` does, whether or not they changed. Unlike a write of either,\n * it loads a table that has not loaded yet.\n * @param {{ src?: string|null, method?: string|null }} attributes a name\n * left out keeps its value, null removes the attribute\n * @returns {Promise<void>} as `load`\n */\n async reconfigure(attributes) {\n for (const name of ['src', 'method']) {\n if (name in attributes) {\n this.reflectTo(name, attributes[name] ?? null);\n }\n }\n this.#followAttributes();\n return await this.reload();\n }\n #buildLoader() {\n this.#builtFrom = { src: this.getAttribute('src'), method: this.getAttribute('method') };\n this.#loader = this.component(this.declared('loader') ?? 'loaders:table').create(this);\n }\n /** @returns {boolean} whether the loader was built again */\n #followAttributes() {\n if (\n this.getAttribute('src') === this.#builtFrom.src &&\n this.getAttribute('method') === this.#builtFrom.method\n ) {\n return false;\n }\n this.#buildLoader();\n this.#latestRequest = { ...this.#latestRequest, pageRequest: { ...this.#latestRequest.pageRequest, page: 0 } };\n return true;\n }\n /**\n * @param {{ slots: Record<string, DocumentFragment> }} c\n * @returns {Promise<void>}\n * @throws {Error} when the `schema` slot is missing or holds no `<schema>`\n */\n async render({ slots }) {\n const template = this.template();\n const schema = TableSchemaParser.parse(slots.schema, template);\n const fragment = template.withOverlay({ slots, schema }).render();\n const tableWrapper = /** @type HTMLTableElement */ (Nodes.queryChildren(fragment, 'ful-table-wrapper'));\n const table = /** @type HTMLTableElement */ (tableWrapper.querySelector('table'));\n Attributes.forward('table-', this, table);\n this.#buildLoader();\n\n this.#schema = schema;\n this.#body = table.querySelector(':scope > tbody');\n this.#loading = table.querySelector(':scope > tbody[data-ref=loading]');\n this.#noAutoload = table.querySelector(':scope > tbody[data-ref=initial]');\n this.#empty = table.querySelector(':scope > tbody[data-ref=empty]');\n this.#emptyAuthors = this.#empty.querySelector('ful-empty[data-ref=empty-authors]');\n this.#emptyTemplate =\n slots.empty && !Fragments.isBlank(slots.empty) ? Templates.fromFragment(slots.empty) : null;\n this.#feedback = table.querySelector(':scope > tbody[data-ref=feedback]');\n this.#paginator = Nodes.queryChildren(fragment, 'ful-pagination');\n this.replaceChildren(fragment);\n const thead = /** @type HTMLTableSectionElement */ (this.querySelector('thead'));\n schema.headersTemplate.renderTo(thead);\n this.#sorters = thead.querySelectorAll('ful-sorter');\n await Rendering.waitForChildren(this);\n\n const maybeForm = /** @type any */ (Nodes.queryChildren(this, 'ful-form'));\n this.#latestRequest = {\n pageRequest: {\n page: 0,\n size: this.declared('page-size') ?? 10,\n },\n sortRequest: schema.sort,\n filterRequest: maybeForm?.values ?? {},\n };\n maybeForm?.addEventListener('submit:success', async (evt) => {\n await this.#loadPage(0, evt.detail.request);\n });\n this.addEventListener('page:requested', async (/** @type any */ e) => {\n await this.#loadPage(e.detail.value, this.#latestRequest.filterRequest);\n });\n this.addEventListener('sort:requested', async (/** @type any */ e) => {\n const sortRequest = e.detail.value.order ? e.detail.value : null;\n await this.load(this.#latestRequest.pageRequest, sortRequest, this.#latestRequest.filterRequest);\n if (this.#latestRequest.sortRequest !== sortRequest) {\n return;\n }\n this.#sorters.forEach((s) => {\n s.order = null;\n });\n e.target.order = e.detail.value.order;\n });\n if (this.declared('autoload')) {\n this.reload();\n }\n }\n\n /**\n * Loads the last request that loaded, or, before any has, the first page\n * with the declared size and sort and the values of the filters slot. A\n * size written through `pageSize` since then replaces the page with the\n * first one at that size.\n * @returns {Promise<void>} as `load`\n */\n async reload() {\n return await this.load(\n this.#latestRequest.pageRequest,\n this.#latestRequest.sortRequest,\n this.#latestRequest.filterRequest,\n );\n }\n /**\n * Asks the loader for a page and shows it.\n *\n * While the load runs the table carries `aria-busy=\"true\"`, and the rows\n * already shown stay; the spinner panel shows only when there are none.\n * When the loader answers, the rows and the pager are replaced, the empty\n * panel shows for an answer with no rows (the `empty` slot rendered with\n * `schema`, `pageRequest`, `filterRequest` and `pageResponse` in scope),\n * the request becomes the one\n * `reload` repeats, `aria-busy` is removed and `load:success` is\n * dispatched (bubbling, not cancelable) with `detail` set to\n * `{ pageRequest, sortRequest, filterRequest, response }`. A page beyond\n * the last one the answer reports is not shown: the last page is loaded\n * instead, and the returned promise settles with that load.\n *\n * When the loader rejects, the rows are removed, the error panel shows the\n * `reason` of each of the error's `problems`, one per line, or the error as text,\n * `aria-busy` is removed, `load:failure` is dispatched (bubbling, not\n * cancelable) with `detail` set to\n * `{ pageRequest, sortRequest, filterRequest, exception }`, and the\n * returned promise rejects with the same error.\n *\n * A load started after this one supersedes it: when this one's answer or\n * failure arrives it changes nothing, dispatches nothing and resolves.\n * @param {TablePageRequest} pageRequest\n * @param {TableSortRequest|null} sortRequest\n * @param {Record<string, any>} filterRequest\n * @returns {Promise<void>}\n * @throws what the loader rejects with, unless a newer load superseded this one\n */\n async load(pageRequest, sortRequest, filterRequest) {\n this.#loadRequested = true;\n const claim = this.#loads.take();\n this.#loading.toggleAttribute('hidden', this.#body.childElementCount > 0);\n this.#feedback.setAttribute('hidden', '');\n this.#noAutoload.setAttribute('hidden', '');\n this.#empty.setAttribute('hidden', '');\n this.setAttribute('aria-busy', 'true');\n let lastPage;\n try {\n const pageResponse = await this.#loader.load(pageRequest, sortRequest, filterRequest);\n if (claim.stale) {\n return;\n }\n lastPage = Math.max(0, Math.ceil(pageResponse.size / pageRequest.size) - 1);\n if (pageRequest.page <= lastPage) {\n this.#latestRequest = { pageRequest, sortRequest, filterRequest };\n this.#update(pageRequest, sortRequest, filterRequest, pageResponse);\n this.removeAttribute('aria-busy');\n this.dispatchEvent(\n new CustomEvent('load:success', {\n bubbles: true,\n cancelable: false,\n detail: { pageRequest, sortRequest, filterRequest, response: pageResponse },\n }),\n );\n return;\n }\n } catch (/** @type any */ error) {\n if (claim.stale) {\n return;\n }\n this.#loading.setAttribute('hidden', '');\n this.#body.replaceChildren();\n this.#feedback.removeAttribute('hidden');\n this.#feedback.querySelector('[data-ref=feedback-error]').textContent = Localization.of().failure(error);\n this.removeAttribute('aria-busy');\n this.dispatchEvent(\n new CustomEvent('load:failure', {\n bubbles: true,\n cancelable: false,\n detail: { pageRequest, sortRequest, filterRequest, exception: error },\n }),\n );\n throw error;\n }\n return await this.load({ page: lastPage, size: pageRequest.size }, sortRequest, filterRequest);\n }\n /**\n * Hands the loader to the callback, for runtime reconfigurations, such as\n * `update(rows)` on the in-memory loader. The loader exists from the\n * render on. Nothing is reloaded.\n * @template T\n * @param {(loader: any) => T | Promise<T>} fn\n * @returns {Promise<T>} what `fn` returns or resolves to\n */\n async withLoader(fn) {\n return await fn(this.#loader);\n }\n /**\n * Loads the first page with the given filters, keeping the size and the sort.\n * @param {Record<string, any>} filterRequest\n * @returns {Promise<void>} as `load`\n */\n async resetWithFilter(filterRequest) {\n return await this.#loadPage(0, filterRequest);\n }\n #loadPage(page, filterRequest) {\n return this.load(\n { page, size: this.#latestRequest.pageRequest.size },\n this.#latestRequest.sortRequest,\n filterRequest,\n );\n }\n #update(pageRequest, sortRequest, filterRequest, pageResponse) {\n const pages = Math.ceil(pageResponse.size / pageRequest.size);\n this.#loading.setAttribute('hidden', '');\n this.#body.replaceChildren(\n this.template('row')\n .withOverlay({\n schema: this.#schema,\n pageRequest,\n filterRequest,\n pageResponse,\n })\n .render(),\n );\n this.#empty.toggleAttribute('hidden', pageResponse.data.length !== 0);\n if (this.#emptyTemplate && pageResponse.data.length === 0) {\n this.#emptyAuthors.replaceChildren(\n this.#emptyTemplate\n .withOverlay({ schema: this.#schema, pageRequest, filterRequest, pageResponse })\n .render(),\n );\n }\n this.#paginator.update({ current: pageRequest.page, total: pages });\n }\n}\n\nexport { TableLoader, SortButton, Table, TableSchemaParser, Pagination };\n","/** how long, in milliseconds, a type-ahead search waits for its next character */\nconst TYPEAHEAD_WINDOW = 500;\n\n/**\n * Wires the keyboard protocol of a menu popover onto it.\n *\n * - As the menu opens, the focus moves to the item `current` answers, or to\n * the first item when it answers none.\n * - As the menu closes, the focus moves back to the invoker, but only when it\n * was inside the menu, so a close caused by a click elsewhere leaves it\n * where it went.\n * - ArrowDown and ArrowUp move the focus to the next and previous item,\n * wrapping at both ends; Home and End move it to the first and last.\n * - Enter, the numpad Enter and Space call `click()` on the focused item and\n * move the focus to the invoker. Closing the menu is left to the item's\n * click handling.\n * - Escape moves the focus to the invoker and leaves the close to the\n * platform.\n * - A printable character typed without Ctrl, Alt or Meta searches the\n * items' trimmed text, ignoring case, wrapping past the last item.\n * Characters typed within 500ms of each other add to one search. A search\n * of one character, or of one character repeated, moves the focus to the\n * next item after the focused one starting with it, so repeating a letter\n * cycles through those items; a longer search moves it to the first item,\n * from the focused one on, starting with the whole search. A search that\n * matches nothing leaves the focus where it is.\n *\n * The keys are read by `KeyboardEvent.code`, the typed characters by\n * `KeyboardEvent.key`. A handled key has its default prevented, except\n * Escape and a search that matched nothing. A key whose target is not inside\n * an item is ignored.\n *\n * `items` answers the items in the order they are walked, and is called on\n * every gesture, so a menu that fills itself later needs no rewiring.\n *\n * @param {HTMLElement} invoker the element the menu belongs to, and where the focus goes back\n * @param {HTMLElement} menu the `[popover]` holding the items\n * @param {{items: () => HTMLElement[], current?: () => HTMLElement|null|undefined}} conf\n * `items` answers the items; `current` answers the item an opening focuses\n */\nconst wireMenuKeys = (invoker, menu, { items, current = () => null }) => {\n let typed = '';\n let typedAt = 0;\n menu.addEventListener('beforetoggle', (/** @type any */ evt) => {\n if (evt.newState === 'closed' && menu.contains(document.activeElement)) {\n invoker.focus();\n }\n });\n menu.addEventListener('toggle', (/** @type any */ evt) => {\n if (evt.newState !== 'open') {\n return;\n }\n const all = items();\n (current() ?? all[0])?.focus();\n });\n menu.addEventListener('keydown', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n const all = items();\n const item = all.find((candidate) => candidate === target || candidate.contains(target));\n if (!item) {\n return;\n }\n const at = all.indexOf(item);\n switch (evt.code) {\n case 'ArrowDown': {\n evt.preventDefault();\n all[(at + 1) % all.length]?.focus();\n return;\n }\n case 'ArrowUp': {\n evt.preventDefault();\n all[(at - 1 + all.length) % all.length]?.focus();\n return;\n }\n case 'Home': {\n evt.preventDefault();\n all[0]?.focus();\n return;\n }\n case 'End': {\n evt.preventDefault();\n all[all.length - 1]?.focus();\n return;\n }\n case 'Enter':\n case 'NumpadEnter':\n case 'Space': {\n evt.preventDefault();\n item.click();\n invoker.focus();\n return;\n }\n case 'Escape': {\n invoker.focus();\n return;\n }\n }\n if (evt.key.length !== 1 || evt.ctrlKey || evt.altKey || evt.metaKey) {\n return;\n }\n const now = Date.now();\n typed = now - typedAt > TYPEAHEAD_WINDOW ? evt.key : typed + evt.key;\n typedAt = now;\n const wanted = typed.toLowerCase();\n const repeated = [...wanted].every((character) => character === wanted[0]);\n const search = repeated ? wanted[0] : wanted;\n const from = repeated ? at + 1 : at;\n const found = [...all.slice(from), ...all.slice(0, from)].find((candidate) =>\n (candidate.textContent ?? '').trim().toLowerCase().startsWith(search),\n );\n if (found) {\n evt.preventDefault();\n found.focus();\n }\n });\n};\n\nexport { wireMenuKeys };\n","import { Attributes } from '../../ftl/index.mjs';\nimport { Anchors } from '../disclosures/anchors.mjs';\nimport { wireMenuKeys } from '../disclosures/menu-keys.mjs';\n\n/**\n * An invoker button paired with the `ul[popover][role=menu]` that follows it:\n * the chrome behind every filter's operator, sensitivity and boolean value.\n *\n * It fills the menu from a vocabulary, wires it the first time more than one\n * choice survives the whitelist, pins the button to a static glyph when a\n * single one does, takes the shared menu keyboard protocol, and keeps the\n * button's value, glyph and aria-label in step. A pick that changes the value\n * calls back; the host decides what that means.\n *\n * The button's `value` attribute is the store, as it is for a native control:\n * the menu protocol finds the current item by it, and nothing mirrors it.\n */\nclass ChoiceButton {\n /**\n * The declared choices narrowed to a vocabulary, in the declared order.\n * When none of them is in the vocabulary, or none is declared, the answer\n * is a copy of the whole vocabulary.\n * @param {string[] | null | undefined} declared\n * @param {string[]} vocabulary\n * @returns {string[]}\n */\n static narrow(declared, vocabulary) {\n const narrowed = (declared ?? []).filter((choice) => vocabulary.includes(choice));\n return narrowed.length > 0 ? narrowed : [...vocabulary];\n }\n #button;\n #menu;\n #vocabulary;\n #glyphs;\n #labelFor;\n #display;\n #interactive;\n #onPick;\n #allowed;\n #claimed = false;\n #wired = false;\n /**\n * Takes the button's next sibling as its menu and listens for picks on it.\n * The menu is neither filled nor wired until `allowed` is first written.\n *\n * A click on an item, while `interactive()` answers true, sets the value,\n * hides the menu and, when the value changed, calls `onPick`.\n * @param {HTMLElement} button the invoker, whose next sibling is its menu\n * @param {{vocabulary: string[], glyphs?: Record<string,string>, labelFor?: (v: string) => string,\n * display?: ((v: string) => string)|null, interactive?: () => boolean, onPick?: (v: string) => void}} conf\n * `vocabulary` lists every choice; `glyphs` maps a choice to its compact\n * glyph; `labelFor` answers the localized word, used as the button's\n * `aria-label` and beside the glyph in the menu (the choice itself by\n * default); `display` answers the button's text (by default the glyph,\n * or the choice where it has none); `interactive` is asked before a\n * pick is taken; `onPick` receives a pick that changed the value\n */\n constructor(\n button,\n { vocabulary, glyphs = {}, labelFor = (v) => v, display = null, interactive = () => true, onPick = () => {} },\n ) {\n this.#button = button;\n this.#menu = /** @type HTMLElement */ (button.nextElementSibling);\n this.#vocabulary = vocabulary;\n this.#glyphs = glyphs;\n this.#labelFor = labelFor;\n this.#display = display ?? ((choice) => glyphs[choice] ?? choice);\n this.#interactive = interactive;\n this.#onPick = onPick;\n this.#allowed = [...vocabulary];\n this.#menu.addEventListener('click', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n const item = /** @type HTMLElement | null */ (target.closest('li > a'));\n if (!item || !this.#interactive()) {\n return;\n }\n const picked = /** @type string */ (item.getAttribute('value'));\n const previous = this.value;\n this.value = picked;\n /** @type any */ (this.#menu).hidePopover?.();\n if (previous !== picked) {\n this.#onPick(picked);\n }\n });\n }\n /**\n * The choices the menu offers. Writing it narrows the declared set with\n * `narrow`, refills the menu, wires the popover and the menu keyboard the\n * first time more than one choice is allowed, and updates the button's\n * disabled state and popup attributes. When one choice is left the button\n * is pinned and the value is set to it.\n * @type {string[]}\n */\n get allowed() {\n return this.#allowed;\n }\n set allowed(declared) {\n this.#allowed = ChoiceButton.narrow(declared, this.#vocabulary);\n this.#fill();\n if (!this.#wired && this.#allowed.length > 1) {\n this.#wire();\n this.#wired = true;\n }\n this.#sync();\n if (this.pinned) {\n this.value = this.#allowed[0];\n }\n }\n /**\n * The choice when the menu allows it, otherwise the first allowed one.\n * @param {string|null} choice\n * @returns {string}\n */\n preferring(choice) {\n return choice !== null && this.#allowed.includes(choice) ? choice : this.#allowed[0];\n }\n /**\n * Whether fewer than two choices are allowed. A pinned button is disabled,\n * opens no menu and shows the single choice as its value.\n * @returns {boolean}\n */\n get pinned() {\n return this.#allowed.length < 2;\n }\n /**\n * The host's fixed claim: hides the button with the `hidden` attribute\n * while `value` keeps answering.\n * @param {boolean} fixed\n */\n set fixed(fixed) {\n this.#button.toggleAttribute('hidden', !!fixed);\n }\n /**\n * The current choice, stored as the button's `value` attribute, where the\n * menu keyboard also finds it. Writing it sets the button's text from\n * `display`, its `aria-label` from `labelFor`, and `aria-checked` on the\n * menu item carrying it. It does not call `onPick`.\n * @type {string | null}\n */\n get value() {\n return this.#button.getAttribute('value');\n }\n set value(choice) {\n this.#button.setAttribute('value', /** @type {string} */ (choice));\n this.#button.textContent = this.#display(choice);\n Attributes.set(this.#button, 'aria-label', this.#labelFor(choice));\n this.#mark();\n }\n #mark() {\n const current = this.value;\n for (const item of this.#items()) {\n item.setAttribute('aria-checked', String(item.getAttribute('value') === current));\n }\n }\n /**\n * The host's disabled claim. The button is disabled while either the claim\n * or the pin holds, so lifting one does not enable it while the other holds.\n * @param {boolean} claimed\n */\n set claimed(claimed) {\n this.#claimed = claimed;\n this.#sync();\n }\n #fill() {\n this.#menu.replaceChildren(\n ...this.#allowed.map((choice) => {\n const li = document.createElement('li');\n li.setAttribute('role', 'none');\n const a = document.createElement('a');\n a.setAttribute('role', 'menuitemradio');\n a.setAttribute('tabindex', '-1');\n a.setAttribute('value', choice);\n const word = this.#labelFor(choice);\n const glyph = this.#glyphs[choice] ?? choice;\n if (word === choice && glyph === choice) {\n a.innerText = choice;\n } else {\n const glyphSpan = document.createElement('span');\n glyphSpan.innerText = glyph;\n const wordSpan = document.createElement('span');\n wordSpan.innerText = word;\n a.append(glyphSpan, wordSpan);\n }\n li.append(a);\n return li;\n }),\n );\n this.#mark();\n }\n #sync() {\n const pinned = this.pinned;\n this.#button.toggleAttribute('disabled', pinned || this.#claimed);\n Attributes.set(this.#button, 'aria-haspopup', pinned ? null : 'true');\n Attributes.set(this.#button, 'aria-expanded', pinned ? null : 'false');\n if (pinned) {\n this.#button.removeAttribute('popovertarget');\n } else if (this.#menu.id) {\n this.#button.setAttribute('popovertarget', this.#menu.id);\n }\n }\n #items() {\n return Array.from(this.#menu.querySelectorAll('li > a'), (a) => /** @type HTMLAnchorElement */ (a));\n }\n #wire() {\n Anchors.wire(this.#button, this.#menu, { prefix: 'ful-filter-menu', invoke: true, expanded: true });\n wireMenuKeys(this.#button, this.#menu, {\n items: () => this.#items(),\n current: () => this.#items().find((a) => a.getAttribute('value') === this.value),\n });\n }\n}\n\nexport { ChoiceButton };\n","import { Localization } from '../../ftl/index.mjs';\nimport { ChoiceButton } from './choice-button.mjs';\nimport { Field } from './field.mjs';\nimport { Instant } from './temporals.mjs';\nimport { Input } from './input.mjs';\nimport { Select } from './select.mjs';\n\nconst GLYPHS = {\n EQ: '=',\n NEQ: '≠',\n LT: '<',\n GT: '>',\n LTE: '≤',\n GTE: '≥',\n BETWEEN: '↔',\n CONTAINS: '…a…',\n STARTS_WITH: 'a…',\n ENDS_WITH: '…a',\n};\nconst COMPARE_OPERATORS = ['EQ', 'NEQ', 'LT', 'GT', 'LTE', 'GTE', 'BETWEEN'];\nconst TEXT_OPERATORS = [...COMPARE_OPERATORS, 'CONTAINS', 'STARTS_WITH', 'ENDS_WITH'];\nconst SENSITIVITIES = ['IGNORE_CASE', 'CASE_SENSITIVE'];\n\nconst SENSITIVITY_GLYPHS = {\n IGNORE_CASE: 'aa',\n CASE_SENSITIVE: 'Aa',\n};\n\nconst { t } = Localization.of();\nconst operatorLabel = (op) => t(`filters.op.${op}`);\nconst sensitivityLabel = (sensitivity) => t(`filters.sensitivity.${sensitivity}`);\nconst booleanValueLabel = (token) => t(token === '' ? 'filters.boolean.any' : `filters.boolean.${token}`);\n\n/**\n * What a filter currently filters on, in the words a reader sees: the text of\n * its label, the operator in force (null for a set membership filter declaring\n * none) and the non-empty operands as text. The operands are what the controls\n * show, such as a select's labels, not the keys the value carries.\n * @typedef {{ label: string|null, operator: string|null, operands: string[] }} FilterCriterion\n */\n\nconst labelTextOf = (filter) => filter.querySelector(':scope > label')?.textContent.trim() || null;\n\n/**\n * Pins a button to the choice the singular attribute names, hiding it. A name\n * outside the vocabulary pins the fallback instead, and declaring the plural\n * beside the singular is ignored: both are warned about.\n * @param {HTMLElement & { declared(name: string): any }} el\n * @param {ChoiceButton} button\n * @param {{ singular: string, plural: string, vocabulary: string[], fallback: string }} names\n */\nconst fixChoice = (el, button, { singular, plural, vocabulary, fallback }) => {\n const fixed = el.declared(singular);\n if (fixed === null) {\n return;\n }\n if (el.hasAttribute(plural)) {\n console.warn(`${el.localName}: ${singular} fixes what ${plural} offers a menu for, the plural is ignored`, el);\n }\n const known = vocabulary.includes(fixed);\n if (!known) {\n console.warn(`${el.localName}: '${fixed}' is not one of its ${plural}, the default is pinned instead`, el);\n }\n button.allowed = [known ? fixed : fallback];\n button.fixed = true;\n};\n\n/** @returns {FilterCriterion|null} */\nconst asCriterion = (label, operator, operands) => {\n const shown = operands.filter((o) => o !== null && o !== undefined && `${o}` !== '');\n return shown.length === 0 ? null : { label, operator, operands: shown.map((o) => `${o}`) };\n};\n\n/**\n * The shared shape of every operator-and-operands filter: an operator menu, one\n * or two operands of the type the subclass declares, and a tuple that mirrors\n * the data-jpa compare annotations.\n *\n * The value is `[operator, operand]`, or `[operator, from, to]` for BETWEEN,\n * the only operator that shows the second operand. The `operators` attribute\n * whitelists the menu; the `operator` attribute fixes the operator for the\n * element's life instead, hiding its button, and every tuple then carries it.\n * Declaring both warns and the singular wins; a fixed name outside the\n * vocabulary warns and fixes the default operator.\n *\n * Both operands mirror the disabled and readonly claims, and readonly also\n * refuses the clicks that would open the operator menu. The change event fires\n * when either operand changes or a different operator is picked.\n */\nclass CompareFilter extends Input {\n static observed = ['value:json', 'operators:csv'];\n static attributes = ['operator'];\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-affix>\n <button data-ref=\"operator\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n </ful-affix>\n <ful-control>\n <input data-ref=\"value1\" data-tpl-type=\"type\" form=\"\">\n <input data-ref=\"value2\" data-tpl-type=\"type\" form=\"\" hidden>\n </ful-control>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _operator;\n _container;\n _value1;\n _value2;\n _build(conf) {\n const pieces = super._build(conf);\n const fragment = pieces.fragment;\n this._container = fragment.querySelector('ful-control-group');\n this._value1 = fragment.querySelector('[data-ref=value1]');\n this._value2 = fragment.querySelector('[data-ref=value2]');\n this._operator = new ChoiceButton(/** @type HTMLElement */ (fragment.querySelector('[data-ref=operator]')), {\n vocabulary: this._vocabulary(),\n glyphs: GLYPHS,\n labelFor: operatorLabel,\n interactive: () => this._interactive(),\n onPick: () => {\n this._syncBetween();\n this._notifyChange();\n },\n });\n this.operators = this.declared('operators');\n if (this._operator.value === null) {\n this._showDefaultOperator();\n }\n fixChoice(this, this._operator, {\n singular: 'operator',\n plural: 'operators',\n vocabulary: this._vocabulary(),\n fallback: this._defaultOperator(),\n });\n return { ...pieces, freeze: this._container, also: [this._value2] };\n }\n _showDefaultOperator() {\n this._showOperator(this._operator.preferring(this._defaultOperator()));\n }\n /**\n * Restores the declared `value` tuple, operator included, as a field reset\n * does. Without a `value` attribute it empties the operands and also shows\n * the default operator again, or the first whitelisted one where the\n * default is not allowed.\n */\n formResetCallback() {\n super.formResetCallback();\n if (!this.hasAttribute('value')) {\n this._showDefaultOperator();\n }\n }\n /**\n * The native input type both operands render with.\n * @returns {string}\n */\n _type() {\n return 'text';\n }\n /**\n * Converts an operand from its input's value to the form the tuple carries.\n * @param {string} v\n * @returns {string|null}\n */\n _serialize(v) {\n return v;\n }\n /**\n * Converts an operand from the tuple to the value its input shows.\n * @param {string} v\n * @returns {string}\n */\n _deserialize(v) {\n return v;\n }\n /**\n * The operator shown on render and after a valueless reset, when the whitelist allows it.\n * @returns {string}\n */\n _defaultOperator() {\n return 'EQ';\n }\n /**\n * Every operator the filter knows, which `operators` narrows.\n * @returns {string[]}\n */\n _vocabulary() {\n return COMPARE_OPERATORS;\n }\n _declaredOperators;\n /**\n * The operators the menu offers, narrowed to the vocabulary: an empty list,\n * or one where no name is known, offers all of it. A single operator pins\n * the button, and an assigned tuple then carries that operator whatever it\n * names. An assignment made before the upgrade is held narrowed and\n * answered back until the render, when the `operators` attribute is applied\n * over it, an absent attribute meaning the whole vocabulary. Assignments are\n * ignored while the `operator` attribute fixes the operator.\n * @returns {string[]|undefined} undefined before the upgrade when nothing was assigned\n */\n get operators() {\n return this._operator ? this._operator.allowed : this._declaredOperators;\n }\n /** @param {string[]|null} declared */\n set operators(declared) {\n if (this.declared('operator') !== null) {\n return;\n }\n if (!this._operator) {\n this._declaredOperators = ChoiceButton.narrow(declared, this._vocabulary());\n return;\n }\n this._operator.allowed = declared;\n this._syncBetween();\n }\n /**\n * The filter's tuple, `[operator, operand]` or `[operator, from, to]` for\n * BETWEEN, each operand converted by `_serialize` (an ISO instant for the\n * instant filter). Null while any operand the operator uses is empty.\n * @returns {any[]|null}\n */\n get value() {\n return this._tuple();\n }\n /**\n * Shows a tuple: the operator it names, unless a pinned or fixed operator\n * replaces it, and its operands, an operand missing from a shorter tuple\n * leaving its input empty. Null or undefined empties both operands and\n * keeps the operator.\n * @param {any[]|null|undefined} v\n */\n set value(v) {\n this._applyTuple(v);\n }\n _tuple() {\n const operator = this._operator.value;\n const values = this.#operands();\n return values.some((v) => v === '') ? null : [operator, ...values.map((v) => this._serialize(v))];\n }\n _applyTuple(v) {\n if (v == null) {\n this._value1.value = '';\n this._value2.value = '';\n return;\n }\n const [declared, ...values] = v;\n const operator = this._operator.pinned ? this._operator.allowed[0] : declared;\n this._showOperator(operator);\n this._value1.value = values[0] ? this._deserialize(values[0]) : (values[0] ?? '');\n this._value2.value = values[1] ? this._deserialize(values[1]) : (values[1] ?? '');\n }\n _showOperator(operator) {\n this._operator.value = operator;\n this._syncBetween();\n }\n /** Shows the second operand only while the operator is BETWEEN. */\n _syncBetween() {\n this._value2.toggleAttribute('hidden', this._operator.value !== 'BETWEEN');\n }\n /**\n * The operator and the operands the operator uses, as their inputs show\n * them rather than as serialized: a date filter describes what is in its\n * control, not the ISO string it sends. Null while every one of those\n * operands is empty, so a BETWEEN with one bound answers that bound while\n * its value is still null.\n * @returns {FilterCriterion|null}\n */\n get criterion() {\n return asCriterion(labelTextOf(this), this._operator.value, this.#operands());\n }\n #operands() {\n return this._operator.value === 'BETWEEN' ? [this._value1.value, this._value2.value] : [this._value1.value];\n }\n /**\n * The field's own disabled claim. Setting it disables both operands and\n * every menu button the filter composes; a button pinned to one choice\n * stays disabled when the claim is lifted.\n * @returns {boolean}\n */\n get disabled() {\n return super.disabled;\n }\n /** @param {boolean} d */\n set disabled(d) {\n super.disabled = d;\n for (const choice of this._choices()) {\n choice.claimed = d;\n }\n }\n /**\n * The menu buttons the filter composes, which the disabled claim reaches. A\n * subclass adding a menu appends its own to the base's.\n * @returns {ChoiceButton[]}\n */\n _choices() {\n return [this._operator].filter((c) => c);\n }\n}\n\n/**\n * The compare filter over ISO instants, defaulting to LTE. The operands are\n * shown as local date and time in the page's timezone and carried in the tuple\n * as UTC ISO instants.\n */\nclass InstantFilter extends CompareFilter {\n _defaultOperator() {\n return 'LTE';\n }\n _type() {\n return 'datetime-local';\n }\n _serialize(v) {\n return Instant.localToIso(v);\n }\n _deserialize(v) {\n return Instant.isoToLocal(v);\n }\n}\n\n/** The compare filter over dates. */\nclass LocalDateFilter extends CompareFilter {\n _type() {\n return 'date';\n }\n}\n\n/** The compare filter over numbers. */\nclass NumberFilter extends CompareFilter {\n _type() {\n return 'number';\n }\n}\n\n/**\n * The compare filter over text, defaulting to CONTAINS and adding CONTAINS,\n * STARTS_WITH and ENDS_WITH to the compare operators.\n *\n * Its tuple carries a case sensitivity after the operator, `[operator,\n * sensitivity, operand]` or `[operator, sensitivity, from, to]`, the\n * sensitivity being IGNORE_CASE (the default) or CASE_SENSITIVE and switched\n * through a second menu. The `sensitivities` attribute whitelists that menu and\n * `sensitivity` fixes one mode, with the same rules and warnings as\n * `operators` and `operator`.\n */\nclass TextFilter extends CompareFilter {\n static observed = ['sensitivities:csv'];\n static attributes = ['sensitivity'];\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-affix>\n <button data-ref=\"operator\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n <button data-ref=\"sensitivity\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n </ful-affix>\n <ful-control>\n <input data-ref=\"value1\" data-tpl-type=\"type\" form=\"\">\n <input data-ref=\"value2\" data-tpl-type=\"type\" form=\"\" hidden>\n </ful-control>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _defaultOperator() {\n return 'CONTAINS';\n }\n _vocabulary() {\n return TEXT_OPERATORS;\n }\n _sensitivityButton;\n _build(conf) {\n const pieces = super._build(conf);\n this._sensitivityButton = new ChoiceButton(\n /** @type HTMLElement */ (pieces.fragment.querySelector('[data-ref=sensitivity]')),\n {\n vocabulary: SENSITIVITIES,\n glyphs: SENSITIVITY_GLYPHS,\n labelFor: sensitivityLabel,\n interactive: () => this._interactive(),\n onPick: () => this._notifyChange(),\n },\n );\n this._sensitivityButton.allowed = null;\n this._sensitivityButton.value = SENSITIVITIES[0];\n fixChoice(this, this._sensitivityButton, {\n singular: 'sensitivity',\n plural: 'sensitivities',\n vocabulary: SENSITIVITIES,\n fallback: 'IGNORE_CASE',\n });\n return pieces;\n }\n _choices() {\n return [...super._choices(), this._sensitivityButton].filter((c) => c);\n }\n get _sensitivity() {\n return this._sensitivityButton.value;\n }\n _declaredSensitivities;\n /**\n * The sensitivities the menu offers, narrowed to IGNORE_CASE and\n * CASE_SENSITIVE: an empty list, or one where no name is known, offers both.\n * When the mode shown leaves the list, the first listed one is shown. Held\n * before the upgrade and ignored under a fixed `sensitivity`, as `operators` is.\n * @returns {string[]|undefined} undefined before the upgrade when nothing was assigned\n */\n get sensitivities() {\n return this._sensitivityButton ? this._sensitivityButton.allowed : this._declaredSensitivities;\n }\n /** @param {string[]|null} declared */\n set sensitivities(declared) {\n if (this.declared('sensitivity') !== null) {\n return;\n }\n if (!this._sensitivityButton) {\n this._declaredSensitivities = ChoiceButton.narrow(declared, SENSITIVITIES);\n return;\n }\n const previous = this._sensitivityButton.value;\n this._sensitivityButton.allowed = declared;\n this._sensitivityButton.value = this._sensitivityButton.preferring(previous);\n }\n /**\n * The tuple with the sensitivity after the operator, `[operator,\n * sensitivity, ...operands]`. Null while any operand the operator uses is empty.\n * @returns {any[]|null}\n */\n get value() {\n const tuple = this._tuple();\n return tuple == null ? null : [tuple[0], this._sensitivity, ...tuple.slice(1)];\n }\n /**\n * Shows a tuple as the compare filter does, reading the sensitivity at\n * index 1. A sensitivity the whitelist does not allow leaves the current\n * one in place. Null or undefined empties the operands and keeps the\n * operator and the sensitivity.\n * @param {any[]|null|undefined} v\n */\n set value(v) {\n if (v == null) {\n this._applyTuple(v);\n return;\n }\n if (this._sensitivityButton.allowed.includes(v[1])) {\n this._sensitivityButton.value = v[1];\n }\n this._applyTuple([v[0], ...v.slice(2)]);\n }\n /**\n * Restores the declared `value` tuple, sensitivity included. Without a\n * `value` attribute it also shows the default operator and IGNORE_CASE\n * again, or the first whitelisted mode where IGNORE_CASE is not allowed.\n */\n formResetCallback() {\n super.formResetCallback();\n if (!this.hasAttribute('value')) {\n this._sensitivityButton.value = this._sensitivityButton.preferring('IGNORE_CASE');\n }\n }\n}\n\nconst BOOLEAN_VALUES = ['', 'true', 'false'];\nconst BOOLEAN_VALUE_GLYPHS = { true: '✓', false: '✗' };\n\n/**\n * The boolean filter: an EQ or NEQ operator menu and a value menu of any, yes\n * and no, the value button showing the localized word.\n *\n * The value is `[operator, 'true']` or `[operator, 'false']`, null while the\n * value menu is on any. The `operators` attribute whitelists the operator menu\n * as on the compare filters. The disabled claim reaches the value button and\n * both menus, and readonly refuses the clicks that would open them. The\n * required and readonly claims reflect on the host only: no `aria-required` or\n * `aria-readonly` is written, since the value button's role accepts neither.\n */\nclass BooleanFilter extends Field {\n static observed = ['value:json', 'operators:csv'];\n static slots = true;\n /**\n * The operators the filter knows, which `operators` narrows.\n * @type {string[]}\n */\n static OPERATORS = ['EQ', 'NEQ'];\n /**\n * The operator shown on render and after a valueless reset, or the first\n * whitelisted one where the whitelist excludes it.\n * @type {string}\n */\n static DEFAULT_OPERATOR = 'EQ';\n static template = `\n <label>{{{{ slots.default }}}}</label>\n {{{{ slots.info }}}}\n <ful-control-group>\n <ful-affix data-tpl-if=\"slots.before\">{{{{ slots.before }}}}</ful-affix>\n <ful-affix>\n <button data-ref=\"operator\" type=\"button\" form=\"\" aria-expanded=\"false\" aria-haspopup=\"true\"></button>\n <ul popover role=\"menu\"></ul>\n </ful-affix>\n <button data-ref=\"value\" type=\"button\" form=\"\"></button>\n <ul popover role=\"menu\"></ul>\n <ful-affix data-tpl-if=\"slots.after\">{{{{ slots.after }}}}</ful-affix>\n </ful-control-group>\n <ful-field-error></ful-field-error>\n `;\n _operator;\n _value;\n _container;\n _build({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n this._container = fragment.querySelector('ful-control-group');\n const valueButton = /** @type {HTMLElement} */ (fragment.querySelector('[data-ref=value]'));\n this._operator = new ChoiceButton(/** @type {HTMLElement} */ (fragment.querySelector('[data-ref=operator]')), {\n vocabulary: BooleanFilter.OPERATORS,\n glyphs: GLYPHS,\n labelFor: operatorLabel,\n interactive: () => this._interactive(),\n onPick: () => this._notifyChange(),\n });\n this._value = new ChoiceButton(valueButton, {\n vocabulary: BOOLEAN_VALUES,\n glyphs: BOOLEAN_VALUE_GLYPHS,\n labelFor: booleanValueLabel,\n display: booleanValueLabel,\n interactive: () => this._interactive(),\n onPick: () => this._notifyChange(),\n });\n this.operators = this.declared('operators');\n this._operator.value = this._operator.preferring(BooleanFilter.DEFAULT_OPERATOR);\n this._value.allowed = null;\n this._value.value = '';\n return {\n fragment,\n control: valueButton,\n error: fragment.querySelector('ful-field-error'),\n label: fragment.querySelector('label'),\n announces: null,\n freeze: this._container,\n };\n }\n _declaredOperators;\n /**\n * The operators the menu offers, narrowed to EQ and NEQ: an empty list, or\n * one where no name is known, offers both, and a single one pins the\n * button. Held before the upgrade and replaced by the `operators` attribute\n * at the render, as on the compare filters.\n * @returns {string[]|undefined} undefined before the upgrade when nothing was assigned\n */\n get operators() {\n return this._operator ? this._operator.allowed : this._declaredOperators;\n }\n /** @param {string[]|null} declared */\n set operators(declared) {\n if (!this._operator) {\n this._declaredOperators = ChoiceButton.narrow(declared, this._vocabulary());\n return;\n }\n this._operator.allowed = declared;\n }\n /** @returns {string[]} */\n _vocabulary() {\n return BooleanFilter.OPERATORS;\n }\n /**\n * `[operator, token]`, the token being 'true' or 'false'; null while the value menu is on any.\n * @returns {string[]|null}\n */\n get value() {\n return this._value.value === '' ? null : [this._operator.value, this._value.value];\n }\n /**\n * Shows a tuple: its operator, unless a pinned operator replaces it, and its\n * token, a missing token meaning any. Null or undefined sets the value menu\n * back to any and keeps the operator.\n * @param {any[]|null|undefined} v\n */\n set value(v) {\n if (v == null) {\n this._value.value = '';\n return;\n }\n this._operator.value = this._operator.pinned ? this._operator.allowed[0] : v[0];\n this._value.value = v[1] ?? '';\n }\n /**\n * Restores the declared `value` tuple. Without a `value` attribute it sets\n * the value menu back to any and also shows the default operator again.\n */\n formResetCallback() {\n super.formResetCallback();\n if (!this.hasAttribute('value')) {\n this._operator.value = this._operator.preferring(BooleanFilter.DEFAULT_OPERATOR);\n }\n }\n /**\n * The operator and the localized word the value menu shows, not the token.\n * Null while the value menu is on any.\n * @returns {FilterCriterion|null}\n */\n get criterion() {\n const token = this._value.value;\n return asCriterion(labelTextOf(this), this._operator.value, [token === '' ? '' : booleanValueLabel(token)]);\n }\n /**\n * The field's own disabled claim. Setting it disables the value button and\n * both menu buttons; an operator button pinned to one choice stays disabled\n * when the claim is lifted.\n * @returns {boolean}\n */\n get disabled() {\n return super.disabled;\n }\n /** @param {boolean} d */\n set disabled(d) {\n super.disabled = d;\n for (const choice of [this._operator, this._value].filter((c) => c)) {\n choice.claimed = d;\n }\n }\n}\n\n/**\n * Set membership over a select's vocabulary, answering for both of data-jpa's\n * set annotations: InEnum and InList take the same bare array of values and no\n * operator, differing only in what the server converts them to. A declared\n * `operator` attribute is sent in front of the keys instead, for a server field\n * that reads the set through a compare.\n */\nclass InFilter extends Select {\n static attributes = ['operator'];\n #keys() {\n const chosen = super.value;\n if (this.multiple) {\n return chosen;\n }\n return chosen === null || chosen === undefined ? [] : [chosen];\n }\n /**\n * The chosen keys as an array, a single choice included, led by the\n * declared `operator` when there is one. Null while nothing is chosen, so\n * that a table drops the filter instead of sending an empty set that\n * matches nothing.\n * @returns {any[]|null}\n */\n get value() {\n const keys = this.#keys();\n if (keys.length === 0) {\n return null;\n }\n const operator = this.declared('operator');\n return operator ? [operator, ...keys] : keys;\n }\n /**\n * Selects the keys of an array or a single bare key; a leading element equal\n * to the declared `operator` is dropped first, so the filter takes back what\n * it answered. A single select takes the first key. Null or undefined clears\n * the selection.\n * @param {any} v\n */\n set value(v) {\n const operator = this.declared('operator');\n let keys = v === null || v === undefined ? [] : Array.isArray(v) ? v : [v];\n if (operator && keys[0] === operator) {\n keys = keys.slice(1);\n }\n super.value = this.multiple ? keys : (keys[0] ?? null);\n }\n /**\n * The declared operator, or null, and the labels of the chosen entries. Null\n * while nothing is chosen.\n * @returns {FilterCriterion|null}\n */\n get criterion() {\n return asCriterion(\n labelTextOf(this),\n this.declared('operator'),\n [super.entry]\n .flat()\n .filter((e) => e)\n .map((e) => /** @type {{ label: string }} */ (e).label),\n );\n }\n}\n\nexport { BooleanFilter, CompareFilter, InFilter, InstantFilter, LocalDateFilter, NumberFilter, TextFilter };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { describable } from '../descriptions.mjs';\nimport { Anchors } from './anchors.mjs';\n\n/**\n * An icon button that toggles a native popover, a `ful-note`, holding the\n * default slot as a short explanation. The popover gives light dismiss and\n * Escape, and the button carries an `aria-expanded` kept in step with it and\n * a localized `aria-label`.\n *\n * The marker is the `ful-icon` that `Tooltip.config.icon` names for the whole\n * page, or the one the `icon` attribute names for a single tooltip. A name the\n * library does not paint is declared by the page as\n * `ful-icon[name='...'] { mask-image: ... }`.\n *\n * `placement` picks the side of the marker the note opens on: `top` (the\n * default), `bottom`, `left` or `right`. The note is placed in script on every\n * platform, centred on the marker, clamped into the viewport and following the\n * marker on scroll and resize, with a callout on the edge facing the marker.\n *\n * `describes` offers the note to the nearest ancestor that takes a description\n * (see `describable`), a field's control in practice: when it is taken, the\n * note becomes part of that control's accessible description and the marker\n * leaves the tab order, staying clickable. When nothing takes it, the marker\n * keeps its tab stop and a warning is logged.\n */\nclass Tooltip extends ParsedElement {\n static slots = true;\n static attributes = ['placement', 'icon', 'describes:presence'];\n /** The page-wide defaults: `icon` is the `ful-icon` name of the marker. */\n static config = {\n icon: 'info-circle-fill',\n };\n static template = `\n <span role=\"button\" tabindex=\"0\" class=\"ful-tip\" data-ref=\"trigger\" data-tpl-aria-label=\"#l10n:t('info.tooltip')\"><ful-icon data-tpl-name=\"icon ?? config.icon\" aria-hidden=\"true\"></ful-icon></span>\n <ful-note popover data-ref=\"content\">{{{{ slots.default }}}}</ful-note>\n `;\n /**\n * @param {{ slots: Record<string, DocumentFragment> }} c\n */\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots, icon: this.declared('icon') }).render();\n const trigger = /** @type {HTMLElement} */ (fragment.querySelector('[data-ref=trigger]'));\n const content = /** @type {HTMLElement} */ (fragment.querySelector('[data-ref=content]'));\n Anchors.wire(trigger, content, { prefix: 'ful-tooltip', invoke: true, expanded: true, handPlace: true });\n content.setAttribute('placement', this.declared('placement') ?? 'top');\n this.replaceChildren(fragment);\n if (this.declared('describes')) {\n Tooltip.#describe(this, trigger, content);\n }\n }\n /**\n * @param {Tooltip} tooltip\n * @param {HTMLElement} trigger\n * @param {HTMLElement} content\n */\n static #describe(tooltip, trigger, content) {\n if (!describable(tooltip)?.describedBy(content)) {\n console.warn('a ful-tooltip declares describes but stands in nothing that takes a description', tooltip);\n return;\n }\n trigger.tabIndex = -1;\n }\n}\n\nexport { Tooltip };\n","import { Localization } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\n\n/**\n * The section requests shared by ful-tabs, ful-wizard, ful-dialog and\n * ful-drawer. Each activation of a section fires a family of events on the host\n * component and waits for the answers that listeners registered through\n * `AsyncEvents.asyncOn` attach to them. The events target the component, so\n * `e.target.localName` names the family and `e.target === e.currentTarget`\n * separates a host's own sections from those of a nested component, while\n * `detail.section` is the element the content goes in.\n *\n * While an answer is pending, from the next animation frame, the section\n * carries the `loading` attribute and `aria-busy=\"true\"`; answers that settle\n * before that frame show neither. A new request for the same section\n * supersedes the one in flight, which then no longer touches the section's\n * chrome. A failure removes the section's previous error and prepends a\n * `.ful-section-error` with the `alert` role, holding the reasons of the\n * failure's problems, one per line, or its message when it carries none.\n */\nclass SectionRequests {\n /** @type {WeakSet<Element>} */\n #entered = new WeakSet();\n /** @type {WeakMap<Element, Claims>} */\n #claims = new WeakMap();\n\n /**\n * Fires `section:requested`, then `section:requested:#<index>` when an index\n * is given, then `section:requested:<name>` when a name is given, each\n * bubbling from `host` with the same detail `{ name, section, index, first }`,\n * and awaits every answer attached to any of them. `first` is true until a\n * request for the section is answered by at least one listener, so a request\n * nobody listened to does not spend it. A request with answers removes the\n * error a previous failure painted before it waits.\n * @param {Element} host the component the events are dispatched on\n * @param {Element} section the element the answers deliver into\n * @param {string|null} name the section's `data-step`, when it has one\n * @param {number|null} index the section's zero-based position, when it has one\n * @returns {Promise<any[]|undefined>} the answers in the order they were\n * attached, or undefined when nobody listened\n * @throws what the first failing answer rejected with, after painting its\n * problems in the section unless a newer request superseded this one\n */\n async request(host, section, name, index) {\n const first = !this.#entered.has(section);\n const detail = { name, section, index, first };\n const types = [\n 'section:requested',\n ...(index !== null && index !== undefined ? [`section:requested:#${index}`] : []),\n ...(name ? [`section:requested:${name}`] : []),\n ];\n const promises = [];\n for (const type of types) {\n const evt = /** @type {CustomEvent & { async?: { promises: Promise<any>[] } }} */ (\n new CustomEvent(type, { bubbles: true, detail })\n );\n host.dispatchEvent(evt);\n promises.push(...(evt.async?.promises ?? []));\n }\n if (promises.length === 0) {\n return undefined;\n }\n this.#entered.add(section);\n let claims = this.#claims.get(section);\n if (!claims) {\n claims = new Claims();\n this.#claims.set(section, claims);\n }\n const claim = claims.take();\n const owned = () => !claim.stale;\n section.querySelector(':scope > .ful-section-error')?.remove();\n const frame = requestAnimationFrame(() => {\n if (owned()) {\n section.toggleAttribute('loading', true);\n section.setAttribute('aria-busy', 'true');\n }\n });\n try {\n return await Promise.all(promises);\n } catch (cause) {\n if (owned()) {\n this.#paintError(section, cause);\n }\n throw cause;\n } finally {\n cancelAnimationFrame(frame);\n if (owned()) {\n section.toggleAttribute('loading', false);\n section.removeAttribute('aria-busy');\n }\n }\n }\n\n /**\n * @param {Element} section\n * @param {unknown} cause\n */\n #paintError(section, cause) {\n section.querySelector(':scope > .ful-section-error')?.remove();\n const error = document.createElement('div');\n error.className = 'ful-section-error';\n error.setAttribute('role', 'alert');\n error.textContent = Localization.of().failure(cause);\n section.prepend(error);\n }\n}\n\nexport { SectionRequests };\n","import { Localization, Nodes } from '../../ftl/index.mjs';\nimport { Claims } from '../claims.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\n\n/**\n * The sections a modal disclosure renders inside its native `<dialog>`: the\n * content section a caller fills, and the loading and error sections shown\n * while `update()` waits and when it fails. It also wires the gestures the\n * dialog and the drawer share: a dismissal on a press and release both on the\n * backdrop, and an answer on a `ful-form` submit in the content.\n *\n * The element owning it keeps the opening, the closing and the outcome; the\n * sections only paint and request.\n */\nclass DialogSections {\n #host;\n #dialog;\n #section;\n #loading;\n #error;\n #requests = new SectionRequests();\n #updates = new Claims();\n /**\n * @param {HTMLElement} host the element the section requests are dispatched on\n * @param {DocumentFragment} fragment the rendered template, holding a\n * `[data-ref=dialog]` and, optionally, the content section and the\n * `[data-ref=loading]` and `[data-ref=error]` sections: a subclass template\n * without a content section can be opened and closed, but not updated\n * @param {string} content the `data-ref` of the content section\n */\n constructor(host, fragment, content) {\n this.#host = host;\n this.#dialog = /** @type {HTMLDialogElement} */ (fragment.querySelector('[data-ref=dialog]'));\n this.#section = /** @type {HTMLElement} */ (fragment.querySelector(`[data-ref=${content}]`));\n this.#loading = fragment.querySelector('[data-ref=loading]');\n this.#error = fragment.querySelector('[data-ref=error]');\n }\n /** @returns {HTMLDialogElement} */\n get dialog() {\n return this.#dialog;\n }\n /** @returns {HTMLElement} the content section */\n get section() {\n return this.#section;\n }\n /**\n * Dispatches the dismissal on the host and calls `close` unless a listener\n * prevented it. A dismissal that is not cancelable announces a close the\n * platform makes whatever the page does, so `close` is not called for it.\n * @param {CustomEvent} asked\n * @param {() => void} close\n */\n dismiss(asked, close) {\n if (this.#host.dispatchEvent(asked) && asked.cancelable) {\n close();\n }\n }\n /**\n * Calls `dismiss` when a press and its release both land on the backdrop,\n * so a selection dragged out of the panel and released outside does not.\n * @param {() => void} dismiss\n */\n onBackdrop(dismiss) {\n let pressedOutside = false;\n this.#dialog.addEventListener('mousedown', (e) => {\n pressedOutside = e.target === this.#dialog;\n });\n this.#dialog.addEventListener('click', (e) => {\n if (pressedOutside && e.target === this.#dialog) {\n dismiss();\n }\n });\n }\n /**\n * Calls `answer` with `detail.response` when a `ful-form` that is a direct\n * child of the content section dispatches `submit:success`. The listener sits\n * on the section, so a form delivered by `update()` is covered, and a form\n * deeper in the content, such as a `ful-table`'s filters, is not.\n * @param {(response: any) => void} answer\n */\n onSubmitted(answer) {\n this.#section.addEventListener('submit:success', (/** @type any */ e) => {\n if (e.target !== Nodes.queryChildren(this.#section, 'ful-form')) {\n return;\n }\n answer(e.detail.response);\n });\n }\n /** Hides and empties the error section, hides the loading one and shows the content. */\n restChrome() {\n this.#error?.replaceChildren();\n this.#error?.setAttribute('hidden', '');\n this.#loading?.setAttribute('hidden', '');\n this.#section?.removeAttribute('hidden');\n }\n /**\n * Dispatches `section:requested` for the content section on the host. A\n * failed request is painted into the section.\n * @returns {Promise<any[]|undefined>} the listeners' answers, undefined when\n * nobody answered or the request failed; it never rejects\n */\n request() {\n return this.#requests.request(this.#host, this.#section, null, null).catch(() => undefined);\n }\n /**\n * Empties and hides the content section, shows the loading section, calls\n * `show`, and fills the content with what the callback resolves to. A\n * rejection is shown, as the problems' reasons, in the error section, and\n * the content is hidden. When a newer `update()` starts before the callback\n * settles, this call paints nothing: it resolves with the section regardless,\n * and still rejects with the callback's error.\n * @param {() => Node|string|Promise<Node|string>} cb producing the content\n * @param {() => void} show opens the dialog when it is closed\n * @returns {Promise<HTMLElement>} the content section\n * @throws {any} what the callback threw or rejected with\n */\n async update(cb, show) {\n const claim = this.#updates.take();\n this.#section.replaceChildren();\n this.restChrome();\n this.#loading?.removeAttribute('hidden');\n this.#section.setAttribute('hidden', '');\n show();\n try {\n const delivered = await cb();\n if (claim.stale) {\n return this.#section;\n }\n this.#section.replaceChildren(delivered);\n this.#loading?.setAttribute('hidden', '');\n this.#section.removeAttribute('hidden');\n return this.#section;\n } catch (/** @type any */ e) {\n if (!claim.stale) {\n this.#error?.removeAttribute('hidden');\n if (this.#error) {\n this.#error.textContent = Localization.of().failure(e);\n }\n this.#loading?.setAttribute('hidden', '');\n this.#section.setAttribute('hidden', '');\n }\n throw e;\n }\n }\n}\n\nexport { DialogSections };\n","let targetsWired = false;\n/**\n * Makes any element carrying `dialog-target` open the element whose id it\n * names, clones included, which is how the dialog and the drawer are opened\n * from markup. One click listener on the document finds the nearest\n * `[dialog-target]` around the click target and calls `open()` on the named\n * element when it has one; an id naming nothing is ignored. Calls after the\n * first do nothing.\n */\nconst wireTargets = () => {\n if (targetsWired) {\n return;\n }\n targetsWired = true;\n document.addEventListener('click', (/** @type any */ e) => {\n const trigger = e.target.closest?.('[dialog-target]');\n if (!trigger) {\n return;\n }\n /** @type {any} */ (document.getElementById(trigger.getAttribute('dialog-target')))?.open?.();\n });\n};\n\nexport { wireTargets };\n","import { Attributes, Localization, ParsedElement, Rendering } from '../../ftl/index.mjs';\nimport { DialogSections } from './dialog-sections.mjs';\nimport { wireTargets } from './targets.mjs';\n\n/**\n * How a dialog ended. `dismissed` is true for Escape, the close button, a\n * backdrop click, a `data-result=\"\"` button, `close()` without a result and a\n * removal from the document; `result` is the `data-result` of the button, or\n * the argument of `close(result)`, that answered; `response` is what the form\n * answered with under `close-on-submit`. Whichever of `result` and `response`\n * did not answer is null, as both are on a dismissal.\n * @typedef {{ dismissed: boolean, result: string|null, response: any }} DialogOutcome\n */\n\n/**\n * A modal dialog on the native `<dialog>`, rendered with a header, a body and\n * a footer. `open()` and `ask()` show it and resolve with a `DialogOutcome`.\n *\n * The `header` attribute is the title, rendered as an `h2` that names the\n * dialog through `aria-labelledby`; without it the dialog is unnamed. The\n * `header` slot is rendered in the header before the title, the default slot\n * is the body, and the `buttons` slot is rendered in the footer. Without a\n * `buttons` slot, and without `close-on-submit`, the footer holds a localized\n * acknowledge button answering `acknowledged`.\n *\n * Any button inside the dialog carrying `data-result` closes it with that\n * result, an empty one being a dismissal. The header carries a close button,\n * and a press and release both on the backdrop close the dialog, each as a\n * dismissal, as Escape does.\n *\n * Before any of those three gestures closes it, the element dispatches a\n * cancelable, non-bubbling `dialog:dismiss` with `detail: { reason }`, the\n * reason being `button`, `backdrop` or `escape`; a listener calling\n * `preventDefault()` keeps it open, to guard unsaved edits. A `data-result`\n * button, `close-on-submit` and `close()` answer rather than dismiss, and\n * dispatch none.\n *\n * The platform lets a page refuse Escape once per user interaction: a second\n * Escape with no click or keystroke in between closes the dialog whatever the\n * page does, `requires-answer` included. That close is still announced by a\n * `dialog:dismiss`, which is then not cancelable.\n *\n * `requires-answer` withholds the close button and refuses Escape and the\n * backdrop, so the dialog is closed only by a button carrying `data-result`\n * or from code through `close()`.\n *\n * `close-on-submit` closes the dialog when a `ful-form` that is a direct child\n * of the body dispatches `submit:success`, answering with its\n * `detail.response`. A form deeper in the body, such as the filter form of a\n * `ful-table`, does not close it. The listener sits on the body, so a form\n * delivered by `update()` is covered as well.\n *\n * Every close dispatches a non-bubbling `close` event on the element carrying\n * the `DialogOutcome` as `detail`, before the pending `ask()` calls resolve.\n * An element anywhere in the page carrying `dialog-target` set to the\n * element's id opens it on click.\n *\n * The chrome is styled by class as well as by tag, so a plain `<dialog\n * class=\"ful-dialog\">` written by a page gets the same look: the tag form\n * matches a direct child, and `ful-dialog-header`, `ful-dialog-body` and\n * `ful-dialog-footer` match at any depth, as a dialog whose content is wrapped\n * in a form needs.\n */\nclass Dialog extends ParsedElement {\n static attributes = ['header', 'requires-answer:presence', 'close-on-submit:presence'];\n static slots = true;\n static template = `\n <dialog data-ref=\"dialog\" class=\"ful-dialog\">\n <header data-tpl-if=\"header || slots.header || !requiresAnswer\" class=\"ful-dialog-header\">\n {{{{ slots.header }}}}\n <h2 data-tpl-if=\"header\">{{ header }}</h2>\n <button data-tpl-if=\"!requiresAnswer\" type=\"button\" data-ref=\"close\" data-tpl-aria-label=\"#l10n:t('dialog.close')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button>\n </header>\n <section data-ref=\"loading\" hidden><ful-spinner class=\"centered\" role=\"status\"><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></ful-spinner></section>\n <section data-ref=\"error\" role=\"alert\" hidden></section>\n <div data-ref=\"body\" class=\"ful-dialog-body\">{{{{ slots.default }}}}</div>\n <footer class=\"ful-dialog-footer\">\n <button type=\"button\" data-ref=\"acknowledge\" data-result=\"acknowledged\" data-tpl-if=\"!slots.buttons && !closeOnSubmit\" data-tpl-aria-label=\"#l10n:t('dialog.acknowledge')\">{{ #l10n:t('dialog.acknowledge') }}</button>\n {{{{ slots.buttons }}}}\n </footer>\n </dialog>\n `;\n #dialog;\n #sections;\n #resolvers = [];\n /** @type {DialogOutcome|null} */\n #answer = null;\n /**\n * @param {{ slots: Record<string, DocumentFragment> }} c\n */\n render({ slots }) {\n const requiresAnswer = this.declared('requires-answer');\n const closeOnSubmit = this.declared('close-on-submit');\n const fragment = this.template()\n .withOverlay({ slots, header: this.declared('header') ?? '', requiresAnswer, closeOnSubmit })\n .render();\n this.#sections = new DialogSections(this, fragment, 'body');\n this.#dialog = this.#sections.dialog;\n const heading = fragment.querySelector('h2');\n if (heading) {\n heading.id ||= Attributes.uid('ful-dialog-title');\n this.#dialog.setAttribute('aria-labelledby', heading.id);\n }\n this.#dialog.addEventListener('close', () => {\n const outcome = this.#outcome();\n this.dispatchEvent(new CustomEvent('close', { detail: outcome }));\n this.#settle(outcome);\n });\n this.#dialog.addEventListener('click', (/** @type any */ e) => {\n const result = e.target.closest('button[data-result]')?.dataset.result;\n if (result !== undefined) {\n this.#dialog.close(result);\n }\n });\n const dismiss = (/** @type {'button'|'backdrop'|'escape'} */ reason, platformCloses = false) =>\n this.#sections.dismiss(\n new CustomEvent('dialog:dismiss', { cancelable: !platformCloses, detail: { reason } }),\n () => this.#dialog.close(''),\n );\n if (!requiresAnswer) {\n this.#sections.onBackdrop(() => dismiss('backdrop'));\n }\n fragment.querySelector('[data-ref=close]')?.addEventListener('click', () => dismiss('button'));\n if (closeOnSubmit) {\n this.#sections.onSubmitted((response) => {\n this.#answer = { dismissed: false, result: null, response };\n this.#dialog.close('submitted');\n });\n }\n this.#dialog.addEventListener('cancel', (/** @type any */ e) => {\n if (!e.cancelable) {\n this.#dialog.returnValue = '';\n dismiss('escape', true);\n return;\n }\n e.preventDefault();\n if (!requiresAnswer) {\n dismiss('escape');\n }\n });\n this.replaceChildren(fragment);\n wireTargets();\n }\n /** @returns {DialogOutcome} */\n #outcome() {\n if (this.#answer) {\n return this.#answer;\n }\n const result = this.#dialog?.returnValue ?? '';\n return result === ''\n ? { dismissed: true, result: null, response: null }\n : { dismissed: false, result, response: null };\n }\n /** @param {DialogOutcome} outcome */\n #settle(outcome) {\n const resolvers = this.#resolvers;\n this.#resolvers = [];\n for (const resolve of resolvers) {\n resolve(outcome);\n }\n }\n /**\n * Resolves every pending `ask()` and `open()` with the outcome so far,\n * a dismissal for a dialog still open, so that no caller waits on a dialog\n * that left the document. The native dialog is not closed and no `close`\n * event is dispatched.\n */\n disconnectedCallback() {\n this.#settle(this.#outcome());\n }\n /**\n * The same as `ask()`.\n * @returns {Promise<DialogOutcome>}\n */\n open() {\n return this.ask();\n }\n /**\n * Shows the dialog as a modal and resolves with how it ends.\n *\n * The call that opens the dialog resets the outcome of the previous\n * opening, hides the error and loading sections, and dispatches\n * `section:requested` on the element (bubbling, with\n * `detail: { section, first, name: null, index: null }`, `section` being\n * the body and `first` true only on the first answered request), so a\n * listener can fill the body. A failed request is painted into the body\n * and does not reject. On a dialog already open nothing is shown or\n * requested, and the call waits for the same ending as the calls before it.\n * @returns {Promise<DialogOutcome>} resolving on close, or on removal from\n * the document with a dismissal\n */\n ask() {\n if (this.#show()) {\n this.#sections.restChrome();\n this.#sections.request();\n }\n return new Promise((resolve) => {\n this.#resolvers.push(resolve);\n });\n }\n /**\n * Empties and hides the body, shows the loading section, opens the dialog\n * if it is closed, and fills the body with what the callback resolves to.\n * A rejection is shown, as the problems' reasons, in the error section,\n * which has `role=\"alert\"`, and the body is hidden. The title stays the\n * `header` attribute.\n *\n * No `section:requested` is dispatched, and no `ask()` waiter is added:\n * listen for the `close` event to learn how the dialog ended. When a newer\n * `update()` starts before the callback settles, this call paints nothing:\n * it resolves with the body regardless, and still rejects with the\n * callback's error.\n * @param {() => Node|string|Promise<Node|string>} cb producing the body content\n * @returns {Promise<Element>} the body section, in the document\n * @throws {any} what the callback threw or rejected with\n */\n async update(cb) {\n return await this.#sections.update(cb, () => this.#show());\n }\n /**\n * Dispatches `section:requested` for the body again, as `ask()` does,\n * whether the dialog is open or closed. A failed request is painted into\n * the body.\n * @returns {Promise<any[]|undefined>} the listeners' answers, undefined when\n * nobody answered or the request failed; it never rejects\n */\n refresh() {\n return this.#sections.request();\n }\n /**\n * Closes an open dialog, doing nothing on a closed one. A non-empty result\n * answers as the button carrying that `data-result` would; no result, or\n * an empty one, is a dismissal.\n * @param {string} [result]\n */\n close(result) {\n this.#dialog.close(result ?? '');\n }\n /** @returns {boolean} whether this call is the one that opened the modal */\n #show() {\n if (this.#dialog.open) {\n return false;\n }\n this.#dialog.returnValue = '';\n this.#answer = null;\n this.#dialog.showModal();\n return true;\n }\n /**\n * Appends a new `ful-dialog` to `document.body`, asks it, and removes it\n * once it is answered or its render fails.\n *\n * A string body is set as text and never parsed as markup; a node is\n * appended as it is. Each button is either a `[result, label, className?]`\n * tuple, rendered as a `button` carrying `data-result`, or a node the\n * caller built, placed in the footer in the order given. With no buttons\n * the dialog shows its localized acknowledge button.\n * @param {string} header the title\n * @param {string|Node} body\n * @param {([string, string, string?]|Node)[]} [buttons]\n * @param {{ className?: string }} [options] `className` is set as the class\n * of the `ful-dialog` element\n * @returns {Promise<DialogOutcome>} rejecting with what the render threw\n */\n static async ask(header, body, buttons = [], { className } = {}) {\n const dialog = document.createElement('ful-dialog');\n dialog.setAttribute('header', header);\n if (className) {\n dialog.className = className;\n }\n if (typeof body === 'string') {\n dialog.textContent = body;\n } else if (body) {\n dialog.append(body);\n }\n if (buttons.length > 0) {\n const choices = document.createElement('template');\n choices.setAttribute('slot', 'buttons');\n for (const choice of buttons) {\n if (choice instanceof Node) {\n choices.content.append(choice);\n continue;\n }\n const [result, label, buttonClass] = choice;\n const button = document.createElement('button');\n button.type = 'button';\n button.dataset.result = result;\n if (buttonClass) {\n button.className = buttonClass;\n }\n button.textContent = label;\n choices.content.append(button);\n }\n dialog.append(choices);\n }\n document.body.append(dialog);\n try {\n await Rendering.waitFor(dialog);\n return await /** @type {Dialog} */ (dialog).ask();\n } finally {\n dialog.remove();\n }\n }\n /**\n * Asks a yes/no question through `Dialog.ask`, with a cancel button and a\n * confirm button carrying the `ful-button` class.\n * @param {string} header the title\n * @param {string|Node} body as `Dialog.ask` takes it\n * @param {{ confirm?: string, cancel?: string }} [labels] the button labels,\n * `dialog.confirm` and `dialog.cancel` localized by default\n * @param {{ className?: string }} [options] as `Dialog.ask` takes them\n * @returns {Promise<boolean>} true only for the confirm button; the cancel\n * button, the close button and Escape answer false\n */\n static async confirm(header, body, labels = {}, options = {}) {\n const outcome = await Dialog.ask(\n header,\n body,\n [\n ['cancel', labels.cancel ?? Localization.of().t('dialog.cancel')],\n ['confirm', labels.confirm ?? Localization.of().t('dialog.confirm'), 'ful-button'],\n ],\n options,\n );\n return !outcome.dismissed && outcome.result === 'confirm';\n }\n}\n\nexport { Dialog };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\nimport { DialogSections } from './dialog-sections.mjs';\nimport { wireTargets } from './targets.mjs';\n\n/**\n * A side panel on the native `<dialog>`, shown as a modal: a header holding\n * the title and a localized close button, then loading, error and content\n * sections, the default slot being the content.\n *\n * The `header` attribute is the initial title, rendered as an `h2` that names\n * the panel through `aria-labelledby`. The `header` slot is rendered in the\n * header before the title and outside it, so setting the title as text does\n * not remove it. `placement` is copied onto the native dialog: `end` (the\n * default, when absent) or `start`, following the writing direction.\n *\n * The close button, Escape, and a press and release both on the backdrop all\n * go through `close()`, once a cancelable, non-bubbling `drawer:dismiss` with\n * `detail: { reason }` (`button`, `backdrop` or `escape`) has been dispatched\n * on the element and no listener prevented it: `preventDefault()` keeps the\n * drawer open, to guard unsaved edits. `close()` and `close-on-submit`\n * dispatch none. The platform lets a page refuse Escape once per user\n * interaction: a second Escape with no click or keystroke in between closes\n * the drawer at once, without the slide, and its `drawer:dismiss` is then not\n * cancelable. Every close dispatches a non-bubbling `close` event on\n * the element with `detail: { dismissed, response }`: `{ dismissed: false,\n * response }` when a form closed it under `close-on-submit`, and\n * `{ dismissed: true, response: null }` for any other close.\n *\n * `close-on-submit` closes the drawer when a `ful-form` that is a direct child\n * of the content section dispatches `submit:success`, carrying its\n * `detail.response`, which may be null. A form deeper in the content, such as\n * the filter form of a `ful-table`, does not close it. The listener sits on\n * the content section, so a form delivered by `update()` is covered as well.\n *\n * An element anywhere in the page carrying `dialog-target` set to the\n * element's id calls `open()` on click.\n */\nclass Drawer extends ParsedElement {\n static attributes = ['header', 'placement', 'close-on-submit:presence'];\n static slots = true;\n static template = `\n <dialog data-ref=\"dialog\" class=\"ful-drawer\">\n <header>\n {{{{ slots.header }}}}\n <h2 data-ref=\"title\">{{ title }}</h2>\n <button type=\"button\" data-ref=\"close\" data-tpl-aria-label=\"#l10n:t('drawer.close')\"><ful-icon name=\"x-lg\" aria-hidden=\"true\"></ful-icon></button>\n </header>\n <section data-ref=\"loading\" hidden><ful-spinner class=\"centered\" role=\"status\"><span class=\"ful-sr-only\">{{ #l10n:t('spinner.loading') }}</span></ful-spinner></section>\n <section data-ref=\"error\" role=\"alert\" hidden></section>\n <section data-ref=\"content\">{{{{ slots.default }}}}</section>\n </dialog>\n `;\n #dialog;\n #title;\n #sections;\n /** @type {{ dismissed: boolean, response: any }|null} */\n #answer = null;\n #closing = false;\n #slideOutEnded = (/** @type AnimationEvent */ e) => {\n if (e.target === this.#dialog) {\n this.#closeNow();\n }\n };\n /**\n * @param {{ slots: Record<string, DocumentFragment> }} c\n */\n render({ slots }) {\n const fragment = this.template()\n .withOverlay({ slots, title: this.declared('header') ?? '' })\n .render();\n this.#sections = new DialogSections(this, fragment, 'content');\n this.#dialog = this.#sections.dialog;\n this.#title = fragment.querySelector('[data-ref=title]');\n this.#title.id ||= Attributes.uid('ful-drawer-title');\n this.#dialog.setAttribute('aria-labelledby', this.#title.id);\n const placement = this.declared('placement');\n if (placement) {\n this.#dialog.setAttribute('placement', placement);\n }\n const dismiss = (/** @type {'button'|'backdrop'|'escape'} */ reason, platformCloses = false) =>\n this.#sections.dismiss(\n new CustomEvent('drawer:dismiss', { cancelable: !platformCloses, detail: { reason } }),\n () => this.close(),\n );\n /** @type {HTMLElement} */ (fragment.querySelector('[data-ref=close]')).addEventListener('click', () =>\n dismiss('button'),\n );\n this.#sections.onBackdrop(() => dismiss('backdrop'));\n this.#dialog.addEventListener('cancel', (e) => {\n if (!e.cancelable) {\n this.#stopSlidingOut();\n dismiss('escape', true);\n return;\n }\n e.preventDefault();\n dismiss('escape');\n });\n this.#dialog.addEventListener('close', () => {\n this.dispatchEvent(\n new CustomEvent('close', { detail: this.#answer ?? { dismissed: true, response: null } }),\n );\n });\n if (this.declared('close-on-submit')) {\n this.#sections.onSubmitted((response) => {\n this.#answer = { dismissed: false, response };\n this.close();\n });\n }\n this.replaceChildren(fragment);\n wireTargets();\n }\n /**\n * The title, read and written as the heading's text.\n * @type {string}\n */\n get header() {\n return this.#title.textContent;\n }\n /** @param {string|null|undefined} v written as text, `''` for null or undefined */\n set header(v) {\n this.#title.textContent = v ?? '';\n }\n /**\n * Sets the title, empties and hides the content section, shows the loading\n * section, opens the drawer if it is closed (putting back one that is\n * sliding out), and fills the content with what the callback resolves to.\n * A rejection is shown, as the problems' reasons, in the error section,\n * which has `role=\"alert\"`, and the content is hidden.\n *\n * No `section:requested` is dispatched. When a newer `update()` starts\n * before the callback settles, this call paints nothing: it resolves with\n * the content section regardless, and still rejects with the callback's\n * error.\n * @param {string} header the title, set as text\n * @param {() => Node|string|Promise<Node|string>} cb producing the content\n * @returns {Promise<Element>} the content section, in the document\n * @throws {any} what the callback threw or rejected with\n */\n async update(header, cb) {\n this.header = header;\n return await this.#sections.update(cb, () => this.#show());\n }\n /**\n * Dispatches `section:requested` for the content again, as `open()` does,\n * whether the drawer is open or closed. A failed request is painted into\n * the content section.\n * @returns {Promise<any[]|undefined>} the listeners' answers, undefined when\n * nobody answered or the request failed; it never rejects\n */\n refresh() {\n return this.#sections.request();\n }\n /**\n * Shows the drawer as a modal. On a drawer already open nothing happens,\n * except that one sliding out stops and stays open.\n *\n * The call that opens the drawer resets the outcome of the previous\n * opening, hides the error and loading sections, and dispatches\n * `section:requested` on the element (bubbling, with\n * `detail: { section, first, name: null, index: null }`, `section` being\n * the content section and `first` true only on the first answered request),\n * so a listener can fill the content. A failed request is painted into the\n * content section.\n */\n open() {\n if (!this.#show()) {\n return;\n }\n this.#sections.restChrome();\n this.#sections.request();\n }\n /**\n * Slides the drawer out and closes it when the animation ends, setting the\n * `closing` attribute on the native dialog meanwhile; the `close` event is\n * dispatched then, after this call has returned. Where the user prefers\n * reduced motion, or no animation runs, it closes at once. Does nothing on\n * a drawer that is closed or already sliding out.\n */\n close() {\n if (this.#closing || !this.#dialog.open) {\n return;\n }\n if (matchMedia('(prefers-reduced-motion: reduce)').matches) {\n this.#dialog.close();\n return;\n }\n this.#dialog.setAttribute('closing', '');\n if (this.#dialog.getAnimations().length === 0) {\n this.#closeNow();\n return;\n }\n this.#closing = true;\n this.#dialog.addEventListener('animationend', this.#slideOutEnded);\n }\n #closeNow() {\n this.#stopSlidingOut();\n this.#dialog.close();\n }\n #stopSlidingOut() {\n this.#closing = false;\n this.#dialog.removeEventListener('animationend', this.#slideOutEnded);\n this.#dialog.removeAttribute('closing');\n }\n /** @returns {boolean} whether this call is the one that opened the modal */\n #show() {\n this.#stopSlidingOut();\n if (this.#dialog.open) {\n return false;\n }\n this.#answer = null;\n this.#dialog.showModal();\n return true;\n }\n}\n\nexport { Drawer };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { Anchors } from './anchors.mjs';\nimport { wireMenuKeys } from './menu-keys.mjs';\n\n/**\n * A menu of commands on the native popover platform, opened by the element\n * whose id `for` names. The menu is the popover itself: light dismiss and\n * Escape come from the browser, and it is anchored to its invoker through\n * `Anchors.wire`, placed in script where the platform has no css anchor\n * positioning.\n *\n * The items are the buttons and `a[href]` links written as its direct\n * children, kept as they are. Activation is the item's own click, which the\n * menu follows by hiding itself, so a page listens for the click where it\n * already listens. The menu fires no events of its own.\n *\n * The keyboard is the ARIA menu protocol: the focus moves to the\n * first item as the menu opens, the arrows, Home and End walk the items,\n * typing searches their text, Enter and Space activate the focused one, and\n * Escape and a close from inside the menu hand the focus back to the invoker.\n */\nclass Menu extends ParsedElement {\n /** @type {string[]} */\n static attributes = ['for'];\n /**\n * Gives the menu the `menu` role and an empty `popover` attribute unless\n * it already has one, gives the invoker `aria-haspopup=\"menu\"`, an\n * `aria-expanded` kept in step, and the toggle of the menu, and marks the\n * items. `for` is read here, once.\n * @returns {void}\n * @throws {Error} when `for` names no element in the document at the render\n */\n render() {\n const named = this.declared('for');\n const invoker = named ? document.getElementById(named) : null;\n if (!invoker) {\n throw new Error(\n `ful-menu names no invoker: for=\"${named ?? ''}\" must name an element already in the page when the menu upgrades`,\n );\n }\n this.setAttribute('role', 'menu');\n if (!this.hasAttribute('popover')) {\n this.setAttribute('popover', '');\n }\n invoker.setAttribute('aria-haspopup', 'menu');\n Anchors.wire(invoker, this, { prefix: 'ful-menu', invoke: true, expanded: true });\n wireMenuKeys(invoker, this, { items: () => this.items });\n this.#mark();\n this.addEventListener('click', (evt) => {\n const target = /** @type HTMLElement */ (evt.target);\n if (this.items.some((item) => item === target || item.contains(target))) {\n this.hidePopover();\n }\n });\n }\n /**\n * The commands, in the order the arrows walk them: the menu's direct\n * `button` and `a[href]` children, minus those carrying a `disabled` or\n * `hidden` attribute, which keep their role and leave the walk. Reading it\n * also marks any child added since the render, giving it the `menuitem`\n * role, unless it has a role already, and a `tabIndex` of -1.\n * @type {HTMLElement[]}\n */\n get items() {\n return this.#mark().filter((item) => !item.hasAttribute('disabled') && !item.hasAttribute('hidden'));\n }\n /** @returns {HTMLElement[]} every item, disabled and hidden ones included, once marked */\n #mark() {\n const all = /** @type HTMLElement[] */ ([...this.querySelectorAll(':scope > button, :scope > a[href]')]);\n for (const item of all) {\n if (!item.hasAttribute('role')) {\n item.setAttribute('role', 'menuitem');\n }\n item.tabIndex = -1;\n }\n return all;\n }\n}\n\nexport { Menu };\n","import { Localization, ParsedElement } from '../../ftl/index.mjs';\n\nconst SEVERITIES = ['info', 'success', 'warning', 'error'];\n\nconst REGIONS = new Set();\nlet listenerWired = false;\n\n/**\n * @typedef {object} ToastOptions\n * @property {'info'|'success'|'warning'|'error'} [severity] the theme class and\n * the announcement, `info` when absent or unknown\n * @property {number} [timeout] the milliseconds before the toast retires, the\n * region's own timeout when absent\n * @property {{ label: any, onClick?: () => void }} [action] a button labelled\n * with `label` as text, beside the message\n */\n\n/**\n * A region of transient messages, with `role=\"region\"` and a localized\n * `aria-label`. Each `show()` appends a `ful-toast` that retires on its own\n * timer, so concurrent toasts stack.\n *\n * The region is a manual popover, whatever `popover` the page declared, and\n * each `show()` shows it again, so it is on top of the top layer when a toast\n * arrives: above a modal dialog or drawer opened before it. While a modal is\n * open the page outside it is inert, the region included: its toasts show and\n * retire on their timers, and their buttons answer once the modal closes.\n *\n * `timeout` is the region's default timer in milliseconds, 5000 when absent\n * or zero.\n *\n * A `show-toast` event dispatched on the document, or bubbling to it, shows its\n * `detail` in every connected region that has rendered, `detail.message` being\n * the message and the other fields the `ToastOptions`. The document listener is\n * added once, so a second region shows each toast once, and an event with no\n * detail is ignored.\n */\nclass Toasts extends ParsedElement {\n static attributes = ['timeout:number'];\n #timeout;\n /** Upgrades the region, and makes a re-attached one answer `show-toast` again. */\n connectedCallback() {\n super.connectedCallback();\n if (this.rendered) {\n REGIONS.add(this);\n }\n }\n /** Stops the region answering `show-toast` while it is out of the document. */\n disconnectedCallback() {\n REGIONS.delete(this);\n }\n render() {\n this.#timeout = this.declared('timeout') || 5000;\n this.setAttribute('role', 'region');\n this.setAttribute('tabindex', '-1');\n this.setAttribute('aria-label', Localization.of().t('toast.region'));\n this.setAttribute('popover', 'manual');\n if (!listenerWired) {\n listenerWired = true;\n document.addEventListener('show-toast', (/** @type any */ e) => {\n if (!e.detail) {\n return;\n }\n for (const region of REGIONS) {\n region.show(e.detail.message, e.detail);\n }\n });\n }\n REGIONS.add(this);\n }\n /**\n * Appends a `ful-toast` holding the message as text, a `Failure` showing\n * its problems' reasons one per line and anything else its string form\n * (`''` for null or undefined). The toast carries the severity as a class\n * and has `role=\"alert\"` for `error` and `role=\"status\"` otherwise.\n *\n * The toast retires when its timer runs out, when its localized dismiss\n * button is clicked, or when its action button is clicked, after\n * `action.onClick` runs. The timer pauses while the pointer is over the\n * toast or the focus is inside it, and resumes with the time that was left\n * once both have gone. A retiring toast holding the focus moves it to the\n * region, which has `tabindex=\"-1\"` for this. The toast is removed once its\n * `ful-toast-out` animation ends, or at once where the user prefers reduced\n * motion or no animation runs.\n *\n * A connected region is shown again as a popover, which puts it above\n * whatever opened in the top layer since; the focus stays where it was.\n * @param {any} message\n * @param {ToastOptions} [options]\n * @returns {HTMLElement} the toast, already in the region\n */\n show(message, options = {}) {\n const severity = /** @type {string} */ (\n SEVERITIES.includes(/** @type {string} */ (options.severity)) ? options.severity : 'info'\n );\n const item = document.createElement('ful-toast');\n item.classList.add(severity);\n item.setAttribute('role', severity === 'error' ? 'alert' : 'status');\n const body = document.createElement('div');\n body.textContent = Localization.of().failure(message);\n const dismiss = document.createElement('button');\n dismiss.type = 'button';\n dismiss.setAttribute('aria-label', Localization.of().t('toast.dismiss'));\n const icon = document.createElement('ful-icon');\n icon.setAttribute('name', 'x-lg');\n icon.setAttribute('aria-hidden', 'true');\n dismiss.append(icon);\n item.append(body);\n let remaining = options.timeout ?? this.#timeout;\n let startedAt = performance.now();\n let timer = 0;\n const retire = () => {\n clearTimeout(timer);\n if (item.contains(document.activeElement)) {\n /** @type HTMLElement */ (this).focus();\n }\n if (matchMedia('(prefers-reduced-motion: reduce)').matches) {\n item.remove();\n return;\n }\n item.classList.add('ful-toast-out');\n if (item.getAnimations().length === 0) {\n item.remove();\n }\n };\n if (options.action?.label) {\n const action = document.createElement('button');\n action.type = 'button';\n action.className = 'ful-toast-action';\n action.textContent = String(options.action.label);\n action.addEventListener('click', () => {\n /** @type {NonNullable<ToastOptions['action']>} */ (options.action).onClick?.();\n retire();\n });\n item.append(action);\n }\n item.append(dismiss);\n item.addEventListener('animationend', () => {\n if (item.classList.contains('ful-toast-out')) {\n item.remove();\n }\n });\n let holds = 0;\n const hold = () => {\n if (holds === 0) {\n clearTimeout(timer);\n remaining = Math.max(0, remaining - (performance.now() - startedAt));\n }\n ++holds;\n };\n const release = () => {\n if (holds === 0) {\n return;\n }\n if (--holds === 0) {\n startedAt = performance.now();\n timer = setTimeout(retire, remaining);\n }\n };\n item.addEventListener('mouseenter', hold);\n item.addEventListener('mouseleave', release);\n item.addEventListener('focusin', hold);\n item.addEventListener('focusout', release);\n dismiss.addEventListener('click', retire);\n this.append(item);\n this.#raise();\n timer = setTimeout(retire, remaining);\n return item;\n }\n #raise() {\n if (!this.isConnected) {\n return;\n }\n if (this.matches(':popover-open')) {\n this.hidePopover();\n }\n this.showPopover();\n }\n}\n\nexport { Toasts };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\n\n/**\n * A tab panel: one visible panel at a time, announced through the tab pattern\n * (a tablist of tab buttons, each panel a tabpanel labelled by its tab). The\n * tabs are declared as `<tab>` elements in the `tabs` slot, the panels as the\n * slotless children, paired in order. Each `<tab>` becomes a `button` with the\n * `tab` role carrying the tab's content, inside a `ful-tablist` with the\n * `tablist` role. A panel that already has an id keeps it and its tab points at\n * it; a panel without one gets a generated id. Every panel carries\n * `tabindex=\"0\"`, so the visible one follows its tab in the tab order and the\n * hidden ones stay out of it.\n *\n * The tabs use a roving tabindex and automatic activation: a click activates\n * its tab, and on the tablist ArrowRight and ArrowLeft move to the next and\n * previous tab, wrapping around, while Home and End jump to the first and the\n * last, moving the focus with the activation.\n *\n * Entering a panel fires `section:requested` and `section:requested:#<index>`\n * on the host, bubbling, with detail `{ name: null, section, index, first }`,\n * and awaits the answers registered through `AsyncEvents.asyncOn`, so a panel\n * can deliver itself asynchronously: see `SectionRequests`.\n */\nclass Tabs extends ParsedElement {\n static slots = true;\n static observed = ['active:number'];\n static template = `\n <ful-tablist role=\"tablist\">{{{{ slots.tabs }}}}</ful-tablist>\n {{{{ slots.default }}}}\n `;\n #tablist;\n #tabs = [];\n #panels = [];\n #requests = new SectionRequests();\n #active = 0;\n /**\n * Pairs the declared tabs with the panels in order. When the counts\n * differ, the unpaired tabs and panels are left in the dom as they are and\n * a warning is logged.\n * @param {{ slots: Record<string, DocumentFragment> }} conf\n * @returns {void}\n */\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n this.#tablist = fragment.querySelector('ful-tablist');\n const declared = [...this.#tablist.children];\n this.#panels = [...fragment.children].filter((el) => el !== this.#tablist);\n if (declared.length !== this.#panels.length) {\n console.warn(\n `ful-tabs: ${declared.length} tabs declared for ${this.#panels.length} panels, the surplus is left alone`,\n );\n }\n const count = Math.min(declared.length, this.#panels.length);\n this.#tabs = [];\n for (let i = 0; i !== count; ++i) {\n const panel = this.#panels[i];\n const tab = document.createElement('button');\n tab.type = 'button';\n tab.role = 'tab';\n tab.id = Attributes.uid('ful-tab');\n if (!panel.id) {\n panel.id = Attributes.uid('ful-tabpanel');\n }\n tab.setAttribute('aria-controls', panel.id);\n panel.role = 'tabpanel';\n panel.setAttribute('aria-labelledby', tab.id);\n panel.tabIndex = 0;\n tab.append(...declared[i].childNodes);\n tab.addEventListener('click', () => {\n this.active = i;\n });\n declared[i].replaceWith(tab);\n this.#tabs.push(tab);\n }\n this.#tablist.addEventListener('keydown', (e) => {\n const current = this.#active;\n /** @type {number|null} */\n let target = null;\n if (e.key === 'ArrowRight') {\n target = (current + 1) % this.#tabs.length;\n } else if (e.key === 'ArrowLeft') {\n target = (current - 1 + this.#tabs.length) % this.#tabs.length;\n } else if (e.key === 'Home') {\n target = 0;\n } else if (e.key === 'End') {\n target = this.#tabs.length - 1;\n }\n if (target === null || target === current) {\n return;\n }\n e.preventDefault();\n this.active = target;\n this.#tabs[target].focus();\n });\n this.replaceChildren(fragment);\n }\n /**\n * The index of the visible panel, reflected to the `active` attribute.\n * Writing it clamps the value to the paired tabs, a value that is not a\n * number counting as 0, and selects that tab and shows its panel. When the\n * index changes on a rendered element it dispatches `tabs:change` on the\n * host (not bubbling) with detail `{ active, previous }`, then fires the\n * section requests for the entered panel. The first write, which applies\n * the attribute after the render, fires the requests without the event.\n * A failed delivery paints the panel's error and rejects nowhere.\n * @type {number}\n */\n get active() {\n return this.#active;\n }\n /**\n * Fires the section requests again for a panel, whether it is visible or\n * not, with `first` false once an earlier request was answered.\n * @param {number | Element} ref the panel's index, or the panel itself\n * @returns {Promise<any[] | undefined> | undefined} a promise resolving to\n * the answers, or to undefined when nobody listened or the delivery\n * failed (its error painted in the panel); undefined, with a warning, when\n * `ref` names no panel\n */\n refresh(ref) {\n const index = ref instanceof Element ? this.#panels.indexOf(ref) : Number.isInteger(ref) ? ref : NaN;\n const panel = this.#panels[index];\n if (!panel) {\n console.warn(`ful-tabs: no panel answers to \"${ref}\"`);\n return undefined;\n }\n return this.#requests.request(this, panel, null, index).catch(() => undefined);\n }\n set active(v) {\n const index = Math.min(Math.max(0, Number(v) || 0), Math.max(0, this.#tabs.length - 1));\n const previous = this.#active;\n for (const [i, tab] of this.#tabs.entries()) {\n tab.setAttribute('aria-selected', i === index ? 'true' : 'false');\n tab.tabIndex = i === index ? 0 : -1;\n this.#panels[i].hidden = i !== index;\n }\n this.#active = index;\n this.reflectTo('active', index);\n if (this.rendered && index !== previous) {\n this.dispatchEvent(new CustomEvent('tabs:change', { detail: { active: index, previous } }));\n }\n if (this.#panels.length > 0 && (index !== previous || !this.rendered)) {\n this.#requests.request(this, this.#panels[index], null, index).catch(() => undefined);\n }\n }\n}\n\nexport { Tabs };\n","import { Attributes, ParsedElement } from '../../ftl/index.mjs';\n\n/**\n * An accordion over native `details`/`summary` disclosures: the browser\n * provides the semantics, the keyboard and the toggling, and the element adds\n * the group's styling. The `details` written as its children are rendered,\n * unchanged, inside a `ful-accordion-group`.\n */\nclass Accordion extends ParsedElement {\n static slots = true;\n /** @type {string[]} */\n static observed = ['exclusive:presence'];\n static template = `\n <ful-accordion-group>{{{{ slots.default }}}}</ful-accordion-group>\n `;\n #group;\n #exclusive = false;\n /**\n * @param {{ slots: Record<string, DocumentFragment> | undefined }} c\n * @returns {void}\n */\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n this.#group = fragment.querySelector('ful-accordion-group');\n this.replaceChildren(fragment);\n }\n /**\n * Whether opening one panel closes the others, reflected to the\n * `exclusive` attribute; only `true` turns it on. Setting it gives the\n * group's direct `details` children one shared, newly generated `name`,\n * the platform's exclusive grouping, or removes their `name` when off.\n * A `details` added to the group afterwards is not named until the next\n * write.\n * @type {boolean}\n */\n get exclusive() {\n return this.#exclusive;\n }\n set exclusive(v) {\n this.#exclusive = v === true;\n this.reflectTo('exclusive', this.#exclusive);\n const name = this.#exclusive ? Attributes.uid('ful-accordion') : null;\n for (const details of this.#group.querySelectorAll(':scope > details')) {\n if (name === null) {\n details.removeAttribute('name');\n } else {\n details.setAttribute('name', name);\n }\n }\n }\n}\n\nexport { Accordion };\n","import { ParsedElement } from '../../ftl/index.mjs';\nimport { SectionRequests } from '../events/sections.mjs';\n\n/**\n * A wizard: a progress of steps over one-of-N sections. The steps are declared\n * as `<step>` elements in the `steps` slot, the sections as the slotless\n * children, paired in order; each section may carry a `data-step` name, which\n * is what `move()` and `refresh()` answer to. The steps become the items of an\n * `ol` inside `ful-steps`, labelled by the localized `wizard.progress`.\n *\n * The current step is the `aria-current=\"step\"` claim, carried by the step and\n * its section together, and the stylesheet hides every `section` child that\n * does not carry it. A section that carries the claim in the markup when the\n * wizard renders stays current; otherwise the first section is. Every paired\n * section gets `tabindex=\"-1\"`, so a move can focus it.\n *\n * Entering a section, the first one at the render included, fires\n * `section:requested`, `section:requested:#<index>` and, when the section has a\n * `data-step`, `section:requested:<name>` on the host, bubbling, with detail\n * `{ name, section, index, first }`, and awaits the answers registered through\n * `AsyncEvents.asyncOn`: see `SectionRequests`. A failure of the initial entry\n * paints the section's error and rejects nowhere.\n */\nclass Wizard extends ParsedElement {\n static slots = true;\n static observed = ['progress'];\n static template = `\n <ful-steps><ol data-tpl-aria-label=\"#l10n:t('wizard.progress')\">{{{{ slots.steps }}}}</ol></ful-steps>\n {{{{ slots.default }}}}\n `;\n #steps = [];\n #sections = [];\n #requests = new SectionRequests();\n #index = 0;\n #progress;\n /**\n * Pairs the declared steps with the sections in order. When the counts\n * differ, the unpaired steps and sections are left in the dom as they are\n * and a warning is logged.\n * @param {{ slots: Record<string, DocumentFragment> }} conf\n * @returns {void}\n */\n render({ slots }) {\n const fragment = this.template().withOverlay({ slots }).render();\n const list = /** @type {HTMLElement} */ (fragment.querySelector('ful-steps ol'));\n const declared = [...list.children];\n this.#sections = [...fragment.children].filter((el) => el.localName !== 'ful-steps');\n if (declared.length !== this.#sections.length) {\n console.warn(\n `ful-wizard: ${declared.length} steps declared for ${this.#sections.length} sections, the surplus is left alone`,\n );\n }\n const count = Math.min(declared.length, this.#sections.length);\n this.#steps = [];\n for (let i = 0; i !== count; ++i) {\n const li = document.createElement('li');\n li.append(...declared[i].childNodes);\n declared[i].replaceWith(li);\n this.#steps.push(li);\n this.#sections[i].tabIndex = -1;\n }\n this.replaceChildren(fragment);\n if (count > 0) {\n const claimed = this.#sections.findIndex((s) => s.getAttribute('aria-current') === 'step');\n this.#apply(claimed === -1 ? 0 : Math.min(claimed, count - 1));\n this.#enter(this.#index).catch(() => undefined);\n }\n }\n /**\n * The zero-based position of the current step.\n * @type {number}\n */\n get index() {\n return this.#index;\n }\n /**\n * The `data-step` of the current section, or null when it has none or no\n * section is paired.\n * @type {string | null}\n */\n get step() {\n return this.#sections[this.#index]?.getAttribute('data-step') ?? null;\n }\n /**\n * The shape of the progress chrome, reflected to the `progress` attribute:\n * unset shows the current step alone, `timeline` every step as done,\n * current or future, `dots` one dot per step, `none` no progress at all.\n * The value only drives the stylesheet; the moves are the same in every\n * shape.\n * @type {string | null}\n */\n get progress() {\n return this.#progress;\n }\n set progress(v) {\n this.#progress = v;\n this.reflectTo('progress', v);\n }\n /**\n * Moves to the following step; at the last step nothing happens.\n * @returns {Promise<any[] | undefined> | undefined} what `move()` answers\n * @throws what the entered section's delivery rejected with, as the rejection\n * of the returned promise\n */\n next() {\n return this.#move(this.#index + 1);\n }\n /**\n * Moves to the preceding step; at the first step nothing happens.\n * @returns {Promise<any[] | undefined> | undefined} what `move()` answers\n * @throws what the entered section's delivery rejected with, as the rejection\n * of the returned promise\n */\n prev() {\n return this.#move(this.#index - 1);\n }\n /**\n * Moves to the section carrying `data-step=\"<ref>\"`. A move makes that step\n * and section current, moves the focus to the section, dispatches\n * `wizard:change` on the host (not bubbling) with detail `{ index, step }`,\n * then fires the section requests for it.\n * @param {string} ref the section's `data-step`\n * @returns {Promise<any[] | undefined> | undefined} a promise resolving to\n * the answers once they are delivered, or to undefined when nobody\n * listened; undefined when the section is already current, and undefined\n * with a warning when no section carries `ref`\n * @throws what the entered section's delivery rejected with, as the rejection\n * of the returned promise, after its error is painted in the section\n */\n move(ref) {\n const index = this.#sections.findIndex((s) => s.getAttribute('data-step') === ref);\n if (index === -1) {\n console.warn(`ful-wizard: no section carries data-step=\"${ref}\"`);\n return undefined;\n }\n return this.#move(index);\n }\n /**\n * Fires the section requests again for a section, whether it is current or\n * not, with `first` false once an earlier request was answered.\n * @param {string | Element} ref the section's `data-step`, or the section\n * itself\n * @returns {Promise<any[] | undefined> | undefined} a promise resolving to\n * the answers, or to undefined when nobody listened or the delivery failed\n * (its error painted in the section); undefined, with a warning, when `ref`\n * names no section\n */\n refresh(ref) {\n const section =\n ref instanceof Element\n ? ref\n : typeof ref === 'string'\n ? this.#sections.find((s) => s.getAttribute('data-step') === ref)\n : undefined;\n const index = this.#sections.indexOf(section);\n if (index === -1) {\n console.warn(`ful-wizard: no section answers to \"${ref}\"`);\n return undefined;\n }\n return this.#enter(index).catch(() => undefined);\n }\n #enter(index) {\n return this.#requests.request(\n this,\n this.#sections[index],\n this.#sections[index].getAttribute('data-step'),\n index,\n );\n }\n #move(index) {\n const clamped = Math.min(Math.max(0, index), Math.max(0, this.#steps.length - 1));\n if (clamped === this.#index) {\n return undefined;\n }\n this.#apply(clamped);\n this.#sections[this.#index].focus();\n if (this.rendered) {\n this.dispatchEvent(new CustomEvent('wizard:change', { detail: { index: this.#index, step: this.step } }));\n }\n return this.#enter(clamped);\n }\n #apply(index) {\n for (const [i, step] of this.#steps.entries()) {\n if (i === index) {\n step.setAttribute('aria-current', 'step');\n this.#sections[i].setAttribute('aria-current', 'step');\n } else {\n step.removeAttribute('aria-current');\n this.#sections[i].removeAttribute('aria-current');\n }\n }\n this.#index = index;\n }\n}\n\nexport { Wizard };\n","export default {\n 'pagination.showing': 'Page {current} of {total}',\n 'pagination.navigation': 'Page navigation',\n 'pagination.previous': 'Previous',\n 'pagination.next': 'Next',\n 'pagination.reload': 'Reload',\n 'table.initial': 'Start searching to see results.',\n 'table.error': 'Error while loading data:',\n 'table.no-data': 'No elements found.',\n 'dropdown.empty': 'No results',\n 'select.remove': 'Remove',\n 'files.dropzone-label': 'Click or drop your files here',\n 'files.remove': 'Remove',\n 'files.unacceptable-file-type': 'Only files of type {types} are supported',\n 'files.max-file-size-exceeded': 'Maximum supported file size is {size}',\n 'files.max-total-size-exceeded': 'Maximum supported total file size is {size}',\n 'files.max-files-exceeded': { one: 'Maximum of {count} file exceeded', other: 'Maximum of {count} files exceeded' },\n 'filters.op.EQ': 'Equals',\n 'filters.op.NEQ': 'Not equal',\n 'filters.op.LT': 'Less than',\n 'filters.op.GT': 'Greater than',\n 'filters.op.LTE': 'At most',\n 'filters.op.GTE': 'At least',\n 'filters.op.BETWEEN': 'Between',\n 'filters.op.CONTAINS': 'Contains',\n 'filters.op.STARTS_WITH': 'Starts with',\n 'filters.op.ENDS_WITH': 'Ends with',\n 'filters.sensitivity.IGNORE_CASE': 'Ignore case',\n 'filters.sensitivity.CASE_SENSITIVE': 'Case sensitive',\n 'filters.boolean.any': 'Any',\n 'filters.boolean.true': 'Yes',\n 'filters.boolean.false': 'No',\n 'info.tooltip': 'More information',\n 'failure.no-reason': 'Something went wrong',\n 'dialog.acknowledge': 'Got it',\n 'dialog.close': 'Close',\n 'dialog.confirm': 'Confirm',\n 'dialog.cancel': 'Cancel',\n 'drawer.close': 'Close',\n 'spinner.loading': 'Loading…',\n 'toast.region': 'Notifications',\n 'toast.dismiss': 'Dismiss',\n 'wizard.progress': 'Progress',\n};\n","export default {\n 'pagination.showing': 'Pagina {current} di {total}',\n 'pagination.navigation': 'Navigazione pagine',\n 'pagination.previous': 'Precedente',\n 'pagination.next': 'Successivo',\n 'pagination.reload': 'Ricarica',\n 'table.initial': 'Avvia la ricerca per visualizzare i risultati.',\n 'table.error': 'Errore nel caricamento dei dati:',\n 'table.no-data': 'Nessun elemento trovato.',\n 'dropdown.empty': 'Nessun risultato',\n 'select.remove': 'Rimuovi',\n 'files.dropzone-label': 'Clicca o trascina i file qui',\n 'files.remove': 'Rimuovi',\n 'files.unacceptable-file-type': 'Solo i file di tipo {types} sono supportati',\n 'files.max-file-size-exceeded': 'La dimensione massima di un file è di {size}',\n 'files.max-total-size-exceeded': 'La dimensione massima complessiva dei file è di {size}',\n 'files.max-files-exceeded': { other: 'Superato il numero massimo di {count} file' },\n 'filters.op.EQ': 'Uguale',\n 'filters.op.NEQ': 'Diverso',\n 'filters.op.LT': 'Minore',\n 'filters.op.GT': 'Maggiore',\n 'filters.op.LTE': 'Al massimo',\n 'filters.op.GTE': 'Almeno',\n 'filters.op.BETWEEN': 'Tra',\n 'filters.op.CONTAINS': 'Contiene',\n 'filters.op.STARTS_WITH': 'Inizia con',\n 'filters.op.ENDS_WITH': 'Termina con',\n 'filters.sensitivity.IGNORE_CASE': 'Ignora maiuscole',\n 'filters.sensitivity.CASE_SENSITIVE': 'Distingui maiuscole',\n 'filters.boolean.any': 'Qualsiasi',\n 'filters.boolean.true': 'Sì',\n 'filters.boolean.false': 'No',\n 'info.tooltip': 'Maggiori informazioni',\n 'failure.no-reason': 'Si è verificato un errore',\n 'dialog.acknowledge': 'Ho capito',\n 'dialog.close': 'Chiudi',\n 'dialog.confirm': 'Conferma',\n 'dialog.cancel': 'Annulla',\n 'drawer.close': 'Chiudi',\n 'spinner.loading': 'Caricamento…',\n 'toast.region': 'Notifiche',\n 'toast.dismiss': 'Chiudi',\n 'wizard.progress': 'Avanzamento',\n};\n","export default {\n 'pagination.showing': 'Página {current} de {total}',\n 'pagination.navigation': 'Navegación de páginas',\n 'pagination.previous': 'Anterior',\n 'pagination.next': 'Siguiente',\n 'pagination.reload': 'Recargar',\n 'table.initial': 'Inicia la búsqueda para ver los resultados.',\n 'table.error': 'Error al cargar los datos:',\n 'table.no-data': 'No se encontraron elementos.',\n 'dropdown.empty': 'Sin resultados',\n 'select.remove': 'Eliminar',\n 'files.dropzone-label': 'Haz clic o arrastra tus archivos aquí',\n 'files.remove': 'Eliminar',\n 'files.unacceptable-file-type': 'Solo se admiten archivos de tipo {types}',\n 'files.max-file-size-exceeded': 'El tamaño máximo de archivo admitido es {size}',\n 'files.max-total-size-exceeded': 'El tamaño total máximo admitido es {size}',\n 'files.max-files-exceeded': {\n one: 'Se ha superado el número máximo de {count} archivo',\n other: 'Se ha superado el número máximo de {count} archivos',\n },\n 'filters.op.EQ': 'Igual',\n 'filters.op.NEQ': 'Distinto',\n 'filters.op.LT': 'Menor',\n 'filters.op.GT': 'Mayor',\n 'filters.op.LTE': 'Como máximo',\n 'filters.op.GTE': 'Al menos',\n 'filters.op.BETWEEN': 'Entre',\n 'filters.op.CONTAINS': 'Contiene',\n 'filters.op.STARTS_WITH': 'Empieza por',\n 'filters.op.ENDS_WITH': 'Termina por',\n 'filters.sensitivity.IGNORE_CASE': 'Ignorar mayúsculas',\n 'filters.sensitivity.CASE_SENSITIVE': 'Distinguir mayúsculas',\n 'filters.boolean.any': 'Cualquiera',\n 'filters.boolean.true': 'Sí',\n 'filters.boolean.false': 'No',\n 'info.tooltip': 'Más información',\n 'failure.no-reason': 'Se ha producido un error',\n 'dialog.acknowledge': 'Entendido',\n 'dialog.close': 'Cerrar',\n 'dialog.confirm': 'Confirmar',\n 'dialog.cancel': 'Cancelar',\n 'drawer.close': 'Cerrar',\n 'spinner.loading': 'Cargando…',\n 'toast.region': 'Notificaciones',\n 'toast.dismiss': 'Cerrar',\n 'wizard.progress': 'Progreso',\n};\n","export default {\n 'pagination.showing': 'Page {current} sur {total}',\n 'pagination.navigation': 'Navigation des pages',\n 'pagination.previous': 'Précédent',\n 'pagination.next': 'Suivant',\n 'pagination.reload': 'Recharger',\n 'table.initial': 'Lancez la recherche pour voir les résultats.',\n 'table.error': 'Erreur lors du chargement des données :',\n 'table.no-data': 'Aucun élément trouvé.',\n 'dropdown.empty': 'Aucun résultat',\n 'select.remove': 'Retirer',\n 'files.dropzone-label': 'Cliquez ou déposez vos fichiers ici',\n 'files.remove': 'Retirer',\n 'files.unacceptable-file-type': 'Seuls les fichiers de type {types} sont pris en charge',\n 'files.max-file-size-exceeded': 'La taille maximale de fichier prise en charge est {size}',\n 'files.max-total-size-exceeded': 'La taille totale maximale prise en charge est {size}',\n 'files.max-files-exceeded': {\n one: 'Nombre maximal de {count} fichier dépassé',\n other: 'Nombre maximal de {count} fichiers dépassé',\n },\n 'filters.op.EQ': 'Égal',\n 'filters.op.NEQ': 'Différent',\n 'filters.op.LT': 'Inférieur',\n 'filters.op.GT': 'Supérieur',\n 'filters.op.LTE': 'Au plus',\n 'filters.op.GTE': 'Au moins',\n 'filters.op.BETWEEN': 'Entre',\n 'filters.op.CONTAINS': 'Contient',\n 'filters.op.STARTS_WITH': 'Commence par',\n 'filters.op.ENDS_WITH': 'Finit par',\n 'filters.sensitivity.IGNORE_CASE': 'Ignorer la casse',\n 'filters.sensitivity.CASE_SENSITIVE': 'Respecter la casse',\n 'filters.boolean.any': 'Indifférent',\n 'filters.boolean.true': 'Oui',\n 'filters.boolean.false': 'Non',\n 'info.tooltip': 'Plus d’informations',\n 'failure.no-reason': \"Une erreur s'est produite\",\n 'dialog.acknowledge': 'J’ai compris',\n 'dialog.close': 'Fermer',\n 'dialog.confirm': 'Confirmer',\n 'dialog.cancel': 'Annuler',\n 'drawer.close': 'Fermer',\n 'spinner.loading': 'Chargement…',\n 'toast.region': 'Notifications',\n 'toast.dismiss': 'Fermer',\n 'wizard.progress': 'Progression',\n};\n","import { HttpClient } from '../httpc/index.mjs';\nimport { Localization } from '../ftl/index.mjs';\nimport { Checkbox } from './forms/checkbox.mjs';\nimport { LocalDate, Instant, InputLocalDate, InputLocalTime, InputInstant } from './forms/temporals.mjs';\nimport { BooleanFilter, InFilter, InstantFilter, LocalDateFilter, NumberFilter, TextFilter } from './forms/filters.mjs';\nimport { FormLoader, Form } from './forms/form.mjs';\nimport { Input } from './forms/input.mjs';\nimport { InputFile } from './forms/files.mjs';\nimport { RadioGroup } from './forms/radio.mjs';\nimport { SelectLoader, Dropdown, Select } from './forms/select.mjs';\nimport { Tooltip } from './disclosures/tooltip.mjs';\nimport { Dialog } from './disclosures/dialog.mjs';\nimport { Drawer } from './disclosures/drawer.mjs';\nimport { Menu } from './disclosures/menu.mjs';\nimport { Toasts } from './disclosures/toast.mjs';\nimport { Tabs } from './navigation/tabs.mjs';\nimport { Accordion } from './disclosures/accordion.mjs';\nimport { Wizard } from './navigation/wizard.mjs';\nimport { TableLoader, Table, Pagination, SortButton } from './navigation/table.mjs';\nimport en from './l10n/en.mjs';\nimport it from './l10n/it.mjs';\nimport es from './l10n/es.mjs';\nimport fr from './l10n/fr.mjs';\n\nconst BUILTIN = { en, it, es, fr };\n\n/**\n * Registers everything ful provides on a registry: the elements, the loader\n * components, an http client, and the translations for the configured\n * language. A page calls `registry.plugin(new Plugin({…})).configure()` once;\n * `registry.plugin` calls this plugin's `configure`.\n */\nclass Plugin {\n #language;\n #translations;\n #httpClient;\n\n /**\n * @param {{ language?: string, translations?: Record<string, any>, httpClient?: HttpClient }} [options]\n * `language` is fixed for the page: a full BCP-47 tag or a primary subtag,\n * defaulting to `navigator.language`, then to 'en'. Its primary subtag,\n * lowercased, picks the built-in translations (en, it, es, fr); the messages\n * are the english ones, overridden by that language's, overridden by\n * `translations`, so a language without built-in translations reads in\n * english. `translations` is a flat map of keys to messages: reword built-in\n * keys ('pagination.showing', …) or add your own ('checkout.total', …).\n * `httpClient` is the client every ful component fetches through, registered\n * as the `http-client` component; without one, `configure` builds a client\n * that sends the csrf token and navigates to '/' on a 401 response.\n */\n constructor(options = {}) {\n this.#language = options.language ?? navigator?.language ?? 'en';\n this.#translations = options.translations ?? {};\n this.#httpClient = options.httpClient ?? null;\n }\n\n /**\n * Defines on `registry` the `l10n` module, the `http-client` component,\n * every `ful-*` element, the `loaders:select`, `loaders:form` and\n * `loaders:table` components, and an overlay publishing `l10n` (the merged\n * messages) and `locale` (the `language` as given) to every template.\n * @param {{ defineModule(name: string, module: any): any, defineComponent(name: string, component: any): any, defineElement(tag: string, klass: CustomElementConstructor): any, defineOverlay(...data: any[]): any }} registry\n * the ftl `Registry`, each of those methods answering the registry itself\n * @returns {void}\n */\n configure(registry) {\n const httpClient =\n this.#httpClient ?? HttpClient.builder().withCsrfToken().withRedirectOnUnauthorized('/').build();\n const language = this.#language.split('-')[0].toLowerCase();\n const l10n = { ...BUILTIN.en, ...BUILTIN[language], ...this.#translations };\n registry\n .defineModule('l10n', Localization)\n .defineComponent('http-client', httpClient)\n .defineElement('ful-tooltip', Tooltip)\n .defineElement('ful-dialog', Dialog)\n .defineElement('ful-drawer', Drawer)\n .defineElement('ful-menu', Menu)\n .defineElement('ful-toasts', Toasts)\n .defineElement('ful-tabs', Tabs)\n .defineElement('ful-accordion', Accordion)\n .defineElement('ful-wizard', Wizard)\n .defineElement('ful-form', Form)\n .defineElement('ful-checkbox', Checkbox)\n .defineElement('ful-input', Input)\n .defineElement('ful-input-file', InputFile)\n .defineElement('ful-local-date', LocalDate)\n .defineElement('ful-instant', Instant)\n .defineElement('ful-input-local-date', InputLocalDate)\n .defineElement('ful-input-local-time', InputLocalTime)\n .defineElement('ful-input-instant', InputInstant)\n .defineElement('ful-radio-group', RadioGroup)\n .defineElement('ful-table', Table)\n .defineElement('ful-pagination', Pagination)\n .defineElement('ful-sorter', SortButton)\n .defineElement('ful-filter-instant', InstantFilter)\n .defineElement('ful-filter-local-date', LocalDateFilter)\n .defineElement('ful-filter-number', NumberFilter)\n .defineElement('ful-filter-boolean', BooleanFilter)\n .defineElement('ful-filter-text', TextFilter)\n .defineElement('ful-filter-in', InFilter)\n .defineElement('ful-select', Select)\n .defineElement('ful-dropdown', Dropdown)\n .defineComponent('loaders:select', SelectLoader)\n .defineComponent('loaders:form', FormLoader)\n .defineComponent('loaders:table', TableLoader)\n .defineOverlay({\n l10n,\n locale: this.#language,\n });\n }\n}\n\nexport { Plugin };\n","import * as ftl from './ftl/index.mjs';\nimport * as httpc from './httpc/index.mjs';\nimport * as ful from './ful/index.mjs';\n\nif (typeof window !== 'undefined') {\n // biome-ignore-start lint/complexity/useLiteralKeys: checkJs rejects unknown properties on Window\n window['ftl'] = ftl;\n window['httpc'] = httpc;\n window['ful'] = ful;\n // biome-ignore-end lint/complexity/useLiteralKeys: checkJs rejects unknown properties on Window\n}\n\nexport * from './ftl/index.mjs';\nexport * from './httpc/index.mjs';\nexport * from './ful/index.mjs';\n"],"names":["$top_level_initializer","TemplatedRoot","TemplatedExpression","value","BeginNode","EndNode","BeginHtml","EndHtml","BeginText","EndText","TemplatedText","parts","c","ExpressionRoot","r","TernaryExpression","cond","ifTrue","ifFalse","ElvisExpression","NullCoalescingExpression","lhs","rhs","OrExpression","head","tail","AndExpression","EqExpression","op","RelExpression","NotExpression","expr","Access","AccessExpression","AccessMember","AccessSubscript","AccessMethodCall","h","t","GroupingExpression","e","ModuleFunctionCall","fn","AnyLiteral","NumberLiteral","StringLiteral","TemplateStringExpression","TemplateStringLiteral","char","ArrayLiteral","DictLiteral","ModuleFunction","module","v","Word","Identifier","s","EqualityOp","RelationalOp","_","parse"],"mappings":"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"}