@babylonjs/loaders 9.26.2 → 9.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/glTF/2.0/Extensions/EXT_texture_avif.pure.js +1 -1
  2. package/glTF/2.0/Extensions/EXT_texture_avif.pure.js.map +1 -1
  3. package/glTF/2.0/Extensions/EXT_texture_webp.pure.js +1 -1
  4. package/glTF/2.0/Extensions/EXT_texture_webp.pure.js.map +1 -1
  5. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.d.ts +33 -0
  6. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js +166 -37
  7. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js.map +1 -1
  8. package/glTF/2.0/Extensions/KHR_interactivity/index.d.ts +1 -0
  9. package/glTF/2.0/Extensions/KHR_interactivity/index.js +1 -0
  10. package/glTF/2.0/Extensions/KHR_interactivity/index.js.map +1 -1
  11. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.d.ts +243 -0
  12. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js +2335 -0
  13. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js.map +1 -0
  14. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.d.ts +82 -1
  15. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.js +180 -34
  16. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.js.map +1 -1
  17. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.d.ts +14 -2
  18. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js +220 -34
  19. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js.map +1 -1
  20. package/glTF/2.0/Extensions/KHR_interactivity/pure.d.ts +1 -0
  21. package/glTF/2.0/Extensions/KHR_interactivity/pure.js +1 -0
  22. package/glTF/2.0/Extensions/KHR_interactivity/pure.js.map +1 -1
  23. package/glTF/2.0/Extensions/KHR_interactivity.pure.d.ts +4 -0
  24. package/glTF/2.0/Extensions/KHR_interactivity.pure.js +6 -2
  25. package/glTF/2.0/Extensions/KHR_interactivity.pure.js.map +1 -1
  26. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js +1 -1
  27. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js.map +1 -1
  28. package/glTF/2.0/glTFLoader.pure.d.ts +2 -1
  29. package/glTF/2.0/glTFLoader.pure.js +41 -4
  30. package/glTF/2.0/glTFLoader.pure.js.map +1 -1
  31. package/glTF/2.0/glTFLoaderInterfaces.d.ts +9 -0
  32. package/glTF/2.0/glTFLoaderInterfaces.js.map +1 -1
  33. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"interactivityGraphParser.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.ts"],"names":[],"mappings":"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","sourcesContent":["import { type IKHRInteractivity_Graph, type IKHRInteractivity_Node, type IKHRInteractivity_OutputSocketReference, type IKHRInteractivity_Variable } from \"babylonjs-gltf2interface\";\nimport { type IGLTF } from \"../../glTFLoaderInterfaces\";\nimport { type IGLTFToFlowGraphMapping, getMappingForDeclaration, getNoOpMappingForDeclaration, ParseDebugLogTemplate } from \"./declarationMapper\";\nimport { Logger } from \"core/Misc/logger\";\nimport { type ISerializedFlowGraph, type ISerializedFlowGraphBlock, type ISerializedFlowGraphConnection, type ISerializedFlowGraphContext } from \"core/FlowGraph/typeDefinitions\";\nimport { RandomGUID } from \"core/Misc/guid\";\nimport { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\nimport { FlowGraphConnectionType } from \"core/FlowGraph/flowGraphConnection\";\nimport { FlowGraphTypes } from \"core/FlowGraph/flowGraphRichTypes\";\nimport { CloneKHRInteractivityGraph, CreateEffectiveKHRInteractivityGraph, gltfTypeToBabylonType, type IKHRInteractivityDeclarationModel } from \"./interactivityGraphModel\";\nimport { DelayReferencePrefix, EventReferencePrefix } from \"./interactivityReferences\";\n\n/**\n * Description of a KHR_interactivity custom event, as parsed from the\n * glTF `events` array. Used by the importer to register the event with the\n * FlowGraph send/receive event blocks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface InteractivityEvent {\n /** Identifier of the event, used to match send and receive blocks. */\n eventId: string;\n /**\n * Optional payload schema for the event. Each entry describes one\n * value carried by the event: an `id` (the FlowGraph data socket name),\n * a `type` (glTF interactivity type name) and an optional default\n * `value`. `eventData` (the boolean) is currently unused.\n */\n eventData?: {\n eventData: boolean;\n id: string;\n type: string;\n value?: any;\n }[];\n}\nexport { gltfTypeToBabylonType } from \"./interactivityGraphModel\";\n\nfunction _GetOwnMapping<T>(mapping: { [name: string]: T } | undefined, key: string): T | undefined {\n return mapping && Object.prototype.hasOwnProperty.call(mapping, key) ? mapping[key] : undefined;\n}\n\n/**\n * Parses a KHR_interactivity graph definition (the raw glTF JSON object) into\n * the serialized FlowGraph form consumed by {@link ParseFlowGraphAsync}.\n *\n * The class walks the interactivity types, declarations, variables, events\n * and nodes in order and emits an {@link ISerializedFlowGraph} via\n * {@link serializeToFlowGraph}.\n */\nexport class InteractivityGraphToFlowGraphParser {\n /**\n * Note - the graph should be rejected if the same type is defined twice.\n * We currently don't validate that.\n */\n private _types: { length: number; flowGraphType: FlowGraphTypes; elementType: \"number\" | \"boolean\" | \"string\" | \"any\" }[] = [];\n private _mappings: { flowGraphMapping: IGLTFToFlowGraphMapping; fullOperationName: string; declaration: IKHRInteractivityDeclarationModel }[] = [];\n private _staticVariables: { type: FlowGraphTypes; value: any[] }[] = [];\n private _events: InteractivityEvent[] = [];\n private _internalEventsCounter: number = 0;\n private _nodes: { blocks: ISerializedFlowGraphBlock[]; fullOperationName: string }[] = [];\n /**\n * Extra blocks the parser inserts between existing nodes (e.g. the seconds→frames multiply for\n * connected animation-time inputs). Kept separate from any node's `blocks` array so per-node\n * post-processing that indexes into that array (such as the animation extraProcessors targeting\n * the last block) is not disturbed, then concatenated into the serialized graph.\n */\n private _insertedBlocks: ISerializedFlowGraphBlock[] = [];\n\n constructor(\n interactivityGraph: IKHRInteractivity_Graph,\n private _gltf: IGLTF,\n public _animationTargetFps: number = 60,\n private _graphIndex: number = 0,\n private _supportedExtensions?: ReadonlySet<string>,\n private _declarationModels?: readonly IKHRInteractivityDeclarationModel[]\n ) {\n this._interactivityGraph = this._declarationModels\n ? CreateEffectiveKHRInteractivityGraph(interactivityGraph, this._declarationModels, this._gltf.nodes?.length ?? 0)\n : CloneKHRInteractivityGraph(interactivityGraph);\n // start with types\n this._parseTypes();\n // continue with declarations\n this._parseDeclarations();\n this._parseVariables();\n this._parseEvents();\n this._parseNodes();\n }\n\n private _interactivityGraph: IKHRInteractivity_Graph;\n\n private get _strictValidation(): boolean {\n return !!this._declarationModels;\n }\n\n private _hasDefaultFlowInput(operation: string): boolean {\n if (operation === \"flow/waitAll\") {\n return false;\n }\n return (\n operation.startsWith(\"flow/\") ||\n operation.startsWith(\"animation/\") ||\n operation === \"pointer/set\" ||\n operation === \"pointer/interpolate\" ||\n operation === \"variable/set\" ||\n operation === \"variable/interpolate\" ||\n operation === \"event/send\" ||\n operation === \"event/stopPropagation\" ||\n operation === \"flow/log:BABYLON\"\n );\n }\n\n private _getAllowedDynamicValueSockets(operation: string, node: IKHRInteractivity_Node, direction: \"input\" | \"output\"): ReadonlySet<string> | undefined {\n if ((operation === \"debug/log\" || operation === \"flow/log:BABYLON\") && direction === \"input\") {\n const message = node.configuration?.[operation === \"debug/log\" ? \"message\" : \"messageTemplate\"]?.value?.[0];\n return new Set(typeof message === \"string\" ? ParseDebugLogTemplate(message).sockets : []);\n }\n if ((operation === \"event/send\" && direction === \"input\") || (operation === \"event/receive\" && direction === \"output\")) {\n const eventIndex = node.configuration?.event?.value?.[0];\n if (typeof eventIndex === \"number\") {\n return new Set(Object.keys(this._interactivityGraph.events?.[eventIndex]?.values ?? {}));\n }\n }\n if (operation === \"variable/set\" && direction === \"input\") {\n return new Set((node.configuration?.variables?.value ?? []).map(String));\n }\n if (operation === \"math/switch\" && direction === \"input\") {\n return new Set((node.configuration?.cases?.value ?? []).map(String));\n }\n if ((operation === \"pointer/get\" || operation === \"pointer/set\" || operation === \"pointer/interpolate\") && direction === \"input\") {\n const pointer = node.configuration?.pointer?.value?.[0];\n if (typeof pointer === \"string\") {\n return new Set(\n pointer\n .split(\"/\")\n .filter((segment) => (segment.startsWith(\"[\") && !segment.startsWith(\"[[\")) || (segment.startsWith(\"{\") && !segment.startsWith(\"{{\")))\n .map((segment) =>\n segment\n .substring(1, segment.length - 1)\n .replace(/~1/g, \"/\")\n .replace(/~0/g, \"~\")\n )\n );\n }\n }\n return undefined;\n }\n\n private _getAllowedDynamicFlowSockets(node: IKHRInteractivity_Node, mapping: IGLTFToFlowGraphMapping, direction: \"input\" | \"output\"): ReadonlySet<string> | undefined {\n for (const [key, property] of Object.entries(mapping.configuration ?? {})) {\n const generatesSockets = direction === \"input\" ? property.generatesInputFlowSockets : property.generatesOutputFlowSockets;\n if (!generatesSockets) {\n continue;\n }\n const configuredValues = node.configuration?.[key]?.value;\n const validValues =\n configuredValues &&\n configuredValues.length > 0 &&\n (property.configurationType !== \"int\" || configuredValues.length === 1) &&\n configuredValues.every(\n (value) => typeof value === \"number\" && Number.isInteger(value) && value >= (property.minimum ?? -2147483648) && value <= (property.maximum ?? 2147483647)\n );\n const values = validValues ? configuredValues : property.defaultValue;\n if (direction === \"input\") {\n const count = Array.isArray(values) && typeof values[0] === \"number\" ? values[0] : 0;\n return new Set(Array.from({ length: count }, (_, index) => String(index)));\n }\n return new Set(Array.isArray(values) ? values.map(String) : []);\n }\n return undefined;\n }\n\n public get arrays() {\n return {\n types: this._types,\n mappings: this._mappings,\n staticVariables: this._staticVariables,\n events: this._events,\n nodes: this._nodes,\n };\n }\n\n private _parseTypes() {\n if (!this._interactivityGraph.types) {\n return;\n }\n for (const type of this._interactivityGraph.types) {\n this._types.push(gltfTypeToBabylonType[type.signature]);\n }\n }\n\n private _parseDeclarations() {\n if (!this._interactivityGraph.declarations) {\n return;\n }\n for (let index = 0; index < this._interactivityGraph.declarations.length; index++) {\n const declaration = this._interactivityGraph.declarations[index];\n const declarationModel = this._declarationModels?.[index];\n const extensionEnabled = !declaration.extension || !this._supportedExtensions || this._supportedExtensions.has(declaration.extension);\n const supportedMapping =\n declarationModel?.support === \"unsupported-extension\" ? undefined : extensionEnabled ? getMappingForDeclaration(declaration, false) : undefined;\n if (!supportedMapping && !declaration.extension) {\n throw new Error(`Unknown core KHR_interactivity operation \"${declaration.op}\".`);\n }\n const mapping = supportedMapping ?? (declaration.extension ? getNoOpMappingForDeclaration(declaration) : undefined);\n if (!mapping) {\n Logger.Error([\"No mapping found for declaration\", declaration]);\n throw new Error(\"Error parsing declarations\");\n }\n this._mappings.push({\n flowGraphMapping: mapping,\n fullOperationName: declaration.extension ? declaration.op + \":\" + declaration.extension : declaration.op,\n declaration:\n declarationModel ??\n ({\n index,\n operation: declaration.extension ? `${declaration.op}:${declaration.extension}` : declaration.op,\n support: supportedMapping ? (declaration.extension ? \"extension\" : \"core\") : \"unsupported-extension\",\n source: declaration,\n } satisfies IKHRInteractivityDeclarationModel),\n });\n }\n }\n\n private _parseVariables() {\n if (!this._interactivityGraph.variables) {\n return;\n }\n for (const variable of this._interactivityGraph.variables) {\n const parsed = this._parseVariable(variable);\n // set the default values here\n this._staticVariables.push(parsed);\n }\n }\n\n private _parseVariable(variable: IKHRInteractivity_Variable, dataTransform?: (value: any, parser: InteractivityGraphToFlowGraphParser) => any) {\n const type = this._types[variable.type];\n if (!type) {\n Logger.Error([\"No type found for variable\", variable]);\n throw new Error(\"Error parsing variables\");\n }\n if (variable.value) {\n if (this._interactivityGraph.types?.[variable.type]?.signature !== \"custom\" && variable.value.length !== type.length) {\n Logger.Error([\"Invalid value length for variable\", variable, type]);\n throw new Error(\"Error parsing variables\");\n }\n }\n const value = variable.value ? variable.value.slice() : [];\n if (!value.length) {\n switch (type.flowGraphType) {\n case FlowGraphTypes.Boolean:\n value.push(false);\n break;\n case FlowGraphTypes.Integer:\n value.push(0);\n break;\n case FlowGraphTypes.Number:\n value.push(NaN);\n break;\n case FlowGraphTypes.String:\n // Default for a `ref`-typed value is the null reference, encoded as the empty string.\n value.push(\"\" as any);\n break;\n case FlowGraphTypes.Vector2:\n value.push(NaN, NaN);\n break;\n case FlowGraphTypes.Vector3:\n value.push(NaN, NaN, NaN);\n break;\n case FlowGraphTypes.Vector4:\n case FlowGraphTypes.Matrix2D:\n case FlowGraphTypes.Quaternion:\n value.push(NaN, NaN, NaN, NaN);\n break;\n case FlowGraphTypes.Matrix:\n for (let i = 0; i < 16; i++) {\n value.push(NaN);\n }\n break;\n case FlowGraphTypes.Matrix3D:\n for (let i = 0; i < 9; i++) {\n value.push(NaN);\n }\n break;\n default:\n break;\n }\n }\n // in case of NaN, Infinity, we need to parse the string to the object itself\n if (type.elementType === \"number\" && typeof value[0] === \"string\") {\n value[0] = parseFloat(value[0]);\n } else if (type.flowGraphType === FlowGraphTypes.String && typeof value[0] === \"string\") {\n value[0] = this._normalizeStaticReference(value[0]);\n }\n return { type: type.flowGraphType, value: dataTransform ? dataTransform(value, this) : value };\n }\n\n private _normalizeStaticReference(reference: string): string {\n if (!reference || reference.startsWith(EventReferencePrefix) || reference.startsWith(DelayReferencePrefix)) {\n return \"\";\n }\n if (!reference.startsWith(\"/\")) {\n return \"\";\n }\n let current: unknown = this._gltf;\n for (const rawSegment of reference.substring(1).split(\"/\")) {\n const segment = rawSegment.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n if (Array.isArray(current)) {\n if (!/^(0|[1-9]\\d*)$/.test(segment)) {\n return \"\";\n }\n current = current[parseInt(segment, 10)];\n } else if (current !== null && typeof current === \"object\" && Object.prototype.hasOwnProperty.call(current, segment)) {\n current = (current as Record<string, unknown>)[segment];\n } else {\n return \"\";\n }\n }\n return current !== null && typeof current === \"object\" ? reference : \"\";\n }\n\n private _parseEvents() {\n if (!this._interactivityGraph.events) {\n return;\n }\n const eventIds = new Set(this._interactivityGraph.events.flatMap((event) => (event.id === undefined ? [] : [event.id])));\n const internalPrefix = `__babylon_khr_internal_${this._graphIndex}_`;\n for (const event of this._interactivityGraph.events) {\n let generatedEventId: string | undefined;\n if (event.id === undefined) {\n do {\n generatedEventId = internalPrefix + this._internalEventsCounter++;\n } while (eventIds.has(generatedEventId));\n eventIds.add(generatedEventId);\n }\n const converted: InteractivityEvent = {\n eventId: event.id ?? generatedEventId!,\n };\n if (event.values) {\n converted.eventData = Object.keys(event.values).map((key) => {\n const eventValue = event.values?.[key];\n if (!eventValue) {\n Logger.Error([\"No value found for event key\", key]);\n throw new Error(\"Error parsing events\");\n }\n const type = this._types[eventValue.type];\n if (!type) {\n Logger.Error([\"No type found for event value\", eventValue]);\n throw new Error(\"Error parsing events\");\n }\n const value = typeof eventValue.value !== \"undefined\" ? this._parseVariable(eventValue) : undefined;\n return {\n id: key,\n type: type.flowGraphType,\n eventData: true,\n value,\n };\n });\n }\n this._events.push(converted);\n }\n }\n\n private _parseNodes() {\n if (!this._interactivityGraph.nodes) {\n return;\n }\n for (let nodeIndex = 0; nodeIndex < this._interactivityGraph.nodes.length; nodeIndex++) {\n const node = this._interactivityGraph.nodes[nodeIndex];\n // some validation\n if (typeof node.declaration !== \"number\") {\n Logger.Error([\"No declaration found for node\", node]);\n throw new Error(\"Error parsing nodes\");\n }\n const mapping = this._mappings[node.declaration];\n if (!mapping) {\n Logger.Error([\"No mapping found for node\", node]);\n throw new Error(\"Error parsing nodes\");\n }\n if (mapping.flowGraphMapping.validation) {\n const validationResult = mapping.flowGraphMapping.validation(node, this._interactivityGraph, this._gltf);\n if (!validationResult.valid) {\n throw new Error(`Error validating interactivity node ${this._interactivityGraph.declarations?.[node.declaration].op} - ${validationResult.error}`);\n }\n }\n const blocks: ISerializedFlowGraphBlock[] = [];\n if (mapping.declaration.support === \"unsupported-extension\") {\n blocks.push(this._createUnsupportedExtensionBlock(node, nodeIndex, mapping));\n }\n // create block(s) for this node using the mapping\n for (let role = 0; role < mapping.flowGraphMapping.blocks.length; role++) {\n const blockType = mapping.flowGraphMapping.blocks[role];\n const block = this._getEmptyBlock(blockType, mapping.fullOperationName, nodeIndex, node.declaration, role);\n this._parseNodeConfiguration(node, block, mapping.flowGraphMapping, blockType);\n blocks.push(block);\n }\n this._nodes.push({ blocks, fullOperationName: mapping.fullOperationName });\n }\n }\n\n private _getEmptyBlock(className: string, type: string, nodeIndex?: number, declarationIndex?: number, role?: number): ISerializedFlowGraphBlock {\n return {\n uniqueId: RandomGUID(),\n className,\n dataInputs: [],\n dataOutputs: [],\n signalInputs: [],\n signalOutputs: [],\n config: {},\n type,\n metadata:\n nodeIndex === undefined\n ? {}\n : {\n khrInteractivity: {\n graphIndex: this._graphIndex,\n nodeIndex,\n declarationIndex,\n operation: type,\n role: role ?? 0,\n sourcePath: `/extensions/KHR_interactivity/graphs/${this._graphIndex}/nodes/${nodeIndex}`,\n },\n },\n };\n }\n\n private _createUnsupportedExtensionBlock(\n node: IKHRInteractivity_Node,\n nodeIndex: number,\n mapping: { flowGraphMapping: IGLTFToFlowGraphMapping; fullOperationName: string; declaration: IKHRInteractivityDeclarationModel }\n ): ISerializedFlowGraphBlock {\n const block = this._getEmptyBlock(\"KHR_interactivity/FlowGraphUnsupportedInteractivityBlock\", mapping.fullOperationName, nodeIndex, node.declaration, 0);\n const inputFlowSockets = new Set<string>();\n for (const sourceNode of this._interactivityGraph.nodes ?? []) {\n for (const flow of Object.values(sourceNode.flows ?? {})) {\n if (flow.node === nodeIndex) {\n inputFlowSockets.add(flow.socket ?? \"in\");\n }\n }\n }\n const toSockets = (sockets: typeof mapping.declaration.source.inputValueSockets) =>\n Object.entries(sockets ?? {}).map(([name, definition]) => ({\n name,\n type: this._types[definition.type]?.flowGraphType,\n signature: this._interactivityGraph.types?.[definition.type]?.signature,\n }));\n block.config = {\n operation: mapping.fullOperationName,\n inputValueSockets: toSockets(mapping.declaration.source.inputValueSockets),\n outputValueSockets: toSockets(mapping.declaration.source.outputValueSockets),\n inputFlowSockets: Array.from(inputFlowSockets).sort(),\n outputFlowSockets: Object.keys(node.flows ?? {}).sort(),\n };\n for (const socket of block.config.inputValueSockets) {\n block.dataInputs.push(this._createNewSocketConnection(socket.name));\n }\n for (const socket of block.config.outputValueSockets) {\n block.dataOutputs.push(this._createNewSocketConnection(socket.name, true));\n }\n for (const socket of block.config.inputFlowSockets) {\n block.signalInputs.push(this._createNewSocketConnection(socket));\n }\n for (const socket of block.config.outputFlowSockets) {\n block.signalOutputs.push(this._createNewSocketConnection(socket, true));\n }\n return block;\n }\n\n private _parseNodeConfiguration(node: IKHRInteractivity_Node, block: ISerializedFlowGraphBlock, nodeMapping: IGLTFToFlowGraphMapping, blockType: FlowGraphBlockNames | string) {\n const gltfConfiguration = node.configuration;\n if (gltfConfiguration) {\n for (const key in gltfConfiguration) {\n const gltfProperty = gltfConfiguration[key];\n if (!gltfProperty) {\n throw new Error(\"Error parsing node configuration\");\n }\n\n const propertyMapping = nodeMapping.configuration?.[key];\n if (!propertyMapping && this._strictValidation) {\n continue;\n }\n if (propertyMapping?.validationOnly) {\n continue;\n }\n const belongsToBlock = propertyMapping && propertyMapping.toBlock ? propertyMapping.toBlock === blockType : nodeMapping.blocks.indexOf(blockType) === 0;\n if (belongsToBlock) {\n let value = propertyMapping?.defaultValue;\n if (gltfProperty?.value) {\n value = gltfProperty.value;\n }\n\n if (!propertyMapping?.isArray) {\n if (value.length !== 1) {\n Logger.Warn(`Invalid non-array value length: ${value.length}`);\n }\n\n value = value[0];\n }\n\n if (propertyMapping?.dataTransformer) {\n value = propertyMapping.dataTransformer(value, this);\n }\n\n if (value !== undefined) {\n // Update the flow graph block config.\n block.config[propertyMapping?.name || key] = {\n value: value,\n };\n }\n }\n }\n }\n }\n\n private _parseNodeConnections(context: ISerializedFlowGraphContext) {\n for (let i = 0; i < this._nodes.length; i++) {\n // get the corresponding gltf node\n const gltfNode = this._interactivityGraph.nodes?.[i];\n if (!gltfNode) {\n // should never happen but let's still check\n Logger.Error([\"No node found for interactivity node\", this._nodes[i]]);\n throw new Error(\"Error parsing node connections\");\n }\n const flowGraphBlocks = this._nodes[i];\n const outputMapper = this._mappings[gltfNode.declaration];\n // validate\n if (!outputMapper) {\n Logger.Error([\"No mapping found for node\", gltfNode]);\n throw new Error(\"Error parsing node connections\");\n }\n // KHR_interactivity spec section 3.2.4 \"Unsupported Operations\":\n // nodes referring to unsupported operations are demoted to no-ops.\n // Activations of their input flow sockets are ignored, their output\n // flow sockets are never activated, and their output value sockets\n // return constant type-default values. They have no backing\n // FlowGraph blocks (blocks.length === 0), so there is nothing to\n // wire for this node — skip all of its connections.\n if (flowGraphBlocks.blocks.length === 0) {\n Logger.Warn(`Skipping connections for no-op node #${i} (unsupported operation: ${flowGraphBlocks.fullOperationName})`);\n continue;\n }\n const flowsFromGLTF = gltfNode.flows || {};\n const flowsKeys = Object.keys(flowsFromGLTF).sort(); // sorting as some operations require sorted keys\n // connect the flows\n for (const flowKey of flowsKeys) {\n const flow = flowsFromGLTF[flowKey];\n let flowMapping = _GetOwnMapping(outputMapper.flowGraphMapping.outputs?.flows, flowKey);\n if (this._strictValidation && flowMapping?.compatibilityOnly) {\n flowMapping = undefined;\n }\n let outputArrayMapping = false;\n if (!flowMapping) {\n for (const key in outputMapper.flowGraphMapping.outputs?.flows) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n const wildcardMapping = outputMapper.flowGraphMapping.outputs?.flows?.[key];\n if (!this._strictValidation || !wildcardMapping?.compatibilityOnly) {\n outputArrayMapping = true;\n flowMapping = wildcardMapping;\n break;\n }\n }\n }\n }\n const allowedDynamicOutputs = outputArrayMapping ? this._getAllowedDynamicFlowSockets(gltfNode, outputMapper.flowGraphMapping, \"output\") : undefined;\n if (this._strictValidation && allowedDynamicOutputs && !allowedDynamicOutputs.has(flowKey)) {\n flowMapping = undefined;\n }\n if (!flowMapping && !this._isUnsupportedExtensionBlock(flowGraphBlocks.blocks[0])) {\n continue;\n }\n const socketOutName = flowMapping ? (outputArrayMapping ? flowMapping.name.replace(\"$1\", flowKey) : flowMapping.name) : flowKey;\n // get the input node of this block\n const inputNodeId = flow.node;\n const nodeIn = this._nodes[inputNodeId];\n if (!nodeIn) {\n Logger.Error([\"No node found for input node id\", inputNodeId]);\n throw new Error(\"Error parsing node connections\");\n }\n // Spec 3.2.4: input flow activations on no-op nodes are ignored,\n // so a flow connection into a no-op target is itself a no-op.\n // Drop it instead of crashing on the missing target block.\n if (nodeIn.blocks.length === 0) {\n Logger.Warn(`Dropping flow connection from node #${i} \"${flowKey}\" to no-op node #${inputNodeId} (unsupported operation: ${nodeIn.fullOperationName})`);\n continue;\n }\n // create a serialized socket\n const block = (flowMapping && flowMapping.toBlock && flowGraphBlocks.blocks.find((b) => b.className === flowMapping.toBlock)) || flowGraphBlocks.blocks[0];\n const socketOut = block.signalOutputs.find((socket) => socket.name === socketOutName) ?? this._createNewSocketConnection(socketOutName, true);\n if (!block.signalOutputs.includes(socketOut)) {\n block.signalOutputs.push(socketOut);\n }\n // get the mapper for the input node - in case it mapped to multiple blocks\n const inputMapper = this._mappings[this._interactivityGraph.nodes![inputNodeId].declaration]?.flowGraphMapping;\n if (!inputMapper) {\n Logger.Error([\"No mapping found for input node\", nodeIn]);\n throw new Error(\"Error parsing node connections\");\n }\n let flowInMapping = _GetOwnMapping(inputMapper.inputs?.flows, flow.socket || \"in\");\n if (this._strictValidation && flowInMapping?.compatibilityOnly) {\n flowInMapping = undefined;\n }\n let arrayMapping = false;\n if (!flowInMapping) {\n for (const key in inputMapper.inputs?.flows) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n const wildcardMapping = inputMapper.inputs?.flows?.[key];\n if (!this._strictValidation || !wildcardMapping?.compatibilityOnly) {\n arrayMapping = true;\n flowInMapping = wildcardMapping;\n }\n }\n }\n const allowedDynamicInputs = arrayMapping ? this._getAllowedDynamicFlowSockets(this._interactivityGraph.nodes![inputNodeId], inputMapper, \"input\") : undefined;\n if (this._strictValidation && allowedDynamicInputs && !allowedDynamicInputs.has(flow.socket ?? \"in\")) {\n flowInMapping = undefined;\n }\n if (!flowInMapping && (flow.socket ?? \"in\") === \"in\" && this._hasDefaultFlowInput(nodeIn.fullOperationName)) {\n flowInMapping = { name: \"in\" };\n }\n if (!flowInMapping && !this._isUnsupportedExtensionBlock(nodeIn.blocks[0])) {\n continue;\n }\n }\n const nodeInSocketName = flowInMapping ? (arrayMapping ? flowInMapping.name.replace(\"$1\", flow.socket || \"\") : flowInMapping.name) : flow.socket || \"in\";\n const inputBlock = (flowInMapping && flowInMapping.toBlock && nodeIn.blocks.find((b) => b.className === flowInMapping.toBlock)) || nodeIn.blocks[0];\n // in all of the flow graph input connections, find the one with the same name as the socket\n let socketIn = inputBlock.signalInputs.find((s) => s.name === nodeInSocketName);\n // if the socket doesn't exist, create the input socket for the connection\n if (!socketIn) {\n socketIn = this._createNewSocketConnection(nodeInSocketName);\n inputBlock.signalInputs.push(socketIn);\n }\n // connect the sockets\n socketIn.connectedPointIds.push(socketOut.uniqueId);\n socketOut.connectedPointIds.push(socketIn.uniqueId);\n }\n // connect the values\n const valuesFromGLTF = gltfNode.values || {};\n const valuesKeys = Object.keys(valuesFromGLTF);\n for (const valueKey of valuesKeys) {\n const value = valuesFromGLTF[valueKey];\n let valueMapping = _GetOwnMapping(outputMapper.flowGraphMapping.inputs?.values, valueKey);\n if (this._strictValidation && valueMapping?.compatibilityOnly) {\n valueMapping = undefined;\n }\n let arrayMapping = false;\n if (!valueMapping) {\n for (const key in outputMapper.flowGraphMapping.inputs?.values) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n const wildcardMapping = outputMapper.flowGraphMapping.inputs?.values?.[key];\n if (!this._strictValidation || !wildcardMapping?.compatibilityOnly) {\n arrayMapping = true;\n valueMapping = wildcardMapping;\n }\n }\n }\n }\n const allowedDynamicInputs = arrayMapping ? this._getAllowedDynamicValueSockets(outputMapper.fullOperationName, gltfNode, \"input\") : undefined;\n if (!valueMapping || (allowedDynamicInputs && !allowedDynamicInputs.has(valueKey))) {\n continue;\n }\n const socketInName = valueMapping ? (arrayMapping ? valueMapping.name.replace(\"$1\", valueKey) : valueMapping.name) : valueKey;\n // create a serialized socket\n const block = (valueMapping && valueMapping.toBlock && flowGraphBlocks.blocks.find((b) => b.className === valueMapping.toBlock)) || flowGraphBlocks.blocks[0];\n const socketIn = block.dataInputs.find((socket) => socket.name === socketInName) ?? this._createNewSocketConnection(socketInName);\n if (!block.dataInputs.includes(socketIn)) {\n block.dataInputs.push(socketIn);\n }\n // Captured before the connected branch below shadows `valueMapping`. When set and the\n // value is supplied by a connection, the seconds→frames `dataTransformer` cannot run\n // (it is parse-time only), so the raw connected value is scaled by a runtime multiply.\n const convertConnectedTimeToFrames = !!valueMapping?.convertConnectedTimeToFrames;\n if ((value as IKHRInteractivity_Variable).value !== undefined) {\n const convertedValue = this._parseVariable(value as IKHRInteractivity_Variable, valueMapping && valueMapping.dataTransformer);\n context._connectionValues[socketIn.uniqueId] = convertedValue;\n } else if (typeof (value as IKHRInteractivity_OutputSocketReference).node !== \"undefined\") {\n const nodeOutId = (value as IKHRInteractivity_OutputSocketReference).node;\n const nodeOutSocketName = (value as IKHRInteractivity_OutputSocketReference).socket || \"value\";\n const nodeOut = this._nodes[nodeOutId];\n if (!nodeOut) {\n Logger.Error([\"No node found for output socket reference\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n // Spec 3.2.4: output value sockets of no-op nodes return\n // constant type-default values. Leave the consumer's\n // dataInput unconnected (no connectedPointIds) so the\n // FlowGraph runtime falls back to the RichType default.\n if (nodeOut.blocks.length === 0) {\n Logger.Warn(\n `Dropping value connection from no-op node #${nodeOutId} (unsupported operation: ${nodeOut.fullOperationName}) into node #${i} \"${valueKey}\"; consumer will use type-default value`\n );\n continue;\n }\n const outputMapper = this._mappings[this._interactivityGraph.nodes![nodeOutId].declaration]?.flowGraphMapping;\n if (!outputMapper) {\n Logger.Error([\"No mapping found for output socket reference\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n let valueMapping = _GetOwnMapping(outputMapper.outputs?.values, nodeOutSocketName);\n if (this._strictValidation && valueMapping?.compatibilityOnly) {\n valueMapping = undefined;\n }\n let arrayMapping = false;\n // check if there is an array mapping defined\n if (!valueMapping) {\n // search for a value mapping that has an array mapping\n for (const key in outputMapper.outputs?.values) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n const wildcardMapping = outputMapper.outputs?.values?.[key];\n if (!this._strictValidation || !wildcardMapping?.compatibilityOnly) {\n arrayMapping = true;\n valueMapping = wildcardMapping;\n }\n }\n }\n const allowedDynamicOutputs = arrayMapping\n ? this._getAllowedDynamicValueSockets(nodeOut.fullOperationName, this._interactivityGraph.nodes![nodeOutId], \"output\")\n : undefined;\n if (!valueMapping || (allowedDynamicOutputs && !allowedDynamicOutputs.has(nodeOutSocketName))) {\n continue;\n }\n }\n const socketOutName = valueMapping ? (arrayMapping ? valueMapping.name.replace(\"$1\", nodeOutSocketName) : valueMapping?.name) : nodeOutSocketName;\n const outBlock = (valueMapping && valueMapping.toBlock && nodeOut.blocks.find((b) => b.className === valueMapping.toBlock)) || nodeOut.blocks[0];\n let socketOut = outBlock.dataOutputs.find((s) => s.name === socketOutName);\n // if the socket doesn't exist, create it\n if (!socketOut) {\n socketOut = this._createNewSocketConnection(socketOutName, true);\n outBlock.dataOutputs.push(socketOut);\n }\n // connect the sockets\n if (convertConnectedTimeToFrames) {\n this._connectWithSecondsToFramesConversion(context, socketOut, socketIn, i, gltfNode.declaration);\n } else {\n socketIn.connectedPointIds.push(socketOut.uniqueId);\n socketOut.connectedPointIds.push(socketIn.uniqueId);\n }\n } else {\n Logger.Error([\"Invalid value for value connection\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n }\n\n // inter block connections\n if (outputMapper.flowGraphMapping.interBlockConnectors) {\n for (const connector of outputMapper.flowGraphMapping.interBlockConnectors) {\n const input = connector.input;\n const output = connector.output;\n const isVariable = connector.isVariable;\n this._connectFlowGraphNodes(input, output, flowGraphBlocks.blocks[connector.inputBlockIndex], flowGraphBlocks.blocks[connector.outputBlockIndex], isVariable);\n }\n }\n\n if (outputMapper.flowGraphMapping.extraProcessor) {\n const declaration = this._interactivityGraph.declarations?.[gltfNode.declaration];\n if (!declaration) {\n Logger.Error([\"No declaration found for extra processor\", gltfNode]);\n throw new Error(\"Error parsing node connections\");\n }\n flowGraphBlocks.blocks = outputMapper.flowGraphMapping.extraProcessor(\n gltfNode,\n declaration,\n outputMapper.flowGraphMapping,\n this,\n flowGraphBlocks.blocks,\n context,\n this._gltf\n );\n }\n }\n }\n\n private _createNewSocketConnection(name: string, isOutput?: boolean): ISerializedFlowGraphConnection {\n return {\n uniqueId: RandomGUID(),\n name,\n _connectionType: isOutput ? FlowGraphConnectionType.Output : FlowGraphConnectionType.Input,\n connectedPointIds: [],\n };\n }\n\n private _isUnsupportedExtensionBlock(block: ISerializedFlowGraphBlock | undefined): boolean {\n return block?.className === \"KHR_interactivity/FlowGraphUnsupportedInteractivityBlock\";\n }\n\n /**\n * Wires an upstream data output into a downstream data input through a runtime multiply block that\n * scales the value by the animation target fps. This converts a KHR animation time (seconds),\n * delivered by a connection (e.g. a `pointer/get` on the `maxTime` animation pointer), into the\n * Babylon animation frames expected by the play/stop-animation blocks. Literal times are already\n * converted at parse time by the input's `dataTransformer`, so this is only used for connections.\n * @param context the serialized flow graph context that stores literal socket values\n * @param upstreamOutput the data output socket providing the time value (in seconds)\n * @param downstreamInput the data input socket that expects the time in frames\n * @param nodeIndex source node receiving the converted value\n * @param declarationIndex source declaration used by the receiving node\n */\n private _connectWithSecondsToFramesConversion(\n context: ISerializedFlowGraphContext,\n upstreamOutput: ISerializedFlowGraphConnection,\n downstreamInput: ISerializedFlowGraphConnection,\n nodeIndex: number,\n declarationIndex: number\n ): void {\n const multiplyBlock = this._getEmptyBlock(FlowGraphBlockNames.Multiply, FlowGraphBlockNames.Multiply, nodeIndex, declarationIndex, -1);\n // Scalar (float) multiply; matches how the `math/mul` mapping configures the block.\n multiplyBlock.config = { type: FlowGraphTypes.Number };\n const inputA = this._createNewSocketConnection(\"a\");\n const inputB = this._createNewSocketConnection(\"b\");\n const output = this._createNewSocketConnection(\"value\", true);\n multiplyBlock.dataInputs.push(inputA, inputB);\n multiplyBlock.dataOutputs.push(output);\n // The second factor is the constant animation target fps.\n context._connectionValues[inputB.uniqueId] = { type: FlowGraphTypes.Number, value: [this._animationTargetFps] };\n // upstream time output -> multiply.a\n inputA.connectedPointIds.push(upstreamOutput.uniqueId);\n upstreamOutput.connectedPointIds.push(inputA.uniqueId);\n // multiply.value (frames) -> downstream time input\n downstreamInput.connectedPointIds.push(output.uniqueId);\n output.connectedPointIds.push(downstreamInput.uniqueId);\n // Register the inserted block separately so serializeToFlowGraph picks it up without\n // appending to any node's block list (which would break per-node extraProcessors).\n this._insertedBlocks.push(multiplyBlock);\n }\n\n private _connectFlowGraphNodes(input: string, output: string, serializedInput: ISerializedFlowGraphBlock, serializedOutput: ISerializedFlowGraphBlock, isVariable?: boolean) {\n const inputArray = isVariable ? serializedInput.dataInputs : serializedInput.signalInputs;\n const outputArray = isVariable ? serializedOutput.dataOutputs : serializedOutput.signalOutputs;\n const inputConnection = inputArray.find((s) => s.name === input) || this._createNewSocketConnection(input);\n const outputConnection = outputArray.find((s) => s.name === output) || this._createNewSocketConnection(output, true);\n // of not found add it to the array\n if (!inputArray.find((s) => s.name === input)) {\n inputArray.push(inputConnection);\n }\n if (!outputArray.find((s) => s.name === output)) {\n outputArray.push(outputConnection);\n }\n // connect the sockets\n inputConnection.connectedPointIds.push(outputConnection.uniqueId);\n outputConnection.connectedPointIds.push(inputConnection.uniqueId);\n }\n\n /**\n * Returns the deterministic FlowGraph user-variable name used for the\n * static variable at the given declaration index.\n * @param index zero-based index into the interactivity graph's `variables` array.\n * @returns the FlowGraph variable name (e.g. `staticVariable_3`).\n */\n public getVariableName(index: number) {\n return \"staticVariable_\" + index;\n }\n\n /**\n * Serializes the parsed interactivity graph into the {@link ISerializedFlowGraph}\n * payload consumed by `ParseFlowGraphAsync`. Performs node-connection wiring\n * and seeds the execution context with the graph's static variables.\n * @returns the serialized FlowGraph for the parsed KHR_interactivity graph.\n */\n public serializeToFlowGraph(): ISerializedFlowGraph {\n const context: ISerializedFlowGraphContext = {\n uniqueId: RandomGUID(),\n _userVariables: {},\n _connectionValues: {},\n };\n this._parseNodeConnections(context);\n for (let i = 0; i < this._staticVariables.length; i++) {\n const variable = this._staticVariables[i];\n context._userVariables[this.getVariableName(i)] = variable;\n }\n\n const allBlocks = this._nodes.reduce((acc, val) => acc.concat(val.blocks), [] as ISerializedFlowGraphBlock[]).concat(this._insertedBlocks);\n\n return {\n name: this._interactivityGraph.name ?? `Graph ${this._graphIndex + 1}`,\n rightHanded: true,\n allBlocks,\n executionContexts: [context],\n };\n }\n}\n"]}
