From 7f98212bee52b89a683ba3777977426846a0053c Mon Sep 17 00:00:00 2001 From: Brendan Duncan Date: Thu, 7 Nov 2024 21:55:52 -0700 Subject: [PATCH] Remove sourcemap from published sources --- package.json | 2 +- rollup.config.js | 9 +- test/tests/struct.js | 2 +- test/tests/struct_layout.js | 2 +- test/tests/test_parser.js | 2 +- test/tests/test_reflect.js | 2 +- test/tests/test_scanner.js | 2 +- tsconfig.json | 2 +- wgsl_reflect.debug.js | 4097 +++++++++++++++++++++++++++++++++++ wgsl_reflect.debug.js.map | 1 + wgsl_reflect.module.js | 1 - wgsl_reflect.module.js.map | 1 - wgsl_reflect.node.js | 1 - wgsl_reflect.node.js.map | 1 - 14 files changed, 4110 insertions(+), 15 deletions(-) create mode 100644 wgsl_reflect.debug.js create mode 100644 wgsl_reflect.debug.js.map delete mode 100644 wgsl_reflect.module.js.map delete mode 100644 wgsl_reflect.node.js.map diff --git a/package.json b/package.json index 7e7238c..900e217 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wgsl_reflect", - "version": "1.0.14", + "version": "1.0.15", "description": "WGSL Parser and Reflection library", "author": "Brendan Duncan", "license": "MIT", diff --git a/rollup.config.js b/rollup.config.js index 6a65e5c..acedac8 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,6 +1,6 @@ import typescript from "@rollup/plugin-typescript"; -function build(format, file) { +function build(format, file, sourcemap) { return { input: 'src/index.ts', plugins: [typescript()], @@ -8,15 +8,16 @@ function build(format, file) { { format, file, - sourcemap: true, + sourcemap, } ] } } let builds = [ - build('esm', 'wgsl_reflect.module.js'), - build('cjs', 'wgsl_reflect.node.js'), + build('esm', 'wgsl_reflect.module.js', false), + build('cjs', 'wgsl_reflect.node.js', false), + build('esm', 'wgsl_reflect.debug.js', true), ]; export default builds; diff --git a/test/tests/struct.js b/test/tests/struct.js index 2ebfcc7..5c1ff16 100644 --- a/test/tests/struct.js +++ b/test/tests/struct.js @@ -1,5 +1,5 @@ import { test, group } from "../test.js"; -import { WgslParser } from "../../../wgsl_reflect.module.js"; +import { WgslParser } from "../../../wgsl_reflect.debug.js"; group("struct", function () { const shader = ` diff --git a/test/tests/struct_layout.js b/test/tests/struct_layout.js index aaffc38..2ed4fa3 100644 --- a/test/tests/struct_layout.js +++ b/test/tests/struct_layout.js @@ -1,5 +1,5 @@ import { test, group } from "../test.js"; -import { WgslReflect } from "../../../wgsl_reflect.module.js"; +import { WgslReflect } from "../../../wgsl_reflect.debug.js"; group("struct_layout", function () { const shader = ` diff --git a/test/tests/test_parser.js b/test/tests/test_parser.js index d53a6ba..1c7ce21 100644 --- a/test/tests/test_parser.js +++ b/test/tests/test_parser.js @@ -1,5 +1,5 @@ import { test, group } from "../test.js"; -import { WgslParser } from "../../../wgsl_reflect.module.js"; +import { WgslParser } from "../../../wgsl_reflect.debug.js"; group("Parser", function () { test("const2", function (test) { diff --git a/test/tests/test_reflect.js b/test/tests/test_reflect.js index 34fe293..fcb9aad 100644 --- a/test/tests/test_reflect.js +++ b/test/tests/test_reflect.js @@ -1,5 +1,5 @@ import { test, group } from "../test.js"; -import { WgslReflect, ResourceType } from "../../../wgsl_reflect.module.js"; +import { WgslReflect, ResourceType } from "../../../wgsl_reflect.debug.js"; group("Reflect", function () { test("array_no_format", function (test) { diff --git a/test/tests/test_scanner.js b/test/tests/test_scanner.js index dd830d6..89c3734 100644 --- a/test/tests/test_scanner.js +++ b/test/tests/test_scanner.js @@ -1,5 +1,5 @@ import { test, group } from "../test.js"; -import { WgslScanner, TokenTypes } from "../../../wgsl_reflect.module.js"; +import { WgslScanner, TokenTypes } from "../../../wgsl_reflect.debug.js"; group("Scanner", function () { test("(1+2)-3;", function (test) { diff --git a/tsconfig.json b/tsconfig.json index 61de1a9..3f54c04 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,7 @@ "noEmitHelpers": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, - "sourceMap": true, + "pretty": true, "allowUnreachableCode": true, "allowUnusedLabels": true, diff --git a/wgsl_reflect.debug.js b/wgsl_reflect.debug.js new file mode 100644 index 0000000..6a4182d --- /dev/null +++ b/wgsl_reflect.debug.js @@ -0,0 +1,4097 @@ +class ParseContext { + constructor() { + this.constants = new Map(); + this.aliases = new Map(); + this.structs = new Map(); + } +} +/** + * @class Node + * @category AST + * Base class for AST nodes parsed from a WGSL shader. + */ +class Node { + constructor() { } + get isAstNode() { + return true; + } + get astNodeType() { + return ""; + } + evaluate(context) { + throw new Error("Cannot evaluate node"); + } + evaluateString(context) { + return this.evaluate(context).toString(); + } + search(callback) { } + searchBlock(block, callback) { + if (block) { + callback(_BlockStart.instance); + for (const node of block) { + if (node instanceof Array) { + this.searchBlock(node, callback); + } + else { + node.search(callback); + } + } + callback(_BlockEnd.instance); + } + } +} +// For internal use only +class _BlockStart extends Node { +} +_BlockStart.instance = new _BlockStart(); +// For internal use only +class _BlockEnd extends Node { +} +_BlockEnd.instance = new _BlockEnd(); +/** + * @class Statement + * @extends Node + * @category AST + */ +class Statement extends Node { + constructor() { + super(); + } +} +/** + * @class Function + * @extends Statement + * @category AST + */ +class Function extends Statement { + constructor(name, args, returnType, body, startLine, endLine) { + super(); + this.calls = new Set(); + this.name = name; + this.args = args; + this.returnType = returnType; + this.body = body; + this.startLine = startLine; + this.endLine = endLine; + } + get astNodeType() { + return "function"; + } + search(callback) { + this.searchBlock(this.body, callback); + } +} +/** + * @class StaticAssert + * @extends Statement + * @category AST + */ +class StaticAssert extends Statement { + constructor(expression) { + super(); + this.expression = expression; + } + get astNodeType() { + return "staticAssert"; + } + search(callback) { + this.expression.search(callback); + } +} +/** + * @class While + * @extends Statement + * @category AST + */ +class While extends Statement { + constructor(condition, body) { + super(); + this.condition = condition; + this.body = body; + } + get astNodeType() { + return "while"; + } + search(callback) { + this.condition.search(callback); + this.searchBlock(this.body, callback); + } +} +/** + * @class Continuing + * @extends Statement + * @category AST + */ +class Continuing extends Statement { + constructor(body) { + super(); + this.body = body; + } + get astNodeType() { + return "continuing"; + } + search(callback) { + this.searchBlock(this.body, callback); + } +} +/** + * @class For + * @extends Statement + * @category AST + */ +class For extends Statement { + constructor(init, condition, increment, body) { + super(); + this.init = init; + this.condition = condition; + this.increment = increment; + this.body = body; + } + get astNodeType() { + return "for"; + } + search(callback) { + var _a, _b, _c; + (_a = this.init) === null || _a === void 0 ? void 0 : _a.search(callback); + (_b = this.condition) === null || _b === void 0 ? void 0 : _b.search(callback); + (_c = this.increment) === null || _c === void 0 ? void 0 : _c.search(callback); + this.searchBlock(this.body, callback); + } +} +/** + * @class Var + * @extends Statement + * @category AST + */ +class Var extends Statement { + constructor(name, type, storage, access, value) { + super(); + this.name = name; + this.type = type; + this.storage = storage; + this.access = access; + this.value = value; + } + get astNodeType() { + return "var"; + } + search(callback) { + var _a; + callback(this); + (_a = this.value) === null || _a === void 0 ? void 0 : _a.search(callback); + } +} +/** + * @class Override + * @extends Statement + * @category AST + */ +class Override extends Statement { + constructor(name, type, value) { + super(); + this.name = name; + this.type = type; + this.value = value; + } + get astNodeType() { + return "override"; + } + search(callback) { + var _a; + (_a = this.value) === null || _a === void 0 ? void 0 : _a.search(callback); + } +} +/** + * @class Let + * @extends Statement + * @category AST + */ +class Let extends Statement { + constructor(name, type, storage, access, value) { + super(); + this.name = name; + this.type = type; + this.storage = storage; + this.access = access; + this.value = value; + } + get astNodeType() { + return "let"; + } + search(callback) { + var _a; + callback(this); + (_a = this.value) === null || _a === void 0 ? void 0 : _a.search(callback); + } +} +/** + * @class Const + * @extends Statement + * @category AST + */ +class Const extends Statement { + constructor(name, type, storage, access, value) { + super(); + this.name = name; + this.type = type; + this.storage = storage; + this.access = access; + this.value = value; + } + get astNodeType() { + return "const"; + } + evaluate(context) { + return this.value.evaluate(context); + } + search(callback) { + var _a; + callback(this); + (_a = this.value) === null || _a === void 0 ? void 0 : _a.search(callback); + } +} +var IncrementOperator; +(function (IncrementOperator) { + IncrementOperator["increment"] = "++"; + IncrementOperator["decrement"] = "--"; +})(IncrementOperator || (IncrementOperator = {})); +(function (IncrementOperator) { + function parse(val) { + const key = val; + if (key == "parse") + throw new Error("Invalid value for IncrementOperator"); + return IncrementOperator[key]; + } + IncrementOperator.parse = parse; +})(IncrementOperator || (IncrementOperator = {})); +/** + * @class Increment + * @extends Statement + * @category AST + */ +class Increment extends Statement { + constructor(operator, variable) { + super(); + this.operator = operator; + this.variable = variable; + } + get astNodeType() { + return "increment"; + } + search(callback) { + this.variable.search(callback); + } +} +var AssignOperator; +(function (AssignOperator) { + AssignOperator["assign"] = "="; + AssignOperator["addAssign"] = "+="; + AssignOperator["subtractAssin"] = "-="; + AssignOperator["multiplyAssign"] = "*="; + AssignOperator["divideAssign"] = "/="; + AssignOperator["moduloAssign"] = "%="; + AssignOperator["andAssign"] = "&="; + AssignOperator["orAssign"] = "|="; + AssignOperator["xorAssign"] = "^="; + AssignOperator["shiftLeftAssign"] = "<<="; + AssignOperator["shiftRightAssign"] = ">>="; +})(AssignOperator || (AssignOperator = {})); +(function (AssignOperator) { + function parse(val) { + const key = val; + if (key == "parse") { + throw new Error("Invalid value for AssignOperator"); + } + //return AssignOperator[key]; + return key; + } + AssignOperator.parse = parse; +})(AssignOperator || (AssignOperator = {})); +/** + * @class Assign + * @extends Statement + * @category AST + */ +class Assign extends Statement { + constructor(operator, variable, value) { + super(); + this.operator = operator; + this.variable = variable; + this.value = value; + } + get astNodeType() { + return "assign"; + } + search(callback) { + this.variable.search(callback); + this.value.search(callback); + } +} +/** + * @class Call + * @extends Statement + * @category AST + */ +class Call extends Statement { + constructor(name, args) { + super(); + this.name = name; + this.args = args; + } + get astNodeType() { + return "call"; + } + search(callback) { + for (const node of this.args) { + node.search(callback); + } + callback(this); + } +} +/** + * @class Loop + * @extends Statement + * @category AST + */ +class Loop extends Statement { + constructor(body, continuing) { + super(); + this.body = body; + this.continuing = continuing; + } + get astNodeType() { + return "loop"; + } +} +/** + * @class Switch + * @extends Statement + * @category AST + */ +class Switch extends Statement { + constructor(condition, body) { + super(); + this.condition = condition; + this.body = body; + } + get astNodeType() { + return "body"; + } +} +/** + * @class If + * @extends Statement + * @category AST + */ +class If extends Statement { + constructor(condition, body, elseif, _else) { + super(); + this.condition = condition; + this.body = body; + this.elseif = elseif; + this.else = _else; + } + get astNodeType() { + return "if"; + } + search(callback) { + this.condition.search(callback); + this.searchBlock(this.body, callback); + this.searchBlock(this.elseif, callback); + this.searchBlock(this.else, callback); + } +} +/** + * @class Return + * @extends Statement + * @category AST + */ +class Return extends Statement { + constructor(value) { + super(); + this.value = value; + } + get astNodeType() { + return "return"; + } + search(callback) { + var _a; + (_a = this.value) === null || _a === void 0 ? void 0 : _a.search(callback); + } +} +/** + * @class Enable + * @extends Statement + * @category AST + */ +class Enable extends Statement { + constructor(name) { + super(); + this.name = name; + } + get astNodeType() { + return "enable"; + } +} +/** + * @class Requires + * @extends Statement + * @category AST + */ +class Requires extends Statement { + constructor(extensions) { + super(); + this.extensions = extensions; + } + get astNodeType() { + return "requires"; + } +} +/** + * @class Diagnostic + * @extends Statement + * @category AST + */ +class Diagnostic extends Statement { + constructor(severity, rule) { + super(); + this.severity = severity; + this.rule = rule; + } + get astNodeType() { + return "diagnostic"; + } +} +/** + * @class Alias + * @extends Statement + * @category AST + */ +class Alias extends Statement { + constructor(name, type) { + super(); + this.name = name; + this.type = type; + } + get astNodeType() { + return "alias"; + } +} +/** + * @class Discard + * @extends Statement + * @category AST + */ +class Discard extends Statement { + constructor() { + super(); + } + get astNodeType() { + return "discard"; + } +} +/** + * @class Break + * @extends Statement + * @category AST + */ +class Break extends Statement { + constructor() { + super(); + } + get astNodeType() { + return "break"; + } +} +/** + * @class Continue + * @extends Statement + * @category AST + */ +class Continue extends Statement { + constructor() { + super(); + } + get astNodeType() { + return "continue"; + } +} +/** + * @class Type + * @extends Statement + * @category AST + */ +class Type extends Statement { + constructor(name) { + super(); + this.name = name; + } + get astNodeType() { + return "type"; + } + get isStruct() { + return false; + } + get isArray() { + return false; + } +} +/** + * @class StructType + * @extends Type + * @category AST + */ +class Struct extends Type { + constructor(name, members, startLine, endLine) { + super(name); + this.members = members; + this.startLine = startLine; + this.endLine = endLine; + } + get astNodeType() { + return "struct"; + } + get isStruct() { + return true; + } + /// Return the index of the member with the given name, or -1 if not found. + getMemberIndex(name) { + for (let i = 0; i < this.members.length; i++) { + if (this.members[i].name == name) + return i; + } + return -1; + } +} +/** + * @class TemplateType + * @extends Type + * @category AST + */ +class TemplateType extends Type { + constructor(name, format, access) { + super(name); + this.format = format; + this.access = access; + } + get astNodeType() { + return "template"; + } +} +/** + * @class PointerType + * @extends Type + * @category AST + */ +class PointerType extends Type { + constructor(name, storage, type, access) { + super(name); + this.storage = storage; + this.type = type; + this.access = access; + } + get astNodeType() { + return "pointer"; + } +} +/** + * @class ArrayType + * @extends Type + * @category AST + */ +class ArrayType extends Type { + constructor(name, attributes, format, count) { + super(name); + this.attributes = attributes; + this.format = format; + this.count = count; + } + get astNodeType() { + return "array"; + } + get isArray() { + return true; + } +} +/** + * @class SamplerType + * @extends Type + * @category AST + */ +class SamplerType extends Type { + constructor(name, format, access) { + super(name); + this.format = format; + this.access = access; + } + get astNodeType() { + return "sampler"; + } +} +/** + * @class Expression + * @extends Node + * @category AST + */ +class Expression extends Node { + constructor() { + super(); + } +} +/** + * @class StringExpr + * @extends Expression + * @category AST + */ +class StringExpr extends Expression { + constructor(value) { + super(); + this.value = value; + } + get astNodeType() { + return "stringExpr"; + } + toString() { + return this.value; + } + evaluateString() { + return this.value; + } +} +/** + * @class CreateExpr + * @extends Expression + * @category AST + */ +class CreateExpr extends Expression { + constructor(type, args) { + super(); + this.type = type; + this.args = args; + } + get astNodeType() { + return "createExpr"; + } + search(callback) { + callback(this); + if (this.args) { + for (const node of this.args) { + node.search(callback); + } + } + } + evaluate(context) { + return this.args[0].evaluate(context); + } +} +/** + * @class CallExpr + * @extends Expression + * @category AST + */ +class CallExpr extends Expression { + constructor(name, args) { + super(); + this.name = name; + this.args = args; + } + get astNodeType() { + return "callExpr"; + } + evaluate(context) { + switch (this.name) { + case "abs": + return Math.abs(this.args[0].evaluate(context)); + case "acos": + return Math.acos(this.args[0].evaluate(context)); + case "acosh": + return Math.acosh(this.args[0].evaluate(context)); + case "asin": + return Math.asin(this.args[0].evaluate(context)); + case "asinh": + return Math.asinh(this.args[0].evaluate(context)); + case "atan": + return Math.atan(this.args[0].evaluate(context)); + case "atan2": + return Math.atan2(this.args[0].evaluate(context), this.args[1].evaluate(context)); + case "atanh": + return Math.atanh(this.args[0].evaluate(context)); + case "ceil": + return Math.ceil(this.args[0].evaluate(context)); + case "clamp": + return Math.min(Math.max(this.args[0].evaluate(context), this.args[1].evaluate(context)), this.args[2].evaluate(context)); + case "cos": + return Math.cos(this.args[0].evaluate(context)); + //case "cross": + //TODO: (x[i] * y[j] - x[j] * y[i]) + case "degrees": + return (this.args[0].evaluate(context) * 180) / Math.PI; + //case "determinant": + //TODO implement + case "distance": + return Math.sqrt(Math.pow(this.args[0].evaluate(context) - this.args[1].evaluate(context), 2)); + case "dot": + //TODO: (x[i] * y[i]) + case "exp": + return Math.exp(this.args[0].evaluate(context)); + case "exp2": + return Math.pow(2, this.args[0].evaluate(context)); + //case "extractBits": + //TODO: implement + //case "firstLeadingBit": + //TODO: implement + case "floor": + return Math.floor(this.args[0].evaluate(context)); + case "fma": + return (this.args[0].evaluate(context) * this.args[1].evaluate(context) + + this.args[2].evaluate(context)); + case "fract": + return (this.args[0].evaluate(context) - + Math.floor(this.args[0].evaluate(context))); + //case "frexp": + //TODO: implement + case "inverseSqrt": + return 1 / Math.sqrt(this.args[0].evaluate(context)); + //case "length": + //TODO: implement + case "log": + return Math.log(this.args[0].evaluate(context)); + case "log2": + return Math.log2(this.args[0].evaluate(context)); + case "max": + return Math.max(this.args[0].evaluate(context), this.args[1].evaluate(context)); + case "min": + return Math.min(this.args[0].evaluate(context), this.args[1].evaluate(context)); + case "mix": + return (this.args[0].evaluate(context) * + (1 - this.args[2].evaluate(context)) + + this.args[1].evaluate(context) * this.args[2].evaluate(context)); + case "modf": + return (this.args[0].evaluate(context) - + Math.floor(this.args[0].evaluate(context))); + case "pow": + return Math.pow(this.args[0].evaluate(context), this.args[1].evaluate(context)); + case "radians": + return (this.args[0].evaluate(context) * Math.PI) / 180; + case "round": + return Math.round(this.args[0].evaluate(context)); + case "sign": + return Math.sign(this.args[0].evaluate(context)); + case "sin": + return Math.sin(this.args[0].evaluate(context)); + case "sinh": + return Math.sinh(this.args[0].evaluate(context)); + case "saturate": + return Math.min(Math.max(this.args[0].evaluate(context), 0), 1); + case "smoothstep": + return (this.args[0].evaluate(context) * + this.args[0].evaluate(context) * + (3 - 2 * this.args[0].evaluate(context))); + case "sqrt": + return Math.sqrt(this.args[0].evaluate(context)); + case "step": + return this.args[0].evaluate(context) < this.args[1].evaluate(context) + ? 0 + : 1; + case "tan": + return Math.tan(this.args[0].evaluate(context)); + case "tanh": + return Math.tanh(this.args[0].evaluate(context)); + case "trunc": + return Math.trunc(this.args[0].evaluate(context)); + default: + throw new Error("Non const function: " + this.name); + } + } + search(callback) { + for (const node of this.args) { + node.search(callback); + } + callback(this); + } +} +/** + * @class VariableExpr + * @extends Expression + * @category AST + */ +class VariableExpr extends Expression { + constructor(name) { + super(); + this.name = name; + } + get astNodeType() { + return "varExpr"; + } + search(callback) { + callback(this); + if (this.postfix) { + this.postfix.search(callback); + } + } + evaluate(context) { + const constant = context.constants.get(this.name); + if (!constant) { + throw new Error("Cannot evaluate node"); + } + return constant.evaluate(context); + } +} +/** + * @class ConstExpr + * @extends Expression + * @category AST + */ +class ConstExpr extends Expression { + constructor(name, initializer) { + super(); + this.name = name; + this.initializer = initializer; + } + get astNodeType() { + return "constExpr"; + } + evaluate(context) { + var _a, _b; + if (this.initializer instanceof CreateExpr) { + // This is a struct constant + const property = (_a = this.postfix) === null || _a === void 0 ? void 0 : _a.evaluateString(context); + const type = (_b = this.initializer.type) === null || _b === void 0 ? void 0 : _b.name; + const struct = context.structs.get(type); + const memberIndex = struct === null || struct === void 0 ? void 0 : struct.getMemberIndex(property); + if (memberIndex !== undefined && memberIndex != -1) { + const value = this.initializer.args[memberIndex].evaluate(context); + return value; + } + else { + return this.initializer.evaluate(context); + } + } + return this.initializer.evaluate(context); + } + search(callback) { + this.initializer.search(callback); + } +} +/** + * @class LiteralExpr + * @extends Expression + * @category AST + */ +class LiteralExpr extends Expression { + constructor(value) { + super(); + this.value = value; + } + get astNodeType() { + return "literalExpr"; + } + evaluate() { + return this.value; + } +} +/** + * @class BitcastExpr + * @extends Expression + * @category AST + */ +class BitcastExpr extends Expression { + constructor(type, value) { + super(); + this.type = type; + this.value = value; + } + get astNodeType() { + return "bitcastExpr"; + } + search(callback) { + this.value.search(callback); + } +} +/** + * @class TypecastExpr + * @extends Expression + * @category AST + */ +class TypecastExpr extends Expression { + constructor(type, args) { + super(); + this.type = type; + this.args = args; + } + get astNodeType() { + return "typecastExpr"; + } + evaluate(context) { + return this.args[0].evaluate(context); + } + search(callback) { + this.searchBlock(this.args, callback); + } +} +/** + * @class GroupingExpr + * @extends Expression + * @category AST + */ +class GroupingExpr extends Expression { + constructor(contents) { + super(); + this.contents = contents; + } + get astNodeType() { + return "groupExpr"; + } + evaluate(context) { + return this.contents[0].evaluate(context); + } + search(callback) { + this.searchBlock(this.contents, callback); + } +} +/** + * @class ArrayIndex + * @extends Expression + * @category AST + */ +class ArrayIndex extends Expression { + constructor(index) { + super(); + this.index = index; + } + search(callback) { + this.index.search(callback); + } +} +/** + * @class Operator + * @extends Expression + * @category AST + */ +class Operator extends Expression { + constructor() { + super(); + } +} +/** + * @class UnaryOperator + * @extends Operator + * @category AST + * @property {string} operator +, -, !, ~ + */ +class UnaryOperator extends Operator { + constructor(operator, right) { + super(); + this.operator = operator; + this.right = right; + } + get astNodeType() { + return "unaryOp"; + } + evaluate(context) { + switch (this.operator) { + case "+": + return this.right.evaluate(context); + case "-": + return -this.right.evaluate(context); + case "!": + return this.right.evaluate(context) ? 0 : 1; + case "~": + return ~this.right.evaluate(context); + default: + throw new Error("Unknown unary operator: " + this.operator); + } + } + search(callback) { + this.right.search(callback); + } +} +/** + * @class BinaryOperator + * @extends Operator + * @category AST + * @property {string} operator +, -, *, /, %, ==, !=, <, >, <=, >=, &&, || + */ +class BinaryOperator extends Operator { + constructor(operator, left, right) { + super(); + this.operator = operator; + this.left = left; + this.right = right; + } + get astNodeType() { + return "binaryOp"; + } + evaluate(context) { + switch (this.operator) { + case "+": + return this.left.evaluate(context) + this.right.evaluate(context); + case "-": + return this.left.evaluate(context) - this.right.evaluate(context); + case "*": + return this.left.evaluate(context) * this.right.evaluate(context); + case "/": + return this.left.evaluate(context) / this.right.evaluate(context); + case "%": + return this.left.evaluate(context) % this.right.evaluate(context); + case "==": + return this.left.evaluate(context) == this.right.evaluate(context) + ? 1 + : 0; + case "!=": + return this.left.evaluate(context) != this.right.evaluate(context) + ? 1 + : 0; + case "<": + return this.left.evaluate(context) < this.right.evaluate(context) + ? 1 + : 0; + case ">": + return this.left.evaluate(context) > this.right.evaluate(context) + ? 1 + : 0; + case "<=": + return this.left.evaluate(context) <= this.right.evaluate(context) + ? 1 + : 0; + case ">=": + return this.left.evaluate(context) >= this.right.evaluate(context) + ? 1 + : 0; + case "&&": + return this.left.evaluate(context) && this.right.evaluate(context) + ? 1 + : 0; + case "||": + return this.left.evaluate(context) || this.right.evaluate(context) + ? 1 + : 0; + default: + throw new Error(`Unknown operator ${this.operator}`); + } + } + search(callback) { + this.left.search(callback); + this.right.search(callback); + } +} +/** + * @class SwitchCase + * @extends Node + * @category AST + */ +class SwitchCase extends Node { + constructor() { + super(); + } +} +/** + * @class Case + * @extends SwitchCase + * @category AST + */ +class Case extends SwitchCase { + constructor(selector, body) { + super(); + this.selector = selector; + this.body = body; + } + get astNodeType() { + return "case"; + } + search(callback) { + this.searchBlock(this.body, callback); + } +} +/** + * @class Default + * @extends SwitchCase + * @category AST + */ +class Default extends SwitchCase { + constructor(body) { + super(); + this.body = body; + } + get astNodeType() { + return "default"; + } + search(callback) { + this.searchBlock(this.body, callback); + } +} +/** + * @class Argument + * @extends Node + * @category AST + */ +class Argument extends Node { + constructor(name, type, attributes) { + super(); + this.name = name; + this.type = type; + this.attributes = attributes; + } + get astNodeType() { + return "argument"; + } +} +/** + * @class ElseIf + * @extends Node + * @category AST + */ +class ElseIf extends Node { + constructor(condition, body) { + super(); + this.condition = condition; + this.body = body; + } + get astNodeType() { + return "elseif"; + } + search(callback) { + this.condition.search(callback); + this.searchBlock(this.body, callback); + } +} +/** + * @class Member + * @extends Node + * @category AST + */ +class Member extends Node { + constructor(name, type, attributes) { + super(); + this.name = name; + this.type = type; + this.attributes = attributes; + } + get astNodeType() { + return "member"; + } +} +/** + * @class Attribute + * @extends Node + * @category AST + */ +class Attribute extends Node { + constructor(name, value) { + super(); + this.name = name; + this.value = value; + } + get astNodeType() { + return "attribute"; + } +} + +var _a; +var TokenClass; +(function (TokenClass) { + TokenClass[TokenClass["token"] = 0] = "token"; + TokenClass[TokenClass["keyword"] = 1] = "keyword"; + TokenClass[TokenClass["reserved"] = 2] = "reserved"; +})(TokenClass || (TokenClass = {})); +class TokenType { + constructor(name, type, rule) { + this.name = name; + this.type = type; + this.rule = rule; + } + toString() { + return this.name; + } +} +/// Catalog of defined token types, keywords, and reserved words. +class TokenTypes { +} +_a = TokenTypes; +TokenTypes.none = new TokenType("", TokenClass.reserved, ""); +TokenTypes.eof = new TokenType("EOF", TokenClass.token, ""); +TokenTypes.reserved = { + asm: new TokenType("asm", TokenClass.reserved, "asm"), + bf16: new TokenType("bf16", TokenClass.reserved, "bf16"), + do: new TokenType("do", TokenClass.reserved, "do"), + enum: new TokenType("enum", TokenClass.reserved, "enum"), + f16: new TokenType("f16", TokenClass.reserved, "f16"), + f64: new TokenType("f64", TokenClass.reserved, "f64"), + handle: new TokenType("handle", TokenClass.reserved, "handle"), + i8: new TokenType("i8", TokenClass.reserved, "i8"), + i16: new TokenType("i16", TokenClass.reserved, "i16"), + i64: new TokenType("i64", TokenClass.reserved, "i64"), + mat: new TokenType("mat", TokenClass.reserved, "mat"), + premerge: new TokenType("premerge", TokenClass.reserved, "premerge"), + regardless: new TokenType("regardless", TokenClass.reserved, "regardless"), + typedef: new TokenType("typedef", TokenClass.reserved, "typedef"), + u8: new TokenType("u8", TokenClass.reserved, "u8"), + u16: new TokenType("u16", TokenClass.reserved, "u16"), + u64: new TokenType("u64", TokenClass.reserved, "u64"), + unless: new TokenType("unless", TokenClass.reserved, "unless"), + using: new TokenType("using", TokenClass.reserved, "using"), + vec: new TokenType("vec", TokenClass.reserved, "vec"), + void: new TokenType("void", TokenClass.reserved, "void"), +}; +TokenTypes.keywords = { + array: new TokenType("array", TokenClass.keyword, "array"), + atomic: new TokenType("atomic", TokenClass.keyword, "atomic"), + bool: new TokenType("bool", TokenClass.keyword, "bool"), + f32: new TokenType("f32", TokenClass.keyword, "f32"), + i32: new TokenType("i32", TokenClass.keyword, "i32"), + mat2x2: new TokenType("mat2x2", TokenClass.keyword, "mat2x2"), + mat2x3: new TokenType("mat2x3", TokenClass.keyword, "mat2x3"), + mat2x4: new TokenType("mat2x4", TokenClass.keyword, "mat2x4"), + mat3x2: new TokenType("mat3x2", TokenClass.keyword, "mat3x2"), + mat3x3: new TokenType("mat3x3", TokenClass.keyword, "mat3x3"), + mat3x4: new TokenType("mat3x4", TokenClass.keyword, "mat3x4"), + mat4x2: new TokenType("mat4x2", TokenClass.keyword, "mat4x2"), + mat4x3: new TokenType("mat4x3", TokenClass.keyword, "mat4x3"), + mat4x4: new TokenType("mat4x4", TokenClass.keyword, "mat4x4"), + ptr: new TokenType("ptr", TokenClass.keyword, "ptr"), + sampler: new TokenType("sampler", TokenClass.keyword, "sampler"), + sampler_comparison: new TokenType("sampler_comparison", TokenClass.keyword, "sampler_comparison"), + struct: new TokenType("struct", TokenClass.keyword, "struct"), + texture_1d: new TokenType("texture_1d", TokenClass.keyword, "texture_1d"), + texture_2d: new TokenType("texture_2d", TokenClass.keyword, "texture_2d"), + texture_2d_array: new TokenType("texture_2d_array", TokenClass.keyword, "texture_2d_array"), + texture_3d: new TokenType("texture_3d", TokenClass.keyword, "texture_3d"), + texture_cube: new TokenType("texture_cube", TokenClass.keyword, "texture_cube"), + texture_cube_array: new TokenType("texture_cube_array", TokenClass.keyword, "texture_cube_array"), + texture_multisampled_2d: new TokenType("texture_multisampled_2d", TokenClass.keyword, "texture_multisampled_2d"), + texture_storage_1d: new TokenType("texture_storage_1d", TokenClass.keyword, "texture_storage_1d"), + texture_storage_2d: new TokenType("texture_storage_2d", TokenClass.keyword, "texture_storage_2d"), + texture_storage_2d_array: new TokenType("texture_storage_2d_array", TokenClass.keyword, "texture_storage_2d_array"), + texture_storage_3d: new TokenType("texture_storage_3d", TokenClass.keyword, "texture_storage_3d"), + texture_depth_2d: new TokenType("texture_depth_2d", TokenClass.keyword, "texture_depth_2d"), + texture_depth_2d_array: new TokenType("texture_depth_2d_array", TokenClass.keyword, "texture_depth_2d_array"), + texture_depth_cube: new TokenType("texture_depth_cube", TokenClass.keyword, "texture_depth_cube"), + texture_depth_cube_array: new TokenType("texture_depth_cube_array", TokenClass.keyword, "texture_depth_cube_array"), + texture_depth_multisampled_2d: new TokenType("texture_depth_multisampled_2d", TokenClass.keyword, "texture_depth_multisampled_2d"), + texture_external: new TokenType("texture_external", TokenClass.keyword, "texture_external"), + u32: new TokenType("u32", TokenClass.keyword, "u32"), + vec2: new TokenType("vec2", TokenClass.keyword, "vec2"), + vec3: new TokenType("vec3", TokenClass.keyword, "vec3"), + vec4: new TokenType("vec4", TokenClass.keyword, "vec4"), + bitcast: new TokenType("bitcast", TokenClass.keyword, "bitcast"), + block: new TokenType("block", TokenClass.keyword, "block"), + break: new TokenType("break", TokenClass.keyword, "break"), + case: new TokenType("case", TokenClass.keyword, "case"), + continue: new TokenType("continue", TokenClass.keyword, "continue"), + continuing: new TokenType("continuing", TokenClass.keyword, "continuing"), + default: new TokenType("default", TokenClass.keyword, "default"), + diagnostic: new TokenType("diagnostic", TokenClass.keyword, "diagnostic"), + discard: new TokenType("discard", TokenClass.keyword, "discard"), + else: new TokenType("else", TokenClass.keyword, "else"), + enable: new TokenType("enable", TokenClass.keyword, "enable"), + fallthrough: new TokenType("fallthrough", TokenClass.keyword, "fallthrough"), + false: new TokenType("false", TokenClass.keyword, "false"), + fn: new TokenType("fn", TokenClass.keyword, "fn"), + for: new TokenType("for", TokenClass.keyword, "for"), + function: new TokenType("function", TokenClass.keyword, "function"), + if: new TokenType("if", TokenClass.keyword, "if"), + let: new TokenType("let", TokenClass.keyword, "let"), + const: new TokenType("const", TokenClass.keyword, "const"), + loop: new TokenType("loop", TokenClass.keyword, "loop"), + while: new TokenType("while", TokenClass.keyword, "while"), + private: new TokenType("private", TokenClass.keyword, "private"), + read: new TokenType("read", TokenClass.keyword, "read"), + read_write: new TokenType("read_write", TokenClass.keyword, "read_write"), + return: new TokenType("return", TokenClass.keyword, "return"), + requires: new TokenType("requires", TokenClass.keyword, "requires"), + storage: new TokenType("storage", TokenClass.keyword, "storage"), + switch: new TokenType("switch", TokenClass.keyword, "switch"), + true: new TokenType("true", TokenClass.keyword, "true"), + alias: new TokenType("alias", TokenClass.keyword, "alias"), + type: new TokenType("type", TokenClass.keyword, "type"), + uniform: new TokenType("uniform", TokenClass.keyword, "uniform"), + var: new TokenType("var", TokenClass.keyword, "var"), + override: new TokenType("override", TokenClass.keyword, "override"), + workgroup: new TokenType("workgroup", TokenClass.keyword, "workgroup"), + write: new TokenType("write", TokenClass.keyword, "write"), + r8unorm: new TokenType("r8unorm", TokenClass.keyword, "r8unorm"), + r8snorm: new TokenType("r8snorm", TokenClass.keyword, "r8snorm"), + r8uint: new TokenType("r8uint", TokenClass.keyword, "r8uint"), + r8sint: new TokenType("r8sint", TokenClass.keyword, "r8sint"), + r16uint: new TokenType("r16uint", TokenClass.keyword, "r16uint"), + r16sint: new TokenType("r16sint", TokenClass.keyword, "r16sint"), + r16float: new TokenType("r16float", TokenClass.keyword, "r16float"), + rg8unorm: new TokenType("rg8unorm", TokenClass.keyword, "rg8unorm"), + rg8snorm: new TokenType("rg8snorm", TokenClass.keyword, "rg8snorm"), + rg8uint: new TokenType("rg8uint", TokenClass.keyword, "rg8uint"), + rg8sint: new TokenType("rg8sint", TokenClass.keyword, "rg8sint"), + r32uint: new TokenType("r32uint", TokenClass.keyword, "r32uint"), + r32sint: new TokenType("r32sint", TokenClass.keyword, "r32sint"), + r32float: new TokenType("r32float", TokenClass.keyword, "r32float"), + rg16uint: new TokenType("rg16uint", TokenClass.keyword, "rg16uint"), + rg16sint: new TokenType("rg16sint", TokenClass.keyword, "rg16sint"), + rg16float: new TokenType("rg16float", TokenClass.keyword, "rg16float"), + rgba8unorm: new TokenType("rgba8unorm", TokenClass.keyword, "rgba8unorm"), + rgba8unorm_srgb: new TokenType("rgba8unorm_srgb", TokenClass.keyword, "rgba8unorm_srgb"), + rgba8snorm: new TokenType("rgba8snorm", TokenClass.keyword, "rgba8snorm"), + rgba8uint: new TokenType("rgba8uint", TokenClass.keyword, "rgba8uint"), + rgba8sint: new TokenType("rgba8sint", TokenClass.keyword, "rgba8sint"), + bgra8unorm: new TokenType("bgra8unorm", TokenClass.keyword, "bgra8unorm"), + bgra8unorm_srgb: new TokenType("bgra8unorm_srgb", TokenClass.keyword, "bgra8unorm_srgb"), + rgb10a2unorm: new TokenType("rgb10a2unorm", TokenClass.keyword, "rgb10a2unorm"), + rg11b10float: new TokenType("rg11b10float", TokenClass.keyword, "rg11b10float"), + rg32uint: new TokenType("rg32uint", TokenClass.keyword, "rg32uint"), + rg32sint: new TokenType("rg32sint", TokenClass.keyword, "rg32sint"), + rg32float: new TokenType("rg32float", TokenClass.keyword, "rg32float"), + rgba16uint: new TokenType("rgba16uint", TokenClass.keyword, "rgba16uint"), + rgba16sint: new TokenType("rgba16sint", TokenClass.keyword, "rgba16sint"), + rgba16float: new TokenType("rgba16float", TokenClass.keyword, "rgba16float"), + rgba32uint: new TokenType("rgba32uint", TokenClass.keyword, "rgba32uint"), + rgba32sint: new TokenType("rgba32sint", TokenClass.keyword, "rgba32sint"), + rgba32float: new TokenType("rgba32float", TokenClass.keyword, "rgba32float"), + static_assert: new TokenType("static_assert", TokenClass.keyword, "static_assert"), + // WGSL grammar has a few keywords that have different token names than the strings they + // represent. Aliasing them here. + /*int32: new TokenType("i32", TokenClass.keyword, "i32"), + uint32: new TokenType("u32", TokenClass.keyword, "u32"), + float32: new TokenType("f32", TokenClass.keyword, "f32"), + pointer: new TokenType("ptr", TokenClass.keyword, "ptr"),*/ +}; +TokenTypes.tokens = { + decimal_float_literal: new TokenType("decimal_float_literal", TokenClass.token, /((-?[0-9]*\.[0-9]+|-?[0-9]+\.[0-9]*)((e|E)(\+|-)?[0-9]+)?f?)|(-?[0-9]+(e|E)(\+|-)?[0-9]+f?)|([0-9]+f)/), + hex_float_literal: new TokenType("hex_float_literal", TokenClass.token, /-?0x((([0-9a-fA-F]*\.[0-9a-fA-F]+|[0-9a-fA-F]+\.[0-9a-fA-F]*)((p|P)(\+|-)?[0-9]+f?)?)|([0-9a-fA-F]+(p|P)(\+|-)?[0-9]+f?))/), + int_literal: new TokenType("int_literal", TokenClass.token, /-?0x[0-9a-fA-F]+|0i?|-?[1-9][0-9]*i?/), + uint_literal: new TokenType("uint_literal", TokenClass.token, /0x[0-9a-fA-F]+u|0u|[1-9][0-9]*u/), + ident: new TokenType("ident", TokenClass.token, /[_a-zA-Z][0-9a-zA-Z_]*/), + and: new TokenType("and", TokenClass.token, "&"), + and_and: new TokenType("and_and", TokenClass.token, "&&"), + arrow: new TokenType("arrow ", TokenClass.token, "->"), + attr: new TokenType("attr", TokenClass.token, "@"), + forward_slash: new TokenType("forward_slash", TokenClass.token, "/"), + bang: new TokenType("bang", TokenClass.token, "!"), + bracket_left: new TokenType("bracket_left", TokenClass.token, "["), + bracket_right: new TokenType("bracket_right", TokenClass.token, "]"), + brace_left: new TokenType("brace_left", TokenClass.token, "{"), + brace_right: new TokenType("brace_right", TokenClass.token, "}"), + colon: new TokenType("colon", TokenClass.token, ":"), + comma: new TokenType("comma", TokenClass.token, ","), + equal: new TokenType("equal", TokenClass.token, "="), + equal_equal: new TokenType("equal_equal", TokenClass.token, "=="), + not_equal: new TokenType("not_equal", TokenClass.token, "!="), + greater_than: new TokenType("greater_than", TokenClass.token, ">"), + greater_than_equal: new TokenType("greater_than_equal", TokenClass.token, ">="), + shift_right: new TokenType("shift_right", TokenClass.token, ">>"), + less_than: new TokenType("less_than", TokenClass.token, "<"), + less_than_equal: new TokenType("less_than_equal", TokenClass.token, "<="), + shift_left: new TokenType("shift_left", TokenClass.token, "<<"), + modulo: new TokenType("modulo", TokenClass.token, "%"), + minus: new TokenType("minus", TokenClass.token, "-"), + minus_minus: new TokenType("minus_minus", TokenClass.token, "--"), + period: new TokenType("period", TokenClass.token, "."), + plus: new TokenType("plus", TokenClass.token, "+"), + plus_plus: new TokenType("plus_plus", TokenClass.token, "++"), + or: new TokenType("or", TokenClass.token, "|"), + or_or: new TokenType("or_or", TokenClass.token, "||"), + paren_left: new TokenType("paren_left", TokenClass.token, "("), + paren_right: new TokenType("paren_right", TokenClass.token, ")"), + semicolon: new TokenType("semicolon", TokenClass.token, ";"), + star: new TokenType("star", TokenClass.token, "*"), + tilde: new TokenType("tilde", TokenClass.token, "~"), + underscore: new TokenType("underscore", TokenClass.token, "_"), + xor: new TokenType("xor", TokenClass.token, "^"), + plus_equal: new TokenType("plus_equal", TokenClass.token, "+="), + minus_equal: new TokenType("minus_equal", TokenClass.token, "-="), + times_equal: new TokenType("times_equal", TokenClass.token, "*="), + division_equal: new TokenType("division_equal", TokenClass.token, "/="), + modulo_equal: new TokenType("modulo_equal", TokenClass.token, "%="), + and_equal: new TokenType("and_equal", TokenClass.token, "&="), + or_equal: new TokenType("or_equal", TokenClass.token, "|="), + xor_equal: new TokenType("xor_equal", TokenClass.token, "^="), + shift_right_equal: new TokenType("shift_right_equal", TokenClass.token, ">>="), + shift_left_equal: new TokenType("shift_left_equal", TokenClass.token, "<<="), +}; +TokenTypes.simpleTokens = { + "@": _a.tokens.attr, + "{": _a.tokens.brace_left, + "}": _a.tokens.brace_right, + ":": _a.tokens.colon, + ",": _a.tokens.comma, + "(": _a.tokens.paren_left, + ")": _a.tokens.paren_right, + ";": _a.tokens.semicolon, +}; +TokenTypes.literalTokens = { + "&": _a.tokens.and, + "&&": _a.tokens.and_and, + "->": _a.tokens.arrow, + "/": _a.tokens.forward_slash, + "!": _a.tokens.bang, + "[": _a.tokens.bracket_left, + "]": _a.tokens.bracket_right, + "=": _a.tokens.equal, + "==": _a.tokens.equal_equal, + "!=": _a.tokens.not_equal, + ">": _a.tokens.greater_than, + ">=": _a.tokens.greater_than_equal, + ">>": _a.tokens.shift_right, + "<": _a.tokens.less_than, + "<=": _a.tokens.less_than_equal, + "<<": _a.tokens.shift_left, + "%": _a.tokens.modulo, + "-": _a.tokens.minus, + "--": _a.tokens.minus_minus, + ".": _a.tokens.period, + "+": _a.tokens.plus, + "++": _a.tokens.plus_plus, + "|": _a.tokens.or, + "||": _a.tokens.or_or, + "*": _a.tokens.star, + "~": _a.tokens.tilde, + "_": _a.tokens.underscore, + "^": _a.tokens.xor, + "+=": _a.tokens.plus_equal, + "-=": _a.tokens.minus_equal, + "*=": _a.tokens.times_equal, + "/=": _a.tokens.division_equal, + "%=": _a.tokens.modulo_equal, + "&=": _a.tokens.and_equal, + "|=": _a.tokens.or_equal, + "^=": _a.tokens.xor_equal, + ">>=": _a.tokens.shift_right_equal, + "<<=": _a.tokens.shift_left_equal, +}; +TokenTypes.regexTokens = { + decimal_float_literal: _a.tokens.decimal_float_literal, + hex_float_literal: _a.tokens.hex_float_literal, + int_literal: _a.tokens.int_literal, + uint_literal: _a.tokens.uint_literal, + ident: _a.tokens.ident, +}; +TokenTypes.storage_class = [ + _a.keywords.function, + _a.keywords.private, + _a.keywords.workgroup, + _a.keywords.uniform, + _a.keywords.storage, +]; +TokenTypes.access_mode = [ + _a.keywords.read, + _a.keywords.write, + _a.keywords.read_write, +]; +TokenTypes.sampler_type = [ + _a.keywords.sampler, + _a.keywords.sampler_comparison, +]; +TokenTypes.sampled_texture_type = [ + _a.keywords.texture_1d, + _a.keywords.texture_2d, + _a.keywords.texture_2d_array, + _a.keywords.texture_3d, + _a.keywords.texture_cube, + _a.keywords.texture_cube_array, +]; +TokenTypes.multisampled_texture_type = [ + _a.keywords.texture_multisampled_2d, +]; +TokenTypes.storage_texture_type = [ + _a.keywords.texture_storage_1d, + _a.keywords.texture_storage_2d, + _a.keywords.texture_storage_2d_array, + _a.keywords.texture_storage_3d, +]; +TokenTypes.depth_texture_type = [ + _a.keywords.texture_depth_2d, + _a.keywords.texture_depth_2d_array, + _a.keywords.texture_depth_cube, + _a.keywords.texture_depth_cube_array, + _a.keywords.texture_depth_multisampled_2d, +]; +TokenTypes.texture_external_type = [_a.keywords.texture_external]; +TokenTypes.any_texture_type = [ + ..._a.sampled_texture_type, + ..._a.multisampled_texture_type, + ..._a.storage_texture_type, + ..._a.depth_texture_type, + ..._a.texture_external_type, +]; +TokenTypes.texel_format = [ + _a.keywords.r8unorm, + _a.keywords.r8snorm, + _a.keywords.r8uint, + _a.keywords.r8sint, + _a.keywords.r16uint, + _a.keywords.r16sint, + _a.keywords.r16float, + _a.keywords.rg8unorm, + _a.keywords.rg8snorm, + _a.keywords.rg8uint, + _a.keywords.rg8sint, + _a.keywords.r32uint, + _a.keywords.r32sint, + _a.keywords.r32float, + _a.keywords.rg16uint, + _a.keywords.rg16sint, + _a.keywords.rg16float, + _a.keywords.rgba8unorm, + _a.keywords.rgba8unorm_srgb, + _a.keywords.rgba8snorm, + _a.keywords.rgba8uint, + _a.keywords.rgba8sint, + _a.keywords.bgra8unorm, + _a.keywords.bgra8unorm_srgb, + _a.keywords.rgb10a2unorm, + _a.keywords.rg11b10float, + _a.keywords.rg32uint, + _a.keywords.rg32sint, + _a.keywords.rg32float, + _a.keywords.rgba16uint, + _a.keywords.rgba16sint, + _a.keywords.rgba16float, + _a.keywords.rgba32uint, + _a.keywords.rgba32sint, + _a.keywords.rgba32float, +]; +TokenTypes.const_literal = [ + _a.tokens.int_literal, + _a.tokens.uint_literal, + _a.tokens.decimal_float_literal, + _a.tokens.hex_float_literal, + _a.keywords.true, + _a.keywords.false, +]; +TokenTypes.literal_or_ident = [ + _a.tokens.ident, + _a.tokens.int_literal, + _a.tokens.uint_literal, + _a.tokens.decimal_float_literal, + _a.tokens.hex_float_literal, +]; +TokenTypes.element_count_expression = [ + _a.tokens.int_literal, + _a.tokens.uint_literal, + _a.tokens.ident, +]; +TokenTypes.template_types = [ + _a.keywords.vec2, + _a.keywords.vec3, + _a.keywords.vec4, + _a.keywords.mat2x2, + _a.keywords.mat2x3, + _a.keywords.mat2x4, + _a.keywords.mat3x2, + _a.keywords.mat3x3, + _a.keywords.mat3x4, + _a.keywords.mat4x2, + _a.keywords.mat4x3, + _a.keywords.mat4x4, + _a.keywords.atomic, + _a.keywords.bitcast, + ..._a.any_texture_type, +]; +// The grammar calls out 'block', but attribute grammar is defined to use a 'ident'. +// The attribute grammar should be ident | block. +TokenTypes.attribute_name = [_a.tokens.ident, _a.keywords.block, _a.keywords.diagnostic]; +TokenTypes.assignment_operators = [ + _a.tokens.equal, + _a.tokens.plus_equal, + _a.tokens.minus_equal, + _a.tokens.times_equal, + _a.tokens.division_equal, + _a.tokens.modulo_equal, + _a.tokens.and_equal, + _a.tokens.or_equal, + _a.tokens.xor_equal, + _a.tokens.shift_right_equal, + _a.tokens.shift_left_equal, +]; +TokenTypes.increment_operators = [ + _a.tokens.plus_plus, + _a.tokens.minus_minus, +]; +/// A token parsed by the WgslScanner. +class Token { + constructor(type, lexeme, line) { + this.type = type; + this.lexeme = lexeme; + this.line = line; + } + toString() { + return this.lexeme; + } + isTemplateType() { + return TokenTypes.template_types.indexOf(this.type) != -1; + } + isArrayType() { + return this.type == TokenTypes.keywords.array; + } + isArrayOrTemplateType() { + return this.isArrayType() || this.isTemplateType(); + } +} +/// Lexical scanner for the WGSL language. This takes an input source text and generates a list +/// of Token objects, which can then be fed into the WgslParser to generate an AST. +class WgslScanner { + constructor(source) { + this._tokens = []; + this._start = 0; + this._current = 0; + this._line = 1; + this._source = source !== null && source !== void 0 ? source : ""; + } + /// Scan all tokens from the source. + scanTokens() { + while (!this._isAtEnd()) { + this._start = this._current; + if (!this.scanToken()) { + throw `Invalid syntax at line ${this._line}`; + } + } + this._tokens.push(new Token(TokenTypes.eof, "", this._line)); + return this._tokens; + } + /// Scan a single token from the source. + scanToken() { + // Find the longest consecutive set of characters that match a rule. + let lexeme = this._advance(); + // Skip line-feed, adding to the line counter. + if (lexeme == "\n") { + this._line++; + return true; + } + // Skip whitespace + if (this._isWhitespace(lexeme)) { + return true; + } + if (lexeme == "/") { + // If it's a // comment, skip everything until the next line-feed. + if (this._peekAhead() == "/") { + while (lexeme != "\n") { + if (this._isAtEnd()) { + return true; + } + lexeme = this._advance(); + } + // skip the linefeed + this._line++; + return true; + } + else if (this._peekAhead() == "*") { + // If it's a / * block comment, skip everything until the matching * /, + // allowing for nested block comments. + this._advance(); + let commentLevel = 1; + while (commentLevel > 0) { + if (this._isAtEnd()) { + return true; + } + lexeme = this._advance(); + if (lexeme == "\n") { + this._line++; + } + else if (lexeme == "*") { + if (this._peekAhead() == "/") { + this._advance(); + commentLevel--; + if (commentLevel == 0) { + return true; + } + } + } + else if (lexeme == "/") { + if (this._peekAhead() == "*") { + this._advance(); + commentLevel++; + } + } + } + return true; + } + } + // Shortcut single character tokens + const simpleToken = TokenTypes.simpleTokens[lexeme]; + if (simpleToken) { + this._addToken(simpleToken); + return true; + } + // Shortcut keywords and identifiers + let matchType = TokenTypes.none; + const isAlpha = this._isAlpha(lexeme); + const isUnderscore = lexeme === "_"; + if (this._isAlphaNumeric(lexeme)) { + let nextChar = this._peekAhead(); + while (this._isAlphaNumeric(nextChar)) { + lexeme += this._advance(); + nextChar = this._peekAhead(); + } + } + if (isAlpha) { + const matchedType = TokenTypes.keywords[lexeme]; + if (matchedType) { + this._addToken(matchedType); + return true; + } + } + if (isAlpha || isUnderscore) { + this._addToken(TokenTypes.tokens.ident); + return true; + } + // Scan for the next valid token type + for (;;) { + let matchedType = this._findType(lexeme); + // An exception to "longest lexeme" rule is '>>'. In the case of 1>>2, it's a + // shift_right. + // In the case of array>, it's two greater_than's (one to close the vec4, + // and one to close the array). + // Another ambiguity is '>='. In the case of vec2=vec2(1,2), + // it's a greather_than and an equal, not a greater_than_equal. + // Another ambiguity is '-'. In the case of a-2, it's a minus; in the case of a*-2, it's a -2; + // in the case of foo()->int, it's a ->; in the case of foo-- or --foo, it's a -- decrement. + // WGSL requires context sensitive parsing to resolve these ambiguities. Both of these cases + // are predicated on it the > either closing a template, or being part of an operator. + // The solution here is to check if there was a less_than up to some number of tokens + // previously, and the token prior to that is a keyword that requires a '<', then it will be + // split into two operators; otherwise it's a single operator. + const nextLexeme = this._peekAhead(); + if (lexeme == "-" && this._tokens.length > 0) { + if (nextLexeme == "=") { + this._current++; + lexeme += nextLexeme; + this._addToken(TokenTypes.tokens.minus_equal); + return true; + } + if (nextLexeme == "-") { + this._current++; + lexeme += nextLexeme; + this._addToken(TokenTypes.tokens.minus_minus); + return true; + } + const ti = this._tokens.length - 1; + const isIdentOrLiteral = TokenTypes.literal_or_ident.indexOf(this._tokens[ti].type) != -1; + if ((isIdentOrLiteral || this._tokens[ti].type == TokenTypes.tokens.paren_right) && nextLexeme != ">") { + this._addToken(matchedType); + return true; + } + } + if (lexeme == ">" && (nextLexeme == ">" || nextLexeme == "=")) { + let foundLessThan = false; + let ti = this._tokens.length - 1; + for (let count = 0; count < 5 && ti >= 0; ++count, --ti) { + if (TokenTypes.assignment_operators.indexOf(this._tokens[ti].type) !== -1) { + break; + } + if (this._tokens[ti].type === TokenTypes.tokens.less_than) { + if (ti > 0 && this._tokens[ti - 1].isArrayOrTemplateType()) { + foundLessThan = true; + } + break; + } + } + // If there was a less_than in the recent token history, then this is probably a + // greater_than. + if (foundLessThan) { + this._addToken(matchedType); + return true; + } + } + // The current lexeme may not match any rule, but some token types may be invalid for + // part of the string but valid after a few more characters. + // For example, 0x.5 is a hex_float_literal. But as it's being scanned, + // "0" is a int_literal, then "0x" is invalid. If we stopped there, it would return + // the int_literal "0", but that's incorrect. So if we look forward a few characters, + // we'd get "0x.", which is still invalid, followed by "0x.5" which is the correct + // hex_float_literal. So that means if we hit an non-matching string, we should look + // ahead up to two characters to see if the string starts matching a valid rule again. + if (matchedType === TokenTypes.none) { + let lookAheadLexeme = lexeme; + let lookAhead = 0; + const maxLookAhead = 2; + for (let li = 0; li < maxLookAhead; ++li) { + lookAheadLexeme += this._peekAhead(li); + matchedType = this._findType(lookAheadLexeme); + if (matchedType !== TokenTypes.none) { + lookAhead = li; + break; + } + } + if (matchedType === TokenTypes.none) { + if (matchType === TokenTypes.none) { + return false; + } + this._current--; + this._addToken(matchType); + return true; + } + lexeme = lookAheadLexeme; + this._current += lookAhead + 1; + } + matchType = matchedType; + if (this._isAtEnd()) { + break; + } + lexeme += this._advance(); + } + // We got to the end of the input stream. Then the token we've ready so far is it. + if (matchType === TokenTypes.none) { + return false; + } + this._addToken(matchType); + return true; + } + _findType(lexeme) { + for (const name in TokenTypes.regexTokens) { + const type = TokenTypes.regexTokens[name]; + if (this._match(lexeme, type.rule)) { + return type; + } + } + const type = TokenTypes.literalTokens[lexeme]; + if (type) { + return type; + } + return TokenTypes.none; + } + _match(lexeme, rule) { + const match = rule.exec(lexeme); + return match && match.index == 0 && match[0] == lexeme; + } + _isAtEnd() { + return this._current >= this._source.length; + } + _isAlpha(c) { + return (c >= "a" && c <= "z") || (c >= "A" && c <= "Z"); + } + _isAlphaNumeric(c) { + return (c >= "a" && c <= "z") || (c >= "A" && c <= "Z") || c == "_" || (c >= "0" && c <= "9"); + } + _isWhitespace(c) { + return c == " " || c == "\t" || c == "\r"; + } + _advance(amount = 0) { + let c = this._source[this._current]; + amount = amount || 0; + amount++; + this._current += amount; + return c; + } + _peekAhead(offset = 0) { + offset = offset || 0; + if (this._current + offset >= this._source.length) { + return "\0"; + } + return this._source[this._current + offset]; + } + _addToken(type) { + const text = this._source.substring(this._start, this._current); + this._tokens.push(new Token(type, text, this._line)); + } +} + +/** + * @author Brendan Duncan / https://github.com/brendan-duncan + */ +/// Parse a sequence of tokens from the WgslScanner into an Abstract Syntax Tree (AST). +class WgslParser { + constructor() { + this._tokens = []; + this._current = 0; + this._currentLine = 0; + this._context = new ParseContext(); + this._deferArrayCountEval = []; + } + parse(tokensOrCode) { + this._initialize(tokensOrCode); + this._deferArrayCountEval.length = 0; + const statements = []; + while (!this._isAtEnd()) { + const statement = this._global_decl_or_directive(); + if (!statement) { + break; + } + statements.push(statement); + } + // Since constants can be declared after they are used, and + // constants can be used to size arrays, defer calculating the + // size until after the shader has finished parsing. + if (this._deferArrayCountEval.length > 0) { + for (const arrayDecl of this._deferArrayCountEval) { + const arrayType = arrayDecl["arrayType"]; + const countNode = arrayDecl["countNode"]; + if (countNode instanceof VariableExpr) { + const variable = countNode; + const name = variable.name; + const constant = this._context.constants.get(name); + if (constant) { + try { + const count = constant.evaluate(this._context); + arrayType.count = count; + } + catch (e) { + } + } + } + } + this._deferArrayCountEval.length = 0; + } + return statements; + } + _initialize(tokensOrCode) { + if (tokensOrCode) { + if (typeof tokensOrCode == "string") { + const scanner = new WgslScanner(tokensOrCode); + this._tokens = scanner.scanTokens(); + } + else { + this._tokens = tokensOrCode; + } + } + else { + this._tokens = []; + } + this._current = 0; + } + _error(token, message) { + return { + token, + message, + toString: function () { + return `${message}`; + }, + }; + } + _isAtEnd() { + return (this._current >= this._tokens.length || + this._peek().type == TokenTypes.eof); + } + _match(types) { + if (types instanceof TokenType) { + if (this._check(types)) { + this._advance(); + return true; + } + return false; + } + for (let i = 0, l = types.length; i < l; ++i) { + const type = types[i]; + if (this._check(type)) { + this._advance(); + return true; + } + } + return false; + } + _consume(types, message) { + if (this._check(types)) { + return this._advance(); + } + throw this._error(this._peek(), message); + } + _check(types) { + if (this._isAtEnd()) { + return false; + } + const tk = this._peek(); + if (types instanceof Array) { + const t = tk.type; + const index = types.indexOf(t); + return index != -1; + } + return tk.type == types; + } + _advance() { + var _a, _b; + this._currentLine = (_b = (_a = this._peek()) === null || _a === void 0 ? void 0 : _a.line) !== null && _b !== void 0 ? _b : -1; + if (!this._isAtEnd()) { + this._current++; + } + return this._previous(); + } + _peek() { + return this._tokens[this._current]; + } + _previous() { + return this._tokens[this._current - 1]; + } + _global_decl_or_directive() { + // semicolon + // global_variable_decl semicolon + // global_constant_decl semicolon + // type_alias semicolon + // struct_decl + // function_decl + // enable_directive + // Ignore any stand-alone semicolons + while (this._match(TokenTypes.tokens.semicolon) && !this._isAtEnd()) + ; + if (this._match(TokenTypes.keywords.alias)) { + const type = this._type_alias(); + this._consume(TokenTypes.tokens.semicolon, "Expected ';'"); + return type; + } + if (this._match(TokenTypes.keywords.diagnostic)) { + const directive = this._diagnostic(); + this._consume(TokenTypes.tokens.semicolon, "Expected ';'"); + return directive; + } + if (this._match(TokenTypes.keywords.requires)) { + const requires = this._requires_directive(); + this._consume(TokenTypes.tokens.semicolon, "Expected ';'"); + return requires; + } + if (this._match(TokenTypes.keywords.enable)) { + const enable = this._enable_directive(); + this._consume(TokenTypes.tokens.semicolon, "Expected ';'"); + return enable; + } + // The following statements have an optional attribute* + const attrs = this._attribute(); + if (this._check(TokenTypes.keywords.var)) { + const _var = this._global_variable_decl(); + if (_var != null) { + _var.attributes = attrs; + } + this._consume(TokenTypes.tokens.semicolon, "Expected ';'."); + return _var; + } + if (this._check(TokenTypes.keywords.override)) { + const _override = this._override_variable_decl(); + if (_override != null) { + _override.attributes = attrs; + } + this._consume(TokenTypes.tokens.semicolon, "Expected ';'."); + return _override; + } + if (this._check(TokenTypes.keywords.let)) { + const _let = this._global_let_decl(); + if (_let != null) { + _let.attributes = attrs; + } + this._consume(TokenTypes.tokens.semicolon, "Expected ';'."); + return _let; + } + if (this._check(TokenTypes.keywords.const)) { + const _const = this._global_const_decl(); + if (_const != null) { + _const.attributes = attrs; + } + this._consume(TokenTypes.tokens.semicolon, "Expected ';'."); + return _const; + } + if (this._check(TokenTypes.keywords.struct)) { + const _struct = this._struct_decl(); + if (_struct != null) { + _struct.attributes = attrs; + } + return _struct; + } + if (this._check(TokenTypes.keywords.fn)) { + const _fn = this._function_decl(); + if (_fn != null) { + _fn.attributes = attrs; + } + return _fn; + } + return null; + } + _function_decl() { + // attribute* function_header compound_statement + // function_header: fn ident paren_left param_list? paren_right (arrow attribute* type_decl)? + if (!this._match(TokenTypes.keywords.fn)) { + return null; + } + const startLine = this._currentLine; + const name = this._consume(TokenTypes.tokens.ident, "Expected function name.").toString(); + this._consume(TokenTypes.tokens.paren_left, "Expected '(' for function arguments."); + const args = []; + if (!this._check(TokenTypes.tokens.paren_right)) { + do { + if (this._check(TokenTypes.tokens.paren_right)) { + break; + } + const argAttrs = this._attribute(); + const name = this._consume(TokenTypes.tokens.ident, "Expected argument name.").toString(); + this._consume(TokenTypes.tokens.colon, "Expected ':' for argument type."); + const typeAttrs = this._attribute(); + const type = this._type_decl(); + if (type != null) { + type.attributes = typeAttrs; + args.push(new Argument(name, type, argAttrs)); + } + } while (this._match(TokenTypes.tokens.comma)); + } + this._consume(TokenTypes.tokens.paren_right, "Expected ')' after function arguments."); + let _return = null; + if (this._match(TokenTypes.tokens.arrow)) { + const attrs = this._attribute(); + _return = this._type_decl(); + if (_return != null) { + _return.attributes = attrs; + } + } + const body = this._compound_statement(); + const endLine = this._currentLine; + return new Function(name, args, _return, body, startLine, endLine); + } + _compound_statement() { + // brace_left statement* brace_right + const statements = []; + this._consume(TokenTypes.tokens.brace_left, "Expected '{' for block."); + while (!this._check(TokenTypes.tokens.brace_right)) { + const statement = this._statement(); + if (statement !== null) { + statements.push(statement); + } + } + this._consume(TokenTypes.tokens.brace_right, "Expected '}' for block."); + return statements; + } + _statement() { + // semicolon + // return_statement semicolon + // if_statement + // switch_statement + // loop_statement + // for_statement + // func_call_statement semicolon + // variable_statement semicolon + // break_statement semicolon + // continue_statement semicolon + // continuing_statement compound_statement + // discard semicolon + // assignment_statement semicolon + // compound_statement + // increment_statement semicolon + // decrement_statement semicolon + // static_assert_statement semicolon + // Ignore any stand-alone semicolons + while (this._match(TokenTypes.tokens.semicolon) && !this._isAtEnd()) + ; + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + if (this._check(TokenTypes.keywords.if)) { + return this._if_statement(); + } + if (this._check(TokenTypes.keywords.switch)) { + return this._switch_statement(); + } + if (this._check(TokenTypes.keywords.loop)) { + return this._loop_statement(); + } + if (this._check(TokenTypes.keywords.for)) { + return this._for_statement(); + } + if (this._check(TokenTypes.keywords.while)) { + return this._while_statement(); + } + if (this._check(TokenTypes.keywords.continuing)) { + return this._continuing_statement(); + } + if (this._check(TokenTypes.keywords.static_assert)) { + return this._static_assert_statement(); + } + if (this._check(TokenTypes.tokens.brace_left)) { + return this._compound_statement(); + } + let result = null; + if (this._check(TokenTypes.keywords.return)) { + result = this._return_statement(); + } + else if (this._check([ + TokenTypes.keywords.var, + TokenTypes.keywords.let, + TokenTypes.keywords.const, + ])) { + result = this._variable_statement(); + } + else if (this._match(TokenTypes.keywords.discard)) { + result = new Discard(); + } + else if (this._match(TokenTypes.keywords.break)) { + result = new Break(); + } + else if (this._match(TokenTypes.keywords.continue)) { + result = new Continue(); + } + else { + result = + this._increment_decrement_statement() || + this._func_call_statement() || + this._assignment_statement(); + } + if (result != null) { + this._consume(TokenTypes.tokens.semicolon, "Expected ';' after statement."); + } + return result; + } + _static_assert_statement() { + if (!this._match(TokenTypes.keywords.static_assert)) { + return null; + } + const expression = this._optional_paren_expression(); + return new StaticAssert(expression); + } + _while_statement() { + if (!this._match(TokenTypes.keywords.while)) { + return null; + } + const condition = this._optional_paren_expression(); + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + const block = this._compound_statement(); + return new While(condition, block); + } + _continuing_statement() { + if (!this._match(TokenTypes.keywords.continuing)) { + return null; + } + const block = this._compound_statement(); + return new Continuing(block); + } + _for_statement() { + // for paren_left for_header paren_right compound_statement + if (!this._match(TokenTypes.keywords.for)) { + return null; + } + this._consume(TokenTypes.tokens.paren_left, "Expected '('."); + // for_header: (variable_statement assignment_statement func_call_statement)? semicolon short_circuit_or_expression? semicolon (assignment_statement func_call_statement)? + const init = !this._check(TokenTypes.tokens.semicolon) + ? this._for_init() + : null; + this._consume(TokenTypes.tokens.semicolon, "Expected ';'."); + const condition = !this._check(TokenTypes.tokens.semicolon) + ? this._short_circuit_or_expression() + : null; + this._consume(TokenTypes.tokens.semicolon, "Expected ';'."); + const increment = !this._check(TokenTypes.tokens.paren_right) + ? this._for_increment() + : null; + this._consume(TokenTypes.tokens.paren_right, "Expected ')'."); + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + const body = this._compound_statement(); + return new For(init, condition, increment, body); + } + _for_init() { + // (variable_statement assignment_statement func_call_statement)? + return (this._variable_statement() || + this._func_call_statement() || + this._assignment_statement()); + } + _for_increment() { + // (assignment_statement func_call_statement increment_statement)? + return (this._func_call_statement() || + this._increment_decrement_statement() || + this._assignment_statement()); + } + _variable_statement() { + // variable_decl + // variable_decl equal short_circuit_or_expression + // let (ident variable_ident_decl) equal short_circuit_or_expression + // const (ident variable_ident_decl) equal short_circuit_or_expression + if (this._check(TokenTypes.keywords.var)) { + const _var = this._variable_decl(); + if (_var === null) { + throw this._error(this._peek(), "Variable declaration expected."); + } + let value = null; + if (this._match(TokenTypes.tokens.equal)) { + value = this._short_circuit_or_expression(); + } + return new Var(_var.name, _var.type, _var.storage, _var.access, value); + } + if (this._match(TokenTypes.keywords.let)) { + const name = this._consume(TokenTypes.tokens.ident, "Expected name for let.").toString(); + let type = null; + if (this._match(TokenTypes.tokens.colon)) { + const typeAttrs = this._attribute(); + type = this._type_decl(); + if (type != null) { + type.attributes = typeAttrs; + } + } + this._consume(TokenTypes.tokens.equal, "Expected '=' for let."); + const value = this._short_circuit_or_expression(); + return new Let(name, type, null, null, value); + } + if (this._match(TokenTypes.keywords.const)) { + const name = this._consume(TokenTypes.tokens.ident, "Expected name for const.").toString(); + let type = null; + if (this._match(TokenTypes.tokens.colon)) { + const typeAttrs = this._attribute(); + type = this._type_decl(); + if (type != null) { + type.attributes = typeAttrs; + } + } + this._consume(TokenTypes.tokens.equal, "Expected '=' for const."); + const value = this._short_circuit_or_expression(); + return new Const(name, type, null, null, value); + } + return null; + } + _increment_decrement_statement() { + const savedPos = this._current; + const _var = this._unary_expression(); + if (_var == null) { + return null; + } + if (!this._check(TokenTypes.increment_operators)) { + this._current = savedPos; + return null; + } + const token = this._consume(TokenTypes.increment_operators, "Expected increment operator"); + return new Increment(token.type === TokenTypes.tokens.plus_plus + ? IncrementOperator.increment + : IncrementOperator.decrement, _var); + } + _assignment_statement() { + // (unary_expression underscore) equal short_circuit_or_expression + let _var = null; + if (this._check(TokenTypes.tokens.brace_right)) { + return null; + } + let isUnderscore = this._match(TokenTypes.tokens.underscore); + if (!isUnderscore) { + _var = this._unary_expression(); + } + if (!isUnderscore && _var == null) { + return null; + } + const type = this._consume(TokenTypes.assignment_operators, "Expected assignment operator."); + const value = this._short_circuit_or_expression(); + return new Assign(AssignOperator.parse(type.lexeme), _var, value); + } + _func_call_statement() { + // ident argument_expression_list + if (!this._check(TokenTypes.tokens.ident)) { + return null; + } + const savedPos = this._current; + const name = this._consume(TokenTypes.tokens.ident, "Expected function name."); + const args = this._argument_expression_list(); + if (args === null) { + this._current = savedPos; + return null; + } + return new Call(name.lexeme, args); + } + _loop_statement() { + // loop brace_left statement* continuing_statement? brace_right + if (!this._match(TokenTypes.keywords.loop)) { + return null; + } + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + this._consume(TokenTypes.tokens.brace_left, "Expected '{' for loop."); + // statement* + const statements = []; + let statement = this._statement(); + while (statement !== null) { + if (Array.isArray(statement)) { + for (let s of statement) { + statements.push(s); + } + } + else { + statements.push(statement); + } + statement = this._statement(); + } + // continuing_statement: continuing compound_statement + let continuing = null; + if (this._match(TokenTypes.keywords.continuing)) { + continuing = this._compound_statement(); + } + this._consume(TokenTypes.tokens.brace_right, "Expected '}' for loop."); + return new Loop(statements, continuing); + } + _switch_statement() { + // switch optional_paren_expression brace_left switch_body+ brace_right + if (!this._match(TokenTypes.keywords.switch)) { + return null; + } + const condition = this._optional_paren_expression(); + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + this._consume(TokenTypes.tokens.brace_left, "Expected '{' for switch."); + const body = this._switch_body(); + if (body == null || body.length == 0) { + throw this._error(this._previous(), "Expected 'case' or 'default'."); + } + this._consume(TokenTypes.tokens.brace_right, "Expected '}' for switch."); + return new Switch(condition, body); + } + _switch_body() { + // case case_selectors colon brace_left case_body? brace_right + // default colon brace_left case_body? brace_right + const cases = []; + if (this._match(TokenTypes.keywords.case)) { + const selector = this._case_selectors(); + this._match(TokenTypes.tokens.colon); // colon is optional + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + this._consume(TokenTypes.tokens.brace_left, "Exected '{' for switch case."); + const body = this._case_body(); + this._consume(TokenTypes.tokens.brace_right, "Exected '}' for switch case."); + cases.push(new Case(selector, body)); + } + if (this._match(TokenTypes.keywords.default)) { + this._match(TokenTypes.tokens.colon); // colon is optional + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + this._consume(TokenTypes.tokens.brace_left, "Exected '{' for switch default."); + const body = this._case_body(); + this._consume(TokenTypes.tokens.brace_right, "Exected '}' for switch default."); + cases.push(new Default(body)); + } + if (this._check([TokenTypes.keywords.default, TokenTypes.keywords.case])) { + const _cases = this._switch_body(); + cases.push(_cases[0]); + } + return cases; + } + _case_selectors() { + // const_literal (comma const_literal)* comma? + const selectors = [ + this._shift_expression(), //?.evaluate(this._context).toString() ?? "", + ]; + while (this._match(TokenTypes.tokens.comma)) { + selectors.push(this._shift_expression()); + } + return selectors; + } + _case_body() { + // statement case_body? + // fallthrough semicolon + if (this._match(TokenTypes.keywords.fallthrough)) { + this._consume(TokenTypes.tokens.semicolon, "Expected ';'"); + return []; + } + let statement = this._statement(); + if (statement == null) { + return []; + } + if (!(statement instanceof Array)) { + statement = [statement]; + } + const nextStatement = this._case_body(); + if (nextStatement.length == 0) { + return statement; + } + return [...statement, nextStatement[0]]; + } + _if_statement() { + // if optional_paren_expression compound_statement elseif_statement? else_statement? + if (!this._match(TokenTypes.keywords.if)) { + return null; + } + const condition = this._optional_paren_expression(); + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + const block = this._compound_statement(); + let elseif = []; + if (this._match_elseif()) { + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + elseif = this._elseif_statement(elseif); + } + let _else = null; + if (this._match(TokenTypes.keywords.else)) { + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + _else = this._compound_statement(); + } + return new If(condition, block, elseif, _else); + } + _match_elseif() { + if (this._tokens[this._current].type === TokenTypes.keywords.else && + this._tokens[this._current + 1].type === TokenTypes.keywords.if) { + this._advance(); + this._advance(); + return true; + } + return false; + } + _elseif_statement(elseif = []) { + // else_if optional_paren_expression compound_statement elseif_statement? + const condition = this._optional_paren_expression(); + const block = this._compound_statement(); + elseif.push(new ElseIf(condition, block)); + if (this._match_elseif()) { + if (this._check(TokenTypes.tokens.attr)) { + this._attribute(); + } + this._elseif_statement(elseif); + } + return elseif; + } + _return_statement() { + // return short_circuit_or_expression? + if (!this._match(TokenTypes.keywords.return)) { + return null; + } + const value = this._short_circuit_or_expression(); + return new Return(value); + } + _short_circuit_or_expression() { + // short_circuit_and_expression + // short_circuit_or_expression or_or short_circuit_and_expression + let expr = this._short_circuit_and_expr(); + while (this._match(TokenTypes.tokens.or_or)) { + expr = new BinaryOperator(this._previous().toString(), expr, this._short_circuit_and_expr()); + } + return expr; + } + _short_circuit_and_expr() { + // inclusive_or_expression + // short_circuit_and_expression and_and inclusive_or_expression + let expr = this._inclusive_or_expression(); + while (this._match(TokenTypes.tokens.and_and)) { + expr = new BinaryOperator(this._previous().toString(), expr, this._inclusive_or_expression()); + } + return expr; + } + _inclusive_or_expression() { + // exclusive_or_expression + // inclusive_or_expression or exclusive_or_expression + let expr = this._exclusive_or_expression(); + while (this._match(TokenTypes.tokens.or)) { + expr = new BinaryOperator(this._previous().toString(), expr, this._exclusive_or_expression()); + } + return expr; + } + _exclusive_or_expression() { + // and_expression + // exclusive_or_expression xor and_expression + let expr = this._and_expression(); + while (this._match(TokenTypes.tokens.xor)) { + expr = new BinaryOperator(this._previous().toString(), expr, this._and_expression()); + } + return expr; + } + _and_expression() { + // equality_expression + // and_expression and equality_expression + let expr = this._equality_expression(); + while (this._match(TokenTypes.tokens.and)) { + expr = new BinaryOperator(this._previous().toString(), expr, this._equality_expression()); + } + return expr; + } + _equality_expression() { + // relational_expression + // relational_expression equal_equal relational_expression + // relational_expression not_equal relational_expression + const expr = this._relational_expression(); + if (this._match([TokenTypes.tokens.equal_equal, TokenTypes.tokens.not_equal])) { + return new BinaryOperator(this._previous().toString(), expr, this._relational_expression()); + } + return expr; + } + _relational_expression() { + // shift_expression + // relational_expression less_than shift_expression + // relational_expression greater_than shift_expression + // relational_expression less_than_equal shift_expression + // relational_expression greater_than_equal shift_expression + let expr = this._shift_expression(); + while (this._match([ + TokenTypes.tokens.less_than, + TokenTypes.tokens.greater_than, + TokenTypes.tokens.less_than_equal, + TokenTypes.tokens.greater_than_equal, + ])) { + expr = new BinaryOperator(this._previous().toString(), expr, this._shift_expression()); + } + return expr; + } + _shift_expression() { + // additive_expression + // shift_expression shift_left additive_expression + // shift_expression shift_right additive_expression + let expr = this._additive_expression(); + while (this._match([TokenTypes.tokens.shift_left, TokenTypes.tokens.shift_right])) { + expr = new BinaryOperator(this._previous().toString(), expr, this._additive_expression()); + } + return expr; + } + _additive_expression() { + // multiplicative_expression + // additive_expression plus multiplicative_expression + // additive_expression minus multiplicative_expression + let expr = this._multiplicative_expression(); + while (this._match([TokenTypes.tokens.plus, TokenTypes.tokens.minus])) { + expr = new BinaryOperator(this._previous().toString(), expr, this._multiplicative_expression()); + } + return expr; + } + _multiplicative_expression() { + // unary_expression + // multiplicative_expression star unary_expression + // multiplicative_expression forward_slash unary_expression + // multiplicative_expression modulo unary_expression + let expr = this._unary_expression(); + while (this._match([ + TokenTypes.tokens.star, + TokenTypes.tokens.forward_slash, + TokenTypes.tokens.modulo, + ])) { + expr = new BinaryOperator(this._previous().toString(), expr, this._unary_expression()); + } + return expr; + } + _unary_expression() { + // singular_expression + // minus unary_expression + // bang unary_expression + // tilde unary_expression + // star unary_expression + // and unary_expression + if (this._match([ + TokenTypes.tokens.minus, + TokenTypes.tokens.bang, + TokenTypes.tokens.tilde, + TokenTypes.tokens.star, + TokenTypes.tokens.and, + ])) { + return new UnaryOperator(this._previous().toString(), this._unary_expression()); + } + return this._singular_expression(); + } + _singular_expression() { + // primary_expression postfix_expression ? + const expr = this._primary_expression(); + const p = this._postfix_expression(); + if (p) { + expr.postfix = p; + } + return expr; + } + _postfix_expression() { + // bracket_left short_circuit_or_expression bracket_right postfix_expression? + if (this._match(TokenTypes.tokens.bracket_left)) { + const expr = this._short_circuit_or_expression(); + this._consume(TokenTypes.tokens.bracket_right, "Expected ']'."); + const arrayIndex = new ArrayIndex(expr); + const p = this._postfix_expression(); + if (p) { + arrayIndex.postfix = p; + } + return arrayIndex; + } + // period ident postfix_expression? + if (this._match(TokenTypes.tokens.period)) { + const name = this._consume(TokenTypes.tokens.ident, "Expected member name."); + const p = this._postfix_expression(); + const expr = new StringExpr(name.lexeme); + if (p) { + expr.postfix = p; + } + return expr; + } + return null; + } + _getStruct(name) { + if (this._context.aliases.has(name)) { + const alias = this._context.aliases.get(name).type; + return alias; + } + if (this._context.structs.has(name)) { + const struct = this._context.structs.get(name); + return struct; + } + return null; + } + _primary_expression() { + // ident argument_expression_list? + if (this._match(TokenTypes.tokens.ident)) { + const name = this._previous().toString(); + if (this._check(TokenTypes.tokens.paren_left)) { + const args = this._argument_expression_list(); + const struct = this._getStruct(name); + if (struct != null) { + return new CreateExpr(struct, args); + } + return new CallExpr(name, args); + } + if (this._context.constants.has(name)) { + const c = this._context.constants.get(name); + return new ConstExpr(name, c.value); + } + return new VariableExpr(name); + } + // const_literal + if (this._match(TokenTypes.const_literal)) { + return new LiteralExpr(parseFloat(this._previous().toString())); + } + // paren_expression + if (this._check(TokenTypes.tokens.paren_left)) { + return this._paren_expression(); + } + // bitcast less_than type_decl greater_than paren_expression + if (this._match(TokenTypes.keywords.bitcast)) { + this._consume(TokenTypes.tokens.less_than, "Expected '<'."); + const type = this._type_decl(); + this._consume(TokenTypes.tokens.greater_than, "Expected '>'."); + const value = this._paren_expression(); + return new BitcastExpr(type, value); + } + // type_decl argument_expression_list + const type = this._type_decl(); + const args = this._argument_expression_list(); + return new CreateExpr(type, args); + } + _argument_expression_list() { + // paren_left ((short_circuit_or_expression comma)* short_circuit_or_expression comma?)? paren_right + if (!this._match(TokenTypes.tokens.paren_left)) { + return null; + } + const args = []; + do { + if (this._check(TokenTypes.tokens.paren_right)) { + break; + } + const arg = this._short_circuit_or_expression(); + args.push(arg); + } while (this._match(TokenTypes.tokens.comma)); + this._consume(TokenTypes.tokens.paren_right, "Expected ')' for agument list"); + return args; + } + _optional_paren_expression() { + // [paren_left] short_circuit_or_expression [paren_right] + this._match(TokenTypes.tokens.paren_left); + const expr = this._short_circuit_or_expression(); + this._match(TokenTypes.tokens.paren_right); + return new GroupingExpr([expr]); + } + _paren_expression() { + // paren_left short_circuit_or_expression paren_right + this._consume(TokenTypes.tokens.paren_left, "Expected '('."); + const expr = this._short_circuit_or_expression(); + this._consume(TokenTypes.tokens.paren_right, "Expected ')'."); + return new GroupingExpr([expr]); + } + _struct_decl() { + // attribute* struct ident struct_body_decl + if (!this._match(TokenTypes.keywords.struct)) { + return null; + } + const startLine = this._currentLine; + const name = this._consume(TokenTypes.tokens.ident, "Expected name for struct.").toString(); + // struct_body_decl: brace_left (struct_member comma)* struct_member comma? brace_right + this._consume(TokenTypes.tokens.brace_left, "Expected '{' for struct body."); + const members = []; + while (!this._check(TokenTypes.tokens.brace_right)) { + // struct_member: attribute* variable_ident_decl + const memberAttrs = this._attribute(); + const memberName = this._consume(TokenTypes.tokens.ident, "Expected variable name.").toString(); + this._consume(TokenTypes.tokens.colon, "Expected ':' for struct member type."); + const typeAttrs = this._attribute(); + const memberType = this._type_decl(); + if (memberType != null) { + memberType.attributes = typeAttrs; + } + if (!this._check(TokenTypes.tokens.brace_right)) + this._consume(TokenTypes.tokens.comma, "Expected ',' for struct member."); + else + this._match(TokenTypes.tokens.comma); // trailing comma optional. + members.push(new Member(memberName, memberType, memberAttrs)); + } + this._consume(TokenTypes.tokens.brace_right, "Expected '}' after struct body."); + const endLine = this._currentLine; + const structNode = new Struct(name, members, startLine, endLine); + this._context.structs.set(name, structNode); + return structNode; + } + _global_variable_decl() { + // attribute* variable_decl (equal const_expression)? + const _var = this._variable_decl(); + if (_var && this._match(TokenTypes.tokens.equal)) { + _var.value = this._const_expression(); + } + return _var; + } + _override_variable_decl() { + // attribute* override_decl (equal const_expression)? + const _override = this._override_decl(); + if (_override && this._match(TokenTypes.tokens.equal)) { + _override.value = this._const_expression(); + } + return _override; + } + _global_const_decl() { + // attribute* const (ident variable_ident_decl) global_const_initializer? + if (!this._match(TokenTypes.keywords.const)) { + return null; + } + const name = this._consume(TokenTypes.tokens.ident, "Expected variable name"); + let type = null; + if (this._match(TokenTypes.tokens.colon)) { + const attrs = this._attribute(); + type = this._type_decl(); + if (type != null) { + type.attributes = attrs; + } + } + let value = null; + if (this._match(TokenTypes.tokens.equal)) { + const valueExpr = this._short_circuit_or_expression(); + if (valueExpr instanceof CreateExpr) { + value = valueExpr; + } + else if (valueExpr instanceof ConstExpr && + valueExpr.initializer instanceof CreateExpr) { + value = valueExpr.initializer; + } + else { + try { + const constValue = valueExpr.evaluate(this._context); + value = new LiteralExpr(constValue); + } + catch (_a) { + value = valueExpr; + } + } + } + const c = new Const(name.toString(), type, "", "", value); + this._context.constants.set(c.name, c); + return c; + } + _global_let_decl() { + // attribute* let (ident variable_ident_decl) global_const_initializer? + if (!this._match(TokenTypes.keywords.let)) { + return null; + } + const name = this._consume(TokenTypes.tokens.ident, "Expected variable name"); + let type = null; + if (this._match(TokenTypes.tokens.colon)) { + const attrs = this._attribute(); + type = this._type_decl(); + if (type != null) { + type.attributes = attrs; + } + } + let value = null; + if (this._match(TokenTypes.tokens.equal)) { + value = this._const_expression(); + } + return new Let(name.toString(), type, "", "", value); + } + _const_expression() { + // type_decl paren_left ((const_expression comma)* const_expression comma?)? paren_right + // const_literal + return this._short_circuit_or_expression(); + } + _variable_decl() { + // var variable_qualifier? (ident variable_ident_decl) + if (!this._match(TokenTypes.keywords.var)) { + return null; + } + // variable_qualifier: less_than storage_class (comma access_mode)? greater_than + let storage = ""; + let access = ""; + if (this._match(TokenTypes.tokens.less_than)) { + storage = this._consume(TokenTypes.storage_class, "Expected storage_class.").toString(); + if (this._match(TokenTypes.tokens.comma)) + access = this._consume(TokenTypes.access_mode, "Expected access_mode.").toString(); + this._consume(TokenTypes.tokens.greater_than, "Expected '>'."); + } + const name = this._consume(TokenTypes.tokens.ident, "Expected variable name"); + let type = null; + if (this._match(TokenTypes.tokens.colon)) { + const attrs = this._attribute(); + type = this._type_decl(); + if (type != null) { + type.attributes = attrs; + } + } + return new Var(name.toString(), type, storage, access, null); + } + _override_decl() { + // override (ident variable_ident_decl) + if (!this._match(TokenTypes.keywords.override)) { + return null; + } + const name = this._consume(TokenTypes.tokens.ident, "Expected variable name"); + let type = null; + if (this._match(TokenTypes.tokens.colon)) { + const attrs = this._attribute(); + type = this._type_decl(); + if (type != null) { + type.attributes = attrs; + } + } + return new Override(name.toString(), type, null); + } + _diagnostic() { + // diagnostic(severity_control_name, diagnostic_rule_name) + this._consume(TokenTypes.tokens.paren_left, "Expected '('"); + const severity = this._consume(TokenTypes.tokens.ident, "Expected severity control name."); + this._consume(TokenTypes.tokens.comma, "Expected ','"); + const rule = this._consume(TokenTypes.tokens.ident, "Expected diagnostic rule name."); + this._consume(TokenTypes.tokens.paren_right, "Expected ')'"); + return new Diagnostic(severity.toString(), rule.toString()); + } + _enable_directive() { + // enable ident semicolon + const name = this._consume(TokenTypes.tokens.ident, "identity expected."); + return new Enable(name.toString()); + } + _requires_directive() { + // requires extension [, extension]* semicolon + const extensions = [this._consume(TokenTypes.tokens.ident, "identity expected.").toString()]; + while (this._match(TokenTypes.tokens.comma)) { + const name = this._consume(TokenTypes.tokens.ident, "identity expected."); + extensions.push(name.toString()); + } + return new Requires(extensions); + } + _type_alias() { + // type ident equal type_decl + const name = this._consume(TokenTypes.tokens.ident, "identity expected."); + this._consume(TokenTypes.tokens.equal, "Expected '=' for type alias."); + let aliasType = this._type_decl(); + if (aliasType === null) { + throw this._error(this._peek(), "Expected Type for Alias."); + } + if (this._context.aliases.has(aliasType.name)) { + aliasType = this._context.aliases.get(aliasType.name).type; + } + const aliasNode = new Alias(name.toString(), aliasType); + this._context.aliases.set(aliasNode.name, aliasNode); + return aliasNode; + } + _type_decl() { + // ident + // bool + // float32 + // int32 + // uint32 + // vec2 less_than type_decl greater_than + // vec3 less_than type_decl greater_than + // vec4 less_than type_decl greater_than + // mat2x2 less_than type_decl greater_than + // mat2x3 less_than type_decl greater_than + // mat2x4 less_than type_decl greater_than + // mat3x2 less_than type_decl greater_than + // mat3x3 less_than type_decl greater_than + // mat3x4 less_than type_decl greater_than + // mat4x2 less_than type_decl greater_than + // mat4x3 less_than type_decl greater_than + // mat4x4 less_than type_decl greater_than + // atomic less_than type_decl greater_than + // pointer less_than storage_class comma type_decl (comma access_mode)? greater_than + // array_type_decl + // texture_sampler_types + if (this._check([ + TokenTypes.tokens.ident, + ...TokenTypes.texel_format, + TokenTypes.keywords.bool, + TokenTypes.keywords.f32, + TokenTypes.keywords.i32, + TokenTypes.keywords.u32, + ])) { + const type = this._advance(); + const typeName = type.toString(); + if (this._context.structs.has(typeName)) { + return this._context.structs.get(typeName); + } + if (this._context.aliases.has(typeName)) { + return this._context.aliases.get(typeName).type; + } + return new Type(type.toString()); + } + // texture_sampler_types + let type = this._texture_sampler_types(); + if (type) { + return type; + } + if (this._check(TokenTypes.template_types)) { + let type = this._advance().toString(); + let format = null; + let access = null; + if (this._match(TokenTypes.tokens.less_than)) { + format = this._type_decl(); + access = null; + if (this._match(TokenTypes.tokens.comma)) { + access = this._consume(TokenTypes.access_mode, "Expected access_mode for pointer").toString(); + } + this._consume(TokenTypes.tokens.greater_than, "Expected '>' for type."); + } + return new TemplateType(type, format, access); + } + // pointer less_than storage_class comma type_decl (comma access_mode)? greater_than + if (this._match(TokenTypes.keywords.ptr)) { + let pointer = this._previous().toString(); + this._consume(TokenTypes.tokens.less_than, "Expected '<' for pointer."); + const storage = this._consume(TokenTypes.storage_class, "Expected storage_class for pointer"); + this._consume(TokenTypes.tokens.comma, "Expected ',' for pointer."); + const decl = this._type_decl(); + let access = null; + if (this._match(TokenTypes.tokens.comma)) { + access = this._consume(TokenTypes.access_mode, "Expected access_mode for pointer").toString(); + } + this._consume(TokenTypes.tokens.greater_than, "Expected '>' for pointer."); + return new PointerType(pointer, storage.toString(), decl, access); + } + // The following type_decl's have an optional attribyte_list* + const attrs = this._attribute(); + // attribute* array + // attribute* array less_than type_decl (comma element_count_expression)? greater_than + if (this._match(TokenTypes.keywords.array)) { + let format = null; + let countInt = -1; + const array = this._previous(); + let countNode = null; + if (this._match(TokenTypes.tokens.less_than)) { + format = this._type_decl(); + if (this._context.aliases.has(format.name)) { + format = this._context.aliases.get(format.name).type; + } + let count = ""; + if (this._match(TokenTypes.tokens.comma)) { + countNode = this._shift_expression(); + // If we can't evaluate the node, defer evaluating it until after the shader has + // finished being parsed, because const statements can be declared **after** they + // are used. + try { + count = countNode.evaluate(this._context).toString(); + countNode = null; + } + catch (e) { + count = "1"; + } + } + this._consume(TokenTypes.tokens.greater_than, "Expected '>' for array."); + countInt = count ? parseInt(count) : 0; + } + const arrayType = new ArrayType(array.toString(), attrs, format, countInt); + if (countNode) { + this._deferArrayCountEval.push({ arrayType, countNode }); + } + return arrayType; + } + return null; + } + _texture_sampler_types() { + // sampler_type + if (this._match(TokenTypes.sampler_type)) { + return new SamplerType(this._previous().toString(), null, null); + } + // depth_texture_type + if (this._match(TokenTypes.depth_texture_type)) { + return new SamplerType(this._previous().toString(), null, null); + } + // sampled_texture_type less_than type_decl greater_than + // multisampled_texture_type less_than type_decl greater_than + if (this._match(TokenTypes.sampled_texture_type) || + this._match(TokenTypes.multisampled_texture_type)) { + const sampler = this._previous(); + this._consume(TokenTypes.tokens.less_than, "Expected '<' for sampler type."); + const format = this._type_decl(); + this._consume(TokenTypes.tokens.greater_than, "Expected '>' for sampler type."); + return new SamplerType(sampler.toString(), format, null); + } + // storage_texture_type less_than texel_format comma access_mode greater_than + if (this._match(TokenTypes.storage_texture_type)) { + const sampler = this._previous(); + this._consume(TokenTypes.tokens.less_than, "Expected '<' for sampler type."); + const format = this._consume(TokenTypes.texel_format, "Invalid texel format.").toString(); + this._consume(TokenTypes.tokens.comma, "Expected ',' after texel format."); + const access = this._consume(TokenTypes.access_mode, "Expected access mode for storage texture type.").toString(); + this._consume(TokenTypes.tokens.greater_than, "Expected '>' for sampler type."); + return new SamplerType(sampler.toString(), format, access); + } + return null; + } + _attribute() { + // attr ident paren_left (literal_or_ident comma)* literal_or_ident paren_right + // attr ident + let attributes = []; + while (this._match(TokenTypes.tokens.attr)) { + const name = this._consume(TokenTypes.attribute_name, "Expected attribute name"); + const attr = new Attribute(name.toString(), null); + if (this._match(TokenTypes.tokens.paren_left)) { + // literal_or_ident + attr.value = this._consume(TokenTypes.literal_or_ident, "Expected attribute value").toString(); + if (this._check(TokenTypes.tokens.comma)) { + this._advance(); + do { + const v = this._consume(TokenTypes.literal_or_ident, "Expected attribute value").toString(); + if (!(attr.value instanceof Array)) { + attr.value = [attr.value]; + } + attr.value.push(v); + } while (this._match(TokenTypes.tokens.comma)); + } + this._consume(TokenTypes.tokens.paren_right, "Expected ')'"); + } + attributes.push(attr); + } + if (attributes.length == 0) { + return null; + } + return attributes; + } +} + +/** + * @author Brendan Duncan / https://github.com/brendan-duncan + */ +class TypeInfo { + constructor(name, attributes) { + this.name = name; + this.attributes = attributes; + this.size = 0; + } + get isArray() { + return false; + } + get isStruct() { + return false; + } + get isTemplate() { + return false; + } +} +class MemberInfo { + constructor(name, type, attributes) { + this.name = name; + this.type = type; + this.attributes = attributes; + this.offset = 0; + this.size = 0; + } + get isArray() { + return this.type.isArray; + } + get isStruct() { + return this.type.isStruct; + } + get isTemplate() { + return this.type.isTemplate; + } + get align() { + return this.type.isStruct ? this.type.align : 0; + } + get members() { + return this.type.isStruct ? this.type.members : null; + } + get format() { + return this.type.isArray + ? this.type.format + : this.type.isTemplate + ? this.type.format + : null; + } + get count() { + return this.type.isArray ? this.type.count : 0; + } + get stride() { + return this.type.isArray ? this.type.stride : this.size; + } +} +class StructInfo extends TypeInfo { + constructor(name, attributes) { + super(name, attributes); + this.members = []; + this.align = 0; + this.startLine = -1; + this.endLine = -1; + this.inUse = false; + } + get isStruct() { + return true; + } +} +class ArrayInfo extends TypeInfo { + constructor(name, attributes) { + super(name, attributes); + this.count = 0; + this.stride = 0; + } + get isArray() { + return true; + } +} +class TemplateInfo extends TypeInfo { + constructor(name, format, attributes, access) { + super(name, attributes); + this.format = format; + this.access = access; + } + get isTemplate() { + return true; + } +} +var ResourceType; +(function (ResourceType) { + ResourceType[ResourceType["Uniform"] = 0] = "Uniform"; + ResourceType[ResourceType["Storage"] = 1] = "Storage"; + ResourceType[ResourceType["Texture"] = 2] = "Texture"; + ResourceType[ResourceType["Sampler"] = 3] = "Sampler"; + ResourceType[ResourceType["StorageTexture"] = 4] = "StorageTexture"; +})(ResourceType || (ResourceType = {})); +class VariableInfo { + constructor(name, type, group, binding, attributes, resourceType, access) { + this.name = name; + this.type = type; + this.group = group; + this.binding = binding; + this.attributes = attributes; + this.resourceType = resourceType; + this.access = access; + } + get isArray() { + return this.type.isArray; + } + get isStruct() { + return this.type.isStruct; + } + get isTemplate() { + return this.type.isTemplate; + } + get size() { + return this.type.size; + } + get align() { + return this.type.isStruct ? this.type.align : 0; + } + get members() { + return this.type.isStruct ? this.type.members : null; + } + get format() { + return this.type.isArray + ? this.type.format + : this.type.isTemplate + ? this.type.format + : null; + } + get count() { + return this.type.isArray ? this.type.count : 0; + } + get stride() { + return this.type.isArray ? this.type.stride : this.size; + } +} +class AliasInfo { + constructor(name, type) { + this.name = name; + this.type = type; + } +} +class _TypeSize { + constructor(align, size) { + this.align = align; + this.size = size; + } +} +class InputInfo { + constructor(name, type, locationType, location) { + this.name = name; + this.type = type; + this.locationType = locationType; + this.location = location; + this.interpolation = null; + } +} +class OutputInfo { + constructor(name, type, locationType, location) { + this.name = name; + this.type = type; + this.locationType = locationType; + this.location = location; + } +} +class OverrideInfo { + constructor(name, type, attributes, id) { + this.name = name; + this.type = type; + this.attributes = attributes; + this.id = id; + } +} +class ArgumentInfo { + constructor(name, type) { + this.name = name; + this.type = type; + } +} +class FunctionInfo { + constructor(name, stage = null) { + this.stage = null; + this.inputs = []; + this.outputs = []; + this.arguments = []; + this.returnType = null; + this.resources = []; + this.overrides = []; + this.startLine = -1; + this.endLine = -1; + this.inUse = false; + this.calls = new Set(); + this.name = name; + this.stage = stage; + } +} +class EntryFunctions { + constructor() { + this.vertex = []; + this.fragment = []; + this.compute = []; + } +} +class _FunctionResources { + constructor(node) { + this.resources = null; + this.inUse = false; + this.info = null; + this.node = node; + } +} +class WgslReflect { + constructor(code) { + /// All top-level uniform vars in the shader. + this.uniforms = []; + /// All top-level storage vars in the shader. + this.storage = []; + /// All top-level texture vars in the shader; + this.textures = []; + // All top-level sampler vars in the shader. + this.samplers = []; + /// All top-level type aliases in the shader. + this.aliases = []; + /// All top-level overrides in the shader. + this.overrides = []; + /// All top-level structs in the shader. + this.structs = []; + /// All entry functions in the shader: vertex, fragment, and/or compute. + this.entry = new EntryFunctions(); + /// All functions in the shader, including entry functions. + this.functions = []; + this._types = new Map(); + this._functions = new Map(); + if (code) { + this.update(code); + } + } + _isStorageTexture(type) { + return (type.name == "texture_storage_1d" || + type.name == "texture_storage_2d" || + type.name == "texture_storage_2d_array" || + type.name == "texture_storage_3d"); + } + update(code) { + const parser = new WgslParser(); + const ast = parser.parse(code); + for (const node of ast) { + if (node instanceof Function) { + this._functions.set(node.name, new _FunctionResources(node)); + } + } + for (const node of ast) { + if (node instanceof Struct) { + const info = this._getTypeInfo(node, null); + if (info instanceof StructInfo) { + this.structs.push(info); + } + } + } + for (const node of ast) { + if (node instanceof Alias) { + this.aliases.push(this._getAliasInfo(node)); + continue; + } + if (node instanceof Override) { + const v = node; + const id = this._getAttributeNum(v.attributes, "id", 0); + const type = v.type != null ? this._getTypeInfo(v.type, v.attributes) : null; + this.overrides.push(new OverrideInfo(v.name, type, v.attributes, id)); + continue; + } + if (this._isUniformVar(node)) { + const v = node; + const g = this._getAttributeNum(v.attributes, "group", 0); + const b = this._getAttributeNum(v.attributes, "binding", 0); + const type = this._getTypeInfo(v.type, v.attributes); + const varInfo = new VariableInfo(v.name, type, g, b, v.attributes, ResourceType.Uniform, v.access); + this.uniforms.push(varInfo); + continue; + } + if (this._isStorageVar(node)) { + const v = node; + const g = this._getAttributeNum(v.attributes, "group", 0); + const b = this._getAttributeNum(v.attributes, "binding", 0); + const type = this._getTypeInfo(v.type, v.attributes); + const isStorageTexture = this._isStorageTexture(type); + const varInfo = new VariableInfo(v.name, type, g, b, v.attributes, isStorageTexture ? ResourceType.StorageTexture : ResourceType.Storage, v.access); + this.storage.push(varInfo); + continue; + } + if (this._isTextureVar(node)) { + const v = node; + const g = this._getAttributeNum(v.attributes, "group", 0); + const b = this._getAttributeNum(v.attributes, "binding", 0); + const type = this._getTypeInfo(v.type, v.attributes); + const isStorageTexture = this._isStorageTexture(type); + const varInfo = new VariableInfo(v.name, type, g, b, v.attributes, isStorageTexture ? ResourceType.StorageTexture : ResourceType.Texture, v.access); + if (isStorageTexture) { + this.storage.push(varInfo); + } + else { + this.textures.push(varInfo); + } + continue; + } + if (this._isSamplerVar(node)) { + const v = node; + const g = this._getAttributeNum(v.attributes, "group", 0); + const b = this._getAttributeNum(v.attributes, "binding", 0); + const type = this._getTypeInfo(v.type, v.attributes); + const varInfo = new VariableInfo(v.name, type, g, b, v.attributes, ResourceType.Sampler, v.access); + this.samplers.push(varInfo); + continue; + } + if (node instanceof Function) { + const vertexStage = this._getAttribute(node, "vertex"); + const fragmentStage = this._getAttribute(node, "fragment"); + const computeStage = this._getAttribute(node, "compute"); + const stage = vertexStage || fragmentStage || computeStage; + const fn = new FunctionInfo(node.name, stage === null || stage === void 0 ? void 0 : stage.name); + fn.startLine = node.startLine; + fn.endLine = node.endLine; + this.functions.push(fn); + this._functions.get(node.name).info = fn; + if (stage) { + this._functions.get(node.name).inUse = true; + fn.inUse = true; + fn.resources = this._findResources(node, !!stage); + fn.inputs = this._getInputs(node.args); + fn.outputs = this._getOutputs(node.returnType); + this.entry[stage.name].push(fn); + } + else { + fn.arguments = node.args.map((arg) => new ArgumentInfo(arg.name, this._getTypeInfo(arg.type, arg.attributes))); + fn.returnType = node.returnType + ? this._getTypeInfo(node.returnType, node.attributes) + : null; + } + continue; + } + } + for (const fn of this._functions.values()) { + if (fn.info) { + fn.info.inUse = fn.inUse; + this._addCalls(fn.node, fn.info.calls); + } + } + for (const fn of this._functions.values()) { + fn.node.search((node) => { + var _a; + if (node.astNodeType === "varExpr") { + const v = node; + for (const override of this.overrides) { + if (v.name == override.name) { + (_a = fn.info) === null || _a === void 0 ? void 0 : _a.overrides.push(override); + } + } + } + }); + } + for (const u of this.uniforms) { + this._markStructsInUse(u.type); + } + for (const s of this.storage) { + this._markStructsInUse(s.type); + } + } + _markStructsInUse(type) { + if (!type) { + return; + } + if (type.isStruct) { + type.inUse = true; + if (type.members) { + for (const m of type.members) { + this._markStructsInUse(m.type); + } + } + } + else if (type.isArray) { + this._markStructsInUse(type.format); + } + else if (type.isTemplate) { + if (type.format) { + this._markStructsInUse(type.format); + } + } + else { + const alias = this._getAlias(type.name); + if (alias) { + this._markStructsInUse(alias); + } + } + } + _addCalls(fn, calls) { + var _a; + for (const call of fn.calls) { + const info = (_a = this._functions.get(call.name)) === null || _a === void 0 ? void 0 : _a.info; + if (info) { + calls.add(info); + } + } + } + /// Find a resource by its group and binding. + findResource(group, binding) { + for (const u of this.uniforms) { + if (u.group == group && u.binding == binding) { + return u; + } + } + for (const s of this.storage) { + if (s.group == group && s.binding == binding) { + return s; + } + } + for (const t of this.textures) { + if (t.group == group && t.binding == binding) { + return t; + } + } + for (const s of this.samplers) { + if (s.group == group && s.binding == binding) { + return s; + } + } + return null; + } + _findResource(name) { + for (const u of this.uniforms) { + if (u.name == name) { + return u; + } + } + for (const s of this.storage) { + if (s.name == name) { + return s; + } + } + for (const t of this.textures) { + if (t.name == name) { + return t; + } + } + for (const s of this.samplers) { + if (s.name == name) { + return s; + } + } + return null; + } + _markStructsFromAST(type) { + const info = this._getTypeInfo(type, null); + this._markStructsInUse(info); + } + _findResources(fn, isEntry) { + const resources = []; + const self = this; + const varStack = []; + fn.search((node) => { + if (node instanceof _BlockStart) { + varStack.push({}); + } + else if (node instanceof _BlockEnd) { + varStack.pop(); + } + else if (node instanceof Var) { + const v = node; + if (isEntry && v.type !== null) { + this._markStructsFromAST(v.type); + } + if (varStack.length > 0) { + varStack[varStack.length - 1][v.name] = v; + } + } + else if (node instanceof CreateExpr) { + const c = node; + if (isEntry && c.type !== null) { + this._markStructsFromAST(c.type); + } + } + else if (node instanceof Let) { + const v = node; + if (isEntry && v.type !== null) { + this._markStructsFromAST(v.type); + } + if (varStack.length > 0) { + varStack[varStack.length - 1][v.name] = v; + } + } + else if (node instanceof VariableExpr) { + const v = node; + // Check to see if the variable is a local variable before checking to see if it's + // a resource. + if (varStack.length > 0) { + const varInfo = varStack[varStack.length - 1][v.name]; + if (varInfo) { + return; + } + } + const varInfo = self._findResource(v.name); + if (varInfo) { + resources.push(varInfo); + } + } + else if (node instanceof CallExpr) { + const c = node; + const callFn = self._functions.get(c.name); + if (callFn) { + if (isEntry) { + callFn.inUse = true; + } + fn.calls.add(callFn.node); + if (callFn.resources === null) { + callFn.resources = self._findResources(callFn.node, isEntry); + } + resources.push(...callFn.resources); + } + } + else if (node instanceof Call) { + const c = node; + const callFn = self._functions.get(c.name); + if (callFn) { + if (isEntry) { + callFn.inUse = true; + } + fn.calls.add(callFn.node); + if (callFn.resources === null) { + callFn.resources = self._findResources(callFn.node, isEntry); + } + resources.push(...callFn.resources); + } + } + }); + return [...new Map(resources.map(r => [r.name, r])).values()]; + } + getBindGroups() { + const groups = []; + function _makeRoom(group, binding) { + if (group >= groups.length) { + groups.length = group + 1; + } + if (groups[group] === undefined) { + groups[group] = []; + } + if (binding >= groups[group].length) { + groups[group].length = binding + 1; + } + } + for (const u of this.uniforms) { + _makeRoom(u.group, u.binding); + const group = groups[u.group]; + group[u.binding] = u; + } + for (const u of this.storage) { + _makeRoom(u.group, u.binding); + const group = groups[u.group]; + group[u.binding] = u; + } + for (const t of this.textures) { + _makeRoom(t.group, t.binding); + const group = groups[t.group]; + group[t.binding] = t; + } + for (const t of this.samplers) { + _makeRoom(t.group, t.binding); + const group = groups[t.group]; + group[t.binding] = t; + } + return groups; + } + _getOutputs(type, outputs = undefined) { + if (outputs === undefined) { + outputs = []; + } + if (type instanceof Struct) { + this._getStructOutputs(type, outputs); + } + else { + const output = this._getOutputInfo(type); + if (output !== null) { + outputs.push(output); + } + } + return outputs; + } + _getStructOutputs(struct, outputs) { + for (const m of struct.members) { + if (m.type instanceof Struct) { + this._getStructOutputs(m.type, outputs); + } + else { + const location = this._getAttribute(m, "location") || this._getAttribute(m, "builtin"); + if (location !== null) { + const typeInfo = this._getTypeInfo(m.type, m.type.attributes); + const locationValue = this._parseInt(location.value); + const info = new OutputInfo(m.name, typeInfo, location.name, locationValue); + outputs.push(info); + } + } + } + } + _getOutputInfo(type) { + const location = this._getAttribute(type, "location") || + this._getAttribute(type, "builtin"); + if (location !== null) { + const typeInfo = this._getTypeInfo(type, type.attributes); + const locationValue = this._parseInt(location.value); + const info = new OutputInfo("", typeInfo, location.name, locationValue); + return info; + } + return null; + } + _getInputs(args, inputs = undefined) { + if (inputs === undefined) { + inputs = []; + } + for (const arg of args) { + if (arg.type instanceof Struct) { + this._getStructInputs(arg.type, inputs); + } + else { + const input = this._getInputInfo(arg); + if (input !== null) { + inputs.push(input); + } + } + } + return inputs; + } + _getStructInputs(struct, inputs) { + for (const m of struct.members) { + if (m.type instanceof Struct) { + this._getStructInputs(m.type, inputs); + } + else { + const input = this._getInputInfo(m); + if (input !== null) { + inputs.push(input); + } + } + } + } + _getInputInfo(node) { + const location = this._getAttribute(node, "location") || + this._getAttribute(node, "builtin"); + if (location !== null) { + const interpolation = this._getAttribute(node, "interpolation"); + const type = this._getTypeInfo(node.type, node.attributes); + const locationValue = this._parseInt(location.value); + const info = new InputInfo(node.name, type, location.name, locationValue); + if (interpolation !== null) { + info.interpolation = this._parseString(interpolation.value); + } + return info; + } + return null; + } + _parseString(s) { + if (s instanceof Array) { + s = s[0]; + } + return s; + } + _parseInt(s) { + if (s instanceof Array) { + s = s[0]; + } + const n = parseInt(s); + return isNaN(n) ? s : n; + } + _getAlias(name) { + for (const a of this.aliases) { + if (a.name == name) { + return a.type; + } + } + return null; + } + _getAliasInfo(node) { + return new AliasInfo(node.name, this._getTypeInfo(node.type, null)); + } + _getTypeInfo(type, attributes) { + if (this._types.has(type)) { + return this._types.get(type); + } + if (type instanceof ArrayType) { + const a = type; + const t = a.format ? this._getTypeInfo(a.format, a.attributes) : null; + const info = new ArrayInfo(a.name, attributes); + info.format = t; + info.count = a.count; + this._types.set(type, info); + this._updateTypeInfo(info); + return info; + } + if (type instanceof Struct) { + const s = type; + const info = new StructInfo(s.name, attributes); + info.startLine = s.startLine; + info.endLine = s.endLine; + for (const m of s.members) { + const t = this._getTypeInfo(m.type, m.attributes); + info.members.push(new MemberInfo(m.name, t, m.attributes)); + } + this._types.set(type, info); + this._updateTypeInfo(info); + return info; + } + if (type instanceof SamplerType) { + const s = type; + const formatIsType = s.format instanceof Type; + const format = s.format + ? formatIsType + ? this._getTypeInfo(s.format, null) + : new TypeInfo(s.format, null) + : null; + const info = new TemplateInfo(s.name, format, attributes, s.access); + this._types.set(type, info); + this._updateTypeInfo(info); + return info; + } + if (type instanceof TemplateType) { + const t = type; + const format = t.format ? this._getTypeInfo(t.format, null) : null; + const info = new TemplateInfo(t.name, format, attributes, t.access); + this._types.set(type, info); + this._updateTypeInfo(info); + return info; + } + const info = new TypeInfo(type.name, attributes); + this._types.set(type, info); + this._updateTypeInfo(info); + return info; + } + _updateTypeInfo(type) { + var _a, _b; + const typeSize = this._getTypeSize(type); + type.size = (_a = typeSize === null || typeSize === void 0 ? void 0 : typeSize.size) !== null && _a !== void 0 ? _a : 0; + if (type instanceof ArrayInfo) { + if (type["format"]) { + const formatInfo = this._getTypeSize(type["format"]); + type.stride = (_b = formatInfo === null || formatInfo === void 0 ? void 0 : formatInfo.size) !== null && _b !== void 0 ? _b : 0; + this._updateTypeInfo(type["format"]); + } + } + if (type instanceof StructInfo) { + this._updateStructInfo(type); + } + } + _updateStructInfo(struct) { + var _a; + let offset = 0; + let lastSize = 0; + let lastOffset = 0; + let structAlign = 0; + for (let mi = 0, ml = struct.members.length; mi < ml; ++mi) { + const member = struct.members[mi]; + const sizeInfo = this._getTypeSize(member); + if (!sizeInfo) { + continue; + } + (_a = this._getAlias(member.type.name)) !== null && _a !== void 0 ? _a : member.type; + const align = sizeInfo.align; + const size = sizeInfo.size; + offset = this._roundUp(align, offset + lastSize); + lastSize = size; + lastOffset = offset; + structAlign = Math.max(structAlign, align); + member.offset = offset; + member.size = size; + this._updateTypeInfo(member.type); + } + struct.size = this._roundUp(structAlign, lastOffset + lastSize); + struct.align = structAlign; + } + _getTypeSize(type) { + var _a, _b; + if (type === null || type === undefined) { + return null; + } + const explicitSize = this._getAttributeNum(type.attributes, "size", 0); + const explicitAlign = this._getAttributeNum(type.attributes, "align", 0); + if (type instanceof MemberInfo) { + type = type.type; + } + if (type instanceof TypeInfo) { + const alias = this._getAlias(type.name); + if (alias !== null) { + type = alias; + } + } + { + const info = WgslReflect._typeInfo[type.name]; + if (info !== undefined) { + const divisor = ((_a = type["format"]) === null || _a === void 0 ? void 0 : _a.name) === "f16" ? 2 : 1; + return new _TypeSize(Math.max(explicitAlign, info.align / divisor), Math.max(explicitSize, info.size / divisor)); + } + } + { + const info = WgslReflect._typeInfo[type.name.substring(0, type.name.length - 1)]; + if (info) { + const divisor = type.name[type.name.length - 1] === "h" ? 2 : 1; + return new _TypeSize(Math.max(explicitAlign, info.align / divisor), Math.max(explicitSize, info.size / divisor)); + } + } + if (type instanceof ArrayInfo) { + let arrayType = type; + let align = 8; + let size = 8; + // Type AlignOf(T) Sizeof(T) + // array AlignOf(E) N * roundUp(AlignOf(E), SizeOf(E)) + // array AlignOf(E) N * roundUp(AlignOf(E), SizeOf(E)) (N determined at runtime) + // + // @stride(Q) + // array AlignOf(E) N * Q + // + // @stride(Q) + // array AlignOf(E) Nruntime * Q + //const E = type.format.name; + const E = this._getTypeSize(arrayType.format); + if (E !== null) { + size = E.size; + align = E.align; + } + const N = arrayType.count; + const stride = this._getAttributeNum((_b = type === null || type === void 0 ? void 0 : type.attributes) !== null && _b !== void 0 ? _b : null, "stride", this._roundUp(align, size)); + size = N * stride; + if (explicitSize) { + size = explicitSize; + } + return new _TypeSize(Math.max(explicitAlign, align), Math.max(explicitSize, size)); + } + if (type instanceof StructInfo) { + let align = 0; + let size = 0; + // struct S AlignOf: max(AlignOfMember(S, M1), ... , AlignOfMember(S, MN)) + // SizeOf: roundUp(AlignOf(S), OffsetOfMember(S, L) + SizeOfMember(S, L)) + // Where L is the last member of the structure + let offset = 0; + let lastSize = 0; + let lastOffset = 0; + for (const m of type.members) { + const mi = this._getTypeSize(m.type); + if (mi !== null) { + align = Math.max(mi.align, align); + offset = this._roundUp(mi.align, offset + lastSize); + lastSize = mi.size; + lastOffset = offset; + } + } + size = this._roundUp(align, lastOffset + lastSize); + return new _TypeSize(Math.max(explicitAlign, align), Math.max(explicitSize, size)); + } + return null; + } + _isUniformVar(node) { + return node instanceof Var && node.storage == "uniform"; + } + _isStorageVar(node) { + return node instanceof Var && node.storage == "storage"; + } + _isTextureVar(node) { + return (node instanceof Var && + node.type !== null && + WgslReflect._textureTypes.indexOf(node.type.name) != -1); + } + _isSamplerVar(node) { + return (node instanceof Var && + node.type !== null && + WgslReflect._samplerTypes.indexOf(node.type.name) != -1); + } + _getAttribute(node, name) { + const obj = node; + if (!obj || !obj["attributes"]) { + return null; + } + const attrs = obj["attributes"]; + for (let a of attrs) { + if (a.name == name) { + return a; + } + } + return null; + } + _getAttributeNum(attributes, name, defaultValue) { + if (attributes === null) { + return defaultValue; + } + for (let a of attributes) { + if (a.name == name) { + let v = a !== null && a.value !== null ? a.value : defaultValue; + if (v instanceof Array) { + v = v[0]; + } + if (typeof v === "number") { + return v; + } + if (typeof v === "string") { + return parseInt(v); + } + return defaultValue; + } + } + return defaultValue; + } + _roundUp(k, n) { + return Math.ceil(n / k) * k; + } +} +// Type AlignOf(T) Sizeof(T) +// i32, u32, or f32 4 4 +// atomic 4 4 +// vec2 8 8 +// vec3 16 12 +// vec4 16 16 +// mat2x2 8 16 +// mat3x2 8 24 +// mat4x2 8 32 +// mat2x3 16 32 +// mat3x3 16 48 +// mat4x3 16 64 +// mat2x4 16 32 +// mat3x4 16 48 +// mat4x4 16 64 +WgslReflect._typeInfo = { + f16: { align: 2, size: 2 }, + i32: { align: 4, size: 4 }, + u32: { align: 4, size: 4 }, + f32: { align: 4, size: 4 }, + atomic: { align: 4, size: 4 }, + vec2: { align: 8, size: 8 }, + vec3: { align: 16, size: 12 }, + vec4: { align: 16, size: 16 }, + mat2x2: { align: 8, size: 16 }, + mat3x2: { align: 8, size: 24 }, + mat4x2: { align: 8, size: 32 }, + mat2x3: { align: 16, size: 32 }, + mat3x3: { align: 16, size: 48 }, + mat4x3: { align: 16, size: 64 }, + mat2x4: { align: 16, size: 32 }, + mat3x4: { align: 16, size: 48 }, + mat4x4: { align: 16, size: 64 }, +}; +WgslReflect._textureTypes = TokenTypes.any_texture_type.map((t) => { + return t.name; +}); +WgslReflect._samplerTypes = TokenTypes.sampler_type.map((t) => { + return t.name; +}); + +export { Alias, AliasInfo, Argument, ArgumentInfo, ArrayIndex, ArrayInfo, ArrayType, Assign, AssignOperator, Attribute, BinaryOperator, BitcastExpr, Break, Call, CallExpr, Case, Const, ConstExpr, Continue, Continuing, CreateExpr, Default, Diagnostic, Discard, ElseIf, Enable, EntryFunctions, Expression, For, Function, FunctionInfo, GroupingExpr, If, Increment, IncrementOperator, InputInfo, Let, LiteralExpr, Loop, Member, MemberInfo, Node, Operator, OutputInfo, Override, OverrideInfo, ParseContext, PointerType, Requires, ResourceType, Return, SamplerType, Statement, StaticAssert, StringExpr, Struct, StructInfo, Switch, SwitchCase, TemplateInfo, TemplateType, Token, TokenClass, TokenType, TokenTypes, Type, TypeInfo, TypecastExpr, UnaryOperator, Var, VariableExpr, VariableInfo, WgslParser, WgslReflect, WgslScanner, While, _BlockEnd, _BlockStart }; +//# sourceMappingURL=wgsl_reflect.debug.js.map diff --git a/wgsl_reflect.debug.js.map b/wgsl_reflect.debug.js.map new file mode 100644 index 0000000..0e3cbcb --- /dev/null +++ b/wgsl_reflect.debug.js.map @@ -0,0 +1 @@ +{"version":3,"file":"wgsl_reflect.debug.js","sources":["src/wgsl_ast.ts","src/wgsl_scanner.ts","src/wgsl_parser.ts","src/wgsl_reflect.ts"],"sourcesContent":["export class ParseContext {\r\n constants: Map = new Map();\r\n aliases: Map = new Map();\r\n structs: Map = new Map();\r\n}\r\n\r\n/**\r\n * @class Node\r\n * @category AST\r\n * Base class for AST nodes parsed from a WGSL shader.\r\n */\r\nexport class Node {\r\n constructor() {}\r\n\r\n get isAstNode(): boolean {\r\n return true;\r\n }\r\n\r\n get astNodeType(): string {\r\n return \"\";\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n throw new Error(\"Cannot evaluate node\");\r\n }\r\n\r\n evaluateString(context: ParseContext): string {\r\n return this.evaluate(context).toString();\r\n }\r\n\r\n search(callback: (node: Node) => void) {}\r\n\r\n searchBlock(block: Array | null, callback: (node: Node) => void) {\r\n if (block) {\r\n callback(_BlockStart.instance);\r\n for (const node of block) {\r\n if (node instanceof Array) {\r\n this.searchBlock(node as Array, callback);\r\n } else {\r\n node.search(callback);\r\n }\r\n }\r\n callback(_BlockEnd.instance);\r\n }\r\n }\r\n}\r\n\r\n// For internal use only\r\nexport class _BlockStart extends Node {\r\n static instance = new _BlockStart();\r\n}\r\n\r\n // For internal use only\r\nexport class _BlockEnd extends Node { \r\n static instance = new _BlockEnd();\r\n}\r\n\r\n/**\r\n * @class Statement\r\n * @extends Node\r\n * @category AST\r\n */\r\nexport class Statement extends Node {\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/**\r\n * @class Function\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Function extends Statement {\r\n name: string;\r\n args: Array;\r\n returnType: Type | null;\r\n body: Array;\r\n attributes: Array | null;\r\n startLine: number;\r\n endLine: number;\r\n calls: Set = new Set();\r\n\r\n constructor(\r\n name: string,\r\n args: Array,\r\n returnType: Type | null,\r\n body: Array,\r\n startLine: number,\r\n endLine: number\r\n ) {\r\n super();\r\n this.name = name;\r\n this.args = args;\r\n this.returnType = returnType;\r\n this.body = body;\r\n this.startLine = startLine;\r\n this.endLine = endLine;\r\n }\r\n\r\n get astNodeType(): string {\r\n return \"function\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.searchBlock(this.body, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class StaticAssert\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class StaticAssert extends Statement {\r\n expression: Expression;\r\n\r\n constructor(expression: Expression) {\r\n super();\r\n this.expression = expression;\r\n }\r\n\r\n get astNodeType() {\r\n return \"staticAssert\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.expression.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class While\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class While extends Statement {\r\n condition: Expression;\r\n body: Array;\r\n\r\n constructor(condition: Expression, body: Array) {\r\n super();\r\n this.condition = condition;\r\n this.body = body;\r\n }\r\n\r\n get astNodeType() {\r\n return \"while\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.condition.search(callback);\r\n this.searchBlock(this.body, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Continuing\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Continuing extends Statement {\r\n body: Array;\r\n\r\n constructor(body: Array) {\r\n super();\r\n this.body = body;\r\n }\r\n\r\n get astNodeType() {\r\n return \"continuing\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.searchBlock(this.body, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class For\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class For extends Statement {\r\n init: Statement | null;\r\n condition: Expression | null;\r\n increment: Statement | null;\r\n body: Array;\r\n\r\n constructor(\r\n init: Statement | null,\r\n condition: Expression | null,\r\n increment: Statement | null,\r\n body: Array\r\n ) {\r\n super();\r\n this.init = init;\r\n this.condition = condition;\r\n this.increment = increment;\r\n this.body = body;\r\n }\r\n\r\n get astNodeType() {\r\n return \"for\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.init?.search(callback);\r\n this.condition?.search(callback);\r\n this.increment?.search(callback);\r\n this.searchBlock(this.body, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Var\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Var extends Statement {\r\n name: string;\r\n type: Type | null;\r\n storage: string | null;\r\n access: string | null;\r\n value: Expression | null;\r\n attributes: Array | null;\r\n\r\n constructor(\r\n name: string,\r\n type: Type | null,\r\n storage: string | null,\r\n access: string | null,\r\n value: Expression | null\r\n ) {\r\n super();\r\n this.name = name;\r\n this.type = type;\r\n this.storage = storage;\r\n this.access = access;\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"var\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n callback(this);\r\n this.value?.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Override\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Override extends Statement {\r\n name: string;\r\n type: Type | null;\r\n value: Expression | null;\r\n attributes: Array | null;\r\n\r\n constructor(name: string, type: Type | null, value: Expression | null) {\r\n super();\r\n this.name = name;\r\n this.type = type;\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"override\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.value?.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Let\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Let extends Statement {\r\n name: string;\r\n type: Type | null;\r\n storage: string | null;\r\n access: string | null;\r\n value: Expression | null;\r\n attributes: Array | null;\r\n\r\n constructor(\r\n name: string,\r\n type: Type | null,\r\n storage: string | null,\r\n access: string | null,\r\n value: Expression | null\r\n ) {\r\n super();\r\n this.name = name;\r\n this.type = type;\r\n this.storage = storage;\r\n this.access = access;\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"let\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n callback(this);\r\n this.value?.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Const\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Const extends Statement {\r\n name: string;\r\n type: Type | null;\r\n storage: string | null;\r\n access: string | null;\r\n value: Expression;\r\n attributes: Array | null;\r\n\r\n constructor(\r\n name: string,\r\n type: Type | null,\r\n storage: string | null,\r\n access: string | null,\r\n value: Expression\r\n ) {\r\n super();\r\n this.name = name;\r\n this.type = type;\r\n this.storage = storage;\r\n this.access = access;\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"const\";\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n return this.value.evaluate(context);\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n callback(this);\r\n this.value?.search(callback);\r\n }\r\n}\r\n\r\nexport enum IncrementOperator {\r\n increment = \"++\",\r\n decrement = \"--\",\r\n}\r\n\r\nexport namespace IncrementOperator {\r\n export function parse(val: string): IncrementOperator {\r\n const key = val as keyof typeof IncrementOperator;\r\n if (key == \"parse\") throw new Error(\"Invalid value for IncrementOperator\");\r\n return IncrementOperator[key];\r\n }\r\n}\r\n\r\n/**\r\n * @class Increment\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Increment extends Statement {\r\n operator: IncrementOperator;\r\n variable: Expression;\r\n\r\n constructor(operator: IncrementOperator, variable: Expression) {\r\n super();\r\n this.operator = operator;\r\n this.variable = variable;\r\n }\r\n\r\n get astNodeType() {\r\n return \"increment\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.variable.search(callback);\r\n }\r\n}\r\n\r\nexport enum AssignOperator {\r\n assign = \"=\",\r\n addAssign = \"+=\",\r\n subtractAssin = \"-=\",\r\n multiplyAssign = \"*=\",\r\n divideAssign = \"/=\",\r\n moduloAssign = \"%=\",\r\n andAssign = \"&=\",\r\n orAssign = \"|=\",\r\n xorAssign = \"^=\",\r\n shiftLeftAssign = \"<<=\",\r\n shiftRightAssign = \">>=\",\r\n}\r\n\r\nexport namespace AssignOperator {\r\n export function parse(val: string): AssignOperator {\r\n const key = val as keyof typeof AssignOperator;\r\n if (key == \"parse\") {\r\n throw new Error(\"Invalid value for AssignOperator\");\r\n }\r\n //return AssignOperator[key];\r\n return key as AssignOperator;\r\n }\r\n}\r\n\r\n/**\r\n * @class Assign\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Assign extends Statement {\r\n operator: AssignOperator;\r\n variable: Expression;\r\n value: Expression;\r\n\r\n constructor(\r\n operator: AssignOperator,\r\n variable: Expression,\r\n value: Expression\r\n ) {\r\n super();\r\n this.operator = operator;\r\n this.variable = variable;\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"assign\";\r\n }\r\n\r\n search(callback: (node: Node) => void): void {\r\n this.variable.search(callback);\r\n this.value.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Call\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Call extends Statement {\r\n name: string;\r\n args: Array;\r\n\r\n constructor(name: string, args: Array) {\r\n super();\r\n this.name = name;\r\n this.args = args;\r\n }\r\n\r\n get astNodeType() {\r\n return \"call\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n for (const node of this.args) {\r\n node.search(callback);\r\n }\r\n callback(this);\r\n }\r\n}\r\n\r\n/**\r\n * @class Loop\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Loop extends Statement {\r\n body: Array;\r\n continuing: Array | null;\r\n\r\n constructor(body: Array, continuing: Array | null) {\r\n super();\r\n this.body = body;\r\n this.continuing = continuing;\r\n }\r\n\r\n get astNodeType() {\r\n return \"loop\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Switch\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Switch extends Statement {\r\n condition: Expression;\r\n body: Array;\r\n\r\n constructor(condition: Expression, body: Array) {\r\n super();\r\n this.condition = condition;\r\n this.body = body;\r\n }\r\n\r\n get astNodeType() {\r\n return \"body\";\r\n }\r\n}\r\n\r\n/**\r\n * @class If\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class If extends Statement {\r\n condition: Expression;\r\n body: Array;\r\n elseif: Array | null;\r\n else: Array | null;\r\n\r\n constructor(\r\n condition: Expression,\r\n body: Array,\r\n elseif: Array | null,\r\n _else: Array | null\r\n ) {\r\n super();\r\n this.condition = condition;\r\n this.body = body;\r\n this.elseif = elseif;\r\n this.else = _else;\r\n }\r\n\r\n get astNodeType() {\r\n return \"if\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.condition.search(callback);\r\n this.searchBlock(this.body, callback);\r\n this.searchBlock(this.elseif, callback);\r\n this.searchBlock(this.else, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Return\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Return extends Statement {\r\n value: Expression;\r\n\r\n constructor(value: Expression) {\r\n super();\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"return\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.value?.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Enable\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Enable extends Statement {\r\n name: string;\r\n\r\n constructor(name: string) {\r\n super();\r\n this.name = name;\r\n }\r\n\r\n get astNodeType() {\r\n return \"enable\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Requires\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Requires extends Statement {\r\n extensions: string[];\r\n\r\n constructor(extensions: string[]) {\r\n super();\r\n this.extensions = extensions;\r\n }\r\n\r\n get astNodeType() {\r\n return \"requires\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Diagnostic\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Diagnostic extends Statement {\r\n severity: string;\r\n rule: string;\r\n\r\n constructor(severity: string, rule: string) {\r\n super();\r\n this.severity = severity;\r\n this.rule = rule;\r\n }\r\n\r\n get astNodeType() {\r\n return \"diagnostic\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Alias\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Alias extends Statement {\r\n name: string;\r\n type: Type;\r\n\r\n constructor(name: string, type: Type) {\r\n super();\r\n this.name = name;\r\n this.type = type;\r\n }\r\n\r\n get astNodeType() {\r\n return \"alias\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Discard\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Discard extends Statement {\r\n constructor() {\r\n super();\r\n }\r\n\r\n get astNodeType() {\r\n return \"discard\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Break\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Break extends Statement {\r\n constructor() {\r\n super();\r\n }\r\n\r\n get astNodeType() {\r\n return \"break\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Continue\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Continue extends Statement {\r\n constructor() {\r\n super();\r\n }\r\n\r\n get astNodeType() {\r\n return \"continue\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Type\r\n * @extends Statement\r\n * @category AST\r\n */\r\nexport class Type extends Statement {\r\n name: string;\r\n attributes: Array | null;\r\n\r\n constructor(name: string) {\r\n super();\r\n this.name = name;\r\n }\r\n\r\n get astNodeType() {\r\n return \"type\";\r\n }\r\n\r\n get isStruct(): boolean {\r\n return false;\r\n }\r\n\r\n get isArray(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * @class StructType\r\n * @extends Type\r\n * @category AST\r\n */\r\nexport class Struct extends Type {\r\n members: Array;\r\n startLine: number;\r\n endLine: number;\r\n\r\n constructor(name: string, members: Array, startLine: number, endLine: number) {\r\n super(name);\r\n this.members = members;\r\n this.startLine = startLine;\r\n this.endLine = endLine;\r\n }\r\n\r\n get astNodeType() {\r\n return \"struct\";\r\n }\r\n\r\n get isStruct(): boolean {\r\n return true;\r\n }\r\n\r\n /// Return the index of the member with the given name, or -1 if not found.\r\n getMemberIndex(name: string): number {\r\n for (let i = 0; i < this.members.length; i++) {\r\n if (this.members[i].name == name) return i;\r\n }\r\n return -1;\r\n }\r\n}\r\n\r\n/**\r\n * @class TemplateType\r\n * @extends Type\r\n * @category AST\r\n */\r\nexport class TemplateType extends Type {\r\n format: Type | null;\r\n access: string | null;\r\n\r\n constructor(name: string, format: Type | null, access: string | null) {\r\n super(name);\r\n this.format = format;\r\n this.access = access;\r\n }\r\n\r\n get astNodeType() {\r\n return \"template\";\r\n }\r\n}\r\n\r\n/**\r\n * @class PointerType\r\n * @extends Type\r\n * @category AST\r\n */\r\nexport class PointerType extends Type {\r\n storage: string;\r\n type: Type | null;\r\n access: string | null;\r\n\r\n constructor(\r\n name: string,\r\n storage: string,\r\n type: Type | null,\r\n access: string | null\r\n ) {\r\n super(name);\r\n this.storage = storage;\r\n this.type = type;\r\n this.access = access;\r\n }\r\n\r\n get astNodeType() {\r\n return \"pointer\";\r\n }\r\n}\r\n\r\n/**\r\n * @class ArrayType\r\n * @extends Type\r\n * @category AST\r\n */\r\nexport class ArrayType extends Type {\r\n attributes: Array | null;\r\n format: Type | null;\r\n count: number;\r\n\r\n constructor(\r\n name: string,\r\n attributes: Array | null,\r\n format: Type | null,\r\n count: number\r\n ) {\r\n super(name);\r\n this.attributes = attributes;\r\n this.format = format;\r\n this.count = count;\r\n }\r\n\r\n get astNodeType() {\r\n return \"array\";\r\n }\r\n\r\n get isArray(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * @class SamplerType\r\n * @extends Type\r\n * @category AST\r\n */\r\nexport class SamplerType extends Type {\r\n format: Type | string | null;\r\n access: string | null;\r\n\r\n constructor(\r\n name: string,\r\n format: Type | string | null,\r\n access: string | null\r\n ) {\r\n super(name);\r\n this.format = format;\r\n this.access = access;\r\n }\r\n\r\n get astNodeType() {\r\n return \"sampler\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Expression\r\n * @extends Node\r\n * @category AST\r\n */\r\nexport class Expression extends Node {\r\n postfix: Expression | null;\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/**\r\n * @class StringExpr\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class StringExpr extends Expression {\r\n value: string;\r\n\r\n constructor(value: string) {\r\n super();\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"stringExpr\";\r\n }\r\n\r\n toString(): string {\r\n return this.value;\r\n }\r\n\r\n evaluateString(): string {\r\n return this.value;\r\n }\r\n}\r\n\r\n/**\r\n * @class CreateExpr\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class CreateExpr extends Expression {\r\n type: Type | null;\r\n args: Array | null;\r\n\r\n constructor(type: Type | null, args: Array | null) {\r\n super();\r\n this.type = type;\r\n this.args = args;\r\n }\r\n\r\n get astNodeType() {\r\n return \"createExpr\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n callback(this);\r\n if (this.args) {\r\n for (const node of this.args) {\r\n node.search(callback);\r\n }\r\n }\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n return this.args[0].evaluate(context);\r\n }\r\n}\r\n\r\n/**\r\n * @class CallExpr\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class CallExpr extends Expression {\r\n name: string;\r\n args: Array | null;\r\n\r\n constructor(name: string, args: Array | null) {\r\n super();\r\n this.name = name;\r\n this.args = args;\r\n }\r\n\r\n get astNodeType() {\r\n return \"callExpr\";\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n switch (this.name) {\r\n case \"abs\":\r\n return Math.abs(this.args[0].evaluate(context));\r\n case \"acos\":\r\n return Math.acos(this.args[0].evaluate(context));\r\n case \"acosh\":\r\n return Math.acosh(this.args[0].evaluate(context));\r\n case \"asin\":\r\n return Math.asin(this.args[0].evaluate(context));\r\n case \"asinh\":\r\n return Math.asinh(this.args[0].evaluate(context));\r\n case \"atan\":\r\n return Math.atan(this.args[0].evaluate(context));\r\n case \"atan2\":\r\n return Math.atan2(\r\n this.args[0].evaluate(context),\r\n this.args[1].evaluate(context)\r\n );\r\n case \"atanh\":\r\n return Math.atanh(this.args[0].evaluate(context));\r\n case \"ceil\":\r\n return Math.ceil(this.args[0].evaluate(context));\r\n case \"clamp\":\r\n return Math.min(\r\n Math.max(\r\n this.args[0].evaluate(context),\r\n this.args[1].evaluate(context)\r\n ),\r\n this.args[2].evaluate(context)\r\n );\r\n case \"cos\":\r\n return Math.cos(this.args[0].evaluate(context));\r\n //case \"cross\":\r\n //TODO: (x[i] * y[j] - x[j] * y[i])\r\n case \"degrees\":\r\n return (this.args[0].evaluate(context) * 180) / Math.PI;\r\n //case \"determinant\":\r\n //TODO implement\r\n case \"distance\":\r\n return Math.sqrt(\r\n Math.pow(\r\n this.args[0].evaluate(context) - this.args[1].evaluate(context),\r\n 2\r\n )\r\n );\r\n case \"dot\":\r\n //TODO: (x[i] * y[i])\r\n case \"exp\":\r\n return Math.exp(this.args[0].evaluate(context));\r\n case \"exp2\":\r\n return Math.pow(2, this.args[0].evaluate(context));\r\n //case \"extractBits\":\r\n //TODO: implement\r\n //case \"firstLeadingBit\":\r\n //TODO: implement\r\n case \"floor\":\r\n return Math.floor(this.args[0].evaluate(context));\r\n case \"fma\":\r\n return (\r\n this.args[0].evaluate(context) * this.args[1].evaluate(context) +\r\n this.args[2].evaluate(context)\r\n );\r\n case \"fract\":\r\n return (\r\n this.args[0].evaluate(context) -\r\n Math.floor(this.args[0].evaluate(context))\r\n );\r\n //case \"frexp\":\r\n //TODO: implement\r\n case \"inverseSqrt\":\r\n return 1 / Math.sqrt(this.args[0].evaluate(context));\r\n //case \"length\":\r\n //TODO: implement\r\n case \"log\":\r\n return Math.log(this.args[0].evaluate(context));\r\n case \"log2\":\r\n return Math.log2(this.args[0].evaluate(context));\r\n case \"max\":\r\n return Math.max(\r\n this.args[0].evaluate(context),\r\n this.args[1].evaluate(context)\r\n );\r\n case \"min\":\r\n return Math.min(\r\n this.args[0].evaluate(context),\r\n this.args[1].evaluate(context)\r\n );\r\n case \"mix\":\r\n return (\r\n this.args[0].evaluate(context) *\r\n (1 - this.args[2].evaluate(context)) +\r\n this.args[1].evaluate(context) * this.args[2].evaluate(context)\r\n );\r\n case \"modf\":\r\n return (\r\n this.args[0].evaluate(context) -\r\n Math.floor(this.args[0].evaluate(context))\r\n );\r\n case \"pow\":\r\n return Math.pow(\r\n this.args[0].evaluate(context),\r\n this.args[1].evaluate(context)\r\n );\r\n case \"radians\":\r\n return (this.args[0].evaluate(context) * Math.PI) / 180;\r\n case \"round\":\r\n return Math.round(this.args[0].evaluate(context));\r\n case \"sign\":\r\n return Math.sign(this.args[0].evaluate(context));\r\n case \"sin\":\r\n return Math.sin(this.args[0].evaluate(context));\r\n case \"sinh\":\r\n return Math.sinh(this.args[0].evaluate(context));\r\n case \"saturate\":\r\n return Math.min(Math.max(this.args[0].evaluate(context), 0), 1);\r\n case \"smoothstep\":\r\n return (\r\n this.args[0].evaluate(context) *\r\n this.args[0].evaluate(context) *\r\n (3 - 2 * this.args[0].evaluate(context))\r\n );\r\n case \"sqrt\":\r\n return Math.sqrt(this.args[0].evaluate(context));\r\n case \"step\":\r\n return this.args[0].evaluate(context) < this.args[1].evaluate(context)\r\n ? 0\r\n : 1;\r\n case \"tan\":\r\n return Math.tan(this.args[0].evaluate(context));\r\n case \"tanh\":\r\n return Math.tanh(this.args[0].evaluate(context));\r\n case \"trunc\":\r\n return Math.trunc(this.args[0].evaluate(context));\r\n default:\r\n throw new Error(\"Non const function: \" + this.name);\r\n }\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n for (const node of this.args) {\r\n node.search(callback);\r\n }\r\n callback(this);\r\n }\r\n}\r\n\r\n/**\r\n * @class VariableExpr\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class VariableExpr extends Expression {\r\n name: string;\r\n\r\n constructor(name: string) {\r\n super();\r\n this.name = name;\r\n }\r\n\r\n get astNodeType() {\r\n return \"varExpr\";\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n callback(this);\r\n if (this.postfix) {\r\n this.postfix.search(callback);\r\n }\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n const constant = context.constants.get(this.name);\r\n if (!constant) {\r\n throw new Error(\"Cannot evaluate node\");\r\n }\r\n return constant.evaluate(context);\r\n }\r\n}\r\n\r\n/**\r\n * @class ConstExpr\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class ConstExpr extends Expression {\r\n name: string;\r\n initializer: Expression;\r\n\r\n constructor(name: string, initializer: Expression) {\r\n super();\r\n this.name = name;\r\n this.initializer = initializer;\r\n }\r\n\r\n get astNodeType() {\r\n return \"constExpr\";\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n if (this.initializer instanceof CreateExpr) {\r\n // This is a struct constant\r\n const property = this.postfix?.evaluateString(context);\r\n const type = this.initializer.type?.name;\r\n const struct = context.structs.get(type);\r\n const memberIndex = struct?.getMemberIndex(property);\r\n if (memberIndex !== undefined && memberIndex != -1) {\r\n const value = this.initializer.args[memberIndex].evaluate(context);\r\n return value;\r\n } else {\r\n return this.initializer.evaluate(context);\r\n }\r\n console.log(memberIndex);\r\n }\r\n\r\n return this.initializer.evaluate(context);\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.initializer.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class LiteralExpr\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class LiteralExpr extends Expression {\r\n value: number;\r\n\r\n constructor(value: number) {\r\n super();\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"literalExpr\";\r\n }\r\n\r\n evaluate(): number {\r\n return this.value;\r\n }\r\n}\r\n\r\n/**\r\n * @class BitcastExpr\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class BitcastExpr extends Expression {\r\n type: Type | null;\r\n value: Expression;\r\n\r\n constructor(type: Type | null, value: Expression) {\r\n super();\r\n this.type = type;\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"bitcastExpr\";\r\n }\r\n\r\n search(callback: (node: Node) => void): void {\r\n this.value.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class TypecastExpr\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class TypecastExpr extends Expression {\r\n type: Type | null;\r\n args: Array | null;\r\n\r\n constructor(type: Type | null, args: Array | null) {\r\n super();\r\n this.type = type;\r\n this.args = args;\r\n }\r\n\r\n get astNodeType() {\r\n return \"typecastExpr\";\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n return this.args[0].evaluate(context);\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.searchBlock(this.args, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class GroupingExpr\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class GroupingExpr extends Expression {\r\n contents: Array;\r\n\r\n constructor(contents: Array) {\r\n super();\r\n this.contents = contents;\r\n }\r\n\r\n get astNodeType() {\r\n return \"groupExpr\";\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n return this.contents[0].evaluate(context);\r\n }\r\n\r\n search(callback: (node: Node) => void): void {\r\n this.searchBlock(this.contents, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class ArrayIndex\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class ArrayIndex extends Expression {\r\n index: Expression;\r\n constructor(index: Expression) {\r\n super();\r\n this.index = index;\r\n }\r\n\r\n search(callback: (node: Node) => void): void {\r\n this.index.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Operator\r\n * @extends Expression\r\n * @category AST\r\n */\r\nexport class Operator extends Expression {\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/**\r\n * @class UnaryOperator\r\n * @extends Operator\r\n * @category AST\r\n * @property {string} operator +, -, !, ~\r\n */\r\nexport class UnaryOperator extends Operator {\r\n operator: string;\r\n right: Expression;\r\n\r\n constructor(operator: string, right: Expression) {\r\n super();\r\n this.operator = operator;\r\n this.right = right;\r\n }\r\n\r\n get astNodeType() {\r\n return \"unaryOp\";\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n switch (this.operator) {\r\n case \"+\":\r\n return this.right.evaluate(context);\r\n case \"-\":\r\n return -this.right.evaluate(context);\r\n case \"!\":\r\n return this.right.evaluate(context) ? 0 : 1;\r\n case \"~\":\r\n return ~this.right.evaluate(context);\r\n default:\r\n throw new Error(\"Unknown unary operator: \" + this.operator);\r\n }\r\n }\r\n\r\n search(callback: (node: Node) => void): void {\r\n this.right.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class BinaryOperator\r\n * @extends Operator\r\n * @category AST\r\n * @property {string} operator +, -, *, /, %, ==, !=, <, >, <=, >=, &&, ||\r\n */\r\nexport class BinaryOperator extends Operator {\r\n operator: string;\r\n left: Expression;\r\n right: Expression;\r\n\r\n constructor(operator: string, left: Expression, right: Expression) {\r\n super();\r\n this.operator = operator;\r\n this.left = left;\r\n this.right = right;\r\n }\r\n\r\n get astNodeType() {\r\n return \"binaryOp\";\r\n }\r\n\r\n evaluate(context: ParseContext): number {\r\n switch (this.operator) {\r\n case \"+\":\r\n return this.left.evaluate(context) + this.right.evaluate(context);\r\n case \"-\":\r\n return this.left.evaluate(context) - this.right.evaluate(context);\r\n case \"*\":\r\n return this.left.evaluate(context) * this.right.evaluate(context);\r\n case \"/\":\r\n return this.left.evaluate(context) / this.right.evaluate(context);\r\n case \"%\":\r\n return this.left.evaluate(context) % this.right.evaluate(context);\r\n case \"==\":\r\n return this.left.evaluate(context) == this.right.evaluate(context)\r\n ? 1\r\n : 0;\r\n case \"!=\":\r\n return this.left.evaluate(context) != this.right.evaluate(context)\r\n ? 1\r\n : 0;\r\n case \"<\":\r\n return this.left.evaluate(context) < this.right.evaluate(context)\r\n ? 1\r\n : 0;\r\n case \">\":\r\n return this.left.evaluate(context) > this.right.evaluate(context)\r\n ? 1\r\n : 0;\r\n case \"<=\":\r\n return this.left.evaluate(context) <= this.right.evaluate(context)\r\n ? 1\r\n : 0;\r\n case \">=\":\r\n return this.left.evaluate(context) >= this.right.evaluate(context)\r\n ? 1\r\n : 0;\r\n case \"&&\":\r\n return this.left.evaluate(context) && this.right.evaluate(context)\r\n ? 1\r\n : 0;\r\n case \"||\":\r\n return this.left.evaluate(context) || this.right.evaluate(context)\r\n ? 1\r\n : 0;\r\n default:\r\n throw new Error(`Unknown operator ${this.operator}`);\r\n }\r\n }\r\n\r\n search(callback: (node: Node) => void) {\r\n this.left.search(callback);\r\n this.right.search(callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class SwitchCase\r\n * @extends Node\r\n * @category AST\r\n */\r\nexport class SwitchCase extends Node {\r\n constructor() {\r\n super();\r\n }\r\n}\r\n\r\n/**\r\n * @class Case\r\n * @extends SwitchCase\r\n * @category AST\r\n */\r\nexport class Case extends SwitchCase {\r\n selector: Array;\r\n body: Array;\r\n\r\n constructor(selector: Array, body: Array) {\r\n super();\r\n this.selector = selector;\r\n this.body = body;\r\n }\r\n\r\n get astNodeType() {\r\n return \"case\";\r\n }\r\n\r\n search(callback: (node: Node) => void): void {\r\n this.searchBlock(this.body, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Default\r\n * @extends SwitchCase\r\n * @category AST\r\n */\r\nexport class Default extends SwitchCase {\r\n body: Array;\r\n\r\n constructor(body: Array) {\r\n super();\r\n this.body = body;\r\n }\r\n\r\n get astNodeType() {\r\n return \"default\";\r\n }\r\n\r\n search(callback: (node: Node) => void): void {\r\n this.searchBlock(this.body, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Argument\r\n * @extends Node\r\n * @category AST\r\n */\r\nexport class Argument extends Node {\r\n name: string;\r\n type: Type;\r\n attributes: Array | null;\r\n\r\n constructor(name: string, type: Type, attributes: Array | null) {\r\n super();\r\n this.name = name;\r\n this.type = type;\r\n this.attributes = attributes;\r\n }\r\n\r\n get astNodeType() {\r\n return \"argument\";\r\n }\r\n}\r\n\r\n/**\r\n * @class ElseIf\r\n * @extends Node\r\n * @category AST\r\n */\r\nexport class ElseIf extends Node {\r\n condition: Expression;\r\n body: Array;\r\n\r\n constructor(condition: Expression, body: Array) {\r\n super();\r\n this.condition = condition;\r\n this.body = body;\r\n }\r\n\r\n get astNodeType() {\r\n return \"elseif\";\r\n }\r\n\r\n search(callback: (node: Node) => void): void {\r\n this.condition.search(callback);\r\n this.searchBlock(this.body, callback);\r\n }\r\n}\r\n\r\n/**\r\n * @class Member\r\n * @extends Node\r\n * @category AST\r\n */\r\nexport class Member extends Node {\r\n name: string;\r\n type: Type | null;\r\n attributes: Array | null;\r\n\r\n constructor(\r\n name: string,\r\n type: Type | null,\r\n attributes: Array | null\r\n ) {\r\n super();\r\n this.name = name;\r\n this.type = type;\r\n this.attributes = attributes;\r\n }\r\n\r\n get astNodeType() {\r\n return \"member\";\r\n }\r\n}\r\n\r\n/**\r\n * @class Attribute\r\n * @extends Node\r\n * @category AST\r\n */\r\nexport class Attribute extends Node {\r\n name: string;\r\n value: string | Array | null;\r\n\r\n constructor(name: string, value: string | Array | null) {\r\n super();\r\n this.name = name;\r\n this.value = value;\r\n }\r\n\r\n get astNodeType() {\r\n return \"attribute\";\r\n }\r\n}\r\n","export enum TokenClass {\r\n token,\r\n keyword,\r\n reserved,\r\n}\r\n\r\nexport class TokenType {\r\n name: string;\r\n type: TokenClass;\r\n rule: RegExp | string;\r\n\r\n constructor(name: string, type: TokenClass, rule: RegExp | string) {\r\n this.name = name;\r\n this.type = type;\r\n this.rule = rule;\r\n }\r\n\r\n toString(): string {\r\n return this.name;\r\n }\r\n}\r\n\r\n/// Catalog of defined token types, keywords, and reserved words.\r\nexport class TokenTypes {\r\n static readonly none = new TokenType(\"\", TokenClass.reserved, \"\");\r\n static readonly eof = new TokenType(\"EOF\", TokenClass.token, \"\");\r\n\r\n static readonly reserved = {\r\n asm: new TokenType(\"asm\", TokenClass.reserved, \"asm\"),\r\n bf16: new TokenType(\"bf16\", TokenClass.reserved, \"bf16\"),\r\n do: new TokenType(\"do\", TokenClass.reserved, \"do\"),\r\n enum: new TokenType(\"enum\", TokenClass.reserved, \"enum\"),\r\n f16: new TokenType(\"f16\", TokenClass.reserved, \"f16\"),\r\n f64: new TokenType(\"f64\", TokenClass.reserved, \"f64\"),\r\n handle: new TokenType(\"handle\", TokenClass.reserved, \"handle\"),\r\n i8: new TokenType(\"i8\", TokenClass.reserved, \"i8\"),\r\n i16: new TokenType(\"i16\", TokenClass.reserved, \"i16\"),\r\n i64: new TokenType(\"i64\", TokenClass.reserved, \"i64\"),\r\n mat: new TokenType(\"mat\", TokenClass.reserved, \"mat\"),\r\n premerge: new TokenType(\"premerge\", TokenClass.reserved, \"premerge\"),\r\n regardless: new TokenType(\"regardless\", TokenClass.reserved, \"regardless\"),\r\n typedef: new TokenType(\"typedef\", TokenClass.reserved, \"typedef\"),\r\n u8: new TokenType(\"u8\", TokenClass.reserved, \"u8\"),\r\n u16: new TokenType(\"u16\", TokenClass.reserved, \"u16\"),\r\n u64: new TokenType(\"u64\", TokenClass.reserved, \"u64\"),\r\n unless: new TokenType(\"unless\", TokenClass.reserved, \"unless\"),\r\n using: new TokenType(\"using\", TokenClass.reserved, \"using\"),\r\n vec: new TokenType(\"vec\", TokenClass.reserved, \"vec\"),\r\n void: new TokenType(\"void\", TokenClass.reserved, \"void\"),\r\n };\r\n\r\n static readonly keywords = {\r\n array: new TokenType(\"array\", TokenClass.keyword, \"array\"),\r\n atomic: new TokenType(\"atomic\", TokenClass.keyword, \"atomic\"),\r\n bool: new TokenType(\"bool\", TokenClass.keyword, \"bool\"),\r\n f32: new TokenType(\"f32\", TokenClass.keyword, \"f32\"),\r\n i32: new TokenType(\"i32\", TokenClass.keyword, \"i32\"),\r\n mat2x2: new TokenType(\"mat2x2\", TokenClass.keyword, \"mat2x2\"),\r\n mat2x3: new TokenType(\"mat2x3\", TokenClass.keyword, \"mat2x3\"),\r\n mat2x4: new TokenType(\"mat2x4\", TokenClass.keyword, \"mat2x4\"),\r\n mat3x2: new TokenType(\"mat3x2\", TokenClass.keyword, \"mat3x2\"),\r\n mat3x3: new TokenType(\"mat3x3\", TokenClass.keyword, \"mat3x3\"),\r\n mat3x4: new TokenType(\"mat3x4\", TokenClass.keyword, \"mat3x4\"),\r\n mat4x2: new TokenType(\"mat4x2\", TokenClass.keyword, \"mat4x2\"),\r\n mat4x3: new TokenType(\"mat4x3\", TokenClass.keyword, \"mat4x3\"),\r\n mat4x4: new TokenType(\"mat4x4\", TokenClass.keyword, \"mat4x4\"),\r\n ptr: new TokenType(\"ptr\", TokenClass.keyword, \"ptr\"),\r\n sampler: new TokenType(\"sampler\", TokenClass.keyword, \"sampler\"),\r\n sampler_comparison: new TokenType(\r\n \"sampler_comparison\",\r\n TokenClass.keyword,\r\n \"sampler_comparison\"\r\n ),\r\n struct: new TokenType(\"struct\", TokenClass.keyword, \"struct\"),\r\n texture_1d: new TokenType(\"texture_1d\", TokenClass.keyword, \"texture_1d\"),\r\n texture_2d: new TokenType(\"texture_2d\", TokenClass.keyword, \"texture_2d\"),\r\n texture_2d_array: new TokenType(\r\n \"texture_2d_array\",\r\n TokenClass.keyword,\r\n \"texture_2d_array\"\r\n ),\r\n texture_3d: new TokenType(\"texture_3d\", TokenClass.keyword, \"texture_3d\"),\r\n texture_cube: new TokenType(\r\n \"texture_cube\",\r\n TokenClass.keyword,\r\n \"texture_cube\"\r\n ),\r\n texture_cube_array: new TokenType(\r\n \"texture_cube_array\",\r\n TokenClass.keyword,\r\n \"texture_cube_array\"\r\n ),\r\n texture_multisampled_2d: new TokenType(\r\n \"texture_multisampled_2d\",\r\n TokenClass.keyword,\r\n \"texture_multisampled_2d\"\r\n ),\r\n texture_storage_1d: new TokenType(\r\n \"texture_storage_1d\",\r\n TokenClass.keyword,\r\n \"texture_storage_1d\"\r\n ),\r\n texture_storage_2d: new TokenType(\r\n \"texture_storage_2d\",\r\n TokenClass.keyword,\r\n \"texture_storage_2d\"\r\n ),\r\n texture_storage_2d_array: new TokenType(\r\n \"texture_storage_2d_array\",\r\n TokenClass.keyword,\r\n \"texture_storage_2d_array\"\r\n ),\r\n texture_storage_3d: new TokenType(\r\n \"texture_storage_3d\",\r\n TokenClass.keyword,\r\n \"texture_storage_3d\"\r\n ),\r\n texture_depth_2d: new TokenType(\r\n \"texture_depth_2d\",\r\n TokenClass.keyword,\r\n \"texture_depth_2d\"\r\n ),\r\n texture_depth_2d_array: new TokenType(\r\n \"texture_depth_2d_array\",\r\n TokenClass.keyword,\r\n \"texture_depth_2d_array\"\r\n ),\r\n texture_depth_cube: new TokenType(\r\n \"texture_depth_cube\",\r\n TokenClass.keyword,\r\n \"texture_depth_cube\"\r\n ),\r\n texture_depth_cube_array: new TokenType(\r\n \"texture_depth_cube_array\",\r\n TokenClass.keyword,\r\n \"texture_depth_cube_array\"\r\n ),\r\n texture_depth_multisampled_2d: new TokenType(\r\n \"texture_depth_multisampled_2d\",\r\n TokenClass.keyword,\r\n \"texture_depth_multisampled_2d\"\r\n ),\r\n texture_external: new TokenType(\r\n \"texture_external\",\r\n TokenClass.keyword,\r\n \"texture_external\"\r\n ),\r\n u32: new TokenType(\"u32\", TokenClass.keyword, \"u32\"),\r\n vec2: new TokenType(\"vec2\", TokenClass.keyword, \"vec2\"),\r\n vec3: new TokenType(\"vec3\", TokenClass.keyword, \"vec3\"),\r\n vec4: new TokenType(\"vec4\", TokenClass.keyword, \"vec4\"),\r\n bitcast: new TokenType(\"bitcast\", TokenClass.keyword, \"bitcast\"),\r\n block: new TokenType(\"block\", TokenClass.keyword, \"block\"),\r\n break: new TokenType(\"break\", TokenClass.keyword, \"break\"),\r\n case: new TokenType(\"case\", TokenClass.keyword, \"case\"),\r\n continue: new TokenType(\"continue\", TokenClass.keyword, \"continue\"),\r\n continuing: new TokenType(\"continuing\", TokenClass.keyword, \"continuing\"),\r\n default: new TokenType(\"default\", TokenClass.keyword, \"default\"),\r\n diagnostic: new TokenType(\"diagnostic\", TokenClass.keyword, \"diagnostic\"),\r\n discard: new TokenType(\"discard\", TokenClass.keyword, \"discard\"),\r\n else: new TokenType(\"else\", TokenClass.keyword, \"else\"),\r\n enable: new TokenType(\"enable\", TokenClass.keyword, \"enable\"),\r\n fallthrough: new TokenType(\r\n \"fallthrough\",\r\n TokenClass.keyword,\r\n \"fallthrough\"\r\n ),\r\n false: new TokenType(\"false\", TokenClass.keyword, \"false\"),\r\n fn: new TokenType(\"fn\", TokenClass.keyword, \"fn\"),\r\n for: new TokenType(\"for\", TokenClass.keyword, \"for\"),\r\n function: new TokenType(\"function\", TokenClass.keyword, \"function\"),\r\n if: new TokenType(\"if\", TokenClass.keyword, \"if\"),\r\n let: new TokenType(\"let\", TokenClass.keyword, \"let\"),\r\n const: new TokenType(\"const\", TokenClass.keyword, \"const\"),\r\n loop: new TokenType(\"loop\", TokenClass.keyword, \"loop\"),\r\n while: new TokenType(\"while\", TokenClass.keyword, \"while\"),\r\n private: new TokenType(\"private\", TokenClass.keyword, \"private\"),\r\n read: new TokenType(\"read\", TokenClass.keyword, \"read\"),\r\n read_write: new TokenType(\"read_write\", TokenClass.keyword, \"read_write\"),\r\n return: new TokenType(\"return\", TokenClass.keyword, \"return\"),\r\n requires: new TokenType(\"requires\", TokenClass.keyword, \"requires\"),\r\n storage: new TokenType(\"storage\", TokenClass.keyword, \"storage\"),\r\n switch: new TokenType(\"switch\", TokenClass.keyword, \"switch\"),\r\n true: new TokenType(\"true\", TokenClass.keyword, \"true\"),\r\n alias: new TokenType(\"alias\", TokenClass.keyword, \"alias\"),\r\n type: new TokenType(\"type\", TokenClass.keyword, \"type\"),\r\n uniform: new TokenType(\"uniform\", TokenClass.keyword, \"uniform\"),\r\n var: new TokenType(\"var\", TokenClass.keyword, \"var\"),\r\n override: new TokenType(\"override\", TokenClass.keyword, \"override\"),\r\n workgroup: new TokenType(\"workgroup\", TokenClass.keyword, \"workgroup\"),\r\n write: new TokenType(\"write\", TokenClass.keyword, \"write\"),\r\n r8unorm: new TokenType(\"r8unorm\", TokenClass.keyword, \"r8unorm\"),\r\n r8snorm: new TokenType(\"r8snorm\", TokenClass.keyword, \"r8snorm\"),\r\n r8uint: new TokenType(\"r8uint\", TokenClass.keyword, \"r8uint\"),\r\n r8sint: new TokenType(\"r8sint\", TokenClass.keyword, \"r8sint\"),\r\n r16uint: new TokenType(\"r16uint\", TokenClass.keyword, \"r16uint\"),\r\n r16sint: new TokenType(\"r16sint\", TokenClass.keyword, \"r16sint\"),\r\n r16float: new TokenType(\"r16float\", TokenClass.keyword, \"r16float\"),\r\n rg8unorm: new TokenType(\"rg8unorm\", TokenClass.keyword, \"rg8unorm\"),\r\n rg8snorm: new TokenType(\"rg8snorm\", TokenClass.keyword, \"rg8snorm\"),\r\n rg8uint: new TokenType(\"rg8uint\", TokenClass.keyword, \"rg8uint\"),\r\n rg8sint: new TokenType(\"rg8sint\", TokenClass.keyword, \"rg8sint\"),\r\n r32uint: new TokenType(\"r32uint\", TokenClass.keyword, \"r32uint\"),\r\n r32sint: new TokenType(\"r32sint\", TokenClass.keyword, \"r32sint\"),\r\n r32float: new TokenType(\"r32float\", TokenClass.keyword, \"r32float\"),\r\n rg16uint: new TokenType(\"rg16uint\", TokenClass.keyword, \"rg16uint\"),\r\n rg16sint: new TokenType(\"rg16sint\", TokenClass.keyword, \"rg16sint\"),\r\n rg16float: new TokenType(\"rg16float\", TokenClass.keyword, \"rg16float\"),\r\n rgba8unorm: new TokenType(\"rgba8unorm\", TokenClass.keyword, \"rgba8unorm\"),\r\n rgba8unorm_srgb: new TokenType(\r\n \"rgba8unorm_srgb\",\r\n TokenClass.keyword,\r\n \"rgba8unorm_srgb\"\r\n ),\r\n rgba8snorm: new TokenType(\"rgba8snorm\", TokenClass.keyword, \"rgba8snorm\"),\r\n rgba8uint: new TokenType(\"rgba8uint\", TokenClass.keyword, \"rgba8uint\"),\r\n rgba8sint: new TokenType(\"rgba8sint\", TokenClass.keyword, \"rgba8sint\"),\r\n bgra8unorm: new TokenType(\"bgra8unorm\", TokenClass.keyword, \"bgra8unorm\"),\r\n bgra8unorm_srgb: new TokenType(\r\n \"bgra8unorm_srgb\",\r\n TokenClass.keyword,\r\n \"bgra8unorm_srgb\"\r\n ),\r\n rgb10a2unorm: new TokenType(\r\n \"rgb10a2unorm\",\r\n TokenClass.keyword,\r\n \"rgb10a2unorm\"\r\n ),\r\n rg11b10float: new TokenType(\r\n \"rg11b10float\",\r\n TokenClass.keyword,\r\n \"rg11b10float\"\r\n ),\r\n rg32uint: new TokenType(\"rg32uint\", TokenClass.keyword, \"rg32uint\"),\r\n rg32sint: new TokenType(\"rg32sint\", TokenClass.keyword, \"rg32sint\"),\r\n rg32float: new TokenType(\"rg32float\", TokenClass.keyword, \"rg32float\"),\r\n rgba16uint: new TokenType(\"rgba16uint\", TokenClass.keyword, \"rgba16uint\"),\r\n rgba16sint: new TokenType(\"rgba16sint\", TokenClass.keyword, \"rgba16sint\"),\r\n rgba16float: new TokenType(\r\n \"rgba16float\",\r\n TokenClass.keyword,\r\n \"rgba16float\"\r\n ),\r\n rgba32uint: new TokenType(\"rgba32uint\", TokenClass.keyword, \"rgba32uint\"),\r\n rgba32sint: new TokenType(\"rgba32sint\", TokenClass.keyword, \"rgba32sint\"),\r\n rgba32float: new TokenType(\r\n \"rgba32float\",\r\n TokenClass.keyword,\r\n \"rgba32float\"\r\n ),\r\n static_assert: new TokenType(\r\n \"static_assert\",\r\n TokenClass.keyword,\r\n \"static_assert\"\r\n ),\r\n\r\n // WGSL grammar has a few keywords that have different token names than the strings they\r\n // represent. Aliasing them here.\r\n /*int32: new TokenType(\"i32\", TokenClass.keyword, \"i32\"),\r\n uint32: new TokenType(\"u32\", TokenClass.keyword, \"u32\"),\r\n float32: new TokenType(\"f32\", TokenClass.keyword, \"f32\"),\r\n pointer: new TokenType(\"ptr\", TokenClass.keyword, \"ptr\"),*/\r\n };\r\n\r\n static readonly tokens = {\r\n decimal_float_literal: new TokenType(\r\n \"decimal_float_literal\",\r\n TokenClass.token,\r\n /((-?[0-9]*\\.[0-9]+|-?[0-9]+\\.[0-9]*)((e|E)(\\+|-)?[0-9]+)?f?)|(-?[0-9]+(e|E)(\\+|-)?[0-9]+f?)|([0-9]+f)/\r\n ),\r\n hex_float_literal: new TokenType(\r\n \"hex_float_literal\",\r\n TokenClass.token,\r\n /-?0x((([0-9a-fA-F]*\\.[0-9a-fA-F]+|[0-9a-fA-F]+\\.[0-9a-fA-F]*)((p|P)(\\+|-)?[0-9]+f?)?)|([0-9a-fA-F]+(p|P)(\\+|-)?[0-9]+f?))/\r\n ),\r\n int_literal: new TokenType(\r\n \"int_literal\",\r\n TokenClass.token,\r\n /-?0x[0-9a-fA-F]+|0i?|-?[1-9][0-9]*i?/\r\n ),\r\n uint_literal: new TokenType(\r\n \"uint_literal\",\r\n TokenClass.token,\r\n /0x[0-9a-fA-F]+u|0u|[1-9][0-9]*u/\r\n ),\r\n ident: new TokenType(\"ident\", TokenClass.token, /[_a-zA-Z][0-9a-zA-Z_]*/),\r\n and: new TokenType(\"and\", TokenClass.token, \"&\"),\r\n and_and: new TokenType(\"and_and\", TokenClass.token, \"&&\"),\r\n arrow: new TokenType(\"arrow \", TokenClass.token, \"->\"),\r\n attr: new TokenType(\"attr\", TokenClass.token, \"@\"),\r\n forward_slash: new TokenType(\"forward_slash\", TokenClass.token, \"/\"),\r\n bang: new TokenType(\"bang\", TokenClass.token, \"!\"),\r\n bracket_left: new TokenType(\"bracket_left\", TokenClass.token, \"[\"),\r\n bracket_right: new TokenType(\"bracket_right\", TokenClass.token, \"]\"),\r\n brace_left: new TokenType(\"brace_left\", TokenClass.token, \"{\"),\r\n brace_right: new TokenType(\"brace_right\", TokenClass.token, \"}\"),\r\n colon: new TokenType(\"colon\", TokenClass.token, \":\"),\r\n comma: new TokenType(\"comma\", TokenClass.token, \",\"),\r\n equal: new TokenType(\"equal\", TokenClass.token, \"=\"),\r\n equal_equal: new TokenType(\"equal_equal\", TokenClass.token, \"==\"),\r\n not_equal: new TokenType(\"not_equal\", TokenClass.token, \"!=\"),\r\n greater_than: new TokenType(\"greater_than\", TokenClass.token, \">\"),\r\n greater_than_equal: new TokenType(\r\n \"greater_than_equal\",\r\n TokenClass.token,\r\n \">=\"\r\n ),\r\n shift_right: new TokenType(\"shift_right\", TokenClass.token, \">>\"),\r\n less_than: new TokenType(\"less_than\", TokenClass.token, \"<\"),\r\n less_than_equal: new TokenType(\"less_than_equal\", TokenClass.token, \"<=\"),\r\n shift_left: new TokenType(\"shift_left\", TokenClass.token, \"<<\"),\r\n modulo: new TokenType(\"modulo\", TokenClass.token, \"%\"),\r\n minus: new TokenType(\"minus\", TokenClass.token, \"-\"),\r\n minus_minus: new TokenType(\"minus_minus\", TokenClass.token, \"--\"),\r\n period: new TokenType(\"period\", TokenClass.token, \".\"),\r\n plus: new TokenType(\"plus\", TokenClass.token, \"+\"),\r\n plus_plus: new TokenType(\"plus_plus\", TokenClass.token, \"++\"),\r\n or: new TokenType(\"or\", TokenClass.token, \"|\"),\r\n or_or: new TokenType(\"or_or\", TokenClass.token, \"||\"),\r\n paren_left: new TokenType(\"paren_left\", TokenClass.token, \"(\"),\r\n paren_right: new TokenType(\"paren_right\", TokenClass.token, \")\"),\r\n semicolon: new TokenType(\"semicolon\", TokenClass.token, \";\"),\r\n star: new TokenType(\"star\", TokenClass.token, \"*\"),\r\n tilde: new TokenType(\"tilde\", TokenClass.token, \"~\"),\r\n underscore: new TokenType(\"underscore\", TokenClass.token, \"_\"),\r\n xor: new TokenType(\"xor\", TokenClass.token, \"^\"),\r\n plus_equal: new TokenType(\"plus_equal\", TokenClass.token, \"+=\"),\r\n minus_equal: new TokenType(\"minus_equal\", TokenClass.token, \"-=\"),\r\n times_equal: new TokenType(\"times_equal\", TokenClass.token, \"*=\"),\r\n division_equal: new TokenType(\"division_equal\", TokenClass.token, \"/=\"),\r\n modulo_equal: new TokenType(\"modulo_equal\", TokenClass.token, \"%=\"),\r\n and_equal: new TokenType(\"and_equal\", TokenClass.token, \"&=\"),\r\n or_equal: new TokenType(\"or_equal\", TokenClass.token, \"|=\"),\r\n xor_equal: new TokenType(\"xor_equal\", TokenClass.token, \"^=\"),\r\n shift_right_equal: new TokenType(\r\n \"shift_right_equal\",\r\n TokenClass.token,\r\n \">>=\"\r\n ),\r\n shift_left_equal: new TokenType(\r\n \"shift_left_equal\",\r\n TokenClass.token,\r\n \"<<=\"\r\n ),\r\n };\r\n\r\n static readonly simpleTokens = {\r\n \"@\": this.tokens.attr,\r\n \"{\": this.tokens.brace_left,\r\n \"}\": this.tokens.brace_right,\r\n \":\": this.tokens.colon,\r\n \",\": this.tokens.comma,\r\n \"(\": this.tokens.paren_left,\r\n \")\": this.tokens.paren_right,\r\n \";\": this.tokens.semicolon,\r\n };\r\n\r\n static readonly literalTokens = {\r\n \"&\": this.tokens.and,\r\n \"&&\": this.tokens.and_and,\r\n \"->\": this.tokens.arrow ,\r\n \"/\": this.tokens.forward_slash,\r\n \"!\": this.tokens.bang,\r\n \"[\": this.tokens.bracket_left,\r\n \"]\": this.tokens.bracket_right,\r\n \"=\": this.tokens.equal,\r\n \"==\": this.tokens.equal_equal,\r\n \"!=\": this.tokens.not_equal,\r\n \">\": this.tokens.greater_than,\r\n \">=\": this.tokens.greater_than_equal,\r\n \">>\": this.tokens.shift_right,\r\n \"<\": this.tokens.less_than,\r\n \"<=\": this.tokens.less_than_equal,\r\n \"<<\": this.tokens.shift_left,\r\n \"%\": this.tokens.modulo,\r\n \"-\": this.tokens.minus,\r\n \"--\": this.tokens.minus_minus,\r\n \".\": this.tokens.period,\r\n \"+\": this.tokens.plus,\r\n \"++\": this.tokens.plus_plus,\r\n \"|\": this.tokens.or,\r\n \"||\": this.tokens.or_or,\r\n \"*\": this.tokens.star,\r\n \"~\": this.tokens.tilde,\r\n \"_\": this.tokens.underscore,\r\n \"^\": this.tokens.xor,\r\n \"+=\": this.tokens.plus_equal,\r\n \"-=\": this.tokens.minus_equal,\r\n \"*=\": this.tokens.times_equal,\r\n \"/=\": this.tokens.division_equal,\r\n \"%=\": this.tokens.modulo_equal,\r\n \"&=\": this.tokens.and_equal,\r\n \"|=\": this.tokens.or_equal,\r\n \"^=\": this.tokens.xor_equal,\r\n \">>=\": this.tokens.shift_right_equal,\r\n \"<<=\": this.tokens.shift_left_equal,\r\n };\r\n\r\n static readonly regexTokens = {\r\n decimal_float_literal: this.tokens.decimal_float_literal,\r\n hex_float_literal: this.tokens.hex_float_literal,\r\n int_literal: this.tokens.int_literal,\r\n uint_literal: this.tokens.uint_literal,\r\n ident: this.tokens.ident,\r\n };\r\n\r\n static readonly storage_class = [\r\n this.keywords.function,\r\n this.keywords.private,\r\n this.keywords.workgroup,\r\n this.keywords.uniform,\r\n this.keywords.storage,\r\n ];\r\n\r\n static readonly access_mode = [\r\n this.keywords.read,\r\n this.keywords.write,\r\n this.keywords.read_write,\r\n ];\r\n\r\n static readonly sampler_type = [\r\n this.keywords.sampler,\r\n this.keywords.sampler_comparison,\r\n ];\r\n\r\n static readonly sampled_texture_type = [\r\n this.keywords.texture_1d,\r\n this.keywords.texture_2d,\r\n this.keywords.texture_2d_array,\r\n this.keywords.texture_3d,\r\n this.keywords.texture_cube,\r\n this.keywords.texture_cube_array,\r\n ];\r\n\r\n static readonly multisampled_texture_type = [\r\n this.keywords.texture_multisampled_2d,\r\n ];\r\n\r\n static readonly storage_texture_type = [\r\n this.keywords.texture_storage_1d,\r\n this.keywords.texture_storage_2d,\r\n this.keywords.texture_storage_2d_array,\r\n this.keywords.texture_storage_3d,\r\n ];\r\n\r\n static readonly depth_texture_type = [\r\n this.keywords.texture_depth_2d,\r\n this.keywords.texture_depth_2d_array,\r\n this.keywords.texture_depth_cube,\r\n this.keywords.texture_depth_cube_array,\r\n this.keywords.texture_depth_multisampled_2d,\r\n ];\r\n\r\n static readonly texture_external_type = [this.keywords.texture_external];\r\n\r\n static readonly any_texture_type = [\r\n ...this.sampled_texture_type,\r\n ...this.multisampled_texture_type,\r\n ...this.storage_texture_type,\r\n ...this.depth_texture_type,\r\n ...this.texture_external_type,\r\n ];\r\n\r\n static readonly texel_format = [\r\n this.keywords.r8unorm,\r\n this.keywords.r8snorm,\r\n this.keywords.r8uint,\r\n this.keywords.r8sint,\r\n this.keywords.r16uint,\r\n this.keywords.r16sint,\r\n this.keywords.r16float,\r\n this.keywords.rg8unorm,\r\n this.keywords.rg8snorm,\r\n this.keywords.rg8uint,\r\n this.keywords.rg8sint,\r\n this.keywords.r32uint,\r\n this.keywords.r32sint,\r\n this.keywords.r32float,\r\n this.keywords.rg16uint,\r\n this.keywords.rg16sint,\r\n this.keywords.rg16float,\r\n this.keywords.rgba8unorm,\r\n this.keywords.rgba8unorm_srgb,\r\n this.keywords.rgba8snorm,\r\n this.keywords.rgba8uint,\r\n this.keywords.rgba8sint,\r\n this.keywords.bgra8unorm,\r\n this.keywords.bgra8unorm_srgb,\r\n this.keywords.rgb10a2unorm,\r\n this.keywords.rg11b10float,\r\n this.keywords.rg32uint,\r\n this.keywords.rg32sint,\r\n this.keywords.rg32float,\r\n this.keywords.rgba16uint,\r\n this.keywords.rgba16sint,\r\n this.keywords.rgba16float,\r\n this.keywords.rgba32uint,\r\n this.keywords.rgba32sint,\r\n this.keywords.rgba32float,\r\n ];\r\n\r\n static readonly const_literal = [\r\n this.tokens.int_literal,\r\n this.tokens.uint_literal,\r\n this.tokens.decimal_float_literal,\r\n this.tokens.hex_float_literal,\r\n this.keywords.true,\r\n this.keywords.false,\r\n ];\r\n\r\n static readonly literal_or_ident = [\r\n this.tokens.ident,\r\n this.tokens.int_literal,\r\n this.tokens.uint_literal,\r\n this.tokens.decimal_float_literal,\r\n this.tokens.hex_float_literal,\r\n ];\r\n\r\n static readonly element_count_expression = [\r\n this.tokens.int_literal,\r\n this.tokens.uint_literal,\r\n this.tokens.ident,\r\n ];\r\n\r\n static readonly template_types = [\r\n this.keywords.vec2,\r\n this.keywords.vec3,\r\n this.keywords.vec4,\r\n this.keywords.mat2x2,\r\n this.keywords.mat2x3,\r\n this.keywords.mat2x4,\r\n this.keywords.mat3x2,\r\n this.keywords.mat3x3,\r\n this.keywords.mat3x4,\r\n this.keywords.mat4x2,\r\n this.keywords.mat4x3,\r\n this.keywords.mat4x4,\r\n this.keywords.atomic,\r\n this.keywords.bitcast,\r\n ...this.any_texture_type,\r\n ];\r\n\r\n // The grammar calls out 'block', but attribute grammar is defined to use a 'ident'.\r\n // The attribute grammar should be ident | block.\r\n static readonly attribute_name = [this.tokens.ident, this.keywords.block, this.keywords.diagnostic];\r\n\r\n static readonly assignment_operators = [\r\n this.tokens.equal,\r\n this.tokens.plus_equal,\r\n this.tokens.minus_equal,\r\n this.tokens.times_equal,\r\n this.tokens.division_equal,\r\n this.tokens.modulo_equal,\r\n this.tokens.and_equal,\r\n this.tokens.or_equal,\r\n this.tokens.xor_equal,\r\n this.tokens.shift_right_equal,\r\n this.tokens.shift_left_equal,\r\n ];\r\n\r\n static readonly increment_operators = [\r\n this.tokens.plus_plus,\r\n this.tokens.minus_minus,\r\n ];\r\n}\r\n\r\n/// A token parsed by the WgslScanner.\r\nexport class Token {\r\n readonly type: TokenType;\r\n readonly lexeme: string;\r\n readonly line: number;\r\n\r\n constructor(type: TokenType, lexeme: string, line: number) {\r\n this.type = type;\r\n this.lexeme = lexeme;\r\n this.line = line;\r\n }\r\n\r\n toString(): string {\r\n return this.lexeme;\r\n }\r\n\r\n isTemplateType(): boolean {\r\n return TokenTypes.template_types.indexOf(this.type) != -1;\r\n }\r\n\r\n isArrayType(): boolean {\r\n return this.type == TokenTypes.keywords.array;\r\n }\r\n\r\n isArrayOrTemplateType(): boolean {\r\n return this.isArrayType() || this.isTemplateType();\r\n }\r\n}\r\n\r\n/// Lexical scanner for the WGSL language. This takes an input source text and generates a list\r\n/// of Token objects, which can then be fed into the WgslParser to generate an AST.\r\nexport class WgslScanner {\r\n private _source: string;\r\n private _tokens: Array = [];\r\n private _start = 0;\r\n private _current = 0;\r\n private _line = 1;\r\n\r\n constructor(source?: string) {\r\n this._source = source ?? \"\";\r\n }\r\n\r\n /// Scan all tokens from the source.\r\n scanTokens(): Array {\r\n while (!this._isAtEnd()) {\r\n this._start = this._current;\r\n if (!this.scanToken()) {\r\n throw `Invalid syntax at line ${this._line}`;\r\n }\r\n }\r\n\r\n this._tokens.push(new Token(TokenTypes.eof, \"\", this._line));\r\n return this._tokens;\r\n }\r\n\r\n /// Scan a single token from the source.\r\n scanToken(): boolean {\r\n // Find the longest consecutive set of characters that match a rule.\r\n let lexeme = this._advance();\r\n\r\n // Skip line-feed, adding to the line counter.\r\n if (lexeme == \"\\n\") {\r\n this._line++;\r\n return true;\r\n }\r\n\r\n // Skip whitespace\r\n if (this._isWhitespace(lexeme)) {\r\n return true;\r\n }\r\n\r\n if (lexeme == \"/\") {\r\n // If it's a // comment, skip everything until the next line-feed.\r\n if (this._peekAhead() == \"/\") {\r\n while (lexeme != \"\\n\") {\r\n if (this._isAtEnd()) {\r\n return true;\r\n }\r\n lexeme = this._advance();\r\n }\r\n // skip the linefeed\r\n this._line++;\r\n return true;\r\n } else if (this._peekAhead() == \"*\") {\r\n // If it's a / * block comment, skip everything until the matching * /,\r\n // allowing for nested block comments.\r\n this._advance();\r\n let commentLevel = 1;\r\n while (commentLevel > 0) {\r\n if (this._isAtEnd()) {\r\n return true;\r\n }\r\n lexeme = this._advance();\r\n if (lexeme == \"\\n\") {\r\n this._line++;\r\n } else if (lexeme == \"*\") {\r\n if (this._peekAhead() == \"/\") {\r\n this._advance();\r\n commentLevel--;\r\n if (commentLevel == 0) {\r\n return true;\r\n }\r\n }\r\n } else if (lexeme == \"/\") {\r\n if (this._peekAhead() == \"*\") {\r\n this._advance();\r\n commentLevel++;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n // Shortcut single character tokens\r\n const simpleToken = TokenTypes.simpleTokens[lexeme];\r\n if (simpleToken) {\r\n this._addToken(simpleToken);\r\n return true;\r\n }\r\n\r\n // Shortcut keywords and identifiers\r\n let matchType = TokenTypes.none;\r\n const isAlpha = this._isAlpha(lexeme);\r\n const isUnderscore = lexeme === \"_\";\r\n\r\n if (this._isAlphaNumeric(lexeme)) {\r\n let nextChar = this._peekAhead();\r\n while (this._isAlphaNumeric(nextChar)) {\r\n lexeme += this._advance();\r\n nextChar = this._peekAhead();\r\n }\r\n }\r\n\r\n if (isAlpha) {\r\n const matchedType = TokenTypes.keywords[lexeme];\r\n if (matchedType) {\r\n this._addToken(matchedType);\r\n return true;\r\n }\r\n }\r\n\r\n if (isAlpha || isUnderscore) {\r\n this._addToken(TokenTypes.tokens.ident);\r\n return true;\r\n }\r\n\r\n // Scan for the next valid token type\r\n for (;;) {\r\n let matchedType = this._findType(lexeme);\r\n\r\n // An exception to \"longest lexeme\" rule is '>>'. In the case of 1>>2, it's a\r\n // shift_right.\r\n // In the case of array>, it's two greater_than's (one to close the vec4,\r\n // and one to close the array).\r\n // Another ambiguity is '>='. In the case of vec2=vec2(1,2),\r\n // it's a greather_than and an equal, not a greater_than_equal.\r\n // Another ambiguity is '-'. In the case of a-2, it's a minus; in the case of a*-2, it's a -2;\r\n // in the case of foo()->int, it's a ->; in the case of foo-- or --foo, it's a -- decrement.\r\n\r\n // WGSL requires context sensitive parsing to resolve these ambiguities. Both of these cases\r\n // are predicated on it the > either closing a template, or being part of an operator.\r\n // The solution here is to check if there was a less_than up to some number of tokens\r\n // previously, and the token prior to that is a keyword that requires a '<', then it will be\r\n // split into two operators; otherwise it's a single operator.\r\n const nextLexeme = this._peekAhead();\r\n if (lexeme == \"-\" && this._tokens.length > 0) {\r\n if (nextLexeme == \"=\") {\r\n this._current++;\r\n lexeme += nextLexeme;\r\n this._addToken(TokenTypes.tokens.minus_equal);\r\n return true;\r\n }\r\n if (nextLexeme == \"-\") {\r\n this._current++;\r\n lexeme += nextLexeme;\r\n this._addToken(TokenTypes.tokens.minus_minus);\r\n return true;\r\n }\r\n const ti = this._tokens.length - 1;\r\n const isIdentOrLiteral = TokenTypes.literal_or_ident.indexOf(this._tokens[ti].type) != -1;\r\n if ((isIdentOrLiteral || this._tokens[ti].type == TokenTypes.tokens.paren_right) && nextLexeme != \">\") {\r\n this._addToken(matchedType);\r\n return true;\r\n }\r\n }\r\n if (lexeme == \">\" && (nextLexeme == \">\" || nextLexeme == \"=\")) {\r\n let foundLessThan = false;\r\n let ti = this._tokens.length - 1;\r\n for (let count = 0; count < 5 && ti >= 0; ++count, --ti) {\r\n if (TokenTypes.assignment_operators.indexOf(this._tokens[ti].type) !== -1) {\r\n break;\r\n }\r\n if (this._tokens[ti].type === TokenTypes.tokens.less_than) {\r\n if (ti > 0 && this._tokens[ti - 1].isArrayOrTemplateType()) {\r\n foundLessThan = true;\r\n }\r\n break;\r\n }\r\n }\r\n // If there was a less_than in the recent token history, then this is probably a\r\n // greater_than.\r\n if (foundLessThan) {\r\n this._addToken(matchedType);\r\n return true;\r\n }\r\n }\r\n\r\n // The current lexeme may not match any rule, but some token types may be invalid for\r\n // part of the string but valid after a few more characters.\r\n // For example, 0x.5 is a hex_float_literal. But as it's being scanned,\r\n // \"0\" is a int_literal, then \"0x\" is invalid. If we stopped there, it would return\r\n // the int_literal \"0\", but that's incorrect. So if we look forward a few characters,\r\n // we'd get \"0x.\", which is still invalid, followed by \"0x.5\" which is the correct\r\n // hex_float_literal. So that means if we hit an non-matching string, we should look\r\n // ahead up to two characters to see if the string starts matching a valid rule again.\r\n if (matchedType === TokenTypes.none) {\r\n let lookAheadLexeme = lexeme;\r\n let lookAhead = 0;\r\n const maxLookAhead = 2;\r\n for (let li = 0; li < maxLookAhead; ++li) {\r\n lookAheadLexeme += this._peekAhead(li);\r\n matchedType = this._findType(lookAheadLexeme);\r\n if (matchedType !== TokenTypes.none) {\r\n lookAhead = li;\r\n break;\r\n }\r\n }\r\n\r\n if (matchedType === TokenTypes.none) {\r\n if (matchType === TokenTypes.none) {\r\n return false;\r\n }\r\n this._current--;\r\n this._addToken(matchType);\r\n return true;\r\n }\r\n\r\n lexeme = lookAheadLexeme;\r\n this._current += lookAhead + 1;\r\n }\r\n\r\n matchType = matchedType;\r\n\r\n if (this._isAtEnd()) {\r\n break;\r\n }\r\n\r\n lexeme += this._advance();\r\n }\r\n\r\n // We got to the end of the input stream. Then the token we've ready so far is it.\r\n if (matchType === TokenTypes.none) {\r\n return false;\r\n }\r\n\r\n this._addToken(matchType);\r\n return true;\r\n }\r\n\r\n _findType(lexeme: string): TokenType {\r\n for (const name in TokenTypes.regexTokens) {\r\n const type = TokenTypes.regexTokens[name];\r\n if (this._match(lexeme, type.rule)) {\r\n return type;\r\n }\r\n }\r\n\r\n const type = TokenTypes.literalTokens[lexeme];\r\n if (type) {\r\n return type;\r\n }\r\n return TokenTypes.none;\r\n }\r\n\r\n _match(lexeme: string, rule: RegExp): boolean {\r\n const match = rule.exec(lexeme);\r\n return match && match.index == 0 && match[0] == lexeme;\r\n }\r\n\r\n _isAtEnd(): boolean {\r\n return this._current >= this._source.length;\r\n }\r\n\r\n _isAlpha(c: string): boolean {\r\n return (c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\");\r\n }\r\n\r\n _isAlphaNumeric(c: string): boolean {\r\n return (c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\") || c == \"_\" || (c >= \"0\" && c <= \"9\");\r\n }\r\n\r\n _isWhitespace(c: string): boolean {\r\n return c == \" \" || c == \"\\t\" || c == \"\\r\";\r\n }\r\n\r\n _advance(amount: number = 0): string {\r\n let c = this._source[this._current];\r\n amount = amount || 0;\r\n amount++;\r\n this._current += amount;\r\n return c;\r\n }\r\n\r\n _peekAhead(offset: number = 0): string {\r\n offset = offset || 0;\r\n if (this._current + offset >= this._source.length) {\r\n return \"\\0\";\r\n }\r\n return this._source[this._current + offset];\r\n }\r\n\r\n _addToken(type: TokenType) {\r\n const text = this._source.substring(this._start, this._current);\r\n this._tokens.push(new Token(type, text, this._line));\r\n }\r\n}\r\n","/**\r\n * @author Brendan Duncan / https://github.com/brendan-duncan\r\n */\r\nimport { WgslScanner, Token, TokenType, TokenTypes } from \"./wgsl_scanner.js\";\r\nimport * as AST from \"./wgsl_ast.js\";\r\n\r\n/// Parse a sequence of tokens from the WgslScanner into an Abstract Syntax Tree (AST).\r\nexport class WgslParser {\r\n _tokens: Array = [];\r\n _current: number = 0;\r\n _currentLine: number = 0;\r\n _context: AST.ParseContext = new AST.ParseContext();\r\n _deferArrayCountEval: Array = [];\r\n\r\n parse(tokensOrCode: Array | string): Array {\r\n this._initialize(tokensOrCode);\r\n\r\n this._deferArrayCountEval.length = 0;\r\n\r\n const statements: Array = [];\r\n while (!this._isAtEnd()) {\r\n const statement = this._global_decl_or_directive();\r\n if (!statement) {\r\n break;\r\n }\r\n statements.push(statement);\r\n }\r\n\r\n // Since constants can be declared after they are used, and\r\n // constants can be used to size arrays, defer calculating the\r\n // size until after the shader has finished parsing.\r\n if (this._deferArrayCountEval.length > 0) {\r\n for (const arrayDecl of this._deferArrayCountEval) {\r\n const arrayType = arrayDecl[\"arrayType\"];\r\n const countNode = arrayDecl[\"countNode\"];\r\n\r\n if (countNode instanceof AST.VariableExpr) {\r\n const variable = countNode as AST.VariableExpr;\r\n const name = variable.name;\r\n const constant = this._context.constants.get(name);\r\n if (constant) {\r\n try {\r\n const count = constant.evaluate(this._context);\r\n arrayType.count = count;\r\n } catch (e) {\r\n }\r\n }\r\n }\r\n }\r\n this._deferArrayCountEval.length = 0;\r\n }\r\n\r\n return statements;\r\n }\r\n\r\n _initialize(tokensOrCode: Array | string) {\r\n if (tokensOrCode) {\r\n if (typeof tokensOrCode == \"string\") {\r\n const scanner = new WgslScanner(tokensOrCode);\r\n this._tokens = scanner.scanTokens();\r\n } else {\r\n this._tokens = tokensOrCode;\r\n }\r\n } else {\r\n this._tokens = [];\r\n }\r\n this._current = 0;\r\n }\r\n\r\n _error(token: Token, message: string | null): Object {\r\n return {\r\n token,\r\n message,\r\n toString: function () {\r\n return `${message}`;\r\n },\r\n };\r\n }\r\n\r\n _isAtEnd(): boolean {\r\n return (\r\n this._current >= this._tokens.length ||\r\n this._peek().type == TokenTypes.eof\r\n );\r\n }\r\n\r\n _match(types: TokenType | Array): boolean {\r\n if (types instanceof TokenType) {\r\n if (this._check(types)) {\r\n this._advance();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n for (let i = 0, l = types.length; i < l; ++i) {\r\n const type = types[i];\r\n if (this._check(type)) {\r\n this._advance();\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _consume(types: TokenType | Array, message: string | null): Token {\r\n if (this._check(types)) {\r\n return this._advance();\r\n }\r\n throw this._error(this._peek(), message);\r\n }\r\n\r\n _check(types: TokenType | Array): boolean {\r\n if (this._isAtEnd()) {\r\n return false;\r\n }\r\n const tk = this._peek();\r\n if (types instanceof Array) {\r\n const t = tk.type;\r\n const index = types.indexOf(t);\r\n return index != -1;\r\n }\r\n return tk.type == types;\r\n }\r\n\r\n _advance(): Token {\r\n this._currentLine = this._peek()?.line ?? -1;\r\n if (!this._isAtEnd()) {\r\n this._current++;\r\n }\r\n return this._previous();\r\n }\r\n\r\n _peek(): Token {\r\n return this._tokens[this._current];\r\n }\r\n\r\n _previous(): Token {\r\n return this._tokens[this._current - 1];\r\n }\r\n\r\n _global_decl_or_directive(): AST.Statement | null {\r\n // semicolon\r\n // global_variable_decl semicolon\r\n // global_constant_decl semicolon\r\n // type_alias semicolon\r\n // struct_decl\r\n // function_decl\r\n // enable_directive\r\n\r\n // Ignore any stand-alone semicolons\r\n while (this._match(TokenTypes.tokens.semicolon) && !this._isAtEnd());\r\n\r\n if (this._match(TokenTypes.keywords.alias)) {\r\n const type = this._type_alias();\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'\");\r\n return type;\r\n }\r\n\r\n if (this._match(TokenTypes.keywords.diagnostic)) {\r\n const directive = this._diagnostic();\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'\");\r\n return directive;\r\n }\r\n\r\n if (this._match(TokenTypes.keywords.requires)) {\r\n const requires = this._requires_directive();\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'\");\r\n return requires;\r\n }\r\n\r\n if (this._match(TokenTypes.keywords.enable)) {\r\n const enable = this._enable_directive();\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'\");\r\n return enable;\r\n }\r\n\r\n // The following statements have an optional attribute*\r\n const attrs = this._attribute();\r\n\r\n if (this._check(TokenTypes.keywords.var)) {\r\n const _var = this._global_variable_decl();\r\n if (_var != null) {\r\n _var.attributes = attrs;\r\n }\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\r\n return _var;\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.override)) {\r\n const _override = this._override_variable_decl();\r\n if (_override != null) {\r\n _override.attributes = attrs;\r\n }\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\r\n return _override;\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.let)) {\r\n const _let = this._global_let_decl();\r\n if (_let != null) {\r\n _let.attributes = attrs;\r\n }\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\r\n return _let;\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.const)) {\r\n const _const = this._global_const_decl();\r\n if (_const != null) {\r\n _const.attributes = attrs;\r\n }\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\r\n return _const;\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.struct)) {\r\n const _struct = this._struct_decl();\r\n if (_struct != null) {\r\n _struct.attributes = attrs;\r\n }\r\n return _struct;\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.fn)) {\r\n const _fn = this._function_decl();\r\n if (_fn != null) {\r\n _fn.attributes = attrs;\r\n }\r\n return _fn;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _function_decl(): AST.Function | null {\r\n // attribute* function_header compound_statement\r\n // function_header: fn ident paren_left param_list? paren_right (arrow attribute* type_decl)?\r\n if (!this._match(TokenTypes.keywords.fn)) {\r\n return null;\r\n }\r\n\r\n const startLine = this._currentLine;\r\n\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected function name.\"\r\n ).toString();\r\n\r\n this._consume(\r\n TokenTypes.tokens.paren_left,\r\n \"Expected '(' for function arguments.\"\r\n );\r\n\r\n const args: Array = [];\r\n if (!this._check(TokenTypes.tokens.paren_right)) {\r\n do {\r\n if (this._check(TokenTypes.tokens.paren_right)) {\r\n break;\r\n }\r\n const argAttrs = this._attribute();\r\n\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected argument name.\"\r\n ).toString();\r\n\r\n this._consume(\r\n TokenTypes.tokens.colon,\r\n \"Expected ':' for argument type.\"\r\n );\r\n\r\n const typeAttrs = this._attribute();\r\n const type = this._type_decl();\r\n if (type != null) {\r\n type.attributes = typeAttrs;\r\n\r\n args.push(new AST.Argument(name, type, argAttrs));\r\n }\r\n } while (this._match(TokenTypes.tokens.comma));\r\n }\r\n\r\n this._consume(\r\n TokenTypes.tokens.paren_right,\r\n \"Expected ')' after function arguments.\"\r\n );\r\n\r\n let _return: AST.Type | null = null;\r\n if (this._match(TokenTypes.tokens.arrow)) {\r\n const attrs = this._attribute();\r\n _return = this._type_decl();\r\n if (_return != null) {\r\n _return.attributes = attrs;\r\n }\r\n }\r\n\r\n const body = this._compound_statement();\r\n\r\n const endLine = this._currentLine;\r\n\r\n return new AST.Function(name, args, _return, body, startLine, endLine);\r\n }\r\n\r\n _compound_statement(): Array {\r\n // brace_left statement* brace_right\r\n const statements: Array = [];\r\n\r\n this._consume(TokenTypes.tokens.brace_left, \"Expected '{' for block.\");\r\n while (!this._check(TokenTypes.tokens.brace_right)) {\r\n const statement = this._statement();\r\n if (statement !== null) {\r\n statements.push(statement as AST.Statement);\r\n }\r\n }\r\n this._consume(TokenTypes.tokens.brace_right, \"Expected '}' for block.\");\r\n\r\n return statements;\r\n }\r\n\r\n _statement(): AST.Statement | Array | null {\r\n // semicolon\r\n // return_statement semicolon\r\n // if_statement\r\n // switch_statement\r\n // loop_statement\r\n // for_statement\r\n // func_call_statement semicolon\r\n // variable_statement semicolon\r\n // break_statement semicolon\r\n // continue_statement semicolon\r\n // continuing_statement compound_statement\r\n // discard semicolon\r\n // assignment_statement semicolon\r\n // compound_statement\r\n // increment_statement semicolon\r\n // decrement_statement semicolon\r\n // static_assert_statement semicolon\r\n\r\n // Ignore any stand-alone semicolons\r\n while (this._match(TokenTypes.tokens.semicolon) && !this._isAtEnd());\r\n\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.if)) {\r\n return this._if_statement();\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.switch)) {\r\n return this._switch_statement();\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.loop)) {\r\n return this._loop_statement();\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.for)) {\r\n return this._for_statement();\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.while)) {\r\n return this._while_statement();\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.continuing)) {\r\n return this._continuing_statement();\r\n }\r\n\r\n if (this._check(TokenTypes.keywords.static_assert)) {\r\n return this._static_assert_statement();\r\n }\r\n\r\n if (this._check(TokenTypes.tokens.brace_left)) {\r\n return this._compound_statement();\r\n }\r\n\r\n let result: AST.Statement | null = null;\r\n if (this._check(TokenTypes.keywords.return)) {\r\n result = this._return_statement();\r\n } else if (\r\n this._check([\r\n TokenTypes.keywords.var,\r\n TokenTypes.keywords.let,\r\n TokenTypes.keywords.const,\r\n ])\r\n ) {\r\n result = this._variable_statement();\r\n } else if (this._match(TokenTypes.keywords.discard)) {\r\n result = new AST.Discard();\r\n } else if (this._match(TokenTypes.keywords.break)) {\r\n result = new AST.Break();\r\n } else if (this._match(TokenTypes.keywords.continue)) {\r\n result = new AST.Continue();\r\n } else {\r\n result =\r\n this._increment_decrement_statement() ||\r\n this._func_call_statement() ||\r\n this._assignment_statement();\r\n }\r\n\r\n if (result != null) {\r\n this._consume(\r\n TokenTypes.tokens.semicolon,\r\n \"Expected ';' after statement.\"\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _static_assert_statement(): AST.StaticAssert | null {\r\n if (!this._match(TokenTypes.keywords.static_assert)) {\r\n return null;\r\n }\r\n const expression = this._optional_paren_expression();\r\n return new AST.StaticAssert(expression);\r\n }\r\n\r\n _while_statement(): AST.While | null {\r\n if (!this._match(TokenTypes.keywords.while)) {\r\n return null;\r\n }\r\n const condition = this._optional_paren_expression();\r\n\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n\r\n const block = this._compound_statement();\r\n return new AST.While(condition, block);\r\n }\r\n\r\n _continuing_statement(): AST.Continuing | null {\r\n if (!this._match(TokenTypes.keywords.continuing)) {\r\n return null;\r\n }\r\n const block = this._compound_statement();\r\n return new AST.Continuing(block);\r\n }\r\n\r\n _for_statement(): AST.For | null {\r\n // for paren_left for_header paren_right compound_statement\r\n if (!this._match(TokenTypes.keywords.for)) {\r\n return null;\r\n }\r\n\r\n this._consume(TokenTypes.tokens.paren_left, \"Expected '('.\");\r\n\r\n // for_header: (variable_statement assignment_statement func_call_statement)? semicolon short_circuit_or_expression? semicolon (assignment_statement func_call_statement)?\r\n const init = !this._check(TokenTypes.tokens.semicolon)\r\n ? this._for_init()\r\n : null;\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\r\n const condition = !this._check(TokenTypes.tokens.semicolon)\r\n ? this._short_circuit_or_expression()\r\n : null;\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'.\");\r\n const increment = !this._check(TokenTypes.tokens.paren_right)\r\n ? this._for_increment()\r\n : null;\r\n\r\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')'.\");\r\n\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n\r\n const body = this._compound_statement();\r\n\r\n return new AST.For(init, condition, increment, body);\r\n }\r\n\r\n _for_init(): AST.Statement | null {\r\n // (variable_statement assignment_statement func_call_statement)?\r\n return (\r\n this._variable_statement() ||\r\n this._func_call_statement() ||\r\n this._assignment_statement()\r\n );\r\n }\r\n\r\n _for_increment(): AST.Statement | null {\r\n // (assignment_statement func_call_statement increment_statement)?\r\n return (\r\n this._func_call_statement() ||\r\n this._increment_decrement_statement() ||\r\n this._assignment_statement()\r\n );\r\n }\r\n\r\n _variable_statement(): AST.Var | null {\r\n // variable_decl\r\n // variable_decl equal short_circuit_or_expression\r\n // let (ident variable_ident_decl) equal short_circuit_or_expression\r\n // const (ident variable_ident_decl) equal short_circuit_or_expression\r\n if (this._check(TokenTypes.keywords.var)) {\r\n const _var = this._variable_decl();\r\n if (_var === null) {\r\n throw this._error(this._peek(), \"Variable declaration expected.\");\r\n }\r\n let value: AST.Expression | null = null;\r\n if (this._match(TokenTypes.tokens.equal)) {\r\n value = this._short_circuit_or_expression();\r\n }\r\n\r\n return new AST.Var(\r\n _var.name,\r\n _var.type,\r\n _var.storage,\r\n _var.access,\r\n value\r\n );\r\n }\r\n\r\n if (this._match(TokenTypes.keywords.let)) {\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected name for let.\"\r\n ).toString();\r\n let type: AST.Type | null = null;\r\n if (this._match(TokenTypes.tokens.colon)) {\r\n const typeAttrs = this._attribute();\r\n type = this._type_decl();\r\n if (type != null) {\r\n type.attributes = typeAttrs;\r\n }\r\n }\r\n this._consume(TokenTypes.tokens.equal, \"Expected '=' for let.\");\r\n const value = this._short_circuit_or_expression();\r\n return new AST.Let(name, type, null, null, value);\r\n }\r\n\r\n if (this._match(TokenTypes.keywords.const)) {\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected name for const.\"\r\n ).toString();\r\n let type: AST.Type | null = null;\r\n if (this._match(TokenTypes.tokens.colon)) {\r\n const typeAttrs = this._attribute();\r\n type = this._type_decl();\r\n if (type != null) {\r\n type.attributes = typeAttrs;\r\n }\r\n }\r\n this._consume(TokenTypes.tokens.equal, \"Expected '=' for const.\");\r\n const value = this._short_circuit_or_expression();\r\n return new AST.Const(name, type, null, null, value);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _increment_decrement_statement(): AST.Statement | null {\r\n const savedPos = this._current;\r\n\r\n const _var = this._unary_expression();\r\n if (_var == null) {\r\n return null;\r\n }\r\n\r\n if (!this._check(TokenTypes.increment_operators)) {\r\n this._current = savedPos;\r\n return null;\r\n }\r\n\r\n const token = this._consume(\r\n TokenTypes.increment_operators,\r\n \"Expected increment operator\"\r\n );\r\n\r\n return new AST.Increment(\r\n token.type === TokenTypes.tokens.plus_plus\r\n ? AST.IncrementOperator.increment\r\n : AST.IncrementOperator.decrement,\r\n _var\r\n );\r\n }\r\n\r\n _assignment_statement(): AST.Assign | null {\r\n // (unary_expression underscore) equal short_circuit_or_expression\r\n let _var: AST.Expression | null = null;\r\n\r\n if (this._check(TokenTypes.tokens.brace_right)) {\r\n return null;\r\n }\r\n\r\n let isUnderscore = this._match(TokenTypes.tokens.underscore);\r\n if (!isUnderscore) {\r\n _var = this._unary_expression();\r\n }\r\n\r\n if (!isUnderscore && _var == null) {\r\n return null;\r\n }\r\n\r\n const type = this._consume(\r\n TokenTypes.assignment_operators,\r\n \"Expected assignment operator.\"\r\n );\r\n\r\n const value = this._short_circuit_or_expression();\r\n\r\n return new AST.Assign(\r\n AST.AssignOperator.parse(type.lexeme),\r\n _var as AST.Expression,\r\n value\r\n );\r\n }\r\n\r\n _func_call_statement(): AST.Call | null {\r\n // ident argument_expression_list\r\n if (!this._check(TokenTypes.tokens.ident)) {\r\n return null;\r\n }\r\n\r\n const savedPos = this._current;\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected function name.\"\r\n );\r\n const args = this._argument_expression_list();\r\n\r\n if (args === null) {\r\n this._current = savedPos;\r\n return null;\r\n }\r\n\r\n return new AST.Call(name.lexeme, args);\r\n }\r\n\r\n _loop_statement(): AST.Loop | null {\r\n // loop brace_left statement* continuing_statement? brace_right\r\n if (!this._match(TokenTypes.keywords.loop)) {\r\n return null;\r\n }\r\n\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n\r\n this._consume(TokenTypes.tokens.brace_left, \"Expected '{' for loop.\");\r\n\r\n // statement*\r\n const statements: Array = [];\r\n let statement = this._statement();\r\n while (statement !== null) {\r\n if (Array.isArray(statement)) {\r\n for (let s of statement) {\r\n statements.push(s);\r\n }\r\n } else {\r\n statements.push(statement);\r\n }\r\n statement = this._statement();\r\n }\r\n\r\n // continuing_statement: continuing compound_statement\r\n let continuing: Array | null = null;\r\n if (this._match(TokenTypes.keywords.continuing)) {\r\n continuing = this._compound_statement();\r\n }\r\n\r\n this._consume(TokenTypes.tokens.brace_right, \"Expected '}' for loop.\");\r\n\r\n return new AST.Loop(statements, continuing);\r\n }\r\n\r\n _switch_statement(): AST.Switch | null {\r\n // switch optional_paren_expression brace_left switch_body+ brace_right\r\n if (!this._match(TokenTypes.keywords.switch)) {\r\n return null;\r\n }\r\n\r\n const condition = this._optional_paren_expression();\r\n\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n\r\n this._consume(TokenTypes.tokens.brace_left, \"Expected '{' for switch.\");\r\n const body = this._switch_body();\r\n if (body == null || body.length == 0) {\r\n throw this._error(this._previous(), \"Expected 'case' or 'default'.\");\r\n }\r\n this._consume(TokenTypes.tokens.brace_right, \"Expected '}' for switch.\");\r\n return new AST.Switch(condition, body);\r\n }\r\n\r\n _switch_body(): Array {\r\n // case case_selectors colon brace_left case_body? brace_right\r\n // default colon brace_left case_body? brace_right\r\n const cases: Array = [];\r\n if (this._match(TokenTypes.keywords.case)) {\r\n const selector = this._case_selectors();\r\n this._match(TokenTypes.tokens.colon); // colon is optional\r\n\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n\r\n this._consume(\r\n TokenTypes.tokens.brace_left,\r\n \"Exected '{' for switch case.\"\r\n );\r\n const body = this._case_body();\r\n this._consume(\r\n TokenTypes.tokens.brace_right,\r\n \"Exected '}' for switch case.\"\r\n );\r\n cases.push(new AST.Case(selector, body));\r\n }\r\n\r\n if (this._match(TokenTypes.keywords.default)) {\r\n this._match(TokenTypes.tokens.colon); // colon is optional\r\n \r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n \r\n this._consume(\r\n TokenTypes.tokens.brace_left,\r\n \"Exected '{' for switch default.\"\r\n );\r\n const body = this._case_body();\r\n this._consume(\r\n TokenTypes.tokens.brace_right,\r\n \"Exected '}' for switch default.\"\r\n );\r\n cases.push(new AST.Default(body));\r\n }\r\n\r\n if (this._check([TokenTypes.keywords.default, TokenTypes.keywords.case])) {\r\n const _cases = this._switch_body();\r\n cases.push(_cases[0]);\r\n }\r\n\r\n return cases;\r\n }\r\n\r\n _case_selectors(): Array {\r\n // const_literal (comma const_literal)* comma?\r\n const selectors = [\r\n this._shift_expression(),//?.evaluate(this._context).toString() ?? \"\",\r\n ];\r\n while (this._match(TokenTypes.tokens.comma)) {\r\n selectors.push(\r\n this._shift_expression(),//?.evaluate(this._context).toString() ?? \"\"\r\n );\r\n }\r\n return selectors;\r\n }\r\n\r\n _case_body(): Array {\r\n // statement case_body?\r\n // fallthrough semicolon\r\n if (this._match(TokenTypes.keywords.fallthrough)) {\r\n this._consume(TokenTypes.tokens.semicolon, \"Expected ';'\");\r\n return [];\r\n }\r\n\r\n let statement = this._statement();\r\n if (statement == null) {\r\n return [];\r\n }\r\n\r\n if (!(statement instanceof Array)) {\r\n statement = [statement];\r\n }\r\n\r\n const nextStatement = this._case_body();\r\n if (nextStatement.length == 0) {\r\n return statement;\r\n }\r\n\r\n return [...statement, nextStatement[0]];\r\n }\r\n\r\n _if_statement(): AST.If | null {\r\n // if optional_paren_expression compound_statement elseif_statement? else_statement?\r\n if (!this._match(TokenTypes.keywords.if)) {\r\n return null;\r\n }\r\n\r\n const condition = this._optional_paren_expression();\r\n\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n\r\n const block = this._compound_statement();\r\n\r\n let elseif: Array | null = [];\r\n if (this._match_elseif()) {\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n elseif = this._elseif_statement(elseif);\r\n }\r\n\r\n let _else: Array | null = null;\r\n if (this._match(TokenTypes.keywords.else)) {\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n _else = this._compound_statement();\r\n }\r\n\r\n return new AST.If(condition, block, elseif, _else);\r\n }\r\n\r\n _match_elseif(): boolean {\r\n if (\r\n this._tokens[this._current].type === TokenTypes.keywords.else &&\r\n this._tokens[this._current + 1].type === TokenTypes.keywords.if\r\n ) {\r\n this._advance();\r\n this._advance();\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _elseif_statement(elseif: Array = []): Array {\r\n // else_if optional_paren_expression compound_statement elseif_statement?\r\n const condition = this._optional_paren_expression();\r\n const block = this._compound_statement();\r\n elseif.push(new AST.ElseIf(condition, block));\r\n if (this._match_elseif()) {\r\n let attributes = null;\r\n if (this._check(TokenTypes.tokens.attr)) {\r\n attributes = this._attribute();\r\n }\r\n this._elseif_statement(elseif);\r\n }\r\n return elseif;\r\n }\r\n\r\n _return_statement(): AST.Return | null {\r\n // return short_circuit_or_expression?\r\n if (!this._match(TokenTypes.keywords.return)) {\r\n return null;\r\n }\r\n const value = this._short_circuit_or_expression();\r\n return new AST.Return(value);\r\n }\r\n\r\n _short_circuit_or_expression(): AST.Expression {\r\n // short_circuit_and_expression\r\n // short_circuit_or_expression or_or short_circuit_and_expression\r\n let expr = this._short_circuit_and_expr();\r\n while (this._match(TokenTypes.tokens.or_or)) {\r\n expr = new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._short_circuit_and_expr()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _short_circuit_and_expr(): AST.Expression {\r\n // inclusive_or_expression\r\n // short_circuit_and_expression and_and inclusive_or_expression\r\n let expr = this._inclusive_or_expression();\r\n while (this._match(TokenTypes.tokens.and_and)) {\r\n expr = new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._inclusive_or_expression()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _inclusive_or_expression(): AST.Expression {\r\n // exclusive_or_expression\r\n // inclusive_or_expression or exclusive_or_expression\r\n let expr = this._exclusive_or_expression();\r\n while (this._match(TokenTypes.tokens.or)) {\r\n expr = new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._exclusive_or_expression()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _exclusive_or_expression(): AST.Expression {\r\n // and_expression\r\n // exclusive_or_expression xor and_expression\r\n let expr = this._and_expression();\r\n while (this._match(TokenTypes.tokens.xor)) {\r\n expr = new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._and_expression()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _and_expression(): AST.Expression {\r\n // equality_expression\r\n // and_expression and equality_expression\r\n let expr = this._equality_expression();\r\n while (this._match(TokenTypes.tokens.and)) {\r\n expr = new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._equality_expression()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _equality_expression(): AST.Expression {\r\n // relational_expression\r\n // relational_expression equal_equal relational_expression\r\n // relational_expression not_equal relational_expression\r\n const expr = this._relational_expression();\r\n if (\r\n this._match([TokenTypes.tokens.equal_equal, TokenTypes.tokens.not_equal])\r\n ) {\r\n return new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._relational_expression()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _relational_expression(): AST.Expression {\r\n // shift_expression\r\n // relational_expression less_than shift_expression\r\n // relational_expression greater_than shift_expression\r\n // relational_expression less_than_equal shift_expression\r\n // relational_expression greater_than_equal shift_expression\r\n let expr = this._shift_expression();\r\n while (\r\n this._match([\r\n TokenTypes.tokens.less_than,\r\n TokenTypes.tokens.greater_than,\r\n TokenTypes.tokens.less_than_equal,\r\n TokenTypes.tokens.greater_than_equal,\r\n ])\r\n ) {\r\n expr = new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._shift_expression()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _shift_expression(): AST.Expression {\r\n // additive_expression\r\n // shift_expression shift_left additive_expression\r\n // shift_expression shift_right additive_expression\r\n let expr = this._additive_expression();\r\n while (\r\n this._match([TokenTypes.tokens.shift_left, TokenTypes.tokens.shift_right])\r\n ) {\r\n expr = new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._additive_expression()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _additive_expression(): AST.Expression {\r\n // multiplicative_expression\r\n // additive_expression plus multiplicative_expression\r\n // additive_expression minus multiplicative_expression\r\n let expr = this._multiplicative_expression();\r\n while (this._match([TokenTypes.tokens.plus, TokenTypes.tokens.minus])) {\r\n expr = new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._multiplicative_expression()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _multiplicative_expression(): AST.Expression {\r\n // unary_expression\r\n // multiplicative_expression star unary_expression\r\n // multiplicative_expression forward_slash unary_expression\r\n // multiplicative_expression modulo unary_expression\r\n let expr = this._unary_expression();\r\n while (\r\n this._match([\r\n TokenTypes.tokens.star,\r\n TokenTypes.tokens.forward_slash,\r\n TokenTypes.tokens.modulo,\r\n ])\r\n ) {\r\n expr = new AST.BinaryOperator(\r\n this._previous().toString(),\r\n expr,\r\n this._unary_expression()\r\n );\r\n }\r\n return expr;\r\n }\r\n\r\n _unary_expression(): AST.Expression {\r\n // singular_expression\r\n // minus unary_expression\r\n // bang unary_expression\r\n // tilde unary_expression\r\n // star unary_expression\r\n // and unary_expression\r\n if (\r\n this._match([\r\n TokenTypes.tokens.minus,\r\n TokenTypes.tokens.bang,\r\n TokenTypes.tokens.tilde,\r\n TokenTypes.tokens.star,\r\n TokenTypes.tokens.and,\r\n ])\r\n ) {\r\n return new AST.UnaryOperator(\r\n this._previous().toString(),\r\n this._unary_expression()\r\n );\r\n }\r\n return this._singular_expression();\r\n }\r\n\r\n _singular_expression(): AST.Expression {\r\n // primary_expression postfix_expression ?\r\n const expr = this._primary_expression();\r\n const p = this._postfix_expression();\r\n if (p) {\r\n expr.postfix = p;\r\n }\r\n return expr;\r\n }\r\n\r\n _postfix_expression(): AST.Expression | null {\r\n // bracket_left short_circuit_or_expression bracket_right postfix_expression?\r\n if (this._match(TokenTypes.tokens.bracket_left)) {\r\n const expr = this._short_circuit_or_expression();\r\n this._consume(TokenTypes.tokens.bracket_right, \"Expected ']'.\");\r\n const arrayIndex = new AST.ArrayIndex(expr);\r\n const p = this._postfix_expression();\r\n if (p) {\r\n arrayIndex.postfix = p;\r\n }\r\n return arrayIndex;\r\n }\r\n\r\n // period ident postfix_expression?\r\n if (this._match(TokenTypes.tokens.period)) {\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected member name.\"\r\n );\r\n const p = this._postfix_expression();\r\n const expr = new AST.StringExpr(name.lexeme);\r\n if (p) {\r\n expr.postfix = p;\r\n }\r\n return expr;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _getStruct(name: string): AST.Type | null {\r\n if (this._context.aliases.has(name)) {\r\n const alias = this._context.aliases.get(name).type;\r\n return alias;\r\n }\r\n if (this._context.structs.has(name)) {\r\n const struct = this._context.structs.get(name);\r\n return struct;\r\n }\r\n return null;\r\n }\r\n\r\n _primary_expression(): AST.Expression {\r\n // ident argument_expression_list?\r\n if (this._match(TokenTypes.tokens.ident)) {\r\n const name = this._previous().toString();\r\n if (this._check(TokenTypes.tokens.paren_left)) {\r\n const args = this._argument_expression_list();\r\n const struct = this._getStruct(name);\r\n if (struct != null) {\r\n return new AST.CreateExpr(struct, args);\r\n }\r\n return new AST.CallExpr(name, args);\r\n }\r\n if (this._context.constants.has(name)) {\r\n const c = this._context.constants.get(name);\r\n return new AST.ConstExpr(name, c.value);\r\n }\r\n return new AST.VariableExpr(name);\r\n }\r\n\r\n // const_literal\r\n if (this._match(TokenTypes.const_literal)) {\r\n return new AST.LiteralExpr(parseFloat(this._previous().toString()));\r\n }\r\n\r\n // paren_expression\r\n if (this._check(TokenTypes.tokens.paren_left)) {\r\n return this._paren_expression();\r\n }\r\n\r\n // bitcast less_than type_decl greater_than paren_expression\r\n if (this._match(TokenTypes.keywords.bitcast)) {\r\n this._consume(TokenTypes.tokens.less_than, \"Expected '<'.\");\r\n const type = this._type_decl();\r\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>'.\");\r\n const value = this._paren_expression();\r\n return new AST.BitcastExpr(type, value);\r\n }\r\n\r\n // type_decl argument_expression_list\r\n const type = this._type_decl();\r\n const args = this._argument_expression_list();\r\n return new AST.CreateExpr(type, args);\r\n }\r\n\r\n _argument_expression_list(): Array | null {\r\n // paren_left ((short_circuit_or_expression comma)* short_circuit_or_expression comma?)? paren_right\r\n if (!this._match(TokenTypes.tokens.paren_left)) {\r\n return null;\r\n }\r\n\r\n const args: Array = [];\r\n do {\r\n if (this._check(TokenTypes.tokens.paren_right)) {\r\n break;\r\n }\r\n const arg = this._short_circuit_or_expression();\r\n args.push(arg);\r\n } while (this._match(TokenTypes.tokens.comma));\r\n this._consume(\r\n TokenTypes.tokens.paren_right,\r\n \"Expected ')' for agument list\"\r\n );\r\n\r\n return args;\r\n }\r\n\r\n _optional_paren_expression(): AST.GroupingExpr {\r\n // [paren_left] short_circuit_or_expression [paren_right]\r\n this._match(TokenTypes.tokens.paren_left);\r\n const expr = this._short_circuit_or_expression();\r\n this._match(TokenTypes.tokens.paren_right);\r\n return new AST.GroupingExpr([expr]);\r\n }\r\n\r\n _paren_expression(): AST.GroupingExpr {\r\n // paren_left short_circuit_or_expression paren_right\r\n this._consume(TokenTypes.tokens.paren_left, \"Expected '('.\");\r\n const expr = this._short_circuit_or_expression();\r\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')'.\");\r\n return new AST.GroupingExpr([expr]);\r\n }\r\n\r\n _struct_decl(): AST.Struct | null {\r\n // attribute* struct ident struct_body_decl\r\n if (!this._match(TokenTypes.keywords.struct)) {\r\n return null;\r\n }\r\n\r\n const startLine = this._currentLine;\r\n\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected name for struct.\"\r\n ).toString();\r\n\r\n // struct_body_decl: brace_left (struct_member comma)* struct_member comma? brace_right\r\n this._consume(\r\n TokenTypes.tokens.brace_left,\r\n \"Expected '{' for struct body.\"\r\n );\r\n const members: Array = [];\r\n while (!this._check(TokenTypes.tokens.brace_right)) {\r\n // struct_member: attribute* variable_ident_decl\r\n const memberAttrs = this._attribute();\r\n\r\n const memberName = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected variable name.\"\r\n ).toString();\r\n\r\n this._consume(\r\n TokenTypes.tokens.colon,\r\n \"Expected ':' for struct member type.\"\r\n );\r\n\r\n const typeAttrs = this._attribute();\r\n const memberType = this._type_decl();\r\n if (memberType != null) {\r\n memberType.attributes = typeAttrs;\r\n }\r\n\r\n if (!this._check(TokenTypes.tokens.brace_right))\r\n this._consume(\r\n TokenTypes.tokens.comma,\r\n \"Expected ',' for struct member.\"\r\n );\r\n else this._match(TokenTypes.tokens.comma); // trailing comma optional.\r\n\r\n members.push(new AST.Member(memberName, memberType, memberAttrs));\r\n }\r\n\r\n this._consume(\r\n TokenTypes.tokens.brace_right,\r\n \"Expected '}' after struct body.\"\r\n );\r\n\r\n const endLine = this._currentLine;\r\n\r\n const structNode = new AST.Struct(name, members, startLine, endLine);\r\n this._context.structs.set(name, structNode);\r\n return structNode;\r\n }\r\n\r\n _global_variable_decl(): AST.Var | null {\r\n // attribute* variable_decl (equal const_expression)?\r\n const _var = this._variable_decl();\r\n if (_var && this._match(TokenTypes.tokens.equal)) {\r\n _var.value = this._const_expression();\r\n }\r\n return _var;\r\n }\r\n\r\n _override_variable_decl(): AST.Override | null {\r\n // attribute* override_decl (equal const_expression)?\r\n const _override = this._override_decl();\r\n if (_override && this._match(TokenTypes.tokens.equal)) {\r\n _override.value = this._const_expression();\r\n }\r\n\r\n return _override;\r\n }\r\n\r\n _global_const_decl(): AST.Let | null {\r\n // attribute* const (ident variable_ident_decl) global_const_initializer?\r\n if (!this._match(TokenTypes.keywords.const)) {\r\n return null;\r\n }\r\n\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected variable name\"\r\n );\r\n let type: AST.Type | null = null;\r\n if (this._match(TokenTypes.tokens.colon)) {\r\n const attrs = this._attribute();\r\n type = this._type_decl();\r\n if (type != null) {\r\n type.attributes = attrs;\r\n }\r\n }\r\n let value: AST.Expression | null = null;\r\n if (this._match(TokenTypes.tokens.equal)) {\r\n const valueExpr = this._short_circuit_or_expression();\r\n if (valueExpr instanceof AST.CreateExpr) {\r\n value = valueExpr;\r\n } else if (\r\n valueExpr instanceof AST.ConstExpr &&\r\n valueExpr.initializer instanceof AST.CreateExpr\r\n ) {\r\n value = valueExpr.initializer;\r\n } else {\r\n try {\r\n const constValue = valueExpr.evaluate(this._context);\r\n value = new AST.LiteralExpr(constValue);\r\n } catch {\r\n value = valueExpr;\r\n }\r\n }\r\n }\r\n const c = new AST.Const(name.toString(), type, \"\", \"\", value);\r\n this._context.constants.set(c.name, c);\r\n return c;\r\n }\r\n\r\n _global_let_decl(): AST.Let | null {\r\n // attribute* let (ident variable_ident_decl) global_const_initializer?\r\n if (!this._match(TokenTypes.keywords.let)) {\r\n return null;\r\n }\r\n\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected variable name\"\r\n );\r\n let type: AST.Type | null = null;\r\n if (this._match(TokenTypes.tokens.colon)) {\r\n const attrs = this._attribute();\r\n type = this._type_decl();\r\n if (type != null) {\r\n type.attributes = attrs;\r\n }\r\n }\r\n let value: AST.Expression | null = null;\r\n if (this._match(TokenTypes.tokens.equal)) {\r\n value = this._const_expression();\r\n }\r\n return new AST.Let(name.toString(), type, \"\", \"\", value);\r\n }\r\n\r\n _const_expression(): AST.Expression {\r\n // type_decl paren_left ((const_expression comma)* const_expression comma?)? paren_right\r\n // const_literal\r\n return this._short_circuit_or_expression();\r\n }\r\n\r\n _variable_decl(): AST.Var | null {\r\n // var variable_qualifier? (ident variable_ident_decl)\r\n if (!this._match(TokenTypes.keywords.var)) {\r\n return null;\r\n }\r\n\r\n // variable_qualifier: less_than storage_class (comma access_mode)? greater_than\r\n let storage: string = \"\";\r\n let access: string = \"\";\r\n if (this._match(TokenTypes.tokens.less_than)) {\r\n storage = this._consume(\r\n TokenTypes.storage_class,\r\n \"Expected storage_class.\"\r\n ).toString();\r\n if (this._match(TokenTypes.tokens.comma))\r\n access = this._consume(\r\n TokenTypes.access_mode,\r\n \"Expected access_mode.\"\r\n ).toString();\r\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>'.\");\r\n }\r\n\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected variable name\"\r\n );\r\n let type: AST.Type | null = null;\r\n if (this._match(TokenTypes.tokens.colon)) {\r\n const attrs = this._attribute();\r\n type = this._type_decl();\r\n if (type != null) {\r\n type.attributes = attrs;\r\n }\r\n }\r\n\r\n return new AST.Var(name.toString(), type, storage, access, null);\r\n }\r\n\r\n _override_decl(): AST.Override | null {\r\n // override (ident variable_ident_decl)\r\n if (!this._match(TokenTypes.keywords.override)) {\r\n return null;\r\n }\r\n\r\n const name = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected variable name\"\r\n );\r\n let type: AST.Type | null = null;\r\n if (this._match(TokenTypes.tokens.colon)) {\r\n const attrs = this._attribute();\r\n type = this._type_decl();\r\n if (type != null) {\r\n type.attributes = attrs;\r\n }\r\n }\r\n\r\n return new AST.Override(name.toString(), type, null);\r\n }\r\n\r\n _diagnostic(): AST.Diagnostic | null {\r\n // diagnostic(severity_control_name, diagnostic_rule_name)\r\n this._consume(TokenTypes.tokens.paren_left, \"Expected '('\");\r\n const severity = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected severity control name.\"\r\n );\r\n this._consume(TokenTypes.tokens.comma, \"Expected ','\");\r\n const rule = this._consume(\r\n TokenTypes.tokens.ident,\r\n \"Expected diagnostic rule name.\"\r\n );\r\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')'\");\r\n return new AST.Diagnostic(severity.toString(), rule.toString());\r\n }\r\n\r\n _enable_directive(): AST.Enable {\r\n // enable ident semicolon\r\n const name = this._consume(TokenTypes.tokens.ident, \"identity expected.\");\r\n return new AST.Enable(name.toString());\r\n }\r\n\r\n _requires_directive(): AST.Requires {\r\n // requires extension [, extension]* semicolon\r\n const extensions: string[] = [this._consume(TokenTypes.tokens.ident, \"identity expected.\").toString()];\r\n while (this._match(TokenTypes.tokens.comma)) {\r\n const name = this._consume(TokenTypes.tokens.ident, \"identity expected.\");\r\n extensions.push(name.toString());\r\n }\r\n return new AST.Requires(extensions);\r\n }\r\n\r\n _type_alias(): AST.Alias {\r\n // type ident equal type_decl\r\n const name = this._consume(TokenTypes.tokens.ident, \"identity expected.\");\r\n this._consume(TokenTypes.tokens.equal, \"Expected '=' for type alias.\");\r\n\r\n let aliasType = this._type_decl();\r\n if (aliasType === null) {\r\n throw this._error(this._peek(), \"Expected Type for Alias.\");\r\n }\r\n if (this._context.aliases.has(aliasType.name)) {\r\n aliasType = this._context.aliases.get(aliasType.name).type;\r\n }\r\n\r\n const aliasNode = new AST.Alias(name.toString(), aliasType);\r\n this._context.aliases.set(aliasNode.name, aliasNode);\r\n\r\n return aliasNode;\r\n }\r\n\r\n _type_decl(): AST.Type | null {\r\n // ident\r\n // bool\r\n // float32\r\n // int32\r\n // uint32\r\n // vec2 less_than type_decl greater_than\r\n // vec3 less_than type_decl greater_than\r\n // vec4 less_than type_decl greater_than\r\n // mat2x2 less_than type_decl greater_than\r\n // mat2x3 less_than type_decl greater_than\r\n // mat2x4 less_than type_decl greater_than\r\n // mat3x2 less_than type_decl greater_than\r\n // mat3x3 less_than type_decl greater_than\r\n // mat3x4 less_than type_decl greater_than\r\n // mat4x2 less_than type_decl greater_than\r\n // mat4x3 less_than type_decl greater_than\r\n // mat4x4 less_than type_decl greater_than\r\n // atomic less_than type_decl greater_than\r\n // pointer less_than storage_class comma type_decl (comma access_mode)? greater_than\r\n // array_type_decl\r\n // texture_sampler_types\r\n\r\n if (\r\n this._check([\r\n TokenTypes.tokens.ident,\r\n ...TokenTypes.texel_format,\r\n TokenTypes.keywords.bool,\r\n TokenTypes.keywords.f32,\r\n TokenTypes.keywords.i32,\r\n TokenTypes.keywords.u32,\r\n ])\r\n ) {\r\n const type = this._advance();\r\n const typeName = type.toString();\r\n if (this._context.structs.has(typeName)) {\r\n return this._context.structs.get(typeName);\r\n }\r\n if (this._context.aliases.has(typeName)) {\r\n return this._context.aliases.get(typeName).type;\r\n }\r\n return new AST.Type(type.toString());\r\n }\r\n\r\n // texture_sampler_types\r\n let type = this._texture_sampler_types();\r\n if (type) {\r\n return type;\r\n }\r\n\r\n if (this._check(TokenTypes.template_types)) {\r\n let type = this._advance().toString();\r\n let format: AST.Type | null = null;\r\n let access: string | null = null;\r\n if (this._match(TokenTypes.tokens.less_than)) {\r\n format = this._type_decl();\r\n access = null;\r\n if (this._match(TokenTypes.tokens.comma)) {\r\n access = this._consume(\r\n TokenTypes.access_mode,\r\n \"Expected access_mode for pointer\"\r\n ).toString();\r\n }\r\n this._consume(TokenTypes.tokens.greater_than, \"Expected '>' for type.\");\r\n }\r\n return new AST.TemplateType(type, format, access);\r\n }\r\n\r\n // pointer less_than storage_class comma type_decl (comma access_mode)? greater_than\r\n if (this._match(TokenTypes.keywords.ptr)) {\r\n let pointer = this._previous().toString();\r\n this._consume(TokenTypes.tokens.less_than, \"Expected '<' for pointer.\");\r\n const storage = this._consume(\r\n TokenTypes.storage_class,\r\n \"Expected storage_class for pointer\"\r\n );\r\n this._consume(TokenTypes.tokens.comma, \"Expected ',' for pointer.\");\r\n const decl = this._type_decl();\r\n let access: string | null = null;\r\n if (this._match(TokenTypes.tokens.comma)) {\r\n access = this._consume(\r\n TokenTypes.access_mode,\r\n \"Expected access_mode for pointer\"\r\n ).toString();\r\n }\r\n this._consume(\r\n TokenTypes.tokens.greater_than,\r\n \"Expected '>' for pointer.\"\r\n );\r\n return new AST.PointerType(pointer, storage.toString(), decl, access);\r\n }\r\n\r\n // The following type_decl's have an optional attribyte_list*\r\n const attrs = this._attribute();\r\n\r\n // attribute* array\r\n // attribute* array less_than type_decl (comma element_count_expression)? greater_than\r\n if (this._match(TokenTypes.keywords.array)) {\r\n let format = null;\r\n let countInt = -1;\r\n const array = this._previous();\r\n let countNode: AST.Expression | null = null;\r\n if (this._match(TokenTypes.tokens.less_than)) {\r\n format = this._type_decl();\r\n if (this._context.aliases.has(format.name)) {\r\n format = this._context.aliases.get(format.name).type;\r\n }\r\n let count: string = \"\";\r\n if (this._match(TokenTypes.tokens.comma)) {\r\n countNode = this._shift_expression();\r\n // If we can't evaluate the node, defer evaluating it until after the shader has\r\n // finished being parsed, because const statements can be declared **after** they\r\n // are used.\r\n try {\r\n count = countNode.evaluate(this._context).toString();\r\n countNode = null;\r\n } catch (e) {\r\n count = \"1\";\r\n }\r\n }\r\n this._consume(\r\n TokenTypes.tokens.greater_than,\r\n \"Expected '>' for array.\"\r\n );\r\n countInt = count ? parseInt(count) : 0;\r\n }\r\n const arrayType = new AST.ArrayType(array.toString(), attrs, format, countInt);\r\n if (countNode) {\r\n this._deferArrayCountEval.push({ arrayType, countNode });\r\n }\r\n return arrayType;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _texture_sampler_types(): AST.SamplerType | null {\r\n // sampler_type\r\n if (this._match(TokenTypes.sampler_type)) {\r\n return new AST.SamplerType(this._previous().toString(), null, null);\r\n }\r\n\r\n // depth_texture_type\r\n if (this._match(TokenTypes.depth_texture_type)) {\r\n return new AST.SamplerType(this._previous().toString(), null, null);\r\n }\r\n\r\n // sampled_texture_type less_than type_decl greater_than\r\n // multisampled_texture_type less_than type_decl greater_than\r\n if (\r\n this._match(TokenTypes.sampled_texture_type) ||\r\n this._match(TokenTypes.multisampled_texture_type)\r\n ) {\r\n const sampler = this._previous();\r\n this._consume(\r\n TokenTypes.tokens.less_than,\r\n \"Expected '<' for sampler type.\"\r\n );\r\n const format = this._type_decl();\r\n this._consume(\r\n TokenTypes.tokens.greater_than,\r\n \"Expected '>' for sampler type.\"\r\n );\r\n return new AST.SamplerType(sampler.toString(), format, null);\r\n }\r\n\r\n // storage_texture_type less_than texel_format comma access_mode greater_than\r\n if (this._match(TokenTypes.storage_texture_type)) {\r\n const sampler = this._previous();\r\n this._consume(\r\n TokenTypes.tokens.less_than,\r\n \"Expected '<' for sampler type.\"\r\n );\r\n const format = this._consume(\r\n TokenTypes.texel_format,\r\n \"Invalid texel format.\"\r\n ).toString();\r\n this._consume(\r\n TokenTypes.tokens.comma,\r\n \"Expected ',' after texel format.\"\r\n );\r\n const access = this._consume(\r\n TokenTypes.access_mode,\r\n \"Expected access mode for storage texture type.\"\r\n ).toString();\r\n this._consume(\r\n TokenTypes.tokens.greater_than,\r\n \"Expected '>' for sampler type.\"\r\n );\r\n return new AST.SamplerType(sampler.toString(), format, access);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _attribute(): Array | null {\r\n // attr ident paren_left (literal_or_ident comma)* literal_or_ident paren_right\r\n // attr ident\r\n\r\n let attributes: Array = [];\r\n\r\n while (this._match(TokenTypes.tokens.attr)) {\r\n const name = this._consume(\r\n TokenTypes.attribute_name,\r\n \"Expected attribute name\"\r\n );\r\n const attr = new AST.Attribute(name.toString(), null);\r\n if (this._match(TokenTypes.tokens.paren_left)) {\r\n // literal_or_ident\r\n attr.value = this._consume(\r\n TokenTypes.literal_or_ident,\r\n \"Expected attribute value\"\r\n ).toString();\r\n if (this._check(TokenTypes.tokens.comma)) {\r\n this._advance();\r\n do {\r\n const v = this._consume(\r\n TokenTypes.literal_or_ident,\r\n \"Expected attribute value\"\r\n ).toString();\r\n if (!(attr.value instanceof Array)) {\r\n attr.value = [attr.value as string];\r\n }\r\n attr.value.push(v);\r\n } while (this._match(TokenTypes.tokens.comma));\r\n }\r\n this._consume(TokenTypes.tokens.paren_right, \"Expected ')'\");\r\n }\r\n attributes.push(attr);\r\n }\r\n\r\n if (attributes.length == 0) {\r\n return null;\r\n }\r\n\r\n return attributes;\r\n }\r\n}\r\n","/**\r\n * @author Brendan Duncan / https://github.com/brendan-duncan\r\n */\r\nimport { WgslParser } from \"./wgsl_parser.js\";\r\nimport { TokenTypes } from \"./wgsl_scanner.js\";\r\nimport * as AST from \"./wgsl_ast.js\";\r\n\r\nexport class TypeInfo {\r\n name: string;\r\n attributes: Array | null;\r\n size: number;\r\n\r\n constructor(name: string, attributes: Array | null) {\r\n this.name = name;\r\n this.attributes = attributes;\r\n this.size = 0;\r\n }\r\n\r\n get isArray(): boolean {\r\n return false;\r\n }\r\n\r\n get isStruct(): boolean {\r\n return false;\r\n }\r\n\r\n get isTemplate(): boolean {\r\n return false;\r\n }\r\n}\r\n\r\nexport class MemberInfo {\r\n name: string;\r\n type: TypeInfo;\r\n attributes: Array | null;\r\n offset: number;\r\n size: number;\r\n\r\n constructor(\r\n name: string,\r\n type: TypeInfo,\r\n attributes: Array | null\r\n ) {\r\n this.name = name;\r\n this.type = type;\r\n this.attributes = attributes;\r\n this.offset = 0;\r\n this.size = 0;\r\n }\r\n\r\n get isArray(): boolean {\r\n return this.type.isArray;\r\n }\r\n\r\n get isStruct(): boolean {\r\n return this.type.isStruct;\r\n }\r\n\r\n get isTemplate(): boolean {\r\n return this.type.isTemplate;\r\n }\r\n\r\n get align(): number {\r\n return this.type.isStruct ? (this.type as StructInfo).align : 0;\r\n }\r\n\r\n get members(): Array | null {\r\n return this.type.isStruct ? (this.type as StructInfo).members : null;\r\n }\r\n\r\n get format(): TypeInfo | null {\r\n return this.type.isArray\r\n ? (this.type as ArrayInfo).format\r\n : this.type.isTemplate\r\n ? (this.type as TemplateInfo).format\r\n : null;\r\n }\r\n\r\n get count(): number {\r\n return this.type.isArray ? (this.type as ArrayInfo).count : 0;\r\n }\r\n\r\n get stride(): number {\r\n return this.type.isArray ? (this.type as ArrayInfo).stride : this.size;\r\n }\r\n}\r\n\r\nexport class StructInfo extends TypeInfo {\r\n members: Array = [];\r\n align: number = 0;\r\n startLine: number = -1;\r\n endLine: number = -1;\r\n inUse: boolean = false;\r\n\r\n constructor(name: string, attributes: Array | null) {\r\n super(name, attributes);\r\n }\r\n\r\n get isStruct(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport class ArrayInfo extends TypeInfo {\r\n format: TypeInfo;\r\n count: number;\r\n stride: number;\r\n\r\n constructor(name: string, attributes: Array | null) {\r\n super(name, attributes);\r\n this.count = 0;\r\n this.stride = 0;\r\n }\r\n\r\n get isArray(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport class TemplateInfo extends TypeInfo {\r\n format: TypeInfo | null;\r\n access: string;\r\n constructor(\r\n name: string,\r\n format: TypeInfo | null,\r\n attributes: Array | null,\r\n access: string\r\n ) {\r\n super(name, attributes);\r\n this.format = format;\r\n this.access = access;\r\n }\r\n\r\n get isTemplate(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport enum ResourceType {\r\n Uniform,\r\n Storage,\r\n Texture,\r\n Sampler,\r\n StorageTexture,\r\n}\r\n\r\nexport class VariableInfo {\r\n attributes: Array | null;\r\n name: string;\r\n type: TypeInfo;\r\n group: number;\r\n binding: number;\r\n resourceType: ResourceType;\r\n access: string;\r\n\r\n constructor(\r\n name: string,\r\n type: TypeInfo,\r\n group: number,\r\n binding: number,\r\n attributes: Array | null,\r\n resourceType: ResourceType,\r\n access: string\r\n ) {\r\n this.name = name;\r\n this.type = type;\r\n this.group = group;\r\n this.binding = binding;\r\n this.attributes = attributes;\r\n this.resourceType = resourceType;\r\n this.access = access;\r\n }\r\n\r\n get isArray(): boolean {\r\n return this.type.isArray;\r\n }\r\n\r\n get isStruct(): boolean {\r\n return this.type.isStruct;\r\n }\r\n\r\n get isTemplate(): boolean {\r\n return this.type.isTemplate;\r\n }\r\n\r\n get size(): number {\r\n return this.type.size;\r\n }\r\n\r\n get align(): number {\r\n return this.type.isStruct ? (this.type as StructInfo).align : 0;\r\n }\r\n\r\n get members(): Array | null {\r\n return this.type.isStruct ? (this.type as StructInfo).members : null;\r\n }\r\n\r\n get format(): TypeInfo | null {\r\n return this.type.isArray\r\n ? (this.type as ArrayInfo).format\r\n : this.type.isTemplate\r\n ? (this.type as TemplateInfo).format\r\n : null;\r\n }\r\n\r\n get count(): number {\r\n return this.type.isArray ? (this.type as ArrayInfo).count : 0;\r\n }\r\n\r\n get stride(): number {\r\n return this.type.isArray ? (this.type as ArrayInfo).stride : this.size;\r\n }\r\n}\r\n\r\nexport class AliasInfo {\r\n name: string;\r\n type: TypeInfo;\r\n\r\n constructor(name: string, type: TypeInfo) {\r\n this.name = name;\r\n this.type = type;\r\n }\r\n}\r\n\r\nclass _TypeSize {\r\n align: number;\r\n size: number;\r\n\r\n constructor(align: number, size: number) {\r\n this.align = align;\r\n this.size = size;\r\n }\r\n}\r\n\r\nexport class InputInfo {\r\n name: string;\r\n type: TypeInfo | null;\r\n locationType: string;\r\n location: number | string;\r\n interpolation: string | null;\r\n\r\n constructor(\r\n name: string,\r\n type: TypeInfo | null,\r\n locationType: string,\r\n location: number | string\r\n ) {\r\n this.name = name;\r\n this.type = type;\r\n this.locationType = locationType;\r\n this.location = location;\r\n this.interpolation = null;\r\n }\r\n}\r\n\r\nexport class OutputInfo {\r\n name: string;\r\n type: TypeInfo | null;\r\n locationType: string;\r\n location: number | string;\r\n\r\n constructor(\r\n name: string,\r\n type: TypeInfo | null,\r\n locationType: string,\r\n location: number | string\r\n ) {\r\n this.name = name;\r\n this.type = type;\r\n this.locationType = locationType;\r\n this.location = location;\r\n }\r\n}\r\n\r\nexport class OverrideInfo {\r\n name: string;\r\n type: TypeInfo | null;\r\n attributes: Array | null;\r\n id: number;\r\n\r\n constructor(\r\n name: string,\r\n type: TypeInfo | null,\r\n attributes: Array | null,\r\n id: number\r\n ) {\r\n this.name = name;\r\n this.type = type;\r\n this.attributes = attributes;\r\n this.id = id;\r\n }\r\n}\r\n\r\nexport class ArgumentInfo {\r\n name: string;\r\n type: TypeInfo;\r\n\r\n constructor(\r\n name: string,\r\n type: TypeInfo,\r\n ) {\r\n this.name = name;\r\n this.type = type;\r\n }\r\n}\r\n\r\nexport class FunctionInfo {\r\n name: string;\r\n stage: string | null = null;\r\n inputs: Array = [];\r\n outputs: Array = [];\r\n arguments: Array = [];\r\n returnType: TypeInfo | null = null;\r\n resources: Array = [];\r\n overrides: Array = [];\r\n startLine: number = -1;\r\n endLine: number = -1;\r\n inUse: boolean = false;\r\n calls: Set = new Set();\r\n\r\n constructor(name: string, stage: string | null = null) {\r\n this.name = name;\r\n this.stage = stage;\r\n }\r\n}\r\n\r\nexport class EntryFunctions {\r\n vertex: Array = [];\r\n fragment: Array = [];\r\n compute: Array = [];\r\n}\r\n\r\nclass _FunctionResources {\r\n node: AST.Function;\r\n resources: Array | null = null;\r\n inUse: boolean = false;\r\n info: FunctionInfo | null = null;\r\n constructor(node: AST.Function) {\r\n this.node = node;\r\n }\r\n}\r\n\r\nexport class WgslReflect {\r\n /// All top-level uniform vars in the shader.\r\n uniforms: Array = [];\r\n /// All top-level storage vars in the shader.\r\n storage: Array = [];\r\n /// All top-level texture vars in the shader;\r\n textures: Array = [];\r\n // All top-level sampler vars in the shader.\r\n samplers: Array = [];\r\n /// All top-level type aliases in the shader.\r\n aliases: Array = [];\r\n /// All top-level overrides in the shader.\r\n overrides: Array = [];\r\n /// All top-level structs in the shader.\r\n structs: Array = [];\r\n /// All entry functions in the shader: vertex, fragment, and/or compute.\r\n entry: EntryFunctions = new EntryFunctions();\r\n /// All functions in the shader, including entry functions.\r\n functions: Array = [];\r\n\r\n _types: Map = new Map();\r\n _functions: Map = new Map();\r\n\r\n constructor(code: string | undefined) {\r\n if (code) {\r\n this.update(code);\r\n }\r\n }\r\n\r\n _isStorageTexture(type: TypeInfo): boolean {\r\n return (\r\n type.name == \"texture_storage_1d\" ||\r\n type.name == \"texture_storage_2d\" ||\r\n type.name == \"texture_storage_2d_array\" ||\r\n type.name == \"texture_storage_3d\"\r\n );\r\n }\r\n\r\n update(code: string) {\r\n const parser = new WgslParser();\r\n const ast = parser.parse(code);\r\n\r\n for (const node of ast) {\r\n if (node instanceof AST.Function) {\r\n this._functions.set(node.name, new _FunctionResources(node as AST.Function));\r\n }\r\n }\r\n\r\n for (const node of ast) {\r\n if (node instanceof AST.Struct) {\r\n const info = this._getTypeInfo(node as AST.Struct, null);\r\n if (info instanceof StructInfo) {\r\n this.structs.push(info as StructInfo);\r\n }\r\n }\r\n }\r\n\r\n for (const node of ast) {\r\n if (node instanceof AST.Alias) {\r\n this.aliases.push(this._getAliasInfo(node as AST.Alias));\r\n continue;\r\n }\r\n\r\n if (node instanceof AST.Override) {\r\n const v = node as AST.Override;\r\n const id = this._getAttributeNum(v.attributes, \"id\", 0);\r\n const type =\r\n v.type != null ? this._getTypeInfo(v.type, v.attributes) : null;\r\n this.overrides.push(new OverrideInfo(v.name, type, v.attributes, id));\r\n continue;\r\n }\r\n\r\n if (this._isUniformVar(node)) {\r\n const v = node as AST.Var;\r\n const g = this._getAttributeNum(v.attributes, \"group\", 0);\r\n const b = this._getAttributeNum(v.attributes, \"binding\", 0);\r\n const type = this._getTypeInfo(v.type!, v.attributes);\r\n const varInfo = new VariableInfo(\r\n v.name,\r\n type,\r\n g,\r\n b,\r\n v.attributes,\r\n ResourceType.Uniform,\r\n v.access\r\n );\r\n this.uniforms.push(varInfo);\r\n continue;\r\n }\r\n\r\n if (this._isStorageVar(node)) {\r\n const v = node as AST.Var;\r\n const g = this._getAttributeNum(v.attributes, \"group\", 0);\r\n const b = this._getAttributeNum(v.attributes, \"binding\", 0);\r\n const type = this._getTypeInfo(v.type!, v.attributes);\r\n const isStorageTexture = this._isStorageTexture(type);\r\n const varInfo = new VariableInfo(\r\n v.name,\r\n type,\r\n g,\r\n b,\r\n v.attributes,\r\n isStorageTexture ? ResourceType.StorageTexture : ResourceType.Storage,\r\n v.access\r\n );\r\n this.storage.push(varInfo);\r\n continue;\r\n }\r\n\r\n if (this._isTextureVar(node)) {\r\n const v = node as AST.Var;\r\n const g = this._getAttributeNum(v.attributes, \"group\", 0);\r\n const b = this._getAttributeNum(v.attributes, \"binding\", 0);\r\n const type = this._getTypeInfo(v.type!, v.attributes);\r\n const isStorageTexture = this._isStorageTexture(type);\r\n const varInfo = new VariableInfo(\r\n v.name,\r\n type,\r\n g,\r\n b,\r\n v.attributes,\r\n isStorageTexture ? ResourceType.StorageTexture : ResourceType.Texture,\r\n v.access\r\n );\r\n if (isStorageTexture) {\r\n this.storage.push(varInfo);\r\n } else {\r\n this.textures.push(varInfo);\r\n }\r\n continue;\r\n }\r\n\r\n if (this._isSamplerVar(node)) {\r\n const v = node as AST.Var;\r\n const g = this._getAttributeNum(v.attributes, \"group\", 0);\r\n const b = this._getAttributeNum(v.attributes, \"binding\", 0);\r\n const type = this._getTypeInfo(v.type!, v.attributes);\r\n const varInfo = new VariableInfo(\r\n v.name,\r\n type,\r\n g,\r\n b,\r\n v.attributes,\r\n ResourceType.Sampler,\r\n v.access\r\n );\r\n this.samplers.push(varInfo);\r\n continue;\r\n }\r\n\r\n if (node instanceof AST.Function) {\r\n const vertexStage = this._getAttribute(node, \"vertex\");\r\n const fragmentStage = this._getAttribute(node, \"fragment\");\r\n const computeStage = this._getAttribute(node, \"compute\");\r\n const stage = vertexStage || fragmentStage || computeStage;\r\n\r\n const fn = new FunctionInfo(node.name, stage?.name);\r\n fn.startLine = node.startLine;\r\n fn.endLine = node.endLine;\r\n this.functions.push(fn);\r\n this._functions.get(node.name)!.info = fn;\r\n\r\n if (stage) {\r\n this._functions.get(node.name)!.inUse = true;\r\n fn.inUse = true;\r\n fn.resources = this._findResources(node, !!stage);\r\n fn.inputs = this._getInputs(node.args);\r\n fn.outputs = this._getOutputs(node.returnType);\r\n this.entry[stage.name].push(fn);\r\n } else {\r\n fn.arguments = node.args.map(\r\n (arg) =>\r\n new ArgumentInfo(\r\n arg.name,\r\n this._getTypeInfo(arg.type, arg.attributes)\r\n )\r\n );\r\n fn.returnType = node.returnType\r\n ? this._getTypeInfo(node.returnType, node.attributes)\r\n : null;\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n for (const fn of this._functions.values()) {\r\n if (fn.info) {\r\n fn.info.inUse = fn.inUse;\r\n this._addCalls(fn.node, fn.info.calls);\r\n }\r\n }\r\n\r\n for (const fn of this._functions.values()) {\r\n fn.node.search((node) => {\r\n if (node.astNodeType === \"varExpr\") {\r\n const v = node as AST.VariableExpr;\r\n for (const override of this.overrides) {\r\n if (v.name == override.name) {\r\n fn.info?.overrides.push(override);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (const u of this.uniforms) {\r\n this._markStructsInUse(u.type);\r\n }\r\n for (const s of this.storage) {\r\n this._markStructsInUse(s.type);\r\n }\r\n }\r\n\r\n _markStructsInUse(type: TypeInfo) {\r\n if (!type) {\r\n return;\r\n }\r\n if (type.isStruct) {\r\n (type as StructInfo).inUse = true;\r\n if ((type as StructInfo).members) {\r\n for (const m of (type as StructInfo).members) {\r\n this._markStructsInUse(m.type);\r\n }\r\n }\r\n } else if (type.isArray) {\r\n this._markStructsInUse((type as ArrayInfo).format);\r\n } else if (type.isTemplate) {\r\n if ((type as TemplateInfo).format) {\r\n this._markStructsInUse((type as TemplateInfo).format!);\r\n }\r\n } else {\r\n const alias = this._getAlias(type.name);\r\n if (alias) {\r\n this._markStructsInUse(alias);\r\n }\r\n }\r\n }\r\n\r\n _addCalls(fn: AST.Function, calls: Set, ) {\r\n for (const call of fn.calls) {\r\n const info = this._functions.get(call.name)?.info;\r\n if (info) {\r\n calls.add(info);\r\n }\r\n }\r\n }\r\n\r\n /// Find a resource by its group and binding.\r\n findResource(group: number, binding: number) {\r\n for (const u of this.uniforms) {\r\n if (u.group == group && u.binding == binding) {\r\n return u;\r\n }\r\n }\r\n for (const s of this.storage) {\r\n if (s.group == group && s.binding == binding) {\r\n return s;\r\n }\r\n }\r\n for (const t of this.textures) {\r\n if (t.group == group && t.binding == binding) {\r\n return t;\r\n }\r\n }\r\n for (const s of this.samplers) {\r\n if (s.group == group && s.binding == binding) {\r\n return s;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _findResource(name: string): VariableInfo | null {\r\n for (const u of this.uniforms) {\r\n if (u.name == name) {\r\n return u;\r\n }\r\n }\r\n for (const s of this.storage) {\r\n if (s.name == name) {\r\n return s;\r\n }\r\n }\r\n for (const t of this.textures) {\r\n if (t.name == name) {\r\n return t;\r\n }\r\n }\r\n for (const s of this.samplers) {\r\n if (s.name == name) {\r\n return s;\r\n }\r\n }\r\n return null;\r\n }\r\n \r\n _markStructsFromAST(type: AST.Type) {\r\n const info = this._getTypeInfo(type, null);\r\n this._markStructsInUse(info);\r\n }\r\n\r\n _findResources(fn: AST.Node, isEntry: boolean): Array {\r\n const resources = [];\r\n const self = this;\r\n const varStack = [];\r\n fn.search((node) => {\r\n if (node instanceof AST._BlockStart) {\r\n varStack.push({});\r\n } else if (node instanceof AST._BlockEnd) {\r\n varStack.pop();\r\n } else if (node instanceof AST.Var) {\r\n const v = node as AST.Var;\r\n if (isEntry && v.type !== null) {\r\n this._markStructsFromAST(v.type);\r\n }\r\n if (varStack.length > 0) {\r\n varStack[varStack.length - 1][v.name] = v;\r\n }\r\n } else if (node instanceof AST.CreateExpr) {\r\n const c = node as AST.CreateExpr;\r\n if (isEntry && c.type !== null) {\r\n this._markStructsFromAST(c.type);\r\n }\r\n } else if (node instanceof AST.Let) {\r\n const v = node as AST.Let;\r\n if (isEntry && v.type !== null) {\r\n this._markStructsFromAST(v.type);\r\n }\r\n if (varStack.length > 0) {\r\n varStack[varStack.length - 1][v.name] = v;\r\n }\r\n } else if (node instanceof AST.VariableExpr) {\r\n const v = node as AST.VariableExpr;\r\n // Check to see if the variable is a local variable before checking to see if it's\r\n // a resource.\r\n if (varStack.length > 0) {\r\n const varInfo = varStack[varStack.length - 1][v.name];\r\n if (varInfo) {\r\n return;\r\n }\r\n }\r\n const varInfo = self._findResource(v.name);\r\n if (varInfo) {\r\n resources.push(varInfo);\r\n }\r\n } else if (node instanceof AST.CallExpr) {\r\n const c = node as AST.CallExpr;\r\n const callFn = self._functions.get(c.name);\r\n if (callFn) {\r\n if (isEntry) {\r\n callFn.inUse = true;\r\n }\r\n (fn as AST.Function).calls.add(callFn.node);\r\n if (callFn.resources === null) {\r\n callFn.resources = self._findResources(callFn.node, isEntry);\r\n }\r\n resources.push(...callFn.resources);\r\n }\r\n } else if (node instanceof AST.Call) {\r\n const c = node as AST.Call;\r\n const callFn = self._functions.get(c.name);\r\n if (callFn) {\r\n if (isEntry) {\r\n callFn.inUse = true;\r\n }\r\n (fn as AST.Function).calls.add(callFn.node);\r\n if (callFn.resources === null) {\r\n callFn.resources = self._findResources(callFn.node, isEntry);\r\n }\r\n resources.push(...callFn.resources);\r\n }\r\n }\r\n });\r\n return [...new Map(resources.map(r => [r.name, r])).values()];\r\n }\r\n\r\n getBindGroups(): Array> {\r\n const groups: Array> = [];\r\n\r\n function _makeRoom(group: number, binding: number) {\r\n if (group >= groups.length) {\r\n groups.length = group + 1;\r\n }\r\n\r\n if (groups[group] === undefined) {\r\n groups[group] = [];\r\n }\r\n\r\n if (binding >= groups[group].length) {\r\n groups[group].length = binding + 1;\r\n }\r\n }\r\n\r\n for (const u of this.uniforms) {\r\n _makeRoom(u.group, u.binding);\r\n const group = groups[u.group];\r\n group[u.binding] = u;\r\n }\r\n\r\n for (const u of this.storage) {\r\n _makeRoom(u.group, u.binding);\r\n const group = groups[u.group];\r\n group[u.binding] = u;\r\n }\r\n\r\n for (const t of this.textures) {\r\n _makeRoom(t.group, t.binding);\r\n const group = groups[t.group];\r\n group[t.binding] = t;\r\n }\r\n\r\n for (const t of this.samplers) {\r\n _makeRoom(t.group, t.binding);\r\n const group = groups[t.group];\r\n group[t.binding] = t;\r\n }\r\n\r\n return groups;\r\n }\r\n\r\n _getOutputs(\r\n type: AST.Type,\r\n outputs: Array | undefined = undefined\r\n ): Array {\r\n if (outputs === undefined) {\r\n outputs = [];\r\n }\r\n\r\n if (type instanceof AST.Struct) {\r\n this._getStructOutputs(type, outputs);\r\n } else {\r\n const output = this._getOutputInfo(type);\r\n if (output !== null) {\r\n outputs.push(output);\r\n }\r\n }\r\n\r\n return outputs;\r\n }\r\n\r\n _getStructOutputs(struct: AST.Struct, outputs: Array) {\r\n for (const m of struct.members) {\r\n if (m.type instanceof AST.Struct) {\r\n this._getStructOutputs(m.type, outputs);\r\n } else {\r\n const location =\r\n this._getAttribute(m, \"location\") || this._getAttribute(m, \"builtin\");\r\n if (location !== null) {\r\n const typeInfo = this._getTypeInfo(m.type, m.type.attributes);\r\n const locationValue = this._parseInt(location.value);\r\n const info = new OutputInfo(\r\n m.name,\r\n typeInfo,\r\n location.name,\r\n locationValue\r\n );\r\n outputs.push(info);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _getOutputInfo(type: AST.Type): OutputInfo | null {\r\n const location =\r\n this._getAttribute(type, \"location\") ||\r\n this._getAttribute(type, \"builtin\");\r\n if (location !== null) {\r\n const typeInfo = this._getTypeInfo(type, type.attributes);\r\n const locationValue = this._parseInt(location.value);\r\n const info = new OutputInfo(\"\", typeInfo, location.name, locationValue);\r\n return info;\r\n }\r\n return null;\r\n }\r\n\r\n _getInputs(\r\n args: Array,\r\n inputs: Array | undefined = undefined\r\n ): Array {\r\n if (inputs === undefined) {\r\n inputs = [];\r\n }\r\n\r\n for (const arg of args) {\r\n if (arg.type instanceof AST.Struct) {\r\n this._getStructInputs(arg.type, inputs);\r\n } else {\r\n const input = this._getInputInfo(arg);\r\n if (input !== null) {\r\n inputs.push(input);\r\n }\r\n }\r\n }\r\n\r\n return inputs;\r\n }\r\n\r\n _getStructInputs(struct: AST.Struct, inputs: Array) {\r\n for (const m of struct.members) {\r\n if (m.type instanceof AST.Struct) {\r\n this._getStructInputs(m.type, inputs);\r\n } else {\r\n const input = this._getInputInfo(m);\r\n if (input !== null) {\r\n inputs.push(input);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _getInputInfo(node: AST.Member | AST.Argument): InputInfo | null {\r\n const location =\r\n this._getAttribute(node, \"location\") ||\r\n this._getAttribute(node, \"builtin\");\r\n if (location !== null) {\r\n const interpolation = this._getAttribute(node, \"interpolation\");\r\n const type = this._getTypeInfo(node.type, node.attributes);\r\n const locationValue = this._parseInt(location.value);\r\n const info = new InputInfo(node.name, type, location.name, locationValue);\r\n if (interpolation !== null) {\r\n info.interpolation = this._parseString(interpolation.value);\r\n }\r\n return info;\r\n }\r\n return null;\r\n }\r\n\r\n _parseString(s: string | string[]): string {\r\n if (s instanceof Array) {\r\n s = s[0];\r\n }\r\n return s;\r\n }\r\n\r\n _parseInt(s: string | string[]): number | string {\r\n if (s instanceof Array) {\r\n s = s[0];\r\n }\r\n const n = parseInt(s);\r\n return isNaN(n) ? s : n;\r\n }\r\n\r\n _getAlias(name: string): TypeInfo | null {\r\n for (const a of this.aliases) {\r\n if (a.name == name) {\r\n return a.type;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _getAliasInfo(node: AST.Alias): AliasInfo {\r\n return new AliasInfo(node.name, this._getTypeInfo(node.type!, null));\r\n }\r\n\r\n _getTypeInfo(\r\n type: AST.Type,\r\n attributes: Array | null\r\n ): TypeInfo {\r\n if (this._types.has(type)) {\r\n return this._types.get(type)!;\r\n }\r\n\r\n if (type instanceof AST.ArrayType) {\r\n const a = type as AST.ArrayType;\r\n const t = a.format ? this._getTypeInfo(a.format!, a.attributes) : null;\r\n const info = new ArrayInfo(a.name, attributes);\r\n info.format = t;\r\n info.count = a.count;\r\n this._types.set(type, info);\r\n this._updateTypeInfo(info);\r\n return info;\r\n }\r\n\r\n if (type instanceof AST.Struct) {\r\n const s = type as AST.Struct;\r\n const info = new StructInfo(s.name, attributes);\r\n info.startLine = s.startLine;\r\n info.endLine = s.endLine;\r\n for (const m of s.members) {\r\n const t = this._getTypeInfo(m.type!, m.attributes);\r\n info.members.push(new MemberInfo(m.name, t, m.attributes));\r\n }\r\n this._types.set(type, info);\r\n this._updateTypeInfo(info);\r\n return info;\r\n }\r\n\r\n if (type instanceof AST.SamplerType) {\r\n const s = type as AST.SamplerType;\r\n const formatIsType = s.format instanceof AST.Type;\r\n const format = s.format\r\n ? formatIsType\r\n ? this._getTypeInfo(s.format! as AST.Type, null)\r\n : new TypeInfo(s.format! as string, null)\r\n : null;\r\n const info = new TemplateInfo(s.name, format, attributes, s.access);\r\n this._types.set(type, info);\r\n this._updateTypeInfo(info);\r\n return info;\r\n }\r\n\r\n if (type instanceof AST.TemplateType) {\r\n const t = type as AST.TemplateType;\r\n const format = t.format ? this._getTypeInfo(t.format!, null) : null;\r\n const info = new TemplateInfo(t.name, format, attributes, t.access);\r\n this._types.set(type, info);\r\n this._updateTypeInfo(info);\r\n return info;\r\n }\r\n\r\n const info = new TypeInfo(type.name, attributes);\r\n this._types.set(type, info);\r\n this._updateTypeInfo(info);\r\n return info;\r\n }\r\n\r\n _updateTypeInfo(type: TypeInfo) {\r\n const typeSize = this._getTypeSize(type);\r\n type.size = typeSize?.size ?? 0;\r\n\r\n if (type instanceof ArrayInfo) {\r\n if (type[\"format\"]) {\r\n const formatInfo = this._getTypeSize(type[\"format\"]);\r\n type.stride = formatInfo?.size ?? 0;\r\n this._updateTypeInfo(type[\"format\"]);\r\n }\r\n }\r\n\r\n if (type instanceof StructInfo) {\r\n this._updateStructInfo(type);\r\n }\r\n }\r\n\r\n _updateStructInfo(struct: StructInfo) {\r\n let offset = 0;\r\n let lastSize = 0;\r\n let lastOffset = 0;\r\n let structAlign = 0;\r\n\r\n for (let mi = 0, ml = struct.members.length; mi < ml; ++mi) {\r\n const member = struct.members[mi];\r\n\r\n const sizeInfo = this._getTypeSize(member);\r\n if (!sizeInfo) {\r\n continue;\r\n }\r\n\r\n const type = this._getAlias(member.type.name) ?? member.type;\r\n const align = sizeInfo.align;\r\n const size = sizeInfo.size;\r\n offset = this._roundUp(align, offset + lastSize);\r\n lastSize = size;\r\n lastOffset = offset;\r\n structAlign = Math.max(structAlign, align);\r\n\r\n member.offset = offset;\r\n member.size = size;\r\n\r\n this._updateTypeInfo(member.type);\r\n }\r\n\r\n struct.size = this._roundUp(structAlign, lastOffset + lastSize);\r\n struct.align = structAlign;\r\n }\r\n\r\n _getTypeSize(\r\n type: TypeInfo | MemberInfo | null | undefined\r\n ): _TypeSize | null {\r\n if (type === null || type === undefined) {\r\n return null;\r\n }\r\n\r\n const explicitSize = this._getAttributeNum(type.attributes, \"size\", 0);\r\n const explicitAlign = this._getAttributeNum(type.attributes, \"align\", 0);\r\n\r\n if (type instanceof MemberInfo) {\r\n type = type.type;\r\n }\r\n\r\n if (type instanceof TypeInfo) {\r\n const alias = this._getAlias(type.name);\r\n if (alias !== null) {\r\n type = alias;\r\n }\r\n }\r\n\r\n {\r\n const info = WgslReflect._typeInfo[type.name];\r\n if (info !== undefined) {\r\n const divisor = type[\"format\"]?.name === \"f16\" ? 2 : 1;\r\n return new _TypeSize(\r\n Math.max(explicitAlign, info.align / divisor),\r\n Math.max(explicitSize, info.size / divisor)\r\n );\r\n }\r\n }\r\n\r\n {\r\n const info =\r\n WgslReflect._typeInfo[type.name.substring(0, type.name.length - 1)];\r\n if (info) {\r\n const divisor = type.name[type.name.length - 1] === \"h\" ? 2 : 1;\r\n return new _TypeSize(\r\n Math.max(explicitAlign, info.align / divisor),\r\n Math.max(explicitSize, info.size / divisor)\r\n );\r\n }\r\n }\r\n\r\n if (type instanceof ArrayInfo) {\r\n let arrayType = type as ArrayInfo;\r\n let align = 8;\r\n let size = 8;\r\n // Type AlignOf(T) Sizeof(T)\r\n // array AlignOf(E) N * roundUp(AlignOf(E), SizeOf(E))\r\n // array AlignOf(E) N * roundUp(AlignOf(E), SizeOf(E)) (N determined at runtime)\r\n //\r\n // @stride(Q)\r\n // array AlignOf(E) N * Q\r\n //\r\n // @stride(Q)\r\n // array AlignOf(E) Nruntime * Q\r\n //const E = type.format.name;\r\n const E = this._getTypeSize(arrayType.format);\r\n if (E !== null) {\r\n size = E.size;\r\n align = E.align;\r\n }\r\n\r\n const N = arrayType.count;\r\n\r\n const stride = this._getAttributeNum(\r\n type?.attributes ?? null,\r\n \"stride\",\r\n this._roundUp(align, size)\r\n );\r\n size = N * stride;\r\n\r\n if (explicitSize) {\r\n size = explicitSize;\r\n }\r\n\r\n return new _TypeSize(\r\n Math.max(explicitAlign, align),\r\n Math.max(explicitSize, size)\r\n );\r\n }\r\n\r\n if (type instanceof StructInfo) {\r\n let align = 0;\r\n let size = 0;\r\n // struct S AlignOf: max(AlignOfMember(S, M1), ... , AlignOfMember(S, MN))\r\n // SizeOf: roundUp(AlignOf(S), OffsetOfMember(S, L) + SizeOfMember(S, L))\r\n // Where L is the last member of the structure\r\n let offset = 0;\r\n let lastSize = 0;\r\n let lastOffset = 0;\r\n for (const m of type.members) {\r\n const mi = this._getTypeSize(m.type);\r\n if (mi !== null) {\r\n align = Math.max(mi.align, align);\r\n offset = this._roundUp(mi.align, offset + lastSize);\r\n lastSize = mi.size;\r\n lastOffset = offset;\r\n }\r\n }\r\n size = this._roundUp(align, lastOffset + lastSize);\r\n\r\n return new _TypeSize(\r\n Math.max(explicitAlign, align),\r\n Math.max(explicitSize, size)\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _isUniformVar(node: AST.Node): boolean {\r\n return node instanceof AST.Var && node.storage == \"uniform\";\r\n }\r\n\r\n _isStorageVar(node: AST.Node): boolean {\r\n return node instanceof AST.Var && node.storage == \"storage\";\r\n }\r\n\r\n _isTextureVar(node: AST.Node): boolean {\r\n return (\r\n node instanceof AST.Var &&\r\n node.type !== null &&\r\n WgslReflect._textureTypes.indexOf(node.type.name) != -1\r\n );\r\n }\r\n\r\n _isSamplerVar(node: AST.Node): boolean {\r\n return (\r\n node instanceof AST.Var &&\r\n node.type !== null &&\r\n WgslReflect._samplerTypes.indexOf(node.type.name) != -1\r\n );\r\n }\r\n\r\n _getAttribute(node: AST.Node, name: string): AST.Attribute | null {\r\n const obj = node as Object;\r\n if (!obj || !obj[\"attributes\"]) {\r\n return null;\r\n }\r\n const attrs = obj[\"attributes\"];\r\n for (let a of attrs) {\r\n if (a.name == name) {\r\n return a;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _getAttributeNum(\r\n attributes: Array | null,\r\n name: string,\r\n defaultValue: number\r\n ): number {\r\n if (attributes === null) {\r\n return defaultValue;\r\n }\r\n for (let a of attributes) {\r\n if (a.name == name) {\r\n let v = a !== null && a.value !== null ? a.value : defaultValue;\r\n if (v instanceof Array) {\r\n v = v[0];\r\n }\r\n if (typeof v === \"number\") {\r\n return v;\r\n }\r\n if (typeof v === \"string\") {\r\n return parseInt(v);\r\n }\r\n return defaultValue;\r\n }\r\n }\r\n return defaultValue;\r\n }\r\n\r\n _roundUp(k: number, n: number): number {\r\n return Math.ceil(n / k) * k;\r\n }\r\n\r\n // Type AlignOf(T) Sizeof(T)\r\n // i32, u32, or f32 4 4\r\n // atomic 4 4\r\n // vec2 8 8\r\n // vec3 16 12\r\n // vec4 16 16\r\n // mat2x2 8 16\r\n // mat3x2 8 24\r\n // mat4x2 8 32\r\n // mat2x3 16 32\r\n // mat3x3 16 48\r\n // mat4x3 16 64\r\n // mat2x4 16 32\r\n // mat3x4 16 48\r\n // mat4x4 16 64\r\n static readonly _typeInfo = {\r\n f16: { align: 2, size: 2 },\r\n i32: { align: 4, size: 4 },\r\n u32: { align: 4, size: 4 },\r\n f32: { align: 4, size: 4 },\r\n atomic: { align: 4, size: 4 },\r\n vec2: { align: 8, size: 8 },\r\n vec3: { align: 16, size: 12 },\r\n vec4: { align: 16, size: 16 },\r\n mat2x2: { align: 8, size: 16 },\r\n mat3x2: { align: 8, size: 24 },\r\n mat4x2: { align: 8, size: 32 },\r\n mat2x3: { align: 16, size: 32 },\r\n mat3x3: { align: 16, size: 48 },\r\n mat4x3: { align: 16, size: 64 },\r\n mat2x4: { align: 16, size: 32 },\r\n mat3x4: { align: 16, size: 48 },\r\n mat4x4: { align: 16, size: 64 },\r\n };\r\n\r\n static readonly _textureTypes = TokenTypes.any_texture_type.map((t) => {\r\n return t.name;\r\n });\r\n static readonly _samplerTypes = TokenTypes.sampler_type.map((t) => {\r\n return t.name;\r\n });\r\n}\r\n"],"names":["AST.ParseContext","AST.VariableExpr","AST.Argument","AST.Function","AST.Discard","AST.Break","AST.Continue","AST.StaticAssert","AST.While","AST.Continuing","AST.For","AST.Var","AST.Let","AST.Const","AST.Increment","AST.IncrementOperator","AST.Assign","AST.AssignOperator","AST.Call","AST.Loop","AST.Switch","AST.Case","AST.Default","AST.If","AST.ElseIf","AST.Return","AST.BinaryOperator","AST.UnaryOperator","AST.ArrayIndex","AST.StringExpr","AST.CreateExpr","AST.CallExpr","AST.ConstExpr","AST.LiteralExpr","AST.BitcastExpr","AST.GroupingExpr","AST.Member","AST.Struct","AST.Override","AST.Diagnostic","AST.Enable","AST.Requires","AST.Alias","AST.Type","AST.TemplateType","AST.PointerType","AST.ArrayType","AST.SamplerType","AST.Attribute","AST._BlockStart","AST._BlockEnd"],"mappings":"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"} \ No newline at end of file diff --git a/wgsl_reflect.module.js b/wgsl_reflect.module.js index 1792c69..689d766 100644 --- a/wgsl_reflect.module.js +++ b/wgsl_reflect.module.js @@ -4094,4 +4094,3 @@ WgslReflect._samplerTypes = TokenTypes.sampler_type.map((t) => { }); export { Alias, AliasInfo, Argument, ArgumentInfo, ArrayIndex, ArrayInfo, ArrayType, Assign, AssignOperator, Attribute, BinaryOperator, BitcastExpr, Break, Call, CallExpr, Case, Const, ConstExpr, Continue, Continuing, CreateExpr, Default, Diagnostic, Discard, ElseIf, Enable, EntryFunctions, Expression, For, Function, FunctionInfo, GroupingExpr, If, Increment, IncrementOperator, InputInfo, Let, LiteralExpr, Loop, Member, MemberInfo, Node, Operator, OutputInfo, Override, OverrideInfo, ParseContext, PointerType, Requires, ResourceType, Return, SamplerType, Statement, StaticAssert, StringExpr, Struct, StructInfo, Switch, SwitchCase, TemplateInfo, TemplateType, Token, TokenClass, TokenType, TokenTypes, Type, TypeInfo, TypecastExpr, UnaryOperator, Var, VariableExpr, VariableInfo, WgslParser, WgslReflect, WgslScanner, While, _BlockEnd, _BlockStart }; -//# sourceMappingURL=wgsl_reflect.module.js.map diff --git a/wgsl_reflect.module.js.map b/wgsl_reflect.module.js.map deleted file mode 100644 index 0b7f8e5..0000000 --- a/wgsl_reflect.module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"wgsl_reflect.module.js","sources":["src/wgsl_ast.ts","src/wgsl_scanner.ts","src/wgsl_parser.ts","src/wgsl_reflect.ts"],"sourcesContent":[null,null,null,null],"names":["AST.ParseContext","AST.VariableExpr","AST.Argument","AST.Function","AST.Discard","AST.Break","AST.Continue","AST.StaticAssert","AST.While","AST.Continuing","AST.For","AST.Var","AST.Let","AST.Const","AST.Increment","AST.IncrementOperator","AST.Assign","AST.AssignOperator","AST.Call","AST.Loop","AST.Switch","AST.Case","AST.Default","AST.If","AST.ElseIf","AST.Return","AST.BinaryOperator","AST.UnaryOperator","AST.ArrayIndex","AST.StringExpr","AST.CreateExpr","AST.CallExpr","AST.ConstExpr","AST.LiteralExpr","AST.BitcastExpr","AST.GroupingExpr","AST.Member","AST.Struct","AST.Override","AST.Diagnostic","AST.Enable","AST.Requires","AST.Alias","AST.Type","AST.TemplateType","AST.PointerType","AST.ArrayType","AST.SamplerType","AST.Attribute","AST._BlockStart","AST._BlockEnd"],"mappings":"MAAa,YAAY,CAAA;AAAzB,IAAA,WAAA,GAAA;AACE,QAAA,IAAA,CAAA,SAAS,GAAuB,IAAI,GAAG,EAAE,CAAC;AAC1C,QAAA,IAAA,CAAA,OAAO,GAAuB,IAAI,GAAG,EAAE,CAAC;AACxC,QAAA,IAAA,CAAA,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;KAC1C;AAAA,CAAA;AAED;;;;AAIG;MACU,IAAI,CAAA;AACf,IAAA,WAAA,GAAA,GAAgB;AAEhB,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;AAC5B,QAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACzC;AAED,IAAA,cAAc,CAAC,OAAqB,EAAA;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;KAC1C;IAED,MAAM,CAAC,QAA8B,EAAA,GAAI;IAEzC,WAAW,CAAC,KAAyB,EAAE,QAA8B,EAAA;QACnE,IAAI,KAAK,EAAE;AACT,YAAA,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/B,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,IAAI,IAAI,YAAY,KAAK,EAAE;AACzB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAmB,EAAE,QAAQ,CAAC,CAAC;iBACjD;qBAAM;AACL,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;iBACvB;aACF;AACD,YAAA,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;SAC9B;KACF;AACF,CAAA;AAED;AACM,MAAO,WAAY,SAAQ,IAAI,CAAA;;AAC5B,WAAA,CAAA,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;AAGrC;AACK,MAAO,SAAU,SAAQ,IAAI,CAAA;;AAC1B,SAAA,CAAA,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;AAGpC;;;;AAIG;AACG,MAAO,SAAU,SAAQ,IAAI,CAAA;AACjC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;KACT;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,QAAS,SAAQ,SAAS,CAAA;IAUrC,WACE,CAAA,IAAY,EACZ,IAAqB,EACrB,UAAuB,EACvB,IAAsB,EACtB,SAAiB,EACjB,OAAe,EAAA;AAEf,QAAA,KAAK,EAAE,CAAC;AAVV,QAAA,IAAA,CAAA,KAAK,GAAkB,IAAI,GAAG,EAAE,CAAC;AAW/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KACxB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,UAAU,CAAC;KACnB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,YAAa,SAAQ,SAAS,CAAA;AAGzC,IAAA,WAAA,CAAY,UAAsB,EAAA;AAChC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC9B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,cAAc,CAAC;KACvB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAClC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,KAAM,SAAQ,SAAS,CAAA;IAIlC,WAAY,CAAA,SAAqB,EAAE,IAAsB,EAAA;AACvD,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,UAAW,SAAQ,SAAS,CAAA;AAGvC,IAAA,WAAA,CAAY,IAAsB,EAAA;AAChC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,YAAY,CAAC;KACrB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,GAAI,SAAQ,SAAS,CAAA;AAMhC,IAAA,WAAA,CACE,IAAsB,EACtB,SAA4B,EAC5B,SAA2B,EAC3B,IAAsB,EAAA;AAEtB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;;QACnC,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,GAAI,SAAQ,SAAS,CAAA;IAQhC,WACE,CAAA,IAAY,EACZ,IAAiB,EACjB,OAAsB,EACtB,MAAqB,EACrB,KAAwB,EAAA;AAExB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;;QACnC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC9B;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,QAAS,SAAQ,SAAS,CAAA;AAMrC,IAAA,WAAA,CAAY,IAAY,EAAE,IAAiB,EAAE,KAAwB,EAAA;AACnE,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,UAAU,CAAC;KACnB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;;QACnC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC9B;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,GAAI,SAAQ,SAAS,CAAA;IAQhC,WACE,CAAA,IAAY,EACZ,IAAiB,EACjB,OAAsB,EACtB,MAAqB,EACrB,KAAwB,EAAA;AAExB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;;QACnC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC9B;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,KAAM,SAAQ,SAAS,CAAA;IAQlC,WACE,CAAA,IAAY,EACZ,IAAiB,EACjB,OAAsB,EACtB,MAAqB,EACrB,KAAiB,EAAA;AAEjB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACrC;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;;QACnC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC9B;AACF,CAAA;IAEW,kBAGX;AAHD,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,IAAgB,CAAA;AAChB,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,IAAgB,CAAA;AAClB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAG5B,EAAA,CAAA,CAAA,CAAA;AAED,CAAA,UAAiB,iBAAiB,EAAA;IAChC,SAAgB,KAAK,CAAC,GAAW,EAAA;QAC/B,MAAM,GAAG,GAAG,GAAqC,CAAC;QAClD,IAAI,GAAG,IAAI,OAAO;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAC3E,QAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;KAC/B;AAJe,IAAA,iBAAA,CAAA,KAAK,QAIpB,CAAA;AACH,CAAC,EANgB,iBAAiB,KAAjB,iBAAiB,GAMjC,EAAA,CAAA,CAAA,CAAA;AAED;;;;AAIG;AACG,MAAO,SAAU,SAAQ,SAAS,CAAA;IAItC,WAAY,CAAA,QAA2B,EAAE,QAAoB,EAAA;AAC3D,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,WAAW,CAAC;KACpB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAChC;AACF,CAAA;IAEW,eAYX;AAZD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,GAAY,CAAA;AACZ,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,IAAgB,CAAA;AAChB,IAAA,cAAA,CAAA,eAAA,CAAA,GAAA,IAAoB,CAAA;AACpB,IAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,IAAqB,CAAA;AACrB,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,IAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,IAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,IAAgB,CAAA;AAChB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,IAAe,CAAA;AACf,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,IAAgB,CAAA;AAChB,IAAA,cAAA,CAAA,iBAAA,CAAA,GAAA,KAAuB,CAAA;AACvB,IAAA,cAAA,CAAA,kBAAA,CAAA,GAAA,KAAwB,CAAA;AAC1B,CAAC,EAZW,cAAc,KAAd,cAAc,GAYzB,EAAA,CAAA,CAAA,CAAA;AAED,CAAA,UAAiB,cAAc,EAAA;IAC7B,SAAgB,KAAK,CAAC,GAAW,EAAA;QAC/B,MAAM,GAAG,GAAG,GAAkC,CAAC;AAC/C,QAAA,IAAI,GAAG,IAAI,OAAO,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACrD;;AAED,QAAA,OAAO,GAAqB,CAAC;KAC9B;AAPe,IAAA,cAAA,CAAA,KAAK,QAOpB,CAAA;AACH,CAAC,EATgB,cAAc,KAAd,cAAc,GAS9B,EAAA,CAAA,CAAA,CAAA;AAED;;;;AAIG;AACG,MAAO,MAAO,SAAQ,SAAS,CAAA;AAKnC,IAAA,WAAA,CACE,QAAwB,EACxB,QAAoB,EACpB,KAAiB,EAAA;AAEjB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC7B;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,IAAK,SAAQ,SAAS,CAAA;IAIjC,WAAY,CAAA,IAAY,EAAE,IAAuB,EAAA;AAC/C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACvB;QACD,QAAQ,CAAC,IAAI,CAAC,CAAC;KAChB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,IAAK,SAAQ,SAAS,CAAA;IAIjC,WAAY,CAAA,IAAsB,EAAE,UAAmC,EAAA;AACrE,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC9B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,MAAM,CAAC;KACf;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,MAAO,SAAQ,SAAS,CAAA;IAInC,WAAY,CAAA,SAAqB,EAAE,IAAsB,EAAA;AACvD,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,MAAM,CAAC;KACf;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,EAAG,SAAQ,SAAS,CAAA;AAM/B,IAAA,WAAA,CACE,SAAqB,EACrB,IAAsB,EACtB,MAA4B,EAC5B,KAA8B,EAAA;AAE9B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,MAAO,SAAQ,SAAS,CAAA;AAGnC,IAAA,WAAA,CAAY,KAAiB,EAAA;AAC3B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;;QACnC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC9B;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,MAAO,SAAQ,SAAS,CAAA;AAGnC,IAAA,WAAA,CAAY,IAAY,EAAA;AACtB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,QAAQ,CAAC;KACjB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,QAAS,SAAQ,SAAS,CAAA;AAGrC,IAAA,WAAA,CAAY,UAAoB,EAAA;AAC9B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC9B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,UAAU,CAAC;KACnB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,UAAW,SAAQ,SAAS,CAAA;IAIvC,WAAY,CAAA,QAAgB,EAAE,IAAY,EAAA;AACxC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,YAAY,CAAC;KACrB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,KAAM,SAAQ,SAAS,CAAA;IAIlC,WAAY,CAAA,IAAY,EAAE,IAAU,EAAA;AAClC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,OAAO,CAAC;KAChB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,OAAQ,SAAQ,SAAS,CAAA;AACpC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;KACT;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,SAAS,CAAC;KAClB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,KAAM,SAAQ,SAAS,CAAA;AAClC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;KACT;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,OAAO,CAAC;KAChB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,QAAS,SAAQ,SAAS,CAAA;AACrC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;KACT;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,UAAU,CAAC;KACnB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,IAAK,SAAQ,SAAS,CAAA;AAIjC,IAAA,WAAA,CAAY,IAAY,EAAA;AACtB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,KAAK,CAAC;KACd;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,MAAO,SAAQ,IAAI,CAAA;AAK9B,IAAA,WAAA,CAAY,IAAY,EAAE,OAAsB,EAAE,SAAiB,EAAE,OAAe,EAAA;QAClF,KAAK,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KACxB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC;KACb;;AAGD,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI;AAAE,gBAAA,OAAO,CAAC,CAAC;SAC5C;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,YAAa,SAAQ,IAAI,CAAA;AAIpC,IAAA,WAAA,CAAY,IAAY,EAAE,MAAmB,EAAE,MAAqB,EAAA;QAClE,KAAK,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,UAAU,CAAC;KACnB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,WAAY,SAAQ,IAAI,CAAA;AAKnC,IAAA,WAAA,CACE,IAAY,EACZ,OAAe,EACf,IAAiB,EACjB,MAAqB,EAAA;QAErB,KAAK,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,SAAS,CAAC;KAClB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,SAAU,SAAQ,IAAI,CAAA;AAKjC,IAAA,WAAA,CACE,IAAY,EACZ,UAAmC,EACnC,MAAmB,EACnB,KAAa,EAAA;QAEb,KAAK,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC;KACb;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,WAAY,SAAQ,IAAI,CAAA;AAInC,IAAA,WAAA,CACE,IAAY,EACZ,MAA4B,EAC5B,MAAqB,EAAA;QAErB,KAAK,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,SAAS,CAAC;KAClB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,UAAW,SAAQ,IAAI,CAAA;AAGlC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;KACT;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,UAAW,SAAQ,UAAU,CAAA;AAGxC,IAAA,WAAA,CAAY,KAAa,EAAA;AACvB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,YAAY,CAAC;KACrB;IAED,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,UAAW,SAAQ,UAAU,CAAA;IAIxC,WAAY,CAAA,IAAiB,EAAE,IAA8B,EAAA;AAC3D,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,YAAY,CAAC;KACrB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;QACnC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACf,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACvB;SACF;KACF;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,QAAS,SAAQ,UAAU,CAAA;IAItC,WAAY,CAAA,IAAY,EAAE,IAA8B,EAAA;AACtD,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,UAAU,CAAC;KACnB;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;AAC5B,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAClD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CACf,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC/B,CAAC;AACJ,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC/B,EACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC/B,CAAC;AACJ,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;;;AAGlD,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;;;AAG1D,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,IAAI,CAAC,IAAI,CACd,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC/D,CAAC,CACF,CACF,CAAC;AACJ,YAAA,KAAK,KAAK,CAAC;;AAEX,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAClD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;AAKrD,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,YAAA,KAAK,KAAK;gBACR,QACE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAC/D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B;AACJ,YAAA,KAAK,OAAO;gBACV,QACE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9B,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAC1C;;;AAGJ,YAAA,KAAK,aAAa;AAChB,gBAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;;;AAGvD,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAClD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC/B,CAAC;AACJ,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC/B,CAAC;AACJ,YAAA,KAAK,KAAK;gBACR,QACE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC5B,qBAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACtC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC/D;AACJ,YAAA,KAAK,MAAM;gBACT,QACE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9B,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAC1C;AACJ,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC/B,CAAC;AACJ,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC;AAC1D,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAClD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClE,YAAA,KAAK,YAAY;gBACf,QACE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9B,qBAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EACxC;AACJ,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AACpE,sBAAE,CAAC;sBACD,CAAC,CAAC;AACR,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAClD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,YAAA;gBACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;SACvD;KACF;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACvB;QACD,QAAQ,CAAC,IAAI,CAAC,CAAC;KAChB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,YAAa,SAAQ,UAAU,CAAA;AAG1C,IAAA,WAAA,CAAY,IAAY,EAAA;AACtB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;QACnC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACf,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SAC/B;KACF;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;AAC5B,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACzC;AACD,QAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACnC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,SAAU,SAAQ,UAAU,CAAA;IAIvC,WAAY,CAAA,IAAY,EAAE,WAAuB,EAAA;AAC/C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;KAChC;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,WAAW,CAAC;KACpB;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;;AAC5B,QAAA,IAAI,IAAI,CAAC,WAAW,YAAY,UAAU,EAAE;;YAE1C,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,cAAc,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzC,YAAA,MAAM,WAAW,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,IAAI,CAAC,CAAC,EAAE;AAClD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACnE,gBAAA,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAC3C;SAEF;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC3C;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KACnC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,WAAY,SAAQ,UAAU,CAAA;AAGzC,IAAA,WAAA,CAAY,KAAa,EAAA;AACvB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,aAAa,CAAC;KACtB;IAED,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,WAAY,SAAQ,UAAU,CAAA;IAIzC,WAAY,CAAA,IAAiB,EAAE,KAAiB,EAAA;AAC9C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,aAAa,CAAC;KACtB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC7B;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,YAAa,SAAQ,UAAU,CAAA;IAI1C,WAAY,CAAA,IAAiB,EAAE,IAA8B,EAAA;AAC3D,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,cAAc,CAAC;KACvB;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACvC;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,YAAa,SAAQ,UAAU,CAAA;AAG1C,IAAA,WAAA,CAAY,QAA2B,EAAA;AACrC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,WAAW,CAAC;KACpB;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC3C;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KAC3C;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,UAAW,SAAQ,UAAU,CAAA;AAExC,IAAA,WAAA,CAAY,KAAiB,EAAA;AAC3B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC7B;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,QAAS,SAAQ,UAAU,CAAA;AACtC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;KACT;AACF,CAAA;AAED;;;;;AAKG;AACG,MAAO,aAAc,SAAQ,QAAQ,CAAA;IAIzC,WAAY,CAAA,QAAgB,EAAE,KAAiB,EAAA;AAC7C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;AAC5B,QAAA,QAAQ,IAAI,CAAC,QAAQ;AACnB,YAAA,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACtC,YAAA,KAAK,GAAG;gBACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C,YAAA,KAAK,GAAG;gBACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,YAAA;gBACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC/D;KACF;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC7B;AACF,CAAA;AAED;;;;;AAKG;AACG,MAAO,cAAe,SAAQ,QAAQ,CAAA;AAK1C,IAAA,WAAA,CAAY,QAAgB,EAAE,IAAgB,EAAE,KAAiB,EAAA;AAC/D,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,UAAU,CAAC;KACnB;AAED,IAAA,QAAQ,CAAC,OAAqB,EAAA;AAC5B,QAAA,QAAQ,IAAI,CAAC,QAAQ;AACnB,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpE,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpE,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpE,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpE,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpE,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChE,sBAAE,CAAC;sBACD,CAAC,CAAC;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChE,sBAAE,CAAC;sBACD,CAAC,CAAC;AACR,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/D,sBAAE,CAAC;sBACD,CAAC,CAAC;AACR,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/D,sBAAE,CAAC;sBACD,CAAC,CAAC;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChE,sBAAE,CAAC;sBACD,CAAC,CAAC;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChE,sBAAE,CAAC;sBACD,CAAC,CAAC;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChE,sBAAE,CAAC;sBACD,CAAC,CAAC;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChE,sBAAE,CAAC;sBACD,CAAC,CAAC;AACR,YAAA;gBACE,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,QAAQ,CAAE,CAAA,CAAC,CAAC;SACxD;KACF;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC7B;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,UAAW,SAAQ,IAAI,CAAA;AAClC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;KACT;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,IAAK,SAAQ,UAAU,CAAA;IAIlC,WAAY,CAAA,QAA2B,EAAE,IAAsB,EAAA;AAC7D,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,OAAQ,SAAQ,UAAU,CAAA;AAGrC,IAAA,WAAA,CAAY,IAAsB,EAAA;AAChC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,QAAS,SAAQ,IAAI,CAAA;AAKhC,IAAA,WAAA,CAAY,IAAY,EAAE,IAAU,EAAE,UAAmC,EAAA;AACvE,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC9B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,UAAU,CAAC;KACnB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,MAAO,SAAQ,IAAI,CAAA;IAI9B,WAAY,CAAA,SAAqB,EAAE,IAAsB,EAAA;AACvD,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,CAAC,QAA8B,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KACvC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,MAAO,SAAQ,IAAI,CAAA;AAK9B,IAAA,WAAA,CACE,IAAY,EACZ,IAAiB,EACjB,UAAmC,EAAA;AAEnC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC9B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,QAAQ,CAAC;KACjB;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,SAAU,SAAQ,IAAI,CAAA;IAIjC,WAAY,CAAA,IAAY,EAAE,KAAoC,EAAA;AAC5D,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,WAAW,CAAC;KACpB;AACF;;;IChiDW,WAIX;AAJD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ,CAAA;AACV,CAAC,EAJW,UAAU,KAAV,UAAU,GAIrB,EAAA,CAAA,CAAA,CAAA;MAEY,SAAS,CAAA;AAKpB,IAAA,WAAA,CAAY,IAAY,EAAE,IAAgB,EAAE,IAAqB,EAAA;AAC/D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAED,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;AACF,CAAA;AAED;MACa,UAAU,CAAA;;;AACL,UAAA,CAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAClD,UAAA,CAAA,GAAG,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAEjD,UAAA,CAAA,QAAQ,GAAG;IACzB,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrD,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;IACxD,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;IAClD,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;IACxD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrD,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC9D,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;IAClD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrD,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC;IACpE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC;IAC1E,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;IACjE,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;IAClD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrD,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC9D,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3D,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;IACrD,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;AACzD,CAtBuB,CAsBtB;AAEc,UAAA,CAAA,QAAQ,GAAG;IACzB,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IACpD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IACpD,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IACpD,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,kBAAkB,EAAE,IAAI,SAAS,CAC/B,oBAAoB,EACpB,UAAU,CAAC,OAAO,EAClB,oBAAoB,CACrB;IACD,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,gBAAgB,EAAE,IAAI,SAAS,CAC7B,kBAAkB,EAClB,UAAU,CAAC,OAAO,EAClB,kBAAkB,CACnB;IACD,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,YAAY,EAAE,IAAI,SAAS,CACzB,cAAc,EACd,UAAU,CAAC,OAAO,EAClB,cAAc,CACf;IACD,kBAAkB,EAAE,IAAI,SAAS,CAC/B,oBAAoB,EACpB,UAAU,CAAC,OAAO,EAClB,oBAAoB,CACrB;IACD,uBAAuB,EAAE,IAAI,SAAS,CACpC,yBAAyB,EACzB,UAAU,CAAC,OAAO,EAClB,yBAAyB,CAC1B;IACD,kBAAkB,EAAE,IAAI,SAAS,CAC/B,oBAAoB,EACpB,UAAU,CAAC,OAAO,EAClB,oBAAoB,CACrB;IACD,kBAAkB,EAAE,IAAI,SAAS,CAC/B,oBAAoB,EACpB,UAAU,CAAC,OAAO,EAClB,oBAAoB,CACrB;IACD,wBAAwB,EAAE,IAAI,SAAS,CACrC,0BAA0B,EAC1B,UAAU,CAAC,OAAO,EAClB,0BAA0B,CAC3B;IACD,kBAAkB,EAAE,IAAI,SAAS,CAC/B,oBAAoB,EACpB,UAAU,CAAC,OAAO,EAClB,oBAAoB,CACrB;IACD,gBAAgB,EAAE,IAAI,SAAS,CAC7B,kBAAkB,EAClB,UAAU,CAAC,OAAO,EAClB,kBAAkB,CACnB;IACD,sBAAsB,EAAE,IAAI,SAAS,CACnC,wBAAwB,EACxB,UAAU,CAAC,OAAO,EAClB,wBAAwB,CACzB;IACD,kBAAkB,EAAE,IAAI,SAAS,CAC/B,oBAAoB,EACpB,UAAU,CAAC,OAAO,EAClB,oBAAoB,CACrB;IACD,wBAAwB,EAAE,IAAI,SAAS,CACrC,0BAA0B,EAC1B,UAAU,CAAC,OAAO,EAClB,0BAA0B,CAC3B;IACD,6BAA6B,EAAE,IAAI,SAAS,CAC1C,+BAA+B,EAC/B,UAAU,CAAC,OAAO,EAClB,+BAA+B,CAChC;IACD,gBAAgB,EAAE,IAAI,SAAS,CAC7B,kBAAkB,EAClB,UAAU,CAAC,OAAO,EAClB,kBAAkB,CACnB;IACD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IACpD,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,WAAW,EAAE,IAAI,SAAS,CACxB,aAAa,EACb,UAAU,CAAC,OAAO,EAClB,aAAa,CACd;IACD,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;IACjD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IACpD,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;IACjD,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IACpD,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACvD,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;IACpD,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC;IACtE,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC7D,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;IAChE,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC;IACtE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,eAAe,EAAE,IAAI,SAAS,CAC5B,iBAAiB,EACjB,UAAU,CAAC,OAAO,EAClB,iBAAiB,CAClB;IACD,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC;IACtE,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC;IACtE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,eAAe,EAAE,IAAI,SAAS,CAC5B,iBAAiB,EACjB,UAAU,CAAC,OAAO,EAClB,iBAAiB,CAClB;IACD,YAAY,EAAE,IAAI,SAAS,CACzB,cAAc,EACd,UAAU,CAAC,OAAO,EAClB,cAAc,CACf;IACD,YAAY,EAAE,IAAI,SAAS,CACzB,cAAc,EACd,UAAU,CAAC,OAAO,EAClB,cAAc,CACf;IACD,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC;IACnE,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC;IACtE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,WAAW,EAAE,IAAI,SAAS,CACxB,aAAa,EACb,UAAU,CAAC,OAAO,EAClB,aAAa,CACd;IACD,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IACzE,WAAW,EAAE,IAAI,SAAS,CACxB,aAAa,EACb,UAAU,CAAC,OAAO,EAClB,aAAa,CACd;IACD,aAAa,EAAE,IAAI,SAAS,CAC1B,eAAe,EACf,UAAU,CAAC,OAAO,EAClB,eAAe,CAChB;;;AAID;;;AAG+D;AAChE,CAnNuB,CAmNtB;AAEc,UAAA,CAAA,MAAM,GAAG;IACvB,qBAAqB,EAAE,IAAI,SAAS,CAClC,uBAAuB,EACvB,UAAU,CAAC,KAAK,EAChB,uGAAuG,CACxG;IACD,iBAAiB,EAAE,IAAI,SAAS,CAC9B,mBAAmB,EACnB,UAAU,CAAC,KAAK,EAChB,2HAA2H,CAC5H;IACD,WAAW,EAAE,IAAI,SAAS,CACxB,aAAa,EACb,UAAU,CAAC,KAAK,EAChB,sCAAsC,CACvC;IACD,YAAY,EAAE,IAAI,SAAS,CACzB,cAAc,EACd,UAAU,CAAC,KAAK,EAChB,iCAAiC,CAClC;IACD,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,wBAAwB,CAAC;IACzE,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAChD,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACzD,KAAK,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACtD,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAClD,aAAa,EAAE,IAAI,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IACpE,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAClD,YAAY,EAAE,IAAI,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAClE,aAAa,EAAE,IAAI,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IACpE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAC9D,WAAW,EAAE,IAAI,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAChE,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IACpD,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IACpD,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IACpD,WAAW,EAAE,IAAI,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACjE,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IAC7D,YAAY,EAAE,IAAI,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAClE,kBAAkB,EAAE,IAAI,SAAS,CAC/B,oBAAoB,EACpB,UAAU,CAAC,KAAK,EAChB,IAAI,CACL;IACD,WAAW,EAAE,IAAI,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACjE,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAC5D,eAAe,EAAE,IAAI,SAAS,CAAC,iBAAiB,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACzE,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IAC/D,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IACtD,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IACpD,WAAW,EAAE,IAAI,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACjE,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IACtD,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAClD,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IAC7D,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAC9C,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACrD,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAC9D,WAAW,EAAE,IAAI,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAChE,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAC5D,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAClD,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IACpD,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAC9D,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAChD,UAAU,EAAE,IAAI,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IAC/D,WAAW,EAAE,IAAI,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACjE,WAAW,EAAE,IAAI,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACjE,cAAc,EAAE,IAAI,SAAS,CAAC,gBAAgB,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACvE,YAAY,EAAE,IAAI,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IACnE,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IAC7D,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IAC3D,SAAS,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IAC7D,iBAAiB,EAAE,IAAI,SAAS,CAC9B,mBAAmB,EACnB,UAAU,CAAC,KAAK,EAChB,KAAK,CACN;IACD,gBAAgB,EAAE,IAAI,SAAS,CAC7B,kBAAkB,EAClB,UAAU,CAAC,KAAK,EAChB,KAAK,CACN;AACF,CAhFqB,CAgFpB;AAEc,UAAA,CAAA,YAAY,GAAG;AAC7B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,IAAI;AACrB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,UAAU;AAC3B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,WAAW;AAC5B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,KAAK;AACtB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,KAAK;AACtB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,UAAU;AAC3B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,WAAW;AAC5B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,SAAS;AAC3B,CAT2B,CAS1B;AAEc,UAAA,CAAA,aAAa,GAAG;AAC9B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,GAAG;AACpB,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,OAAO;AACzB,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,KAAK;AACvB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,aAAa;AAC9B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,IAAI;AACrB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,YAAY;AAC7B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,aAAa;AAC9B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,KAAK;AACtB,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,WAAW;AAC7B,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,SAAS;AAC3B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,YAAY;AAC7B,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,kBAAkB;AACpC,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,WAAW;AAC7B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,SAAS;AAC1B,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,eAAe;AACjC,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,UAAU;AAC5B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,MAAM;AACvB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,KAAK;AACtB,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,WAAW;AAC7B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,MAAM;AACvB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,IAAI;AACrB,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,SAAS;AAC3B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,EAAE;AACnB,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,KAAK;AACvB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,IAAI;AACrB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,KAAK;AACtB,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,UAAU;AAC3B,IAAA,GAAG,EAAE,EAAI,CAAC,MAAM,CAAC,GAAG;AACpB,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,UAAU;AAC5B,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,WAAW;AAC7B,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,WAAW;AAC7B,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,cAAc;AAChC,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,YAAY;AAC9B,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,SAAS;AAC3B,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,QAAQ;AAC1B,IAAA,IAAI,EAAE,EAAI,CAAC,MAAM,CAAC,SAAS;AAC3B,IAAA,KAAK,EAAE,EAAI,CAAC,MAAM,CAAC,iBAAiB;AACpC,IAAA,KAAK,EAAE,EAAI,CAAC,MAAM,CAAC,gBAAgB;AACpC,CAvC4B,CAuC3B;AAEc,UAAA,CAAA,WAAW,GAAG;AAC5B,IAAA,qBAAqB,EAAE,EAAI,CAAC,MAAM,CAAC,qBAAqB;AACxD,IAAA,iBAAiB,EAAE,EAAI,CAAC,MAAM,CAAC,iBAAiB;AAChD,IAAA,WAAW,EAAE,EAAI,CAAC,MAAM,CAAC,WAAW;AACpC,IAAA,YAAY,EAAE,EAAI,CAAC,MAAM,CAAC,YAAY;AACtC,IAAA,KAAK,EAAE,EAAI,CAAC,MAAM,CAAC,KAAK;AACzB,CAN0B,CAMzB;AAEc,UAAA,CAAA,aAAa,GAAG;IAC9B,EAAI,CAAC,QAAQ,CAAC,QAAQ;IACtB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,SAAS;IACvB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,OAAO;AACtB,CAN4B,CAM3B;AAEc,UAAA,CAAA,WAAW,GAAG;IAC5B,EAAI,CAAC,QAAQ,CAAC,IAAI;IAClB,EAAI,CAAC,QAAQ,CAAC,KAAK;IACnB,EAAI,CAAC,QAAQ,CAAC,UAAU;AACzB,CAJ0B,CAIzB;AAEc,UAAA,CAAA,YAAY,GAAG;IAC7B,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,kBAAkB;AACjC,CAH2B,CAG1B;AAEc,UAAA,CAAA,oBAAoB,GAAG;IACrC,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,gBAAgB;IAC9B,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,YAAY;IAC1B,EAAI,CAAC,QAAQ,CAAC,kBAAkB;AACjC,CAPmC,CAOlC;AAEc,UAAA,CAAA,yBAAyB,GAAG;IAC1C,EAAI,CAAC,QAAQ,CAAC,uBAAuB;AACtC,CAFwC,CAEvC;AAEc,UAAA,CAAA,oBAAoB,GAAG;IACrC,EAAI,CAAC,QAAQ,CAAC,kBAAkB;IAChC,EAAI,CAAC,QAAQ,CAAC,kBAAkB;IAChC,EAAI,CAAC,QAAQ,CAAC,wBAAwB;IACtC,EAAI,CAAC,QAAQ,CAAC,kBAAkB;AACjC,CALmC,CAKlC;AAEc,UAAA,CAAA,kBAAkB,GAAG;IACnC,EAAI,CAAC,QAAQ,CAAC,gBAAgB;IAC9B,EAAI,CAAC,QAAQ,CAAC,sBAAsB;IACpC,EAAI,CAAC,QAAQ,CAAC,kBAAkB;IAChC,EAAI,CAAC,QAAQ,CAAC,wBAAwB;IACtC,EAAI,CAAC,QAAQ,CAAC,6BAA6B;AAC5C,CANiC,CAMhC;AAEc,UAAqB,CAAA,qBAAA,GAAG,CAAC,EAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAlC,CAAoC;AAEzD,UAAA,CAAA,gBAAgB,GAAG;IACjC,GAAG,EAAI,CAAC,oBAAoB;IAC5B,GAAG,EAAI,CAAC,yBAAyB;IACjC,GAAG,EAAI,CAAC,oBAAoB;IAC5B,GAAG,EAAI,CAAC,kBAAkB;IAC1B,GAAG,EAAI,CAAC,qBAAqB;AAC9B,CAN+B,CAM9B;AAEc,UAAA,CAAA,YAAY,GAAG;IAC7B,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,QAAQ;IACtB,EAAI,CAAC,QAAQ,CAAC,QAAQ;IACtB,EAAI,CAAC,QAAQ,CAAC,QAAQ;IACtB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,EAAI,CAAC,QAAQ,CAAC,QAAQ;IACtB,EAAI,CAAC,QAAQ,CAAC,QAAQ;IACtB,EAAI,CAAC,QAAQ,CAAC,QAAQ;IACtB,EAAI,CAAC,QAAQ,CAAC,SAAS;IACvB,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,eAAe;IAC7B,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,SAAS;IACvB,EAAI,CAAC,QAAQ,CAAC,SAAS;IACvB,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,eAAe;IAC7B,EAAI,CAAC,QAAQ,CAAC,YAAY;IAC1B,EAAI,CAAC,QAAQ,CAAC,YAAY;IAC1B,EAAI,CAAC,QAAQ,CAAC,QAAQ;IACtB,EAAI,CAAC,QAAQ,CAAC,QAAQ;IACtB,EAAI,CAAC,QAAQ,CAAC,SAAS;IACvB,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,WAAW;IACzB,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,UAAU;IACxB,EAAI,CAAC,QAAQ,CAAC,WAAW;AAC1B,CApC2B,CAoC1B;AAEc,UAAA,CAAA,aAAa,GAAG;IAC9B,EAAI,CAAC,MAAM,CAAC,WAAW;IACvB,EAAI,CAAC,MAAM,CAAC,YAAY;IACxB,EAAI,CAAC,MAAM,CAAC,qBAAqB;IACjC,EAAI,CAAC,MAAM,CAAC,iBAAiB;IAC7B,EAAI,CAAC,QAAQ,CAAC,IAAI;IAClB,EAAI,CAAC,QAAQ,CAAC,KAAK;AACpB,CAP4B,CAO3B;AAEc,UAAA,CAAA,gBAAgB,GAAG;IACjC,EAAI,CAAC,MAAM,CAAC,KAAK;IACjB,EAAI,CAAC,MAAM,CAAC,WAAW;IACvB,EAAI,CAAC,MAAM,CAAC,YAAY;IACxB,EAAI,CAAC,MAAM,CAAC,qBAAqB;IACjC,EAAI,CAAC,MAAM,CAAC,iBAAiB;AAC9B,CAN+B,CAM9B;AAEc,UAAA,CAAA,wBAAwB,GAAG;IACzC,EAAI,CAAC,MAAM,CAAC,WAAW;IACvB,EAAI,CAAC,MAAM,CAAC,YAAY;IACxB,EAAI,CAAC,MAAM,CAAC,KAAK;AAClB,CAJuC,CAItC;AAEc,UAAA,CAAA,cAAc,GAAG;IAC/B,EAAI,CAAC,QAAQ,CAAC,IAAI;IAClB,EAAI,CAAC,QAAQ,CAAC,IAAI;IAClB,EAAI,CAAC,QAAQ,CAAC,IAAI;IAClB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,MAAM;IACpB,EAAI,CAAC,QAAQ,CAAC,OAAO;IACrB,GAAG,EAAI,CAAC,gBAAgB;AACzB,CAhB6B,CAgB5B;AAEF;AACA;AACgB,UAAc,CAAA,cAAA,GAAG,CAAC,EAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAI,CAAC,QAAQ,CAAC,UAAU,CAApE,CAAsE;AAEpF,UAAA,CAAA,oBAAoB,GAAG;IACrC,EAAI,CAAC,MAAM,CAAC,KAAK;IACjB,EAAI,CAAC,MAAM,CAAC,UAAU;IACtB,EAAI,CAAC,MAAM,CAAC,WAAW;IACvB,EAAI,CAAC,MAAM,CAAC,WAAW;IACvB,EAAI,CAAC,MAAM,CAAC,cAAc;IAC1B,EAAI,CAAC,MAAM,CAAC,YAAY;IACxB,EAAI,CAAC,MAAM,CAAC,SAAS;IACrB,EAAI,CAAC,MAAM,CAAC,QAAQ;IACpB,EAAI,CAAC,MAAM,CAAC,SAAS;IACrB,EAAI,CAAC,MAAM,CAAC,iBAAiB;IAC7B,EAAI,CAAC,MAAM,CAAC,gBAAgB;AAC7B,CAZmC,CAYlC;AAEc,UAAA,CAAA,mBAAmB,GAAG;IACpC,EAAI,CAAC,MAAM,CAAC,SAAS;IACrB,EAAI,CAAC,MAAM,CAAC,WAAW;AACxB,CAHkC,CAGjC;AAGJ;MACa,KAAK,CAAA;AAKhB,IAAA,WAAA,CAAY,IAAe,EAAE,MAAc,EAAE,IAAY,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAED,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,cAAc,GAAA;AACZ,QAAA,OAAO,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3D;IAED,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;KAC/C;IAED,qBAAqB,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;KACpD;AACF,CAAA;AAED;AACA;MACa,WAAW,CAAA;AAOtB,IAAA,WAAA,CAAY,MAAe,EAAA;QALnB,IAAO,CAAA,OAAA,GAAiB,EAAE,CAAC;QAC3B,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;QACX,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;QACb,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;QAGhB,IAAI,CAAC,OAAO,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,MAAM,GAAI,EAAE,CAAC;KAC7B;;IAGD,UAAU,GAAA;AACR,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,gBAAA,MAAM,CAA0B,uBAAA,EAAA,IAAI,CAAC,KAAK,EAAE,CAAC;aAC9C;SACF;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;;IAGD,SAAS,GAAA;;AAEP,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAG7B,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,YAAA,OAAO,IAAI,CAAC;SACb;;AAGD,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,IAAI,MAAM,IAAI,GAAG,EAAE;;AAEjB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE;AAC5B,gBAAA,OAAO,MAAM,IAAI,IAAI,EAAE;AACrB,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,wBAAA,OAAO,IAAI,CAAC;qBACb;AACD,oBAAA,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;iBAC1B;;gBAED,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,gBAAA,OAAO,IAAI,CAAC;aACb;AAAM,iBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE;;;gBAGnC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,gBAAA,OAAO,YAAY,GAAG,CAAC,EAAE;AACvB,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,wBAAA,OAAO,IAAI,CAAC;qBACb;AACD,oBAAA,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,oBAAA,IAAI,MAAM,IAAI,IAAI,EAAE;wBAClB,IAAI,CAAC,KAAK,EAAE,CAAC;qBACd;AAAM,yBAAA,IAAI,MAAM,IAAI,GAAG,EAAE;AACxB,wBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE;4BAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,4BAAA,YAAY,EAAE,CAAC;AACf,4BAAA,IAAI,YAAY,IAAI,CAAC,EAAE;AACrB,gCAAA,OAAO,IAAI,CAAC;6BACb;yBACF;qBACF;AAAM,yBAAA,IAAI,MAAM,IAAI,GAAG,EAAE;AACxB,wBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE;4BAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,4BAAA,YAAY,EAAE,CAAC;yBAChB;qBACF;iBACF;AACD,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;;QAGD,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC5B,YAAA,OAAO,IAAI,CAAC;SACb;;AAGD,QAAA,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtC,QAAA,MAAM,YAAY,GAAG,MAAM,KAAK,GAAG,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;AAChC,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACjC,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;AACrC,gBAAA,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC1B,gBAAA,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;aAC9B;SACF;QAED,IAAI,OAAO,EAAE;YACX,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC5B,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;AAED,QAAA,IAAI,OAAO,IAAI,YAAY,EAAE;YAC3B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,YAAA,OAAO,IAAI,CAAC;SACb;;AAGD,QAAA,SAAS;YACP,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;;;;;AAgBzC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,YAAA,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,gBAAA,IAAI,UAAU,IAAI,GAAG,EAAE;oBACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,MAAM,IAAI,UAAU,CAAC;oBACrB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC9C,oBAAA,OAAO,IAAI,CAAC;iBACb;AACD,gBAAA,IAAI,UAAU,IAAI,GAAG,EAAE;oBACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,MAAM,IAAI,UAAU,CAAC;oBACrB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC9C,oBAAA,OAAO,IAAI,CAAC;iBACb;gBACD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBACnC,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1F,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,IAAI,GAAG,EAAE;AACrG,oBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC5B,oBAAA,OAAO,IAAI,CAAC;iBACb;aACF;AACD,YAAA,IAAI,MAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC,EAAE;gBAC7D,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACjC,gBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;AACvD,oBAAA,IAAI,UAAU,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;wBACzE,MAAM;qBACP;AACD,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE;AACzD,wBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAE;4BAC1D,aAAa,GAAG,IAAI,CAAC;yBACtB;wBACD,MAAM;qBACP;iBACF;;;gBAGD,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC5B,oBAAA,OAAO,IAAI,CAAC;iBACb;aACF;;;;;;;;;AAUD,YAAA,IAAI,WAAW,KAAK,UAAU,CAAC,IAAI,EAAE;gBACnC,IAAI,eAAe,GAAG,MAAM,CAAC;gBAC7B,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,gBAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,EAAE;AACxC,oBAAA,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACvC,oBAAA,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;AAC9C,oBAAA,IAAI,WAAW,KAAK,UAAU,CAAC,IAAI,EAAE;wBACnC,SAAS,GAAG,EAAE,CAAC;wBACf,MAAM;qBACP;iBACF;AAED,gBAAA,IAAI,WAAW,KAAK,UAAU,CAAC,IAAI,EAAE;AACnC,oBAAA,IAAI,SAAS,KAAK,UAAU,CAAC,IAAI,EAAE;AACjC,wBAAA,OAAO,KAAK,CAAC;qBACd;oBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC1B,oBAAA,OAAO,IAAI,CAAC;iBACb;gBAED,MAAM,GAAG,eAAe,CAAC;AACzB,gBAAA,IAAI,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC;aAChC;YAED,SAAS,GAAG,WAAW,CAAC;AAExB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACnB,MAAM;aACP;AAED,YAAA,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;SAC3B;;AAGD,QAAA,IAAI,SAAS,KAAK,UAAU,CAAC,IAAI,EAAE;AACjC,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,SAAS,CAAC,MAAc,EAAA;AACtB,QAAA,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE;YACzC,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AAClC,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,UAAU,CAAC,IAAI,CAAC;KACxB;IAED,MAAM,CAAC,MAAc,EAAE,IAAY,EAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChC,QAAA,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;KACxD;IAED,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;KAC7C;AAED,IAAA,QAAQ,CAAC,CAAS,EAAA;AAChB,QAAA,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;KACzD;AAED,IAAA,eAAe,CAAC,CAAS,EAAA;AACvB,QAAA,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;KAC/F;AAED,IAAA,aAAa,CAAC,CAAS,EAAA;QACrB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;KAC3C;IAED,QAAQ,CAAC,SAAiB,CAAC,EAAA;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAA,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC;AACrB,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;AACxB,QAAA,OAAO,CAAC,CAAC;KACV;IAED,UAAU,CAAC,SAAiB,CAAC,EAAA;AAC3B,QAAA,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACjD,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;KAC7C;AAED,IAAA,SAAS,CAAC,IAAe,EAAA;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACtD;AACF;;ACl3BD;;AAEG;AAIH;MACa,UAAU,CAAA;AAAvB,IAAA,WAAA,GAAA;QACE,IAAO,CAAA,OAAA,GAAiB,EAAE,CAAC;QAC3B,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;QACrB,IAAY,CAAA,YAAA,GAAW,CAAC,CAAC;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAqB,IAAIA,YAAgB,EAAE,CAAC;QACpD,IAAoB,CAAA,oBAAA,GAAkB,EAAE,CAAC;KAyoD1C;AAvoDC,IAAA,KAAK,CAAC,YAAmC,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAE/B,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;QAErC,MAAM,UAAU,GAAyB,EAAE,CAAC;AAC5C,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACvB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnD,IAAI,CAAC,SAAS,EAAE;gBACd,MAAM;aACP;AACD,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC5B;;;;QAKD,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,YAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACjD,gBAAA,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;AACzC,gBAAA,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;AAEzC,gBAAA,IAAI,SAAS,YAAYC,YAAgB,EAAE;oBACzC,MAAM,QAAQ,GAAG,SAA6B,CAAC;AAC/C,oBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC3B,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACnD,IAAI,QAAQ,EAAE;AACZ,wBAAA,IAAI;4BACF,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/C,4BAAA,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;yBACzB;wBAAC,OAAO,CAAC,EAAE;yBACX;qBACF;iBACF;aACF;AACD,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;SACtC;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;AAED,IAAA,WAAW,CAAC,YAAmC,EAAA;QAC7C,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,OAAO,YAAY,IAAI,QAAQ,EAAE;AACnC,gBAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;aACrC;iBAAM;AACL,gBAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;aAC7B;SACF;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;SACnB;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KACnB;IAED,MAAM,CAAC,KAAY,EAAE,OAAsB,EAAA;QACzC,OAAO;YACL,KAAK;YACL,OAAO;AACP,YAAA,QAAQ,EAAE,YAAA;gBACR,OAAO,CAAA,EAAG,OAAO,CAAA,CAAE,CAAC;aACrB;SACF,CAAC;KACH;IAED,QAAQ,GAAA;QACN,QACE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YACpC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,EACnC;KACH;AAED,IAAA,MAAM,CAAC,KAAmC,EAAA;AACxC,QAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC9B,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,gBAAA,OAAO,IAAI,CAAC;aACb;AACD,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5C,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;AAED,QAAA,OAAO,KAAK,CAAC;KACd;IAED,QAAQ,CAAC,KAAmC,EAAE,OAAsB,EAAA;AAClE,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;SACxB;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;KAC1C;AAED,IAAA,MAAM,CAAC,KAAmC,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACxB,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;SACpB;AACD,QAAA,OAAO,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC;KACzB;IAED,QAAQ,GAAA;;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,KAAK,EAAE,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;AACD,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;KACzB;IAED,KAAK,GAAA;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;KACxC;IAED,yBAAyB,GAAA;;;;;;;;;AAUvB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAC,CAAC;QAErE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC3D,YAAA,OAAO,IAAI,CAAC;SACb;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC/C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC3D,YAAA,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC7C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC3D,YAAA,OAAO,QAAQ,CAAC;SACjB;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC3C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC3D,YAAA,OAAO,MAAM,CAAC;SACf;;AAGD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC1C,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;aACzB;YACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5D,YAAA,OAAO,IAAI,CAAC;SACb;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC7C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACjD,YAAA,IAAI,SAAS,IAAI,IAAI,EAAE;AACrB,gBAAA,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;aAC9B;YACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5D,YAAA,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrC,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;aACzB;YACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5D,YAAA,OAAO,IAAI,CAAC;SACb;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACzC,YAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,gBAAA,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;aAC3B;YACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5D,YAAA,OAAO,MAAM,CAAC;SACf;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC3C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACpC,YAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,gBAAA,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;aAC5B;AACD,YAAA,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACvC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAClC,YAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,gBAAA,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC;aACxB;AACD,YAAA,OAAO,GAAG,CAAC;SACZ;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAED,cAAc,GAAA;;;AAGZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;AAEpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,yBAAyB,CAC1B,CAAC,QAAQ,EAAE,CAAC;QAEb,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,UAAU,EAC5B,sCAAsC,CACvC,CAAC;QAEF,MAAM,IAAI,GAAwB,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AAC/C,YAAA,GAAG;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;oBAC9C,MAAM;iBACP;AACD,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAEnC,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,yBAAyB,CAC1B,CAAC,QAAQ,EAAE,CAAC;gBAEb,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,iCAAiC,CAClC,CAAC;AAEF,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACpC,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC/B,gBAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,oBAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAE5B,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAIC,QAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;iBACnD;aACF,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAChD;QAED,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,WAAW,EAC7B,wCAAwC,CACzC,CAAC;QAEF,IAAI,OAAO,GAAoB,IAAI,CAAC;QACpC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAChC,YAAA,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC5B,YAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,gBAAA,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;aAC5B;SACF;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAExC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;AAElC,QAAA,OAAO,IAAIC,QAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KACxE;IAED,mBAAmB,GAAA;;QAEjB,MAAM,UAAU,GAAyB,EAAE,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;AACvE,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AAClD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACpC,YAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,gBAAA,UAAU,CAAC,IAAI,CAAC,SAA0B,CAAC,CAAC;aAC7C;SACF;QACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;AAExE,QAAA,OAAO,UAAU,CAAC;KACnB;IAED,UAAU,GAAA;;;;;;;;;;;;;;;;;;;AAoBR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAC,CAAC;QAGrE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,YAAa,IAAI,CAAC,UAAU,EAAE,CAAC;SAChC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;SAC7B;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;SAC/B;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAChC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC/C,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;SACrC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACxC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AAC7C,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;SACnC;QAED,IAAI,MAAM,GAAyB,IAAI,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC3C,YAAA,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACnC;aAAM,IACL,IAAI,CAAC,MAAM,CAAC;YACV,UAAU,CAAC,QAAQ,CAAC,GAAG;YACvB,UAAU,CAAC,QAAQ,CAAC,GAAG;YACvB,UAAU,CAAC,QAAQ,CAAC,KAAK;AAC1B,SAAA,CAAC,EACF;AACA,YAAA,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;SACrC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACnD,YAAA,MAAM,GAAG,IAAIC,OAAW,EAAE,CAAC;SAC5B;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjD,YAAA,MAAM,GAAG,IAAIC,KAAS,EAAE,CAAC;SAC1B;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACpD,YAAA,MAAM,GAAG,IAAIC,QAAY,EAAE,CAAC;SAC7B;aAAM;YACL,MAAM;gBACJ,IAAI,CAAC,8BAA8B,EAAE;oBACrC,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAChC;AAED,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,SAAS,EAC3B,+BAA+B,CAChC,CAAC;SACH;AAED,QAAA,OAAO,MAAM,CAAC;KACf;IAED,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACnD,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACrD,QAAA,OAAO,IAAIC,YAAgB,CAAC,UAAU,CAAC,CAAC;KACzC;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAGpD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,YAAa,IAAI,CAAC,UAAU,EAAE,CAAC;SAChC;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzC,OAAO,IAAIC,KAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KACxC;IAED,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAChD,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACzC,QAAA,OAAO,IAAIC,UAAc,CAAC,KAAK,CAAC,CAAC;KAClC;IAED,cAAc,GAAA;;AAEZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;;AAG7D,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;AACpD,cAAE,IAAI,CAAC,SAAS,EAAE;cAChB,IAAI,CAAC;QACT,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;AACzD,cAAE,IAAI,CAAC,4BAA4B,EAAE;cACnC,IAAI,CAAC;QACT,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;AAC3D,cAAE,IAAI,CAAC,cAAc,EAAE;cACrB,IAAI,CAAC;QAET,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAG9D,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,YAAa,IAAI,CAAC,UAAU,EAAE,CAAC;SAChC;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAExC,QAAA,OAAO,IAAIC,GAAO,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;KACtD;IAED,SAAS,GAAA;;AAEP,QAAA,QACE,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,qBAAqB,EAAE,EAC5B;KACH;IAED,cAAc,GAAA;;AAEZ,QAAA,QACE,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,8BAA8B,EAAE;AACrC,YAAA,IAAI,CAAC,qBAAqB,EAAE,EAC5B;KACH;IAED,mBAAmB,GAAA;;;;;QAKjB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACnC,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,gCAAgC,CAAC,CAAC;aACnE;YACD,IAAI,KAAK,GAA0B,IAAI,CAAC;YACxC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,KAAK,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;aAC7C;YAED,OAAO,IAAIC,GAAO,CAChB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,KAAK,CACN,CAAC;SACH;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,wBAAwB,CACzB,CAAC,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,GAAoB,IAAI,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACpC,gBAAA,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACzB,gBAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,oBAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;iBAC7B;aACF;YACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAChE,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;AAClD,YAAA,OAAO,IAAIC,GAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;SACnD;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,0BAA0B,CAC3B,CAAC,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,GAAoB,IAAI,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACpC,gBAAA,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACzB,gBAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,oBAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;iBAC7B;aACF;YACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;AAClE,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;AAClD,YAAA,OAAO,IAAIC,KAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;SACrD;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAED,8BAA8B,GAAA;AAC5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACtC,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CACzB,UAAU,CAAC,mBAAmB,EAC9B,6BAA6B,CAC9B,CAAC;AAEF,QAAA,OAAO,IAAIC,SAAa,CACtB,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC,SAAS;AACxC,cAAEC,iBAAqB,CAAC,SAAS;cAC/BA,iBAAqB,CAAC,SAAS,EACnC,IAAI,CACL,CAAC;KACH;IAED,qBAAqB,GAAA;;QAEnB,IAAI,IAAI,GAA0B,IAAI,CAAC;QAEvC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AAC9C,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACjC;AAED,QAAA,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,oBAAoB,EAC/B,+BAA+B,CAChC,CAAC;AAEF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAElD,OAAO,IAAIC,MAAU,CACnBC,cAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EACrC,IAAsB,EACtB,KAAK,CACN,CAAC;KACH;IAED,oBAAoB,GAAA;;AAElB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,yBAAyB,CAC1B,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;AAE9C,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,YAAA,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAIC,IAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KACxC;IAED,eAAe,GAAA;;AAEb,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC;SACb;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,YAAa,IAAI,CAAC,UAAU,EAAE,CAAC;SAChC;QAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;;QAGtE,MAAM,UAAU,GAAyB,EAAE,CAAC;AAC5C,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,QAAA,OAAO,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5B,gBAAA,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;AACvB,oBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACpB;aACF;iBAAM;AACL,gBAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC5B;AACD,YAAA,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;SAC/B;;QAGD,IAAI,UAAU,GAAgC,IAAI,CAAC;QACnD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC/C,YAAA,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;SACzC;QAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;QAEvE,OAAO,IAAIC,IAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KAC7C;IAED,iBAAiB,GAAA;;AAEf,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5C,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAGpD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,YAAa,IAAI,CAAC,UAAU,EAAE,CAAC;SAChC;QAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC;AACxE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YACpC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,+BAA+B,CAAC,CAAC;SACtE;QACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;QACzE,OAAO,IAAIC,MAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;KACxC;IAED,YAAY,GAAA;;;QAGV,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAGrC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,gBAAa,IAAI,CAAC,UAAU,EAAE,CAAC;aAChC;YAED,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,UAAU,EAC5B,8BAA8B,CAC/B,CAAC;AACF,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,WAAW,EAC7B,8BAA8B,CAC/B,CAAC;AACF,YAAA,KAAK,CAAC,IAAI,CAAC,IAAIC,IAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;SAC1C;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAGrC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,gBAAa,IAAI,CAAC,UAAU,EAAE,CAAC;aAChC;YAED,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,UAAU,EAC5B,iCAAiC,CAClC,CAAC;AACF,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,WAAW,EAC7B,iCAAiC,CAClC,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,IAAIC,OAAW,CAAC,IAAI,CAAC,CAAC,CAAC;SACnC;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;AACxE,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;AAED,QAAA,OAAO,KAAK,CAAC;KACd;IAED,eAAe,GAAA;;AAEb,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,IAAI,CAAC,iBAAiB,EAAE;SACzB,CAAC;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC3C,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,iBAAiB,EAAE,CACzB,CAAC;SACH;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;IAED,UAAU,GAAA;;;QAGR,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAChD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC3D,YAAA,OAAO,EAAE,CAAC;SACX;AAED,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,QAAA,IAAI,SAAS,IAAI,IAAI,EAAE;AACrB,YAAA,OAAO,EAAE,CAAC;SACX;AAED,QAAA,IAAI,EAAE,SAAS,YAAY,KAAK,CAAC,EAAE;AACjC,YAAA,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;SACzB;AAED,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,QAAA,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,CAAC,GAAG,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;KACzC;IAED,aAAa,GAAA;;AAEX,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAGpD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,YAAa,IAAI,CAAC,UAAU,EAAE,CAAC;SAChC;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEzC,IAAI,MAAM,GAA6B,EAAE,CAAC;AAC1C,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YAExB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,gBAAa,IAAI,CAAC,UAAU,EAAE,CAAC;aAChC;AACD,YAAA,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;SACzC;QAED,IAAI,KAAK,GAAgC,IAAI,CAAC;QAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAEzC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,gBAAa,IAAI,CAAC,UAAU,EAAE,CAAC;aAChC;AACD,YAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;SACpC;AAED,QAAA,OAAO,IAAIC,EAAM,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACpD;IAED,aAAa,GAAA;AACX,QAAA,IACE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,CAAC,IAAI;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,CAAC,EAAE,EAC/D;YACA,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAEhB,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,OAAO,KAAK,CAAC;KACd;IAED,iBAAiB,CAAC,SAA4B,EAAE,EAAA;;AAE9C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACpD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACzC,QAAA,MAAM,CAAC,IAAI,CAAC,IAAIC,MAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YAExB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,gBAAa,IAAI,CAAC,UAAU,EAAE,CAAC;aAChC;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;SAChC;AACD,QAAA,OAAO,MAAM,CAAC;KACf;IAED,iBAAiB,GAAA;;AAEf,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5C,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;AAClD,QAAA,OAAO,IAAIC,MAAU,CAAC,KAAK,CAAC,CAAC;KAC9B;IAED,4BAA4B,GAAA;;;AAG1B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC3C,IAAI,GAAG,IAAIC,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,uBAAuB,EAAE,CAC/B,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,uBAAuB,GAAA;;;AAGrB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YAC7C,IAAI,GAAG,IAAIA,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,wBAAwB,EAAE,CAChC,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,wBAAwB,GAAA;;;AAGtB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YACxC,IAAI,GAAG,IAAIA,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,wBAAwB,EAAE,CAChC,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,wBAAwB,GAAA;;;AAGtB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACzC,IAAI,GAAG,IAAIA,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,eAAe,EAAE,CACvB,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,eAAe,GAAA;;;AAGb,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACzC,IAAI,GAAG,IAAIA,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,oBAAoB,EAAE,CAC5B,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,oBAAoB,GAAA;;;;AAIlB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC3C,QAAA,IACE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EACzE;YACA,OAAO,IAAIA,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,sBAAsB,EAAE,CAC9B,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,sBAAsB,GAAA;;;;;;AAMpB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpC,OACE,IAAI,CAAC,MAAM,CAAC;YACV,UAAU,CAAC,MAAM,CAAC,SAAS;YAC3B,UAAU,CAAC,MAAM,CAAC,YAAY;YAC9B,UAAU,CAAC,MAAM,CAAC,eAAe;YACjC,UAAU,CAAC,MAAM,CAAC,kBAAkB;AACrC,SAAA,CAAC,EACF;YACA,IAAI,GAAG,IAAIA,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,iBAAiB,EAAE,CACzB,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,iBAAiB,GAAA;;;;AAIf,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACvC,QAAA,OACE,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAC1E;YACA,IAAI,GAAG,IAAIA,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,oBAAoB,EAAE,CAC5B,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,oBAAoB,GAAA;;;;AAIlB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAC7C,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;YACrE,IAAI,GAAG,IAAIA,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,0BAA0B,EAAE,CAClC,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,0BAA0B,GAAA;;;;;AAKxB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpC,OACE,IAAI,CAAC,MAAM,CAAC;YACV,UAAU,CAAC,MAAM,CAAC,IAAI;YACtB,UAAU,CAAC,MAAM,CAAC,aAAa;YAC/B,UAAU,CAAC,MAAM,CAAC,MAAM;AACzB,SAAA,CAAC,EACF;YACA,IAAI,GAAG,IAAIA,cAAkB,CAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,EACJ,IAAI,CAAC,iBAAiB,EAAE,CACzB,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,iBAAiB,GAAA;;;;;;;QAOf,IACE,IAAI,CAAC,MAAM,CAAC;YACV,UAAU,CAAC,MAAM,CAAC,KAAK;YACvB,UAAU,CAAC,MAAM,CAAC,IAAI;YACtB,UAAU,CAAC,MAAM,CAAC,KAAK;YACvB,UAAU,CAAC,MAAM,CAAC,IAAI;YACtB,UAAU,CAAC,MAAM,CAAC,GAAG;AACtB,SAAA,CAAC,EACF;AACA,YAAA,OAAO,IAAIC,aAAiB,CAC1B,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAC3B,IAAI,CAAC,iBAAiB,EAAE,CACzB,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;KACpC;IAED,oBAAoB,GAAA;;AAElB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACxC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;SAClB;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,mBAAmB,GAAA;;QAEjB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;AAC/C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;YAChE,MAAM,UAAU,GAAG,IAAIC,UAAc,CAAC,IAAI,CAAC,CAAC;AAC5C,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrC,IAAI,CAAC,EAAE;AACL,gBAAA,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;aACxB;AACD,YAAA,OAAO,UAAU,CAAC;SACnB;;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACzC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,uBAAuB,CACxB,CAAC;AACF,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAIC,UAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE;AACL,gBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;aAClB;AACD,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACnD,YAAA,OAAO,KAAK,CAAC;SACd;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACnC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/C,YAAA,OAAO,MAAM,CAAC;SACf;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,mBAAmB,GAAA;;QAEjB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AAC7C,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACrC,gBAAA,IAAI,MAAM,IAAI,IAAI,EAAE;oBAClB,OAAO,IAAIC,UAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;iBACzC;gBACD,OAAO,IAAIC,QAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aACrC;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACrC,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5C,OAAO,IAAIC,SAAa,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;aACzC;AACD,YAAA,OAAO,IAAI/B,YAAgB,CAAC,IAAI,CAAC,CAAC;SACnC;;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AACzC,YAAA,OAAO,IAAIgC,WAAe,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;SACrE;;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AAC7C,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACjC;;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC5C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5D,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;AAC/D,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvC,OAAO,IAAIC,WAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACzC;;AAGD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC9C,OAAO,IAAIJ,UAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACvC;IAED,yBAAyB,GAAA;;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AAC9C,YAAA,OAAO,IAAI,CAAC;SACb;QAED,MAAM,IAAI,GAA0B,EAAE,CAAC;AACvC,QAAA,GAAG;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;gBAC9C,MAAM;aACP;AACD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;AAChD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAChB,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QAC/C,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,WAAW,EAC7B,+BAA+B,CAChC,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC;KACb;IAED,0BAA0B,GAAA;;QAExB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3C,OAAO,IAAIK,YAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KACrC;IAED,iBAAiB,GAAA;;QAEf,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAC7D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC9D,OAAO,IAAIA,YAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KACrC;IAED,YAAY,GAAA;;AAEV,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5C,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;AAEpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,2BAA2B,CAC5B,CAAC,QAAQ,EAAE,CAAC;;QAGb,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,UAAU,EAC5B,+BAA+B,CAChC,CAAC;QACF,MAAM,OAAO,GAAsB,EAAE,CAAC;AACtC,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;;AAElD,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAEtC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAC9B,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,yBAAyB,CAC1B,CAAC,QAAQ,EAAE,CAAC;YAEb,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,sCAAsC,CACvC,CAAC;AAEF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACpC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,YAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,gBAAA,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;aACnC;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC7C,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,iCAAiC,CAClC,CAAC;;gBACC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE1C,YAAA,OAAO,CAAC,IAAI,CAAC,IAAIC,MAAU,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;SACnE;QAED,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,WAAW,EAC7B,iCAAiC,CAClC,CAAC;AAEF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;AAElC,QAAA,MAAM,UAAU,GAAG,IAAIC,MAAU,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC5C,QAAA,OAAO,UAAU,CAAC;KACnB;IAED,qBAAqB,GAAA;;AAEnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACnC,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACvC;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,uBAAuB,GAAA;;AAErB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACxC,QAAA,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACrD,YAAA,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5C;AAED,QAAA,OAAO,SAAS,CAAC;KAClB;IAED,kBAAkB,GAAA;;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,wBAAwB,CACzB,CAAC;QACF,IAAI,IAAI,GAAoB,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAChC,YAAA,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACzB,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;aACzB;SACF;QACD,IAAI,KAAK,GAA0B,IAAI,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACtD,YAAA,IAAI,SAAS,YAAYP,UAAc,EAAE;gBACvC,KAAK,GAAG,SAAS,CAAC;aACnB;AAAM,iBAAA,IACL,SAAS,YAAYE,SAAa;AAClC,gBAAA,SAAS,CAAC,WAAW,YAAYF,UAAc,EAC/C;AACA,gBAAA,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC;aAC/B;iBAAM;AACL,gBAAA,IAAI;oBACF,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrD,KAAK,GAAG,IAAIG,WAAe,CAAC,UAAU,CAAC,CAAC;iBACzC;AAAC,gBAAA,OAAA,EAAA,EAAM;oBACN,KAAK,GAAG,SAAS,CAAC;iBACnB;aACF;SACF;QACD,MAAM,CAAC,GAAG,IAAIpB,KAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,QAAA,OAAO,CAAC,CAAC;KACV;IAED,gBAAgB,GAAA;;AAEd,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,wBAAwB,CACzB,CAAC;QACF,IAAI,IAAI,GAAoB,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAChC,YAAA,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACzB,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;aACzB;SACF;QACD,IAAI,KAAK,GAA0B,IAAI,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,YAAA,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAClC;AACD,QAAA,OAAO,IAAID,GAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;KAC1D;IAED,iBAAiB,GAAA;;;AAGf,QAAA,OAAO,IAAI,CAAC,4BAA4B,EAAE,CAAC;KAC5C;IAED,cAAc,GAAA;;AAEZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC;SACb;;QAGD,IAAI,OAAO,GAAW,EAAE,CAAC;QACzB,IAAI,MAAM,GAAW,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AAC5C,YAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CACrB,UAAU,CAAC,aAAa,EACxB,yBAAyB,CAC1B,CAAC,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AACtC,gBAAA,MAAM,GAAG,IAAI,CAAC,QAAQ,CACpB,UAAU,CAAC,WAAW,EACtB,uBAAuB,CACxB,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;SAChE;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,wBAAwB,CACzB,CAAC;QACF,IAAI,IAAI,GAAoB,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAChC,YAAA,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACzB,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;aACzB;SACF;AAED,QAAA,OAAO,IAAID,GAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KAClE;IAED,cAAc,GAAA;;AAEZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC9C,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,wBAAwB,CACzB,CAAC;QACF,IAAI,IAAI,GAAoB,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAChC,YAAA,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACzB,YAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;aACzB;SACF;AAED,QAAA,OAAO,IAAI2B,QAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KACtD;IAED,WAAW,GAAA;;QAET,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC5D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAC5B,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,iCAAiC,CAClC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,gCAAgC,CACjC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC7D,QAAA,OAAO,IAAIC,UAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KACjE;IAED,iBAAiB,GAAA;;AAEf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAC1E,OAAO,IAAIC,MAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KACxC;IAED,mBAAmB,GAAA;;AAEjB,QAAA,MAAM,UAAU,GAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvG,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC3C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;YAC1E,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SAClC;AACD,QAAA,OAAO,IAAIC,QAAY,CAAC,UAAU,CAAC,CAAC;KACrC;IAED,WAAW,GAAA;;AAET,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;AAEvE,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;YACtB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,0BAA0B,CAAC,CAAC;SAC7D;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAC7C,YAAA,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;SAC5D;AAED,QAAA,MAAM,SAAS,GAAG,IAAIC,KAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAErD,QAAA,OAAO,SAAS,CAAC;KAClB;IAED,UAAU,GAAA;;;;;;;;;;;;;;;;;;;;;;QAuBR,IACE,IAAI,CAAC,MAAM,CAAC;YACV,UAAU,CAAC,MAAM,CAAC,KAAK;YACvB,GAAG,UAAU,CAAC,YAAY;YAC1B,UAAU,CAAC,QAAQ,CAAC,IAAI;YACxB,UAAU,CAAC,QAAQ,CAAC,GAAG;YACvB,UAAU,CAAC,QAAQ,CAAC,GAAG;YACvB,UAAU,CAAC,QAAQ,CAAC,GAAG;AACxB,SAAA,CAAC,EACF;AACA,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAC5C;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACvC,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;aACjD;YACD,OAAO,IAAIC,IAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtC;;AAGD,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACzC,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,IAAI,CAAC;SACb;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;YAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,MAAM,GAAoB,IAAI,CAAC;YACnC,IAAI,MAAM,GAAkB,IAAI,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AAC5C,gBAAA,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3B,MAAM,GAAG,IAAI,CAAC;gBACd,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,oBAAA,MAAM,GAAG,IAAI,CAAC,QAAQ,CACpB,UAAU,CAAC,WAAW,EACtB,kCAAkC,CACnC,CAAC,QAAQ,EAAE,CAAC;iBACd;gBACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;aACzE;YACD,OAAO,IAAIC,YAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SACnD;;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxC,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;AACxE,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAC3B,UAAU,CAAC,aAAa,EACxB,oCAAoC,CACrC,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;AACpE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/B,IAAI,MAAM,GAAkB,IAAI,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,MAAM,GAAG,IAAI,CAAC,QAAQ,CACpB,UAAU,CAAC,WAAW,EACtB,kCAAkC,CACnC,CAAC,QAAQ,EAAE,CAAC;aACd;YACD,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,YAAY,EAC9B,2BAA2B,CAC5B,CAAC;AACF,YAAA,OAAO,IAAIC,WAAe,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;SACvE;;AAGD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;;;QAIhC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC1C,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;AAClB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,SAAS,GAA0B,IAAI,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AAC5C,gBAAA,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC3B,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC1C,oBAAA,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;iBACtD;gBACD,IAAI,KAAK,GAAW,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACxC,oBAAA,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;;;;AAIrC,oBAAA,IAAI;AACF,wBAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;wBACrD,SAAS,GAAG,IAAI,CAAC;qBAClB;oBAAC,OAAO,CAAC,EAAE;wBACV,KAAK,GAAG,GAAG,CAAC;qBACb;iBACF;gBACD,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,YAAY,EAC9B,yBAAyB,CAC1B,CAAC;AACF,gBAAA,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACxC;AACD,YAAA,MAAM,SAAS,GAAG,IAAIC,SAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/E,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;aAC1D;AACD,YAAA,OAAO,SAAS,CAAC;SAClB;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAED,sBAAsB,GAAA;;QAEpB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;AACxC,YAAA,OAAO,IAAIC,WAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACrE;;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;AAC9C,YAAA,OAAO,IAAIA,WAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACrE;;;AAID,QAAA,IACE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,EACjD;AACA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,SAAS,EAC3B,gCAAgC,CACjC,CAAC;AACF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,YAAY,EAC9B,gCAAgC,CACjC,CAAC;AACF,YAAA,OAAO,IAAIA,WAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;SAC9D;;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;AAChD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,SAAS,EAC3B,gCAAgC,CACjC,CAAC;AACF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAC1B,UAAU,CAAC,YAAY,EACvB,uBAAuB,CACxB,CAAC,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,kCAAkC,CACnC,CAAC;AACF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAC1B,UAAU,CAAC,WAAW,EACtB,gDAAgD,CACjD,CAAC,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CACX,UAAU,CAAC,MAAM,CAAC,YAAY,EAC9B,gCAAgC,CACjC,CAAC;AACF,YAAA,OAAO,IAAIA,WAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAChE;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAED,UAAU,GAAA;;;QAIR,IAAI,UAAU,GAAyB,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,cAAc,EACzB,yBAAyB,CAC1B,CAAC;AACF,YAAA,MAAM,IAAI,GAAG,IAAIC,SAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;;AAE7C,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CACxB,UAAU,CAAC,gBAAgB,EAC3B,0BAA0B,CAC3B,CAAC,QAAQ,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,oBAAA,GAAG;AACD,wBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CACrB,UAAU,CAAC,gBAAgB,EAC3B,0BAA0B,CAC3B,CAAC,QAAQ,EAAE,CAAC;wBACb,IAAI,EAAE,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE;4BAClC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;yBACrC;AACD,wBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpB,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAChD;gBACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;aAC9D;AACD,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACvB;AAED,QAAA,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;AACF;;ACrpDD;;AAEG;MAKU,QAAQ,CAAA;IAKnB,WAAY,CAAA,IAAY,EAAE,UAAuC,EAAA;AAC/D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;KACf;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,KAAK,CAAC;KACd;AACF,CAAA;MAEY,UAAU,CAAA;AAOrB,IAAA,WAAA,CACE,IAAY,EACZ,IAAc,EACd,UAAuC,EAAA;AAEvC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;KACf;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;KAC1B;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;KAC3B;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;KAC7B;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC,IAAmB,CAAC,KAAK,GAAG,CAAC,CAAC;KACjE;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC,IAAmB,CAAC,OAAO,GAAG,IAAI,CAAC;KACtE;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;AACtB,cAAG,IAAI,CAAC,IAAkB,CAAC,MAAM;AACjC,cAAE,IAAI,CAAC,IAAI,CAAC,UAAU;AACtB,kBAAG,IAAI,CAAC,IAAqB,CAAC,MAAM;kBAClC,IAAI,CAAC;KACV;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,IAAkB,CAAC,KAAK,GAAG,CAAC,CAAC;KAC/D;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,IAAkB,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;KACxE;AACF,CAAA;AAEK,MAAO,UAAW,SAAQ,QAAQ,CAAA;IAOtC,WAAY,CAAA,IAAY,EAAE,UAAuC,EAAA;AAC/D,QAAA,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAP1B,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;QAChC,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;QAClB,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC,CAAC;QACvB,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC,CAAC;QACrB,IAAK,CAAA,KAAA,GAAY,KAAK,CAAC;KAItB;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC;KACb;AACF,CAAA;AAEK,MAAO,SAAU,SAAQ,QAAQ,CAAA;IAKrC,WAAY,CAAA,IAAY,EAAE,UAAuC,EAAA;AAC/D,QAAA,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KACjB;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC;KACb;AACF,CAAA;AAEK,MAAO,YAAa,SAAQ,QAAQ,CAAA;AAGxC,IAAA,WAAA,CACE,IAAY,EACZ,MAAuB,EACvB,UAAuC,EACvC,MAAc,EAAA;AAEd,QAAA,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC;KACb;AACF,CAAA;IAEW,aAMX;AAND,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,YAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAc,CAAA;AAChB,CAAC,EANW,YAAY,KAAZ,YAAY,GAMvB,EAAA,CAAA,CAAA,CAAA;MAEY,YAAY,CAAA;AASvB,IAAA,WAAA,CACE,IAAY,EACZ,IAAc,EACd,KAAa,EACb,OAAe,EACf,UAAuC,EACvC,YAA0B,EAC1B,MAAc,EAAA;AAEd,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;KAC1B;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;KAC3B;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;KAC7B;AAED,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KACvB;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC,IAAmB,CAAC,KAAK,GAAG,CAAC,CAAC;KACjE;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC,IAAmB,CAAC,OAAO,GAAG,IAAI,CAAC;KACtE;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;AACtB,cAAG,IAAI,CAAC,IAAkB,CAAC,MAAM;AACjC,cAAE,IAAI,CAAC,IAAI,CAAC,UAAU;AACtB,kBAAG,IAAI,CAAC,IAAqB,CAAC,MAAM;kBAClC,IAAI,CAAC;KACV;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,IAAkB,CAAC,KAAK,GAAG,CAAC,CAAC;KAC/D;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,IAAkB,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;KACxE;AACF,CAAA;MAEY,SAAS,CAAA;IAIpB,WAAY,CAAA,IAAY,EAAE,IAAc,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AACF,CAAA;AAED,MAAM,SAAS,CAAA;IAIb,WAAY,CAAA,KAAa,EAAE,IAAY,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AACF,CAAA;MAEY,SAAS,CAAA;AAOpB,IAAA,WAAA,CACE,IAAY,EACZ,IAAqB,EACrB,YAAoB,EACpB,QAAyB,EAAA;AAEzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC3B;AACF,CAAA;MAEY,UAAU,CAAA;AAMrB,IAAA,WAAA,CACE,IAAY,EACZ,IAAqB,EACrB,YAAoB,EACpB,QAAyB,EAAA;AAEzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;AACF,CAAA;MAEY,YAAY,CAAA;AAMvB,IAAA,WAAA,CACE,IAAY,EACZ,IAAqB,EACrB,UAAuC,EACvC,EAAU,EAAA;AAEV,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KACd;AACF,CAAA;MAEY,YAAY,CAAA;IAIvB,WACE,CAAA,IAAY,EACZ,IAAc,EAAA;AAEd,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AACF,CAAA;MAEY,YAAY,CAAA;IAcvB,WAAY,CAAA,IAAY,EAAE,KAAA,GAAuB,IAAI,EAAA;QAZrD,IAAK,CAAA,KAAA,GAAkB,IAAI,CAAC;QAC5B,IAAM,CAAA,MAAA,GAAqB,EAAE,CAAC;QAC9B,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;QAChC,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;QACpC,IAAU,CAAA,UAAA,GAAoB,IAAI,CAAC;QACnC,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;QACpC,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;QACpC,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC,CAAC;QACvB,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC,CAAC;QACrB,IAAK,CAAA,KAAA,GAAY,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;AAGnC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AACF,CAAA;MAEY,cAAc,CAAA;AAA3B,IAAA,WAAA,GAAA;QACE,IAAM,CAAA,MAAA,GAAwB,EAAE,CAAC;QACjC,IAAQ,CAAA,QAAA,GAAwB,EAAE,CAAC;QACnC,IAAO,CAAA,OAAA,GAAwB,EAAE,CAAC;KACnC;AAAA,CAAA;AAED,MAAM,kBAAkB,CAAA;AAKtB,IAAA,WAAA,CAAY,IAAkB,EAAA;QAH9B,IAAS,CAAA,SAAA,GAA+B,IAAI,CAAC;QAC7C,IAAK,CAAA,KAAA,GAAY,KAAK,CAAC;QACvB,IAAI,CAAA,IAAA,GAAwB,IAAI,CAAC;AAE/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AACF,CAAA;MAEY,WAAW,CAAA;AAuBtB,IAAA,WAAA,CAAY,IAAwB,EAAA;;QArBpC,IAAQ,CAAA,QAAA,GAAwB,EAAE,CAAC;;QAEnC,IAAO,CAAA,OAAA,GAAwB,EAAE,CAAC;;QAElC,IAAQ,CAAA,QAAA,GAAwB,EAAE,CAAC;;QAEnC,IAAQ,CAAA,QAAA,GAAwB,EAAE,CAAC;;QAEnC,IAAO,CAAA,OAAA,GAAqB,EAAE,CAAC;;QAE/B,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;;QAEpC,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;;AAEhC,QAAA,IAAA,CAAA,KAAK,GAAmB,IAAI,cAAc,EAAE,CAAC;;QAE7C,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;AAEpC,QAAA,IAAA,CAAA,MAAM,GAA4B,IAAI,GAAG,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAoC,IAAI,GAAG,EAAE,CAAC;QAGtD,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB;KACF;AAED,IAAA,iBAAiB,CAAC,IAAc,EAAA;AAC9B,QAAA,QACE,IAAI,CAAC,IAAI,IAAI,oBAAoB;YACjC,IAAI,CAAC,IAAI,IAAI,oBAAoB;YACjC,IAAI,CAAC,IAAI,IAAI,0BAA0B;AACvC,YAAA,IAAI,CAAC,IAAI,IAAI,oBAAoB,EACjC;KACH;AAED,IAAA,MAAM,CAAC,IAAY,EAAA;AACjB,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAE/B,QAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;AACtB,YAAA,IAAI,IAAI,YAAY7C,QAAY,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,kBAAkB,CAAC,IAAoB,CAAC,CAAC,CAAC;aAC9E;SACF;AAED,QAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;AACtB,YAAA,IAAI,IAAI,YAAYkC,MAAU,EAAE;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAkB,EAAE,IAAI,CAAC,CAAC;AACzD,gBAAA,IAAI,IAAI,YAAY,UAAU,EAAE;AAC9B,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAkB,CAAC,CAAC;iBACvC;aACF;SACF;AAED,QAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;AACtB,YAAA,IAAI,IAAI,YAAYK,KAAS,EAAE;AAC7B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAiB,CAAC,CAAC,CAAC;gBACzD,SAAS;aACV;AAED,YAAA,IAAI,IAAI,YAAYJ,QAAY,EAAE;gBAChC,MAAM,CAAC,GAAG,IAAoB,CAAC;AAC/B,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,IAAI,GACR,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;gBAClE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;gBACtE,SAAS;aACV;AAED,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,CAAC,GAAG,IAAe,CAAC;AAC1B,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC1D,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5D,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAK,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,IAAI,YAAY,CAC9B,CAAC,CAAC,IAAI,EACN,IAAI,EACJ,CAAC,EACD,CAAC,EACD,CAAC,CAAC,UAAU,EACZ,YAAY,CAAC,OAAO,EACpB,CAAC,CAAC,MAAM,CACT,CAAC;AACF,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC5B,SAAS;aACV;AAED,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,CAAC,GAAG,IAAe,CAAC;AAC1B,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC1D,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5D,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAK,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;gBACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACtD,gBAAA,MAAM,OAAO,GAAG,IAAI,YAAY,CAC9B,CAAC,CAAC,IAAI,EACN,IAAI,EACJ,CAAC,EACD,CAAC,EACD,CAAC,CAAC,UAAU,EACZ,gBAAgB,GAAG,YAAY,CAAC,cAAc,GAAG,YAAY,CAAC,OAAO,EACrE,CAAC,CAAC,MAAM,CACT,CAAC;AACF,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,SAAS;aACV;AAED,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,CAAC,GAAG,IAAe,CAAC;AAC1B,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC1D,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5D,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAK,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;gBACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACtD,gBAAA,MAAM,OAAO,GAAG,IAAI,YAAY,CAC9B,CAAC,CAAC,IAAI,EACN,IAAI,EACJ,CAAC,EACD,CAAC,EACD,CAAC,CAAC,UAAU,EACZ,gBAAgB,GAAG,YAAY,CAAC,cAAc,GAAG,YAAY,CAAC,OAAO,EACrE,CAAC,CAAC,MAAM,CACT,CAAC;gBACF,IAAI,gBAAgB,EAAE;AACpB,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC5B;qBAAM;AACL,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC7B;gBACD,SAAS;aACV;AAED,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,CAAC,GAAG,IAAe,CAAC;AAC1B,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC1D,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5D,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAK,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,IAAI,YAAY,CAC9B,CAAC,CAAC,IAAI,EACN,IAAI,EACJ,CAAC,EACD,CAAC,EACD,CAAC,CAAC,UAAU,EACZ,YAAY,CAAC,OAAO,EACpB,CAAC,CAAC,MAAM,CACT,CAAC;AACF,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC5B,SAAS;aACV;AAED,YAAA,IAAI,IAAI,YAAYnC,QAAY,EAAE;gBAChC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACvD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACzD,gBAAA,MAAM,KAAK,GAAG,WAAW,IAAI,aAAa,IAAI,YAAY,CAAC;AAE3D,gBAAA,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,IAAI,CAAC,CAAC;AACpD,gBAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9B,gBAAA,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,IAAI,GAAG,EAAE,CAAC;gBAE1C,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,KAAK,GAAG,IAAI,CAAC;AAC7C,oBAAA,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;AAChB,oBAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClD,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/C,oBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBACjC;qBAAM;AACL,oBAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1B,CAAC,GAAG,KACF,IAAI,YAAY,CACd,GAAG,CAAC,IAAI,EACR,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,CAC5C,CACJ,CAAC;AACF,oBAAA,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AAC7B,0BAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;0BACnD,IAAI,CAAC;iBACV;gBACD,SAAS;aACV;SACF;QAED,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AACzC,YAAA,IAAI,EAAE,CAAC,IAAI,EAAE;gBACX,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACxC;SACF;QAED,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;YACzC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;;AACtB,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;oBAClC,MAAM,CAAC,GAAG,IAAwB,CAAC;AACnC,oBAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;wBACrC,IAAI,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE;4BAC3B,CAAA,EAAA,GAAA,EAAE,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;yBACnC;qBACF;iBACF;AACH,aAAC,CAAC,CAAC;SACJ;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAChC;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAChC;KACF;AAED,IAAA,iBAAiB,CAAC,IAAc,EAAA;QAC9B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAmB,CAAC,KAAK,GAAG,IAAI,CAAC;AAClC,YAAA,IAAK,IAAmB,CAAC,OAAO,EAAE;AAChC,gBAAA,KAAK,MAAM,CAAC,IAAK,IAAmB,CAAC,OAAO,EAAE;AAC5C,oBAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAChC;aACF;SACF;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,iBAAiB,CAAE,IAAkB,CAAC,MAAM,CAAC,CAAC;SACpD;AAAM,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,IAAK,IAAqB,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,iBAAiB,CAAE,IAAqB,CAAC,MAAO,CAAC,CAAC;aACxD;SACF;aAAM;YACL,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;aAC/B;SACF;KACF;IAED,SAAS,CAAC,EAAgB,EAAE,KAAwB,EAAA;;AAClD,QAAA,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE;AAC3B,YAAA,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAC;YAClD,IAAI,IAAI,EAAE;AACR,gBAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACjB;SACF;KACF;;IAGD,YAAY,CAAC,KAAa,EAAE,OAAe,EAAA;AACzC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE;AAC5C,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE;AAC5C,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE;AAC5C,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE;AAC5C,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,aAAa,CAAC,IAAY,EAAA;AACxB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;AAClB,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;AAClB,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;AAClB,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;AAClB,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,mBAAmB,CAAC,IAAc,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,cAAc,CAAC,EAAY,EAAE,OAAgB,EAAA;QAC3C,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,QAAA,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AACjB,YAAA,IAAI,IAAI,YAAY8C,WAAe,EAAE;AACnC,gBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACnB;AAAM,iBAAA,IAAI,IAAI,YAAYC,SAAa,EAAE;gBACxC,QAAQ,CAAC,GAAG,EAAE,CAAC;aAChB;AAAM,iBAAA,IAAI,IAAI,YAAYvC,GAAO,EAAE;gBAClC,MAAM,CAAC,GAAG,IAAe,CAAC;gBAC1B,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;AAC9B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAClC;AACD,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,oBAAA,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC3C;aACF;AAAM,iBAAA,IAAI,IAAI,YAAYmB,UAAc,EAAE;gBACzC,MAAM,CAAC,GAAG,IAAsB,CAAC;gBACjC,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;AAC9B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAClC;aACF;AAAM,iBAAA,IAAI,IAAI,YAAYlB,GAAO,EAAE;gBAClC,MAAM,CAAC,GAAG,IAAe,CAAC;gBAC1B,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;AAC9B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAClC;AACD,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,oBAAA,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC3C;aACF;AAAM,iBAAA,IAAI,IAAI,YAAYX,YAAgB,EAAE;gBAC3C,MAAM,CAAC,GAAG,IAAwB,CAAC;;;AAGnC,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,oBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACtD,IAAI,OAAO,EAAE;wBACX,OAAO;qBACR;iBACF;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,OAAO,EAAE;AACX,oBAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACzB;aACF;AAAM,iBAAA,IAAI,IAAI,YAAY8B,QAAY,EAAE;gBACvC,MAAM,CAAC,GAAG,IAAoB,CAAC;AAC/B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,MAAM,EAAE;oBACV,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;qBACrB;oBACA,EAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,oBAAA,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE;AAC7B,wBAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;qBAC9D;oBACD,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;iBACrC;aACF;AAAM,iBAAA,IAAI,IAAI,YAAYb,IAAQ,EAAE;gBACnC,MAAM,CAAC,GAAG,IAAgB,CAAC;AAC3B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,MAAM,EAAE;oBACV,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;qBACrB;oBACA,EAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,oBAAA,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE;AAC7B,wBAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;qBAC9D;oBACD,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;iBACrC;aACF;AACH,SAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KAC/D;IAED,aAAa,GAAA;QACX,MAAM,MAAM,GAA+B,EAAE,CAAC;AAE9C,QAAA,SAAS,SAAS,CAAC,KAAa,EAAE,OAAe,EAAA;AAC/C,YAAA,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;AAC1B,gBAAA,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;aAC3B;AAED,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;AAC/B,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;aACpB;YAED,IAAI,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;gBACnC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;aACpC;SACF;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7B,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,YAAA,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACtB;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YAC5B,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,YAAA,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACtB;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7B,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,YAAA,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACtB;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC7B,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,YAAA,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACtB;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,WAAW,CACT,IAAc,EACd,OAAA,GAAyC,SAAS,EAAA;AAElD,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,GAAG,EAAE,CAAC;SACd;AAED,QAAA,IAAI,IAAI,YAAYmB,MAAU,EAAE;AAC9B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACvC;aAAM;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACzC,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACtB;SACF;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;IAED,iBAAiB,CAAC,MAAkB,EAAE,OAA0B,EAAA;AAC9D,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,CAAC,IAAI,YAAYA,MAAU,EAAE;gBAChC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aACzC;iBAAM;AACL,gBAAA,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACxE,gBAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,oBAAA,MAAM,IAAI,GAAG,IAAI,UAAU,CACzB,CAAC,CAAC,IAAI,EACN,QAAQ,EACR,QAAQ,CAAC,IAAI,EACb,aAAa,CACd,CAAC;AACF,oBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACpB;aACF;SACF;KACF;AAED,IAAA,cAAc,CAAC,IAAc,EAAA;QAC3B,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACtC,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,YAAA,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACxE,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,UAAU,CACR,IAAyB,EACzB,MAAA,GAAuC,SAAS,EAAA;AAEhD,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,GAAG,EAAE,CAAC;SACb;AAED,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,GAAG,CAAC,IAAI,YAAYA,MAAU,EAAE;gBAClC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aACzC;iBAAM;gBACL,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACtC,gBAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACpB;aACF;SACF;AAED,QAAA,OAAO,MAAM,CAAC;KACf;IAED,gBAAgB,CAAC,MAAkB,EAAE,MAAwB,EAAA;AAC3D,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,CAAC,IAAI,YAAYA,MAAU,EAAE;gBAChC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aACvC;iBAAM;gBACL,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACpB;aACF;SACF;KACF;AAED,IAAA,aAAa,CAAC,IAA+B,EAAA;QAC3C,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACtC,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAChE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,YAAA,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAC1E,YAAA,IAAI,aAAa,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aAC7D;AACD,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,YAAY,CAAC,CAAoB,EAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,KAAK,EAAE;AACtB,YAAA,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACV;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AAED,IAAA,SAAS,CAAC,CAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,KAAK,EAAE;AACtB,YAAA,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACV;AACD,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtB,QAAA,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzB;AAED,IAAA,SAAS,CAAC,IAAY,EAAA;AACpB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;gBAClB,OAAO,CAAC,CAAC,IAAI,CAAC;aACf;SACF;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,aAAa,CAAC,IAAe,EAAA;AAC3B,QAAA,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAK,EAAE,IAAI,CAAC,CAAC,CAAC;KACtE;IAED,YAAY,CACV,IAAc,EACd,UAAuC,EAAA;QAEvC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;SAC/B;AAED,QAAA,IAAI,IAAI,YAAYS,SAAa,EAAE;YACjC,MAAM,CAAC,GAAG,IAAqB,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAO,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;YACvE,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3B,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,IAAI,IAAI,YAAYT,MAAU,EAAE;YAC9B,MAAM,CAAC,GAAG,IAAkB,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AACzB,YAAA,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;AACzB,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAK,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;AACnD,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;aAC5D;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3B,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,IAAI,IAAI,YAAYU,WAAe,EAAE;YACnC,MAAM,CAAC,GAAG,IAAuB,CAAC;YAClC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,YAAYJ,IAAQ,CAAC;AAClD,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;AACrB,kBAAE,YAAY;sBACV,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAmB,EAAE,IAAI,CAAC;sBAC9C,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAiB,EAAE,IAAI,CAAC;kBACzC,IAAI,CAAC;AACT,YAAA,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3B,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,IAAI,IAAI,YAAYC,YAAgB,EAAE;YACpC,MAAM,CAAC,GAAG,IAAwB,CAAC;YACnC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;AACpE,YAAA,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3B,YAAA,OAAO,IAAI,CAAC;SACb;QAED,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,eAAe,CAAC,IAAc,EAAA;;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC;AAEhC,QAAA,IAAI,IAAI,YAAY,SAAS,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAA,EAAA,GAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aACtC;SACF;AAED,QAAA,IAAI,IAAI,YAAY,UAAU,EAAE;AAC9B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SAC9B;KACF;AAED,IAAA,iBAAiB,CAAC,MAAkB,EAAA;;QAClC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE;gBACb,SAAS;aACV;AAED,YAAa,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAI,MAAM,CAAC,KAAK;AAC7D,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC7B,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;YACjD,QAAQ,GAAG,IAAI,CAAC;YAChB,UAAU,GAAG,MAAM,CAAC;YACpB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAE3C,YAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,YAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;AAEnB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnC;AAED,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;AAChE,QAAA,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;KAC5B;AAED,IAAA,YAAY,CACV,IAA8C,EAAA;;QAE9C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACvE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAEzE,QAAA,IAAI,IAAI,YAAY,UAAU,EAAE;AAC9B,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SAClB;AAED,QAAA,IAAI,IAAI,YAAY,QAAQ,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClB,IAAI,GAAG,KAAK,CAAC;aACd;SACF;QAED;YACE,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9C,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,MAAM,OAAO,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACvD,gBAAA,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,EAC7C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAC5C,CAAC;aACH;SACF;QAED;YACE,MAAM,IAAI,GACR,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACtE,IAAI,IAAI,EAAE;gBACR,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE,gBAAA,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,EAC7C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAC5C,CAAC;aACH;SACF;AAED,QAAA,IAAI,IAAI,YAAY,SAAS,EAAE;YAC7B,IAAI,SAAS,GAAG,IAAiB,CAAC;YAClC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,GAAG,CAAC,CAAC;;;;;;;;;;;YAWb,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,KAAK,IAAI,EAAE;AACd,gBAAA,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;AACd,gBAAA,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjB;AAED,YAAA,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;AAE1B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAClC,CAAA,EAAA,GAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,UAAU,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,EACxB,QAAQ,EACR,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAC3B,CAAC;AACF,YAAA,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC;YAElB,IAAI,YAAY,EAAE;gBAChB,IAAI,GAAG,YAAY,CAAC;aACrB;YAED,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,EAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAC7B,CAAC;SACH;AAED,QAAA,IAAI,IAAI,YAAY,UAAU,EAAE;YAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,GAAG,CAAC,CAAC;;;;YAIb,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrC,gBAAA,IAAI,EAAE,KAAK,IAAI,EAAE;oBACf,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,oBAAA,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;AACpD,oBAAA,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;oBACnB,UAAU,GAAG,MAAM,CAAC;iBACrB;aACF;YACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;YAEnD,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,EAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAC7B,CAAC;SACH;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,aAAa,CAAC,IAAc,EAAA;QAC1B,OAAO,IAAI,YAAYjC,GAAO,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC;KAC7D;AAED,IAAA,aAAa,CAAC,IAAc,EAAA;QAC1B,OAAO,IAAI,YAAYA,GAAO,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC;KAC7D;AAED,IAAA,aAAa,CAAC,IAAc,EAAA;AAC1B,QAAA,QACE,IAAI,YAAYA,GAAO;YACvB,IAAI,CAAC,IAAI,KAAK,IAAI;AAClB,YAAA,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EACvD;KACH;AAED,IAAA,aAAa,CAAC,IAAc,EAAA;AAC1B,QAAA,QACE,IAAI,YAAYA,GAAO;YACvB,IAAI,CAAC,IAAI,KAAK,IAAI;AAClB,YAAA,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EACvD;KACH;IAED,aAAa,CAAC,IAAc,EAAE,IAAY,EAAA;QACxC,MAAM,GAAG,GAAG,IAAc,CAAC;QAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;AAClB,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,gBAAgB,CACd,UAAuC,EACvC,IAAY,EACZ,YAAoB,EAAA;AAEpB,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,YAAA,OAAO,YAAY,CAAC;SACrB;AACD,QAAA,KAAK,IAAI,CAAC,IAAI,UAAU,EAAE;AACxB,YAAA,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;gBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC;AAChE,gBAAA,IAAI,CAAC,YAAY,KAAK,EAAE;AACtB,oBAAA,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBACV;AACD,gBAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,oBAAA,OAAO,CAAC,CAAC;iBACV;AACD,gBAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,oBAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;iBACpB;AACD,gBAAA,OAAO,YAAY,CAAC;aACrB;SACF;AACD,QAAA,OAAO,YAAY,CAAC;KACrB;IAED,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAA;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KAC7B;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgB,WAAA,CAAA,SAAS,GAAG;IAC1B,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IAC1B,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IAC1B,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IAC1B,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IAC1B,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IAC7B,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;IAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC7B,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC7B,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAC9B,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAC9B,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAC9B,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AAChC,CAlBwB,CAkBvB;AAEc,WAAa,CAAA,aAAA,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;IACpE,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC,CAAC,CAAC;AACa,WAAa,CAAA,aAAA,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;IAChE,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC,CAAC;;;;"} \ No newline at end of file diff --git a/wgsl_reflect.node.js b/wgsl_reflect.node.js index 038ed19..6ca2e96 100644 --- a/wgsl_reflect.node.js +++ b/wgsl_reflect.node.js @@ -4171,4 +4171,3 @@ exports.WgslScanner = WgslScanner; exports.While = While; exports._BlockEnd = _BlockEnd; exports._BlockStart = _BlockStart; -//# sourceMappingURL=wgsl_reflect.node.js.map diff --git a/wgsl_reflect.node.js.map b/wgsl_reflect.node.js.map deleted file mode 100644 index 7044006..0000000 --- a/wgsl_reflect.node.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"wgsl_reflect.node.js","sources":["src/wgsl_ast.ts","src/wgsl_scanner.ts","src/wgsl_parser.ts","src/wgsl_reflect.ts"],"sourcesContent":[null,null,null,null],"names":["IncrementOperator","AssignOperator","TokenClass","AST.ParseContext","AST.VariableExpr","AST.Argument","AST.Function","AST.Discard","AST.Break","AST.Continue","AST.StaticAssert","AST.While","AST.Continuing","AST.For","AST.Var","AST.Let","AST.Const","AST.Increment","AST.IncrementOperator","AST.Assign","AST.AssignOperator","AST.Call","AST.Loop","AST.Switch","AST.Case","AST.Default","AST.If","AST.ElseIf","AST.Return","AST.BinaryOperator","AST.UnaryOperator","AST.ArrayIndex","AST.StringExpr","AST.CreateExpr","AST.CallExpr","AST.ConstExpr","AST.LiteralExpr","AST.BitcastExpr","AST.GroupingExpr","AST.Member","AST.Struct","AST.Override","AST.Diagnostic","AST.Enable","AST.Requires","AST.Alias","AST.Type","AST.TemplateType","AST.PointerType","AST.ArrayType","AST.SamplerType","AST.Attribute","ResourceType","AST._BlockStart","AST._BlockEnd"],"mappings":"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"} \ No newline at end of file