1
+ {"version":3,"file":"interactivityGraphParser.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.ts"],"names":[],"mappings":"AAEA,OAAO,EAGH,wBAAwB,EACxB,4BAA4B,EAC5B,gCAAgC,EAChC,4CAA4C,EAC5C,qBAAqB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5C,OAAO,EACH,2CAA2C,EAC3C,0BAA0B,EAC1B,oCAAoC,EACpC,qBAAqB,EACrB,sCAAsC,GAMzC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAwBvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,SAAS,cAAc,CAAI,OAA0C,EAAE,GAAW;IAC9E,OAAO,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,CAAC;AAED,SAAS,mBAAmB,CAAI,KAAQ;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAM,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC9B,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;gBACjC,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,KAAU,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,iCAAiC,CAAC,KAAc;IACrD,OAAO,CACH,KAAK,KAAK,IAAI;QACd,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC;QACtD,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACxE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAC1H,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,gEAAgE;AAChE,MAAM,UAAU,4CAA4C,CAAC,SAAoB;IAC7E,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,gBAAgE,CAAC;QACpG,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,SAAS;QACb,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,IAAI,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7F,UAAU,CAAC,6BAA6B,KAAxC,UAAU,CAAC,6BAA6B,GAAK,EAAE,EAAC;YAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,6BAA6B,EAAE,WAAW,CAAC,EAAE,CAAC;gBAC/F,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,6BAA6B,EAAE,WAAW,EAAE;oBACzE,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,IAAI;oBAChB,KAAK,EAAE,2CAA2C,CAAC,4CAA4C,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACzH,QAAQ,EAAE,IAAI;iBACjB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,SAAS;YACb,CAAC;YACD,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,EAAE,gBAAiE,CAAC;YAC3G,IAAI,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,CAAC,oBAAoB,KAArC,gBAAgB,CAAC,oBAAoB,GAAK,2CAA2C,CAAE,KAAa,CAAC,aAAa,CAAC,EAAC;gBACpH,SAAS;YACb,CAAC;YACD,IAAI,UAAU,CAAC,sBAAsB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3H,SAAS;YACb,CAAC;YACD,UAAU,CAAC,sBAAsB,KAAjC,UAAU,CAAC,sBAAsB,GAAK,EAAE,EAAC;YACzC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,EAAE;gBACjE,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,2CAA2C,CAAE,KAAa,CAAC,aAAa,CAAC;gBAChF,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,mCAAmC;IAmB5C,YACI,kBAA2C,EACnC,KAAY,EACb,sBAA8B,EAAE,EAC/B,cAAsB,CAAC,EACvB,oBAA0C,EAC1C,kBAAiE,EACzE,cAAwC;QALhC,UAAK,GAAL,KAAK,CAAO;QACb,wBAAmB,GAAnB,mBAAmB,CAAa;QAC/B,gBAAW,GAAX,WAAW,CAAY;QACvB,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,uBAAkB,GAAlB,kBAAkB,CAA+C;QAxB7E;;;WAGG;QACK,WAAM,GAA8G,EAAE,CAAC;QACvH,cAAS,GAA+H,EAAE,CAAC;QAC3I,qBAAgB,GAA6C,EAAE,CAAC;QAChE,YAAO,GAAyB,EAAE,CAAC;QACnC,2BAAsB,GAAW,CAAC,CAAC;QACnC,WAAM,GAAyE,EAAE,CAAC;QAC1F;;;;;WAKG;QACK,oBAAe,GAAgC,EAAE,CAAC;QAWtD,IAAI,CAAC,eAAe,GAAG,0BAA0B,CAAC,cAAc,IAAI,kBAAkB,CAAC,CAAC;QACxF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB;YAC9C,CAAC,CAAC,oCAAoC,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;YAClH,CAAC,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;QACrD,mBAAmB;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,6BAA6B;QAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAKD,IAAY,iBAAiB;QACzB,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACrC,CAAC;IAEO,8BAA8B,CAAC,SAAiB,EAAE,IAA4B,EAAE,SAA6B;QACjH,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,kBAAkB,CAAC,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5G,OAAO,IAAI,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,eAAe,IAAI,SAAS,KAAK,QAAQ,CAAC,EAAE,CAAC;YACrH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACzD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7F,CAAC;QACL,CAAC;QACD,IAAI,SAAS,KAAK,cAAc,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YACxD,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YACvD,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,qBAAqB,CAAC,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC/H,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,IAAI,GAAG,CACV,OAAO;qBACF,KAAK,CAAC,GAAG,CAAC;qBACV,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;qBACrI,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACb,OAAO;qBACF,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;qBAChC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;qBACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAC3B,CACR,CAAC;YACN,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,6BAA6B,CAAC,IAA4B,EAAE,OAAgC,EAAE,SAA6B;QAC/H,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,gBAAgB,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC1H,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,SAAS;YACb,CAAC;YACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;YAC1D,MAAM,WAAW,GACb,gBAAgB;gBAChB,gBAAgB,CAAC,MAAM,GAAG,CAAC;gBAC3B,CAAC,QAAQ,CAAC,iBAAiB,KAAK,KAAK,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC;gBACvE,gBAAgB,CAAC,KAAK,CAClB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,UAAU,CAAC,CAC7J,CAAC;YACN,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;YACtE,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrF,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAW,MAAM;QACb,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,KAAK,EAAE,IAAI,CAAC,MAAM;SACrB,CAAC;IACN,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAEO,kBAAkB;QACtB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;YACzC,OAAO;QACX,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAChF,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,gBAAgB,GAAG,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACtI,MAAM,gBAAgB,GAClB,gBAAgB,EAAE,OAAO,KAAK,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpJ,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,6CAA6C,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;YACrF,CAAC;YACD,MAAM,OAAO,GAAG,gBAAgB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACpH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChB,gBAAgB,EAAE,OAAO;gBACzB,iBAAiB,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE;gBACxG,WAAW,EACP,gBAAgB;oBACf;wBACG,KAAK;wBACL,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE;wBAChG,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,uBAAuB;wBACpG,MAAM,EAAE,WAAW;qBACuB;aACrD,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEO,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO;QACX,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC7C,8BAA8B;YAC9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,QAAoC,EAAE,aAAgF;QACzI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBACnH,MAAM,CAAC,KAAK,CAAC,CAAC,mCAAmC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAChB,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzB;oBACI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAClB,MAAM;gBACV;oBACI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACd,MAAM;gBACV;oBACI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChB,MAAM;gBACV;oBACI,sFAAsF;oBACtF,KAAK,CAAC,IAAI,CAAC,EAAS,CAAC,CAAC;oBACtB,MAAM;gBACV;oBACI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACrB,MAAM;gBACV;oBACI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC1B,MAAM;gBACV,4CAA4B;gBAC5B,8CAA6B;gBAC7B;oBACI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC/B,MAAM;gBACV;oBACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACpB,CAAC;oBACD,MAAM;gBACV;oBACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACpB,CAAC;oBACD,MAAM;gBACV;oBACI,MAAM;YACd,CAAC;QACL,CAAC;QACD,6EAA6E;QAC7E,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,yCAA0B,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtF,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IACnG,CAAC;IAEO,yBAAyB,CAAC,SAAiB;QAC/C,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACzG,OAAO,EAAE,CAAC;QACd,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACd,CAAC;QACD,IAAI,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC;QAClC,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACnE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClC,OAAO,EAAE,CAAC;gBACd,CAAC;gBACD,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBACnH,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACJ,OAAO,EAAE,CAAC;YACd,CAAC;QACL,CAAC;QACD,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,CAAC;IAEO,YAAY;QAChB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzH,MAAM,cAAc,GAAG,0BAA0B,IAAI,CAAC,WAAW,GAAG,CAAC;QACrE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAClD,IAAI,gBAAoC,CAAC;YACzC,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBACzB,GAAG,CAAC;oBACA,gBAAgB,GAAG,cAAc,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBACtE,CAAC,QAAQ,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;gBACzC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,SAAS,GAAuB;gBAClC,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,gBAAiB;aACzC,CAAC;YACF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACxD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;oBACvC,IAAI,CAAC,UAAU,EAAE,CAAC;wBACd,MAAM,CAAC,KAAK,CAAC,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAC;wBACpD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBAC5C,CAAC;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;wBACR,MAAM,CAAC,KAAK,CAAC,CAAC,+BAA+B,EAAE,UAAU,CAAC,CAAC,CAAC;wBAC5D,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBAC5C,CAAC;oBACD,MAAM,KAAK,GAAG,OAAO,UAAU,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACpG,OAAO;wBACH,EAAE,EAAE,GAAG;wBACP,IAAI,EAAE,IAAI,CAAC,aAAa;wBACxB,SAAS,EAAE,IAAI;wBACf,KAAK;qBACR,CAAC;gBACN,CAAC,CAAC,CAAC;YACP,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QACD,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YACrF,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvD,kBAAkB;YAClB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,CAAC,KAAK,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;gBACtC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvJ,CAAC;YACL,CAAC;YACD,MAAM,MAAM,GAAgC,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,KAAK,uBAAuB,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACjF,CAAC;YACD,kDAAkD;YAClD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;gBACvE,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,iBAAiB,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC3G,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;gBAC/E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,SAAiB,EAAE,gBAAwB,EAAE,SAAiB,EAAE,IAAY;QACvG,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,SAAS;YACT,gBAAgB;YAChB,SAAS;YACT,IAAI;YACJ,UAAU,EAAE,wCAAwC,IAAI,CAAC,WAAW,UAAU,SAAS,EAAE;SAC5F,CAAC;IACN,CAAC;IAEO,cAAc,CAAC,SAAiB,EAAE,IAAY,EAAE,SAAkB,EAAE,gBAAyB,EAAE,IAAa;QAChH,OAAO;YACH,QAAQ,EAAE,UAAU,EAAE;YACtB,SAAS;YACT,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,EAAE;YAChB,aAAa,EAAE,EAAE;YACjB,MAAM,EAAE,EAAE;YACV,IAAI;YACJ,QAAQ,EACJ,SAAS,KAAK,SAAS;gBACnB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACI,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,gBAAiB,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;iBAC/F;SACd,CAAC;IACN,CAAC;IAEO,oBAAoB,CACxB,UAA0C,EAC1C,SAAiB,EACjB,gBAAwB,EACxB,SAAiB,EACjB,IAAY,EACZ,IAA+C,EAC/C,SAAyD,EACzD,MAAc;QAEd,UAAU,CAAC,QAAQ,GAAG;YAClB,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC9B,gBAAgB,EAAE;gBACd,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC;gBAC5E,IAAI;gBACJ,SAAS;gBACT,MAAM;aACmC;SAChD,CAAC;IACN,CAAC;IAEO,aAAa,CAAC,MAA4C,EAAE,KAAgC;QAChG,OAAQ,KAAK,CAAC,QAAQ,EAAE,gBAAiE,EAAE,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7H,CAAC;IAEO,gCAAgC,CACpC,IAA4B,EAC5B,SAAiB,EACjB,OAAiI;QAEjI,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,0DAA0D,EAAE,OAAO,CAAC,iBAAiB,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACzJ,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC3C,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YAC5D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBACvD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC1B,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;gBAC9C,CAAC;YACL,CAAC;QACL,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,OAA4D,EAAE,EAAE,CAC/E,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,aAAa;YACjD,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS;SAC1E,CAAC,CAAC,CAAC;QACR,KAAK,CAAC,MAAM,GAAG;YACX,SAAS,EAAE,OAAO,CAAC,iBAAiB;YACpC,iBAAiB,EAAE,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC1E,kBAAkB,EAAE,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC5E,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;YACrD,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;SAC1D,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAChI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtE,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1H,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3H,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,uBAAuB,CAAC,IAA4B,EAAE,KAAgC,EAAE,WAAoC,EAAE,SAAuC;QACzK,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC;QAC7C,IAAI,iBAAiB,EAAE,CAAC;YACpB,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACxD,CAAC;gBAED,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;gBACzD,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC7C,SAAS;gBACb,CAAC;gBACD,IAAI,eAAe,EAAE,cAAc,EAAE,CAAC;oBAClC,SAAS;gBACb,CAAC;gBACD,MAAM,cAAc,GAAG,eAAe,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACxJ,IAAI,cAAc,EAAE,CAAC;oBACjB,IAAI,KAAK,GAAG,eAAe,EAAE,YAAY,CAAC;oBAC1C,IAAI,YAAY,EAAE,KAAK,EAAE,CAAC;wBACtB,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;oBAC/B,CAAC;oBAED,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;wBAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACrB,MAAM,CAAC,IAAI,CAAC,mCAAmC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;wBACnE,CAAC;wBAED,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,CAAC;oBAED,IAAI,eAAe,EAAE,eAAe,EAAE,CAAC;wBACnC,KAAK,GAAG,eAAe,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACzD,CAAC;oBAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACtB,sCAAsC;wBACtC,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG;4BACzC,KAAK,EAAE,KAAK;yBACf,CAAC;oBACN,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,OAAoC;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,kCAAkC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,4CAA4C;gBAC5C,MAAM,CAAC,KAAK,CAAC,CAAC,sCAAsC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC1D,WAAW;YACX,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChB,MAAM,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACtD,CAAC;YACD,iEAAiE;YACjE,mEAAmE;YACnE,oEAAoE;YACpE,mEAAmE;YACnE,4DAA4D;YAC5D,iEAAiE;YACjE,oDAAoD;YACpD,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,4BAA4B,eAAe,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBACvH,SAAS;YACb,CAAC;YACD,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,iDAAiD;YACtG,oBAAoB;YACpB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;gBACpC,IAAI,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxF,IAAI,IAAI,CAAC,iBAAiB,IAAI,WAAW,EAAE,iBAAiB,EAAE,CAAC;oBAC3D,WAAW,GAAG,SAAS,CAAC;gBAC5B,CAAC;gBACD,IAAI,kBAAkB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;wBAC7D,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC3C,MAAM,eAAe,GAAG,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;4BAC5E,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC;gCACjE,kBAAkB,GAAG,IAAI,CAAC;gCAC1B,WAAW,GAAG,eAAe,CAAC;gCAC9B,MAAM;4BACV,CAAC;wBACL,CAAC;oBACL,CAAC;gBACL,CAAC;gBACD,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,YAAY,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrJ,IAAI,IAAI,CAAC,iBAAiB,IAAI,qBAAqB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzF,WAAW,GAAG,SAAS,CAAC;gBAC5B,CAAC;gBACD,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChF,SAAS;gBACb,CAAC;gBACD,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAChI,mCAAmC;gBACnC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACxC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAAC,CAAC;oBAC/D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACtD,CAAC;gBACD,iEAAiE;gBACjE,8DAA8D;gBAC9D,2DAA2D;gBAC3D,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,KAAK,OAAO,oBAAoB,WAAW,4BAA4B,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;oBACxJ,SAAS;gBACb,CAAC;gBACD,6BAA6B;gBAC7B,MAAM,KAAK,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC3J,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBAC9I,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3C,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxC,CAAC;gBACD,IAAI,CAAC,oBAAoB,CACrB,SAAS,EACT,CAAC,EACD,QAAQ,CAAC,WAAW,EACpB,eAAe,CAAC,iBAAiB,EACjC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,EACjD,MAAM,EACN,QAAQ,EACR,OAAO,CACV,CAAC;gBACF,2EAA2E;gBAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;gBAC/G,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC1D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACtD,CAAC;gBACD,IAAI,aAAa,GAAG,cAAc,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;gBACnF,IAAI,IAAI,CAAC,iBAAiB,IAAI,aAAa,EAAE,iBAAiB,EAAE,CAAC;oBAC7D,aAAa,GAAG,SAAS,CAAC;gBAC9B,CAAC;gBACD,IAAI,YAAY,GAAG,KAAK,CAAC;gBACzB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACjB,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;wBAC1C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC3C,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;4BACzD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC;gCACjE,YAAY,GAAG,IAAI,CAAC;gCACpB,aAAa,GAAG,eAAe,CAAC;4BACpC,CAAC;wBACL,CAAC;oBACL,CAAC;oBACD,MAAM,oBAAoB,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAM,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC/J,IAAI,IAAI,CAAC,iBAAiB,IAAI,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;wBACnG,aAAa,GAAG,SAAS,CAAC;oBAC9B,CAAC;oBACD,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,gCAAgC,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;wBACjH,aAAa,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;oBACnC,CAAC;oBACD,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzE,SAAS;oBACb,CAAC;gBACL,CAAC;gBACD,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;gBACzJ,MAAM,UAAU,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpJ,4FAA4F;gBAC5F,IAAI,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;gBAChF,0EAA0E;gBAC1E,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACZ,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;oBAC7D,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3C,CAAC;gBACD,IAAI,CAAC,oBAAoB,CACrB,QAAQ,EACR,WAAW,EACX,IAAI,CAAC,mBAAmB,CAAC,KAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EACxD,MAAM,CAAC,iBAAiB,EACxB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAC7C,MAAM,EACN,OAAO,EACP,IAAI,CAAC,MAAM,IAAI,IAAI,CACtB,CAAC;gBACF,sBAAsB;gBACtB,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACpD,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACxD,CAAC;YACD,qBAAqB;YACrB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/C,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC1F,IAAI,IAAI,CAAC,iBAAiB,IAAI,YAAY,EAAE,iBAAiB,EAAE,CAAC;oBAC5D,YAAY,GAAG,SAAS,CAAC;gBAC7B,CAAC;gBACD,IAAI,YAAY,GAAG,KAAK,CAAC;gBACzB,IAAI,CAAC,YAAY,EAAE,CAAC;oBAChB,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;wBAC7D,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC3C,MAAM,eAAe,GAAG,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;4BAC5E,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC;gCACjE,YAAY,GAAG,IAAI,CAAC;gCACpB,YAAY,GAAG,eAAe,CAAC;4BACnC,CAAC;wBACL,CAAC;oBACL,CAAC;gBACL,CAAC;gBACD,MAAM,oBAAoB,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC/I,IAAI,CAAC,YAAY,IAAI,CAAC,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBACjF,SAAS;gBACb,CAAC;gBACD,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC9H,6BAA6B;gBAC7B,MAAM,KAAK,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC9J,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;gBAClI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,CAAC,oBAAoB,CACrB,QAAQ,EACR,CAAC,EACD,QAAQ,CAAC,WAAW,EACpB,eAAe,CAAC,iBAAiB,EACjC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,EACjD,OAAO,EACP,OAAO,EACP,QAAQ,CACX,CAAC;gBACF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAS,CAAC,gBAAqD,CAAC;gBAClG,gBAAgB,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;gBACjH,sFAAsF;gBACtF,qFAAqF;gBACrF,uFAAuF;gBACvF,MAAM,4BAA4B,GAAG,CAAC,CAAC,YAAY,EAAE,4BAA4B,CAAC;gBAClF,IAAK,KAAoC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,KAAmC,EAAE,YAAY,IAAI,YAAY,CAAC,eAAe,CAAC,CAAC;oBAC9H,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;oBAC9D,QAAQ,CAAC,YAAY,GAAG,cAAc,CAAC;oBACvC,gBAAgB,CAAC,YAAY,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC9E,CAAC;qBAAM,IAAI,OAAQ,KAAiD,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACxF,MAAM,SAAS,GAAI,KAAiD,CAAC,IAAI,CAAC;oBAC1E,MAAM,iBAAiB,GAAI,KAAiD,CAAC,MAAM,IAAI,OAAO,CAAC;oBAC/F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACvC,IAAI,CAAC,OAAO,EAAE,CAAC;wBACX,MAAM,CAAC,KAAK,CAAC,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC,CAAC;wBACnE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBACtD,CAAC;oBACD,yDAAyD;oBACzD,qDAAqD;oBACrD,sDAAsD;oBACtD,wDAAwD;oBACxD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC9B,MAAM,CAAC,IAAI,CACP,8CAA8C,SAAS,4BAA4B,OAAO,CAAC,iBAAiB,gBAAgB,CAAC,KAAK,QAAQ,yCAAyC,CACtL,CAAC;wBACF,SAAS;oBACb,CAAC;oBACD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAM,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;oBAC9G,IAAI,CAAC,YAAY,EAAE,CAAC;wBAChB,MAAM,CAAC,KAAK,CAAC,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC,CAAC;wBACtE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBACtD,CAAC;oBACD,IAAI,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;oBACnF,IAAI,IAAI,CAAC,iBAAiB,IAAI,YAAY,EAAE,iBAAiB,EAAE,CAAC;wBAC5D,YAAY,GAAG,SAAS,CAAC;oBAC7B,CAAC;oBACD,IAAI,YAAY,GAAG,KAAK,CAAC;oBACzB,6CAA6C;oBAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;wBAChB,uDAAuD;wBACvD,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;4BAC7C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC3C,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;gCAC5D,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC;oCACjE,YAAY,GAAG,IAAI,CAAC;oCACpB,YAAY,GAAG,eAAe,CAAC;gCACnC,CAAC;4BACL,CAAC;wBACL,CAAC;wBACD,MAAM,qBAAqB,GAAG,YAAY;4BACtC,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;4BACtH,CAAC,CAAC,SAAS,CAAC;wBAChB,IAAI,CAAC,YAAY,IAAI,CAAC,qBAAqB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;4BAC5F,SAAS;wBACb,CAAC;oBACL,CAAC;oBACD,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;oBAClJ,MAAM,QAAQ,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACjJ,IAAI,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;oBAC3E,yCAAyC;oBACzC,IAAI,CAAC,SAAS,EAAE,CAAC;wBACb,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;wBACjE,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACzC,CAAC;oBACD,IAAI,CAAC,oBAAoB,CACrB,SAAS,EACT,SAAS,EACT,IAAI,CAAC,mBAAmB,CAAC,KAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EACtD,OAAO,CAAC,iBAAiB,EACzB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC5C,OAAO,EACP,QAAQ,EACR,iBAAiB,CACpB,CAAC;oBACF,sBAAsB;oBACtB,IAAI,4BAA4B,EAAE,CAAC;wBAC/B,IAAI,CAAC,qCAAqC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;oBACzI,CAAC;yBAAM,CAAC;wBACJ,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBACpD,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACxD,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,KAAK,CAAC,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC,CAAC;oBAC5D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACtD,CAAC;YACL,CAAC;YAED,0BAA0B;YAC1B,IAAI,YAAY,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC;gBACrD,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC;oBACzE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;oBAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;oBAChC,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;oBACxC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;gBAClK,CAAC;YACL,CAAC;YAED,IAAI,YAAY,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC;gBAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAClF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,CAAC,0CAA0C,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACrE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACtD,CAAC;gBACD,eAAe,CAAC,MAAM,GAAG,YAAY,CAAC,gBAAgB,CAAC,cAAc,CACjE,QAAQ,EACR,WAAW,EACX,YAAY,CAAC,gBAAgB,EAC7B,IAAI,EACJ,eAAe,CAAC,MAAM,EACtB,OAAO,EACP,IAAI,CAAC,KAAK,CACb,CAAC;YACN,CAAC;YACD,IAAI,CAAC,6BAA6B,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC1F,CAAC;IACL,CAAC;IAEO,6BAA6B,CACjC,SAAiB,EACjB,IAA4B,EAC5B,MAAmC,EACnC,OAAiF;QAEjF,MAAM,iBAAiB,GAAG,CACtB,cAAyE,EACzE,IAA+C,EAC/C,SAAyD,EACrD,EAAE;YACN,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;gBACxE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBACrH,SAAS;gBACb,CAAC;gBACD,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtH,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,SAAS;gBACb,CAAC;gBACD,MAAM,WAAW,GACb,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;gBACzJ,IAAI,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnF,IAAI,CAAC,UAAU,EAAE,CAAC;oBACd,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC;oBACpF,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAClK,CAAC;QACL,CAAC,CAAC;QAEF,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC/E,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3E,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7E,IAAI,gCAAgC,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBACjF,IAAI,CAAC,UAAU,EAAE,CAAC;oBACd,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;oBACnD,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxC,CAAC;gBACD,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC5J,CAAC;QACL,CAAC;QACD,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/F,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;YACtH,MAAM,UAAU,GAAG,KAAK,EAAE,QAAQ,EAAE,gBAAgE,CAAC;YACrG,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxB,SAAS;YACb,CAAC;YACD,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,YAAY,GACd,sBAAsB,KAAK,IAAI,IAAI,OAAO,sBAAsB,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAC;gBAClJ,CAAC,CAAC,sBAAsB,CAAC,KAAK;gBAC9B,CAAC,CAAC,sBAAsB,CAAC;YACjC,UAAU,CAAC,aAAa,KAAxB,UAAU,CAAC,aAAa,GAAK,EAAE,EAAC;YAChC,MAAM,uBAAuB,GAA6C;gBACtE,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;gBAC5G,YAAY,EAAE,mBAAmB,CAAC,YAAY,CAAC;aAClD,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,EAAE;gBACvD,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,uBAAuB;gBAC9B,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAC;QACP,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,gBAAgE,CAAC;YACpG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,SAAS;YACb,CAAC;YACD,MAAM,wBAAwB,GAAG,IAAI,GAAG,CACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,IAAI,EAAE,CAAC;iBACtD,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;iBACvG,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACxC,CAAC;YACF,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC5D,IAAI,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1E,SAAS;gBACb,CAAC;gBACD,MAAM,eAAe,GACjB,GAAG,KAAK,WAAW;oBACf,CAAC,CAAC,4CAA4C,CAAC,KAAK,CAAC;oBACrD,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;wBACnG,CAAC,CAAE,KAA4B,CAAC,KAAK;wBACrC,CAAC,CAAC,KAAK,CAAC;gBAClB,IAAI,CAAC,iCAAiC,CAAC,eAAe,CAAC,EAAE,CAAC;oBACtD,SAAS;gBACb,CAAC;gBACD,UAAU,CAAC,sBAAsB,KAAjC,UAAU,CAAC,sBAAsB,GAAK,EAAE,EAAC;gBACzC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,sBAAsB,EAAE,GAAG,EAAE;oBAC1D,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,IAAI;oBAChB,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC;oBAC3C,QAAQ,EAAE,IAAI;iBACjB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAEO,0BAA0B,CAAC,IAAY,EAAE,QAAkB;QAC/D,OAAO;YACH,QAAQ,EAAE,UAAU,EAAE;YACtB,IAAI;YACJ,eAAe,EAAE,QAAQ,CAAC,CAAC,wCAAgC,CAAC,sCAA8B;YAC1F,iBAAiB,EAAE,EAAE;SACxB,CAAC;IACN,CAAC;IAEO,4BAA4B,CAAC,KAA4C;QAC7E,OAAO,KAAK,EAAE,SAAS,KAAK,0DAA0D,CAAC;IAC3F,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,qCAAqC,CACzC,OAAoC,EACpC,cAA8C,EAC9C,eAA+C,EAC/C,SAAiB,EACjB,gBAAwB,EACxB,SAAiB;QAEjB,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,8DAA+B,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;QACpH,oFAAoF;QACpF,aAAa,CAAC,MAAM,GAAG,EAAE,IAAI,sCAAuB,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9D,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,0DAA0D;QAC1D,MAAM,cAAc,GAAG,EAAE,IAAI,sCAAuB,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC1F,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;QAC5D,MAAM,CAAC,YAAY,GAAG,cAAc,CAAC;QACrC,qCAAqC;QACrC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvD,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvD,mDAAmD;QACnD,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACxD,qFAAqF;QACrF,mFAAmF;QACnF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAEO,sBAAsB,CAAC,KAAa,EAAE,MAAc,EAAE,eAA0C,EAAE,gBAA2C,EAAE,UAAoB;QACvK,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC;QAC1F,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC;QAC/F,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;QAC3G,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACrH,mCAAmC;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAC5C,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;YAC9C,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvC,CAAC;QACD,sBAAsB;QACtB,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAClE,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACI,eAAe,CAAC,KAAa;QAChC,OAAO,iBAAiB,GAAG,KAAK,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACI,oBAAoB;QACvB,MAAM,OAAO,GAAgC;YACzC,QAAQ,EAAE,UAAU,EAAE;YACtB,cAAc,EAAE,EAAE;YAClB,iBAAiB,EAAE,EAAE;SACxB,CAAC;QACF,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAC/D,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAiC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE3I,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;YACtE,QAAQ,EAAE;gBACN,gBAAgB,EAAE;oBACd,UAAU,EAAE,IAAI,CAAC,WAAW;oBAC5B,mBAAmB,EAAE,sCAAsC;oBAC3D,MAAM,EAAE,0BAA0B,CAAC,IAAI,CAAC,eAAe,CAAC;iBAChB;aAC/C;YACD,WAAW,EAAE,IAAI;YACjB,SAAS;YACT,iBAAiB,EAAE,CAAC,OAAO,CAAC;SAC/B,CAAC;IACN,CAAC;CACJ","sourcesContent":["import { type IKHRInteractivity_Graph, type IKHRInteractivity_Node, type IKHRInteractivity_OutputSocketReference, type IKHRInteractivity_Variable } from \"babylonjs-gltf2interface\";\nimport { type IGLTF } from \"../../glTFLoaderInterfaces\";\nimport {\n type IGLTFToFlowGraphMapping,\n type IGLTFToFlowGraphMappingObject,\n getMappingForDeclaration,\n getNoOpMappingForDeclaration,\n HasDefaultInteractivityFlowInput,\n NormalizeInteractivityEventDataConfiguration,\n ParseDebugLogTemplate,\n} from \"./declarationMapper\";\nimport { Logger } from \"core/Misc/logger\";\nimport { type ISerializedFlowGraph, type ISerializedFlowGraphBlock, type ISerializedFlowGraphConnection, type ISerializedFlowGraphContext } from \"core/FlowGraph/typeDefinitions\";\nimport { RandomGUID } from \"core/Misc/guid\";\nimport { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\nimport { FlowGraphConnectionType } from \"core/FlowGraph/flowGraphConnection\";\nimport { type FlowGraph } from \"core/FlowGraph/flowGraph\";\nimport { FlowGraphTypes } from \"core/FlowGraph/flowGraphRichTypes\";\nimport {\n _CreateKHRInteractivityRuntimeValueSnapshot,\n CloneKHRInteractivityGraph,\n CreateEffectiveKHRInteractivityGraph,\n gltfTypeToBabylonType,\n KHR_INTERACTIVITY_SPECIFICATION_COMMIT,\n type IKHRInteractivityBlockProvenance,\n type IKHRInteractivityConfigurationProvenance,\n type IKHRInteractivityDeclarationModel,\n type IKHRInteractivityGraphProvenance,\n type IKHRInteractivitySocketProvenance,\n} from \"./interactivityGraphModel\";\nimport { DelayReferencePrefix, EventReferencePrefix } from \"./interactivityReferences\";\n\n/**\n * Description of a KHR_interactivity custom event, as parsed from the\n * glTF `events` array. Used by the importer to register the event with the\n * FlowGraph send/receive event blocks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface InteractivityEvent {\n /** Identifier of the event, used to match send and receive blocks. */\n eventId: string;\n /**\n * Optional payload schema for the event. Each entry describes one\n * value carried by the event: an `id` (the FlowGraph data socket name),\n * a `type` (glTF interactivity type name) and an optional default\n * `value`. `eventData` (the boolean) is currently unused.\n */\n eventData?: {\n eventData: boolean;\n id: string;\n type: string;\n value?: any;\n }[];\n}\nexport { gltfTypeToBabylonType } from \"./interactivityGraphModel\";\n\nfunction _GetOwnMapping<T>(mapping: { [name: string]: T } | undefined, key: string): T | undefined {\n return mapping && Object.prototype.hasOwnProperty.call(mapping, key) ? mapping[key] : undefined;\n}\n\nfunction _CloneMetadataValue<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((entry) => _CloneMetadataValue(entry)) as T;\n }\n if (value !== null && typeof value === \"object\") {\n const clone: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n Object.defineProperty(clone, key, {\n configurable: true,\n enumerable: true,\n value: _CloneMetadataValue(entry),\n writable: true,\n });\n }\n return clone as T;\n }\n return value;\n}\n\nfunction _IsSerializableConfigurationValue(value: unknown): boolean {\n return (\n value === null ||\n [\"string\", \"number\", \"boolean\"].includes(typeof value) ||\n (Array.isArray(value) && value.every(_IsSerializableConfigurationValue)) ||\n (typeof value === \"object\" && Object.values(value as Record<string, unknown>).every(_IsSerializableConfigurationValue))\n );\n}\n\n/**\n * Captures import-time defaults for unconnected runtime inputs that have no authored KHR socket.\n * @param flowGraph the fully parsed FlowGraph\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function _CaptureKHRInteractivityRuntimeInputDefaults(flowGraph: FlowGraph): void {\n for (const block of flowGraph.getAllBlocks()) {\n const provenance = block.metadata?.khrInteractivity as IKHRInteractivityBlockProvenance | undefined;\n if (!provenance) {\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(provenance.generatedConfiguration ?? {}, \"eventData\")) {\n provenance.generatedConfigurationRuntime ||= {};\n if (!Object.prototype.hasOwnProperty.call(provenance.generatedConfigurationRuntime, \"eventData\")) {\n Object.defineProperty(provenance.generatedConfigurationRuntime, \"eventData\", {\n configurable: true,\n enumerable: true,\n value: _CreateKHRInteractivityRuntimeValueSnapshot(NormalizeInteractivityEventDataConfiguration(block.config?.eventData)),\n writable: true,\n });\n }\n }\n for (const input of block.dataInputs) {\n if (input.isConnected()) {\n continue;\n }\n const socketProvenance = input.metadata?.khrInteractivity as IKHRInteractivitySocketProvenance | undefined;\n if (socketProvenance) {\n socketProvenance.runtimeValueSnapshot ??= _CreateKHRInteractivityRuntimeValueSnapshot((input as any)._defaultValue);\n continue;\n }\n if (provenance.generatedInputDefaults && Object.prototype.hasOwnProperty.call(provenance.generatedInputDefaults, input.name)) {\n continue;\n }\n provenance.generatedInputDefaults ||= {};\n Object.defineProperty(provenance.generatedInputDefaults, input.name, {\n configurable: true,\n enumerable: true,\n value: _CreateKHRInteractivityRuntimeValueSnapshot((input as any)._defaultValue),\n writable: true,\n });\n }\n }\n}\n\n/**\n * Parses a KHR_interactivity graph definition (the raw glTF JSON object) into\n * the serialized FlowGraph form consumed by {@link ParseFlowGraphAsync}.\n *\n * The class walks the interactivity types, declarations, variables, events\n * and nodes in order and emits an {@link ISerializedFlowGraph} via\n * {@link serializeToFlowGraph}.\n */\nexport class InteractivityGraphToFlowGraphParser {\n /**\n * Note - the graph should be rejected if the same type is defined twice.\n * We currently don't validate that.\n */\n private _types: { length: number; flowGraphType: FlowGraphTypes; elementType: \"number\" | \"boolean\" | \"string\" | \"any\" }[] = [];\n private _mappings: { flowGraphMapping: IGLTFToFlowGraphMapping; fullOperationName: string; declaration: IKHRInteractivityDeclarationModel }[] = [];\n private _staticVariables: { type: FlowGraphTypes; value: any[] }[] = [];\n private _events: InteractivityEvent[] = [];\n private _internalEventsCounter: number = 0;\n private _nodes: { blocks: ISerializedFlowGraphBlock[]; fullOperationName: string }[] = [];\n /**\n * Extra blocks the parser inserts between existing nodes (e.g. the seconds→frames multiply for\n * connected animation-time inputs). Kept separate from any node's `blocks` array so per-node\n * post-processing that indexes into that array (such as the animation extraProcessors targeting\n * the last block) is not disturbed, then concatenated into the serialized graph.\n */\n private _insertedBlocks: ISerializedFlowGraphBlock[] = [];\n\n constructor(\n interactivityGraph: IKHRInteractivity_Graph,\n private _gltf: IGLTF,\n public _animationTargetFps: number = 60,\n private _graphIndex: number = 0,\n private _supportedExtensions?: ReadonlySet<string>,\n private _declarationModels?: readonly IKHRInteractivityDeclarationModel[],\n canonicalGraph?: IKHRInteractivity_Graph\n ) {\n this._canonicalGraph = CloneKHRInteractivityGraph(canonicalGraph ?? interactivityGraph);\n this._interactivityGraph = this._declarationModels\n ? CreateEffectiveKHRInteractivityGraph(interactivityGraph, this._declarationModels, this._gltf.nodes?.length ?? 0)\n : CloneKHRInteractivityGraph(interactivityGraph);\n // start with types\n this._parseTypes();\n // continue with declarations\n this._parseDeclarations();\n this._parseVariables();\n this._parseEvents();\n this._parseNodes();\n }\n\n private _interactivityGraph: IKHRInteractivity_Graph;\n private _canonicalGraph: IKHRInteractivity_Graph;\n\n private get _strictValidation(): boolean {\n return !!this._declarationModels;\n }\n\n private _getAllowedDynamicValueSockets(operation: string, node: IKHRInteractivity_Node, direction: \"input\" | \"output\"): ReadonlySet<string> | undefined {\n if ((operation === \"debug/log\" || operation === \"flow/log:BABYLON\") && direction === \"input\") {\n const message = node.configuration?.[operation === \"debug/log\" ? \"message\" : \"messageTemplate\"]?.value?.[0];\n return new Set(typeof message === \"string\" ? ParseDebugLogTemplate(message).sockets : []);\n }\n if ((operation === \"event/send\" && direction === \"input\") || (operation === \"event/receive\" && direction === \"output\")) {\n const eventIndex = node.configuration?.event?.value?.[0];\n if (typeof eventIndex === \"number\") {\n return new Set(Object.keys(this._interactivityGraph.events?.[eventIndex]?.values ?? {}));\n }\n }\n if (operation === \"variable/set\" && direction === \"input\") {\n return new Set((node.configuration?.variables?.value ?? []).map(String));\n }\n if (operation === \"math/switch\" && direction === \"input\") {\n return new Set((node.configuration?.cases?.value ?? []).map(String));\n }\n if ((operation === \"pointer/get\" || operation === \"pointer/set\" || operation === \"pointer/interpolate\") && direction === \"input\") {\n const pointer = node.configuration?.pointer?.value?.[0];\n if (typeof pointer === \"string\") {\n return new Set(\n pointer\n .split(\"/\")\n .filter((segment) => (segment.startsWith(\"[\") && !segment.startsWith(\"[[\")) || (segment.startsWith(\"{\") && !segment.startsWith(\"{{\")))\n .map((segment) =>\n segment\n .substring(1, segment.length - 1)\n .replace(/~1/g, \"/\")\n .replace(/~0/g, \"~\")\n )\n );\n }\n }\n return undefined;\n }\n\n private _getAllowedDynamicFlowSockets(node: IKHRInteractivity_Node, mapping: IGLTFToFlowGraphMapping, direction: \"input\" | \"output\"): ReadonlySet<string> | undefined {\n for (const [key, property] of Object.entries(mapping.configuration ?? {})) {\n const generatesSockets = direction === \"input\" ? property.generatesInputFlowSockets : property.generatesOutputFlowSockets;\n if (!generatesSockets) {\n continue;\n }\n const configuredValues = node.configuration?.[key]?.value;\n const validValues =\n configuredValues &&\n configuredValues.length > 0 &&\n (property.configurationType !== \"int\" || configuredValues.length === 1) &&\n configuredValues.every(\n (value) => typeof value === \"number\" && Number.isInteger(value) && value >= (property.minimum ?? -2147483648) && value <= (property.maximum ?? 2147483647)\n );\n const values = validValues ? configuredValues : property.defaultValue;\n if (direction === \"input\") {\n const count = Array.isArray(values) && typeof values[0] === \"number\" ? values[0] : 0;\n return new Set(Array.from({ length: count }, (_, index) => String(index)));\n }\n return new Set(Array.isArray(values) ? values.map(String) : []);\n }\n return undefined;\n }\n\n public get arrays() {\n return {\n types: this._types,\n mappings: this._mappings,\n staticVariables: this._staticVariables,\n events: this._events,\n nodes: this._nodes,\n };\n }\n\n private _parseTypes() {\n if (!this._interactivityGraph.types) {\n return;\n }\n for (const type of this._interactivityGraph.types) {\n this._types.push(gltfTypeToBabylonType[type.signature]);\n }\n }\n\n private _parseDeclarations() {\n if (!this._interactivityGraph.declarations) {\n return;\n }\n for (let index = 0; index < this._interactivityGraph.declarations.length; index++) {\n const declaration = this._interactivityGraph.declarations[index];\n const declarationModel = this._declarationModels?.[index];\n const extensionEnabled = !declaration.extension || !this._supportedExtensions || this._supportedExtensions.has(declaration.extension);\n const supportedMapping =\n declarationModel?.support === \"unsupported-extension\" ? undefined : extensionEnabled ? getMappingForDeclaration(declaration, false) : undefined;\n if (!supportedMapping && !declaration.extension) {\n throw new Error(`Unknown core KHR_interactivity operation \"${declaration.op}\".`);\n }\n const mapping = supportedMapping ?? (declaration.extension ? getNoOpMappingForDeclaration(declaration) : undefined);\n if (!mapping) {\n Logger.Error([\"No mapping found for declaration\", declaration]);\n throw new Error(\"Error parsing declarations\");\n }\n this._mappings.push({\n flowGraphMapping: mapping,\n fullOperationName: declaration.extension ? declaration.op + \":\" + declaration.extension : declaration.op,\n declaration:\n declarationModel ??\n ({\n index,\n operation: declaration.extension ? `${declaration.op}:${declaration.extension}` : declaration.op,\n support: supportedMapping ? (declaration.extension ? \"extension\" : \"core\") : \"unsupported-extension\",\n source: declaration,\n } satisfies IKHRInteractivityDeclarationModel),\n });\n }\n }\n\n private _parseVariables() {\n if (!this._interactivityGraph.variables) {\n return;\n }\n for (const variable of this._interactivityGraph.variables) {\n const parsed = this._parseVariable(variable);\n // set the default values here\n this._staticVariables.push(parsed);\n }\n }\n\n private _parseVariable(variable: IKHRInteractivity_Variable, dataTransform?: (value: any, parser: InteractivityGraphToFlowGraphParser) => any) {\n const type = this._types[variable.type];\n if (!type) {\n Logger.Error([\"No type found for variable\", variable]);\n throw new Error(\"Error parsing variables\");\n }\n if (variable.value) {\n if (this._interactivityGraph.types?.[variable.type]?.signature !== \"custom\" && variable.value.length !== type.length) {\n Logger.Error([\"Invalid value length for variable\", variable, type]);\n throw new Error(\"Error parsing variables\");\n }\n }\n const value = variable.value ? variable.value.slice() : [];\n if (!value.length) {\n switch (type.flowGraphType) {\n case FlowGraphTypes.Boolean:\n value.push(false);\n break;\n case FlowGraphTypes.Integer:\n value.push(0);\n break;\n case FlowGraphTypes.Number:\n value.push(NaN);\n break;\n case FlowGraphTypes.String:\n // Default for a `ref`-typed value is the null reference, encoded as the empty string.\n value.push(\"\" as any);\n break;\n case FlowGraphTypes.Vector2:\n value.push(NaN, NaN);\n break;\n case FlowGraphTypes.Vector3:\n value.push(NaN, NaN, NaN);\n break;\n case FlowGraphTypes.Vector4:\n case FlowGraphTypes.Matrix2D:\n case FlowGraphTypes.Quaternion:\n value.push(NaN, NaN, NaN, NaN);\n break;\n case FlowGraphTypes.Matrix:\n for (let i = 0; i < 16; i++) {\n value.push(NaN);\n }\n break;\n case FlowGraphTypes.Matrix3D:\n for (let i = 0; i < 9; i++) {\n value.push(NaN);\n }\n break;\n default:\n break;\n }\n }\n // in case of NaN, Infinity, we need to parse the string to the object itself\n if (type.elementType === \"number\" && typeof value[0] === \"string\") {\n value[0] = parseFloat(value[0]);\n } else if (type.flowGraphType === FlowGraphTypes.String && typeof value[0] === \"string\") {\n value[0] = this._normalizeStaticReference(value[0]);\n }\n return { type: type.flowGraphType, value: dataTransform ? dataTransform(value, this) : value };\n }\n\n private _normalizeStaticReference(reference: string): string {\n if (!reference || reference.startsWith(EventReferencePrefix) || reference.startsWith(DelayReferencePrefix)) {\n return \"\";\n }\n if (!reference.startsWith(\"/\")) {\n return \"\";\n }\n let current: unknown = this._gltf;\n for (const rawSegment of reference.substring(1).split(\"/\")) {\n const segment = rawSegment.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n if (Array.isArray(current)) {\n if (!/^(0|[1-9]\\d*)$/.test(segment)) {\n return \"\";\n }\n current = current[parseInt(segment, 10)];\n } else if (current !== null && typeof current === \"object\" && Object.prototype.hasOwnProperty.call(current, segment)) {\n current = (current as Record<string, unknown>)[segment];\n } else {\n return \"\";\n }\n }\n return current !== null && typeof current === \"object\" ? reference : \"\";\n }\n\n private _parseEvents() {\n if (!this._interactivityGraph.events) {\n return;\n }\n const eventIds = new Set(this._interactivityGraph.events.flatMap((event) => (event.id === undefined ? [] : [event.id])));\n const internalPrefix = `__babylon_khr_internal_${this._graphIndex}_`;\n for (const event of this._interactivityGraph.events) {\n let generatedEventId: string | undefined;\n if (event.id === undefined) {\n do {\n generatedEventId = internalPrefix + this._internalEventsCounter++;\n } while (eventIds.has(generatedEventId));\n eventIds.add(generatedEventId);\n }\n const converted: InteractivityEvent = {\n eventId: event.id ?? generatedEventId!,\n };\n if (event.values) {\n converted.eventData = Object.keys(event.values).map((key) => {\n const eventValue = event.values?.[key];\n if (!eventValue) {\n Logger.Error([\"No value found for event key\", key]);\n throw new Error(\"Error parsing events\");\n }\n const type = this._types[eventValue.type];\n if (!type) {\n Logger.Error([\"No type found for event value\", eventValue]);\n throw new Error(\"Error parsing events\");\n }\n const value = typeof eventValue.value !== \"undefined\" ? this._parseVariable(eventValue) : undefined;\n return {\n id: key,\n type: type.flowGraphType,\n eventData: true,\n value,\n };\n });\n }\n this._events.push(converted);\n }\n }\n\n private _parseNodes() {\n if (!this._interactivityGraph.nodes) {\n return;\n }\n for (let nodeIndex = 0; nodeIndex < this._interactivityGraph.nodes.length; nodeIndex++) {\n const node = this._interactivityGraph.nodes[nodeIndex];\n // some validation\n if (typeof node.declaration !== \"number\") {\n Logger.Error([\"No declaration found for node\", node]);\n throw new Error(\"Error parsing nodes\");\n }\n const mapping = this._mappings[node.declaration];\n if (!mapping) {\n Logger.Error([\"No mapping found for node\", node]);\n throw new Error(\"Error parsing nodes\");\n }\n if (mapping.flowGraphMapping.validation) {\n const validationResult = mapping.flowGraphMapping.validation(node, this._interactivityGraph, this._gltf);\n if (!validationResult.valid) {\n throw new Error(`Error validating interactivity node ${this._interactivityGraph.declarations?.[node.declaration].op} - ${validationResult.error}`);\n }\n }\n const blocks: ISerializedFlowGraphBlock[] = [];\n if (mapping.declaration.support === \"unsupported-extension\") {\n blocks.push(this._createUnsupportedExtensionBlock(node, nodeIndex, mapping));\n }\n // create block(s) for this node using the mapping\n for (let role = 0; role < mapping.flowGraphMapping.blocks.length; role++) {\n const blockType = mapping.flowGraphMapping.blocks[role];\n const block = this._getEmptyBlock(blockType, mapping.fullOperationName, nodeIndex, node.declaration, role);\n this._parseNodeConfiguration(node, block, mapping.flowGraphMapping, blockType);\n blocks.push(block);\n }\n this._nodes.push({ blocks, fullOperationName: mapping.fullOperationName });\n }\n }\n\n private _createBlockProvenance(nodeIndex: number, declarationIndex: number, operation: string, role: number): IKHRInteractivityBlockProvenance {\n return {\n graphIndex: this._graphIndex,\n nodeIndex,\n declarationIndex,\n operation,\n role,\n sourcePath: `/extensions/KHR_interactivity/graphs/${this._graphIndex}/nodes/${nodeIndex}`,\n };\n }\n\n private _getEmptyBlock(className: string, type: string, nodeIndex?: number, declarationIndex?: number, role?: number): ISerializedFlowGraphBlock {\n return {\n uniqueId: RandomGUID(),\n className,\n dataInputs: [],\n dataOutputs: [],\n signalInputs: [],\n signalOutputs: [],\n config: {},\n type,\n metadata:\n nodeIndex === undefined\n ? {}\n : {\n khrInteractivity: this._createBlockProvenance(nodeIndex, declarationIndex!, type, role ?? 0),\n },\n };\n }\n\n private _setSocketProvenance(\n connection: ISerializedFlowGraphConnection,\n nodeIndex: number,\n declarationIndex: number,\n operation: string,\n role: number,\n kind: IKHRInteractivitySocketProvenance[\"kind\"],\n direction: IKHRInteractivitySocketProvenance[\"direction\"],\n socket: string\n ): void {\n connection.metadata = {\n ...(connection.metadata ?? {}),\n khrInteractivity: {\n ...this._createBlockProvenance(nodeIndex, declarationIndex, operation, role),\n kind,\n direction,\n socket,\n } satisfies IKHRInteractivitySocketProvenance,\n };\n }\n\n private _getBlockRole(blocks: readonly ISerializedFlowGraphBlock[], block: ISerializedFlowGraphBlock): number {\n return (block.metadata?.khrInteractivity as IKHRInteractivityBlockProvenance | undefined)?.role ?? blocks.indexOf(block);\n }\n\n private _createUnsupportedExtensionBlock(\n node: IKHRInteractivity_Node,\n nodeIndex: number,\n mapping: { flowGraphMapping: IGLTFToFlowGraphMapping; fullOperationName: string; declaration: IKHRInteractivityDeclarationModel }\n ): ISerializedFlowGraphBlock {\n const block = this._getEmptyBlock(\"KHR_interactivity/FlowGraphUnsupportedInteractivityBlock\", mapping.fullOperationName, nodeIndex, node.declaration, 0);\n const inputFlowSockets = new Set<string>();\n for (const sourceNode of this._interactivityGraph.nodes ?? []) {\n for (const flow of Object.values(sourceNode.flows ?? {})) {\n if (flow.node === nodeIndex) {\n inputFlowSockets.add(flow.socket ?? \"in\");\n }\n }\n }\n const toSockets = (sockets: typeof mapping.declaration.source.inputValueSockets) =>\n Object.entries(sockets ?? {}).map(([name, definition]) => ({\n name,\n type: this._types[definition.type]?.flowGraphType,\n signature: this._interactivityGraph.types?.[definition.type]?.signature,\n }));\n block.config = {\n operation: mapping.fullOperationName,\n inputValueSockets: toSockets(mapping.declaration.source.inputValueSockets),\n outputValueSockets: toSockets(mapping.declaration.source.outputValueSockets),\n inputFlowSockets: Array.from(inputFlowSockets).sort(),\n outputFlowSockets: Object.keys(node.flows ?? {}).sort(),\n };\n for (const socket of block.config.inputValueSockets) {\n const connection = this._createNewSocketConnection(socket.name);\n this._setSocketProvenance(connection, nodeIndex, node.declaration, mapping.fullOperationName, 0, \"value\", \"input\", socket.name);\n block.dataInputs.push(connection);\n }\n for (const socket of block.config.outputValueSockets) {\n const connection = this._createNewSocketConnection(socket.name, true);\n this._setSocketProvenance(connection, nodeIndex, node.declaration, mapping.fullOperationName, 0, \"value\", \"output\", socket.name);\n block.dataOutputs.push(connection);\n }\n for (const socket of block.config.inputFlowSockets) {\n const connection = this._createNewSocketConnection(socket);\n this._setSocketProvenance(connection, nodeIndex, node.declaration, mapping.fullOperationName, 0, \"flow\", \"input\", socket);\n block.signalInputs.push(connection);\n }\n for (const socket of block.config.outputFlowSockets) {\n const connection = this._createNewSocketConnection(socket, true);\n this._setSocketProvenance(connection, nodeIndex, node.declaration, mapping.fullOperationName, 0, \"flow\", \"output\", socket);\n block.signalOutputs.push(connection);\n }\n return block;\n }\n\n private _parseNodeConfiguration(node: IKHRInteractivity_Node, block: ISerializedFlowGraphBlock, nodeMapping: IGLTFToFlowGraphMapping, blockType: FlowGraphBlockNames | string) {\n const gltfConfiguration = node.configuration;\n if (gltfConfiguration) {\n for (const key in gltfConfiguration) {\n const gltfProperty = gltfConfiguration[key];\n if (!gltfProperty) {\n throw new Error(\"Error parsing node configuration\");\n }\n\n const propertyMapping = nodeMapping.configuration?.[key];\n if (!propertyMapping && this._strictValidation) {\n continue;\n }\n if (propertyMapping?.validationOnly) {\n continue;\n }\n const belongsToBlock = propertyMapping && propertyMapping.toBlock ? propertyMapping.toBlock === blockType : nodeMapping.blocks.indexOf(blockType) === 0;\n if (belongsToBlock) {\n let value = propertyMapping?.defaultValue;\n if (gltfProperty?.value) {\n value = gltfProperty.value;\n }\n\n if (!propertyMapping?.isArray) {\n if (value.length !== 1) {\n Logger.Warn(`Invalid non-array value length: ${value.length}`);\n }\n\n value = value[0];\n }\n\n if (propertyMapping?.dataTransformer) {\n value = propertyMapping.dataTransformer(value, this);\n }\n\n if (value !== undefined) {\n // Update the flow graph block config.\n block.config[propertyMapping?.name || key] = {\n value: value,\n };\n }\n }\n }\n }\n }\n\n private _parseNodeConnections(context: ISerializedFlowGraphContext) {\n for (let i = 0; i < this._nodes.length; i++) {\n // get the corresponding gltf node\n const gltfNode = this._interactivityGraph.nodes?.[i];\n if (!gltfNode) {\n // should never happen but let's still check\n Logger.Error([\"No node found for interactivity node\", this._nodes[i]]);\n throw new Error(\"Error parsing node connections\");\n }\n const flowGraphBlocks = this._nodes[i];\n const outputMapper = this._mappings[gltfNode.declaration];\n // validate\n if (!outputMapper) {\n Logger.Error([\"No mapping found for node\", gltfNode]);\n throw new Error(\"Error parsing node connections\");\n }\n // KHR_interactivity spec section 3.2.4 \"Unsupported Operations\":\n // nodes referring to unsupported operations are demoted to no-ops.\n // Activations of their input flow sockets are ignored, their output\n // flow sockets are never activated, and their output value sockets\n // return constant type-default values. They have no backing\n // FlowGraph blocks (blocks.length === 0), so there is nothing to\n // wire for this node — skip all of its connections.\n if (flowGraphBlocks.blocks.length === 0) {\n Logger.Warn(`Skipping connections for no-op node #${i} (unsupported operation: ${flowGraphBlocks.fullOperationName})`);\n continue;\n }\n const flowsFromGLTF = gltfNode.flows || {};\n const flowsKeys = Object.keys(flowsFromGLTF).sort(); // sorting as some operations require sorted keys\n // connect the flows\n for (const flowKey of flowsKeys) {\n const flow = flowsFromGLTF[flowKey];\n let flowMapping = _GetOwnMapping(outputMapper.flowGraphMapping.outputs?.flows, flowKey);\n if (this._strictValidation && flowMapping?.compatibilityOnly) {\n flowMapping = undefined;\n }\n let outputArrayMapping = false;\n if (!flowMapping) {\n for (const key in outputMapper.flowGraphMapping.outputs?.flows) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n const wildcardMapping = outputMapper.flowGraphMapping.outputs?.flows?.[key];\n if (!this._strictValidation || !wildcardMapping?.compatibilityOnly) {\n outputArrayMapping = true;\n flowMapping = wildcardMapping;\n break;\n }\n }\n }\n }\n const allowedDynamicOutputs = outputArrayMapping ? this._getAllowedDynamicFlowSockets(gltfNode, outputMapper.flowGraphMapping, \"output\") : undefined;\n if (this._strictValidation && allowedDynamicOutputs && !allowedDynamicOutputs.has(flowKey)) {\n flowMapping = undefined;\n }\n if (!flowMapping && !this._isUnsupportedExtensionBlock(flowGraphBlocks.blocks[0])) {\n continue;\n }\n const socketOutName = flowMapping ? (outputArrayMapping ? flowMapping.name.replace(\"$1\", flowKey) : flowMapping.name) : flowKey;\n // get the input node of this block\n const inputNodeId = flow.node;\n const nodeIn = this._nodes[inputNodeId];\n if (!nodeIn) {\n Logger.Error([\"No node found for input node id\", inputNodeId]);\n throw new Error(\"Error parsing node connections\");\n }\n // Spec 3.2.4: input flow activations on no-op nodes are ignored,\n // so a flow connection into a no-op target is itself a no-op.\n // Drop it instead of crashing on the missing target block.\n if (nodeIn.blocks.length === 0) {\n Logger.Warn(`Dropping flow connection from node #${i} \"${flowKey}\" to no-op node #${inputNodeId} (unsupported operation: ${nodeIn.fullOperationName})`);\n continue;\n }\n // create a serialized socket\n const block = (flowMapping && flowMapping.toBlock && flowGraphBlocks.blocks.find((b) => b.className === flowMapping.toBlock)) || flowGraphBlocks.blocks[0];\n const socketOut = block.signalOutputs.find((socket) => socket.name === socketOutName) ?? this._createNewSocketConnection(socketOutName, true);\n if (!block.signalOutputs.includes(socketOut)) {\n block.signalOutputs.push(socketOut);\n }\n this._setSocketProvenance(\n socketOut,\n i,\n gltfNode.declaration,\n flowGraphBlocks.fullOperationName,\n this._getBlockRole(flowGraphBlocks.blocks, block),\n \"flow\",\n \"output\",\n flowKey\n );\n // get the mapper for the input node - in case it mapped to multiple blocks\n const inputMapper = this._mappings[this._interactivityGraph.nodes![inputNodeId].declaration]?.flowGraphMapping;\n if (!inputMapper) {\n Logger.Error([\"No mapping found for input node\", nodeIn]);\n throw new Error(\"Error parsing node connections\");\n }\n let flowInMapping = _GetOwnMapping(inputMapper.inputs?.flows, flow.socket || \"in\");\n if (this._strictValidation && flowInMapping?.compatibilityOnly) {\n flowInMapping = undefined;\n }\n let arrayMapping = false;\n if (!flowInMapping) {\n for (const key in inputMapper.inputs?.flows) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n const wildcardMapping = inputMapper.inputs?.flows?.[key];\n if (!this._strictValidation || !wildcardMapping?.compatibilityOnly) {\n arrayMapping = true;\n flowInMapping = wildcardMapping;\n }\n }\n }\n const allowedDynamicInputs = arrayMapping ? this._getAllowedDynamicFlowSockets(this._interactivityGraph.nodes![inputNodeId], inputMapper, \"input\") : undefined;\n if (this._strictValidation && allowedDynamicInputs && !allowedDynamicInputs.has(flow.socket ?? \"in\")) {\n flowInMapping = undefined;\n }\n if (!flowInMapping && (flow.socket ?? \"in\") === \"in\" && HasDefaultInteractivityFlowInput(nodeIn.fullOperationName)) {\n flowInMapping = { name: \"in\" };\n }\n if (!flowInMapping && !this._isUnsupportedExtensionBlock(nodeIn.blocks[0])) {\n continue;\n }\n }\n const nodeInSocketName = flowInMapping ? (arrayMapping ? flowInMapping.name.replace(\"$1\", flow.socket || \"\") : flowInMapping.name) : flow.socket || \"in\";\n const inputBlock = (flowInMapping && flowInMapping.toBlock && nodeIn.blocks.find((b) => b.className === flowInMapping.toBlock)) || nodeIn.blocks[0];\n // in all of the flow graph input connections, find the one with the same name as the socket\n let socketIn = inputBlock.signalInputs.find((s) => s.name === nodeInSocketName);\n // if the socket doesn't exist, create the input socket for the connection\n if (!socketIn) {\n socketIn = this._createNewSocketConnection(nodeInSocketName);\n inputBlock.signalInputs.push(socketIn);\n }\n this._setSocketProvenance(\n socketIn,\n inputNodeId,\n this._interactivityGraph.nodes![inputNodeId].declaration,\n nodeIn.fullOperationName,\n this._getBlockRole(nodeIn.blocks, inputBlock),\n \"flow\",\n \"input\",\n flow.socket ?? \"in\"\n );\n // connect the sockets\n socketIn.connectedPointIds.push(socketOut.uniqueId);\n socketOut.connectedPointIds.push(socketIn.uniqueId);\n }\n // connect the values\n const valuesFromGLTF = gltfNode.values || {};\n const valuesKeys = Object.keys(valuesFromGLTF);\n for (const valueKey of valuesKeys) {\n const value = valuesFromGLTF[valueKey];\n let valueMapping = _GetOwnMapping(outputMapper.flowGraphMapping.inputs?.values, valueKey);\n if (this._strictValidation && valueMapping?.compatibilityOnly) {\n valueMapping = undefined;\n }\n let arrayMapping = false;\n if (!valueMapping) {\n for (const key in outputMapper.flowGraphMapping.inputs?.values) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n const wildcardMapping = outputMapper.flowGraphMapping.inputs?.values?.[key];\n if (!this._strictValidation || !wildcardMapping?.compatibilityOnly) {\n arrayMapping = true;\n valueMapping = wildcardMapping;\n }\n }\n }\n }\n const allowedDynamicInputs = arrayMapping ? this._getAllowedDynamicValueSockets(outputMapper.fullOperationName, gltfNode, \"input\") : undefined;\n if (!valueMapping || (allowedDynamicInputs && !allowedDynamicInputs.has(valueKey))) {\n continue;\n }\n const socketInName = valueMapping ? (arrayMapping ? valueMapping.name.replace(\"$1\", valueKey) : valueMapping.name) : valueKey;\n // create a serialized socket\n const block = (valueMapping && valueMapping.toBlock && flowGraphBlocks.blocks.find((b) => b.className === valueMapping.toBlock)) || flowGraphBlocks.blocks[0];\n const socketIn = block.dataInputs.find((socket) => socket.name === socketInName) ?? this._createNewSocketConnection(socketInName);\n if (!block.dataInputs.includes(socketIn)) {\n block.dataInputs.push(socketIn);\n }\n this._setSocketProvenance(\n socketIn,\n i,\n gltfNode.declaration,\n flowGraphBlocks.fullOperationName,\n this._getBlockRole(flowGraphBlocks.blocks, block),\n \"value\",\n \"input\",\n valueKey\n );\n const socketProvenance = socketIn.metadata!.khrInteractivity as IKHRInteractivitySocketProvenance;\n socketProvenance.sourceValue = _CloneMetadataValue(this._canonicalGraph.nodes?.[i]?.values?.[valueKey] ?? value);\n // Captured before the connected branch below shadows `valueMapping`. When set and the\n // value is supplied by a connection, the seconds→frames `dataTransformer` cannot run\n // (it is parse-time only), so the raw connected value is scaled by a runtime multiply.\n const convertConnectedTimeToFrames = !!valueMapping?.convertConnectedTimeToFrames;\n if ((value as IKHRInteractivity_Variable).value !== undefined) {\n const convertedValue = this._parseVariable(value as IKHRInteractivity_Variable, valueMapping && valueMapping.dataTransformer);\n context._connectionValues[socketIn.uniqueId] = convertedValue;\n socketIn.defaultValue = convertedValue;\n socketProvenance.runtimeValue = _CloneMetadataValue(convertedValue.value);\n } else if (typeof (value as IKHRInteractivity_OutputSocketReference).node !== \"undefined\") {\n const nodeOutId = (value as IKHRInteractivity_OutputSocketReference).node;\n const nodeOutSocketName = (value as IKHRInteractivity_OutputSocketReference).socket || \"value\";\n const nodeOut = this._nodes[nodeOutId];\n if (!nodeOut) {\n Logger.Error([\"No node found for output socket reference\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n // Spec 3.2.4: output value sockets of no-op nodes return\n // constant type-default values. Leave the consumer's\n // dataInput unconnected (no connectedPointIds) so the\n // FlowGraph runtime falls back to the RichType default.\n if (nodeOut.blocks.length === 0) {\n Logger.Warn(\n `Dropping value connection from no-op node #${nodeOutId} (unsupported operation: ${nodeOut.fullOperationName}) into node #${i} \"${valueKey}\"; consumer will use type-default value`\n );\n continue;\n }\n const outputMapper = this._mappings[this._interactivityGraph.nodes![nodeOutId].declaration]?.flowGraphMapping;\n if (!outputMapper) {\n Logger.Error([\"No mapping found for output socket reference\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n let valueMapping = _GetOwnMapping(outputMapper.outputs?.values, nodeOutSocketName);\n if (this._strictValidation && valueMapping?.compatibilityOnly) {\n valueMapping = undefined;\n }\n let arrayMapping = false;\n // check if there is an array mapping defined\n if (!valueMapping) {\n // search for a value mapping that has an array mapping\n for (const key in outputMapper.outputs?.values) {\n if (key.startsWith(\"[\") && key.endsWith(\"]\")) {\n const wildcardMapping = outputMapper.outputs?.values?.[key];\n if (!this._strictValidation || !wildcardMapping?.compatibilityOnly) {\n arrayMapping = true;\n valueMapping = wildcardMapping;\n }\n }\n }\n const allowedDynamicOutputs = arrayMapping\n ? this._getAllowedDynamicValueSockets(nodeOut.fullOperationName, this._interactivityGraph.nodes![nodeOutId], \"output\")\n : undefined;\n if (!valueMapping || (allowedDynamicOutputs && !allowedDynamicOutputs.has(nodeOutSocketName))) {\n continue;\n }\n }\n const socketOutName = valueMapping ? (arrayMapping ? valueMapping.name.replace(\"$1\", nodeOutSocketName) : valueMapping?.name) : nodeOutSocketName;\n const outBlock = (valueMapping && valueMapping.toBlock && nodeOut.blocks.find((b) => b.className === valueMapping.toBlock)) || nodeOut.blocks[0];\n let socketOut = outBlock.dataOutputs.find((s) => s.name === socketOutName);\n // if the socket doesn't exist, create it\n if (!socketOut) {\n socketOut = this._createNewSocketConnection(socketOutName, true);\n outBlock.dataOutputs.push(socketOut);\n }\n this._setSocketProvenance(\n socketOut,\n nodeOutId,\n this._interactivityGraph.nodes![nodeOutId].declaration,\n nodeOut.fullOperationName,\n this._getBlockRole(nodeOut.blocks, outBlock),\n \"value\",\n \"output\",\n nodeOutSocketName\n );\n // connect the sockets\n if (convertConnectedTimeToFrames) {\n this._connectWithSecondsToFramesConversion(context, socketOut, socketIn, i, gltfNode.declaration, flowGraphBlocks.fullOperationName);\n } else {\n socketIn.connectedPointIds.push(socketOut.uniqueId);\n socketOut.connectedPointIds.push(socketIn.uniqueId);\n }\n } else {\n Logger.Error([\"Invalid value for value connection\", value]);\n throw new Error(\"Error parsing node connections\");\n }\n }\n\n // inter block connections\n if (outputMapper.flowGraphMapping.interBlockConnectors) {\n for (const connector of outputMapper.flowGraphMapping.interBlockConnectors) {\n const input = connector.input;\n const output = connector.output;\n const isVariable = connector.isVariable;\n this._connectFlowGraphNodes(input, output, flowGraphBlocks.blocks[connector.inputBlockIndex], flowGraphBlocks.blocks[connector.outputBlockIndex], isVariable);\n }\n }\n\n if (outputMapper.flowGraphMapping.extraProcessor) {\n const declaration = this._interactivityGraph.declarations?.[gltfNode.declaration];\n if (!declaration) {\n Logger.Error([\"No declaration found for extra processor\", gltfNode]);\n throw new Error(\"Error parsing node connections\");\n }\n flowGraphBlocks.blocks = outputMapper.flowGraphMapping.extraProcessor(\n gltfNode,\n declaration,\n outputMapper.flowGraphMapping,\n this,\n flowGraphBlocks.blocks,\n context,\n this._gltf\n );\n }\n this._ensureMappedSocketProvenance(i, gltfNode, flowGraphBlocks.blocks, outputMapper);\n }\n }\n\n private _ensureMappedSocketProvenance(\n nodeIndex: number,\n node: IKHRInteractivity_Node,\n blocks: ISerializedFlowGraphBlock[],\n mapping: { flowGraphMapping: IGLTFToFlowGraphMapping; fullOperationName: string }\n ): void {\n const ensureConnections = (\n socketMappings: Record<string, IGLTFToFlowGraphMappingObject> | undefined,\n kind: IKHRInteractivitySocketProvenance[\"kind\"],\n direction: IKHRInteractivitySocketProvenance[\"direction\"]\n ): void => {\n for (const [sourceName, property] of Object.entries(socketMappings ?? {})) {\n if ((sourceName.startsWith(\"[\") && sourceName.endsWith(\"]\")) || (this._strictValidation && property.compatibilityOnly)) {\n continue;\n }\n const block = (property.toBlock && blocks.find((candidate) => candidate.className === property.toBlock)) || blocks[0];\n if (!block) {\n continue;\n }\n const connections =\n kind === \"value\" ? (direction === \"input\" ? block.dataInputs : block.dataOutputs) : direction === \"input\" ? block.signalInputs : block.signalOutputs;\n let connection = connections.find((candidate) => candidate.name === property.name);\n if (!connection) {\n connection = this._createNewSocketConnection(property.name, direction === \"output\");\n connections.push(connection);\n }\n this._setSocketProvenance(connection, nodeIndex, node.declaration, mapping.fullOperationName, this._getBlockRole(blocks, block), kind, direction, sourceName);\n }\n };\n\n ensureConnections(mapping.flowGraphMapping.outputs?.values, \"value\", \"output\");\n ensureConnections(mapping.flowGraphMapping.inputs?.flows, \"flow\", \"input\");\n ensureConnections(mapping.flowGraphMapping.outputs?.flows, \"flow\", \"output\");\n if (HasDefaultInteractivityFlowInput(mapping.fullOperationName)) {\n const block = blocks[0];\n if (block) {\n let connection = block.signalInputs.find((candidate) => candidate.name === \"in\");\n if (!connection) {\n connection = this._createNewSocketConnection(\"in\");\n block.signalInputs.push(connection);\n }\n this._setSocketProvenance(connection, nodeIndex, node.declaration, mapping.fullOperationName, this._getBlockRole(blocks, block), \"flow\", \"input\", \"in\");\n }\n }\n for (const [sourceKey, property] of Object.entries(mapping.flowGraphMapping.configuration ?? {})) {\n const block = (property.toBlock && blocks.find((candidate) => candidate.className === property.toBlock)) || blocks[0];\n const provenance = block?.metadata?.khrInteractivity as IKHRInteractivityBlockProvenance | undefined;\n if (!block || !provenance) {\n continue;\n }\n const serializedRuntimeValue = block.config?.[property.name];\n const runtimeValue =\n serializedRuntimeValue !== null && typeof serializedRuntimeValue === \"object\" && Object.prototype.hasOwnProperty.call(serializedRuntimeValue, \"value\")\n ? serializedRuntimeValue.value\n : serializedRuntimeValue;\n provenance.configuration ||= {};\n const configurationProvenance: IKHRInteractivityConfigurationProvenance = {\n sourceValue: _CloneMetadataValue(this._canonicalGraph.nodes?.[nodeIndex]?.configuration?.[sourceKey]?.value),\n runtimeValue: _CloneMetadataValue(runtimeValue),\n };\n Object.defineProperty(provenance.configuration, sourceKey, {\n configurable: true,\n enumerable: true,\n value: configurationProvenance,\n writable: true,\n });\n }\n for (const block of blocks) {\n const provenance = block.metadata?.khrInteractivity as IKHRInteractivityBlockProvenance | undefined;\n if (!provenance) {\n continue;\n }\n const mappedConfigurationNames = new Set(\n Object.values(mapping.flowGraphMapping.configuration ?? {})\n .filter((property) => (property.toBlock ? block.className === property.toBlock : provenance.role === 0))\n .map((property) => property.name)\n );\n const ignoredConfigurationNames = new Set([\"glTF\"]);\n for (const [key, value] of Object.entries(block.config ?? {})) {\n if (mappedConfigurationNames.has(key) || ignoredConfigurationNames.has(key)) {\n continue;\n }\n const normalizedValue =\n key === \"eventData\"\n ? NormalizeInteractivityEventDataConfiguration(value)\n : value !== null && typeof value === \"object\" && Object.prototype.hasOwnProperty.call(value, \"value\")\n ? (value as { value: unknown }).value\n : value;\n if (!_IsSerializableConfigurationValue(normalizedValue)) {\n continue;\n }\n provenance.generatedConfiguration ||= {};\n Object.defineProperty(provenance.generatedConfiguration, key, {\n configurable: true,\n enumerable: true,\n value: _CloneMetadataValue(normalizedValue),\n writable: true,\n });\n }\n }\n }\n\n private _createNewSocketConnection(name: string, isOutput?: boolean): ISerializedFlowGraphConnection {\n return {\n uniqueId: RandomGUID(),\n name,\n _connectionType: isOutput ? FlowGraphConnectionType.Output : FlowGraphConnectionType.Input,\n connectedPointIds: [],\n };\n }\n\n private _isUnsupportedExtensionBlock(block: ISerializedFlowGraphBlock | undefined): boolean {\n return block?.className === \"KHR_interactivity/FlowGraphUnsupportedInteractivityBlock\";\n }\n\n /**\n * Wires an upstream data output into a downstream data input through a runtime multiply block that\n * scales the value by the animation target fps. This converts a KHR animation time (seconds),\n * delivered by a connection (e.g. a `pointer/get` on the `maxTime` animation pointer), into the\n * Babylon animation frames expected by the play/stop-animation blocks. Literal times are already\n * converted at parse time by the input's `dataTransformer`, so this is only used for connections.\n * @param context the serialized flow graph context that stores literal socket values\n * @param upstreamOutput the data output socket providing the time value (in seconds)\n * @param downstreamInput the data input socket that expects the time in frames\n * @param nodeIndex source node receiving the converted value\n * @param declarationIndex source declaration used by the receiving node\n * @param operation owning KHR operation\n */\n private _connectWithSecondsToFramesConversion(\n context: ISerializedFlowGraphContext,\n upstreamOutput: ISerializedFlowGraphConnection,\n downstreamInput: ISerializedFlowGraphConnection,\n nodeIndex: number,\n declarationIndex: number,\n operation: string\n ): void {\n const multiplyBlock = this._getEmptyBlock(FlowGraphBlockNames.Multiply, operation, nodeIndex, declarationIndex, -1);\n // Scalar (float) multiply; matches how the `math/mul` mapping configures the block.\n multiplyBlock.config = { type: FlowGraphTypes.Number };\n const inputA = this._createNewSocketConnection(\"a\");\n const inputB = this._createNewSocketConnection(\"b\");\n const output = this._createNewSocketConnection(\"value\", true);\n multiplyBlock.dataInputs.push(inputA, inputB);\n multiplyBlock.dataOutputs.push(output);\n // The second factor is the constant animation target fps.\n const frameRateValue = { type: FlowGraphTypes.Number, value: [this._animationTargetFps] };\n context._connectionValues[inputB.uniqueId] = frameRateValue;\n inputB.defaultValue = frameRateValue;\n // upstream time output -> multiply.a\n inputA.connectedPointIds.push(upstreamOutput.uniqueId);\n upstreamOutput.connectedPointIds.push(inputA.uniqueId);\n // multiply.value (frames) -> downstream time input\n downstreamInput.connectedPointIds.push(output.uniqueId);\n output.connectedPointIds.push(downstreamInput.uniqueId);\n // Register the inserted block separately so serializeToFlowGraph picks it up without\n // appending to any node's block list (which would break per-node extraProcessors).\n this._insertedBlocks.push(multiplyBlock);\n }\n\n private _connectFlowGraphNodes(input: string, output: string, serializedInput: ISerializedFlowGraphBlock, serializedOutput: ISerializedFlowGraphBlock, isVariable?: boolean) {\n const inputArray = isVariable ? serializedInput.dataInputs : serializedInput.signalInputs;\n const outputArray = isVariable ? serializedOutput.dataOutputs : serializedOutput.signalOutputs;\n const inputConnection = inputArray.find((s) => s.name === input) || this._createNewSocketConnection(input);\n const outputConnection = outputArray.find((s) => s.name === output) || this._createNewSocketConnection(output, true);\n // of not found add it to the array\n if (!inputArray.find((s) => s.name === input)) {\n inputArray.push(inputConnection);\n }\n if (!outputArray.find((s) => s.name === output)) {\n outputArray.push(outputConnection);\n }\n // connect the sockets\n inputConnection.connectedPointIds.push(outputConnection.uniqueId);\n outputConnection.connectedPointIds.push(inputConnection.uniqueId);\n }\n\n /**\n * Returns the deterministic FlowGraph user-variable name used for the\n * static variable at the given declaration index.\n * @param index zero-based index into the interactivity graph's `variables` array.\n * @returns the FlowGraph variable name (e.g. `staticVariable_3`).\n */\n public getVariableName(index: number) {\n return \"staticVariable_\" + index;\n }\n\n /**\n * Serializes the parsed interactivity graph into the {@link ISerializedFlowGraph}\n * payload consumed by `ParseFlowGraphAsync`. Performs node-connection wiring\n * and seeds the execution context with the graph's static variables.\n * @returns the serialized FlowGraph for the parsed KHR_interactivity graph.\n */\n public serializeToFlowGraph(): ISerializedFlowGraph {\n const context: ISerializedFlowGraphContext = {\n uniqueId: RandomGUID(),\n _userVariables: {},\n _connectionValues: {},\n };\n this._parseNodeConnections(context);\n for (let i = 0; i < this._staticVariables.length; i++) {\n const variable = this._staticVariables[i];\n context._userVariables[this.getVariableName(i)] = variable;\n }\n\n const allBlocks = this._nodes.reduce((acc, val) => acc.concat(val.blocks), [] as ISerializedFlowGraphBlock[]).concat(this._insertedBlocks);\n\n return {\n name: this._interactivityGraph.name ?? `Graph ${this._graphIndex + 1}`,\n metadata: {\n khrInteractivity: {\n graphIndex: this._graphIndex,\n specificationCommit: KHR_INTERACTIVITY_SPECIFICATION_COMMIT,\n source: CloneKHRInteractivityGraph(this._canonicalGraph),\n } satisfies IKHRInteractivityGraphProvenance,\n },\n rightHanded: true,\n allBlocks,\n executionContexts: [context],\n };\n }\n}\n"]}
@@ -6,4 +6,5 @@ export * from "./flowGraphEventReferenceBlock.js";
6
6
  export * from "./flowGraphObjectReferenceBlock.js";
7
7
  export * from "./flowGraphUnsupportedInteractivityBlock.js";
8
8
  export * from "./interactivityGraphModel.js";
9
+ export * from "./interactivityGraphExporter.js";
9
10
  export * from "./interactivityNodeState.js";
@@ -6,5 +6,6 @@ export * from "./flowGraphEventReferenceBlock.js";
6
6
  export * from "./flowGraphObjectReferenceBlock.js";
7
7
  export * from "./flowGraphUnsupportedInteractivityBlock.js";
8
8
  export * from "./interactivityGraphModel.js";
9
+ export * from "./interactivityGraphExporter.js";
9
10
  export * from "./interactivityNodeState.js";
10
11
  //# sourceMappingURL=pure.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,0CAA0C,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\nexport * from \"./declarationMapper\";\nexport * from \"./interactivityGraphParser\";\nexport * from \"./flowGraphGLTFDataProvider\";\nexport * from \"./flowGraphEventReferenceBlock\";\nexport * from \"./flowGraphObjectReferenceBlock\";\nexport * from \"./flowGraphUnsupportedInteractivityBlock\";\nexport * from \"./interactivityGraphModel\";\nexport * from \"./interactivityNodeState\";\n"]}
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,0CAA0C,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\nexport * from \"./declarationMapper\";\nexport * from \"./interactivityGraphParser\";\nexport * from \"./flowGraphGLTFDataProvider\";\nexport * from \"./flowGraphEventReferenceBlock\";\nexport * from \"./flowGraphObjectReferenceBlock\";\nexport * from \"./flowGraphUnsupportedInteractivityBlock\";\nexport * from \"./interactivityGraphModel\";\nexport * from \"./interactivityGraphExporter\";\nexport * from \"./interactivityNodeState\";\n"]}
@@ -7,6 +7,8 @@ import { InteractivityHostResolver } from "./KHR_interactivity/interactivityHost
7
7
  import { type IObjectAccessor, type ISerializedFlowGraph } from "@babylonjs/core/FlowGraph/typeDefinitions.js";
8
8
  import { type IKHRInteractivityDiagnostic, type IKHRInteractivityDocument, type IKHRInteractivityGraphModel } from "./KHR_interactivity/interactivityGraphModel.js";
9
9
  import { type FlowGraph } from "@babylonjs/core/FlowGraph/flowGraph.js";
10
+ export * from "./KHR_interactivity/interactivityGraphExporter.js";
11
+ export { _CaptureKHRInteractivityRuntimeInputDefaults } from "./KHR_interactivity/interactivityGraphParser.js";
10
12
  /**
11
13
  * Runtime projection of one canonical KHR_interactivity graph.
12
14
  */
@@ -36,6 +38,8 @@ export interface IKHRInteractivityImportResult {
36
38
  pathConverter: CompositePathToObjectConverter<IObjectAccessor>;
37
39
  /** Live glTF loader data used by glTF data-provider blocks. */
38
40
  glTF: GLTFLoader["gltf"];
41
+ /** Scene that owns the imported asset and its runtime object mappings, when retained by the importer. */
42
+ scene?: Scene;
39
43
  /** Host resolver that supplies KHR reference semantics to executable graphs. */
40
44
  hostResolver: InteractivityHostResolver;
41
45
  }
@@ -2,7 +2,7 @@ import { FlowGraphCoordinator } from "@babylonjs/core/FlowGraph/flowGraphCoordin
2
2
  import { ParseFlowGraphAsync } from "@babylonjs/core/FlowGraph/flowGraphParser.js";
3
3
  import { registerGLTFExtension, unregisterGLTFExtension, registeredGLTFExtensions } from "../glTFLoaderExtensionRegistry.js";
4
4
  import { AddObjectAccessorToKey, GetPathToObjectConverter } from "./objectModelMapping.js";
5
- import { InteractivityGraphToFlowGraphParser } from "./KHR_interactivity/interactivityGraphParser.js";
5
+ import { _CaptureKHRInteractivityRuntimeInputDefaults, InteractivityGraphToFlowGraphParser } from "./KHR_interactivity/interactivityGraphParser.js";
6
6
  import { addToBlockFactory } from "@babylonjs/core/FlowGraph/Blocks/flowGraphBlockFactory.js";
7
7
  import { Quaternion, Vector3 } from "@babylonjs/core/Maths/math.vector.pure.js";
8
8
  import { Constants } from "@babylonjs/core/Engines/constants.js";
@@ -14,6 +14,8 @@ import { EventReferencePrefix, DelayReferencePrefix } from "./KHR_interactivity/
14
14
  import { InteractivityHostResolver } from "./KHR_interactivity/interactivityHostResolver.js";
15
15
  import { Logger } from "@babylonjs/core/Misc/logger.js";
16
16
  import { CreateKHRInteractivityDocument, } from "./KHR_interactivity/interactivityGraphModel.js";
17
+ export * from "./KHR_interactivity/interactivityGraphExporter.js";
18
+ export { _CaptureKHRInteractivityRuntimeInputDefaults } from "./KHR_interactivity/interactivityGraphParser.js";
17
19
  const NAME = "KHR_interactivity";
18
20
  const _ImportResults = /*#__PURE__*/ new WeakMap();
19
21
  /**
@@ -102,6 +104,7 @@ export class KHR_interactivity {
102
104
  graphs: [],
103
105
  pathConverter,
104
106
  glTF: this._loader.gltf,
107
+ scene,
105
108
  hostResolver: new InteractivityHostResolver(),
106
109
  };
107
110
  importResults.push(result);
@@ -117,7 +120,7 @@ export class KHR_interactivity {
117
120
  return;
118
121
  }
119
122
  try {
120
- const parser = new InteractivityGraphToFlowGraphParser(strictValidation ? graphModel.effectiveSource : graphModel.source, this._loader.gltf, this._loader.parent.targetFps, graphModel.index, supportedExtensions, strictValidation ? graphModel.declarations : undefined);
123
+ const parser = new InteractivityGraphToFlowGraphParser(strictValidation ? graphModel.effectiveSource : graphModel.source, this._loader.gltf, this._loader.parent.targetFps, graphModel.index, supportedExtensions, strictValidation ? graphModel.declarations : undefined, graphModel.source);
121
124
  const serializedFlowGraph = parser.serializeToFlowGraph();
122
125
  graphResult.serializedFlowGraph = serializedFlowGraph;
123
126
  if (parseOnly) {
@@ -127,6 +130,7 @@ export class KHR_interactivity {
127
130
  coordinator.dispatchEventsSynchronously = false;
128
131
  graphResult.coordinator = coordinator;
129
132
  graphResult.flowGraph = await ParseFlowGraphAsync(serializedFlowGraph, { coordinator, pathConverter });
133
+ _CaptureKHRInteractivityRuntimeInputDefaults(graphResult.flowGraph);
130
134
  if (autoStart && graphModel.index === document.defaultGraphIndex) {
131
135
  coordinator.start();
132
136
  }