1 |
- {"ast":null,"code":"import { SceneSerializer } from \"./sceneSerializer.js\";\nimport { Mesh } from \"../Meshes/mesh.js\";\nimport { Light } from \"../Lights/light.js\";\nimport { Camera } from \"../Cameras/camera.js\";\nimport { Skeleton } from \"../Bones/skeleton.js\";\nimport { Material } from \"../Materials/material.js\";\nimport { MultiMaterial } from \"../Materials/multiMaterial.js\";\nimport { TransformNode } from \"../Meshes/transformNode.js\";\nimport { ParticleSystem } from \"../Particles/particleSystem.js\";\nimport { MorphTargetManager } from \"../Morph/morphTargetManager.js\";\nimport { ShadowGenerator } from \"../Lights/Shadows/shadowGenerator.js\";\nimport { PostProcess } from \"../PostProcesses/postProcess.js\";\nimport { Texture } from \"../Materials/Textures/texture.js\";\nimport { SerializationHelper } from \"./decorators.serialization.js\";\n/**\n * Class used to record delta files between 2 scene states\n */\nexport class SceneRecorder {\n constructor() {\n this._trackedScene = null;\n }\n /**\n * Track a given scene. This means the current scene state will be considered the original state\n * @param scene defines the scene to track\n */\n track(scene) {\n this._trackedScene = scene;\n SerializationHelper.AllowLoadingUniqueId = true;\n this._savedJSON = SceneSerializer.Serialize(scene);\n SerializationHelper.AllowLoadingUniqueId = false;\n }\n /**\n * Get the delta between current state and original state\n * @returns a any containing the delta\n */\n getDelta() {\n if (!this._trackedScene) {\n return null;\n }\n const currentForceSerializeBuffers = Texture.ForceSerializeBuffers;\n Texture.ForceSerializeBuffers = false;\n SerializationHelper.AllowLoadingUniqueId = true;\n const newJSON = SceneSerializer.Serialize(this._trackedScene);\n SerializationHelper.AllowLoadingUniqueId = false;\n const deltaJSON = {};\n for (const node in newJSON) {\n this._compareCollections(node, this._savedJSON[node], newJSON[node], deltaJSON);\n }\n Texture.ForceSerializeBuffers = currentForceSerializeBuffers;\n return deltaJSON;\n }\n _compareArray(key, original, current, deltaJSON) {\n if (original.length === 0 && current.length === 0) {\n return true;\n }\n // Numbers?\n if (original.length && !isNaN(original[0]) || current.length && !isNaN(current[0])) {\n if (original.length !== current.length) {\n return false;\n }\n if (original.length === 0) {\n return true;\n }\n for (let index = 0; index < original.length; index++) {\n if (original[index] !== current[index]) {\n deltaJSON[key] = current;\n return false;\n }\n }\n return true;\n }\n // let's use uniqueId to find similar objects\n const originalUniqueIds = [];\n for (let index = 0; index < original.length; index++) {\n const originalObject = original[index];\n const originalUniqueId = originalObject.uniqueId;\n originalUniqueIds.push(originalUniqueId);\n // Look for that object in current state\n const currentObjects = current.filter(c => c.uniqueId === originalUniqueId);\n if (currentObjects.length) {\n // We have a candidate\n const currentObject = currentObjects[0];\n const newObject = {};\n if (!this._compareObjects(originalObject, currentObject, newObject)) {\n if (!deltaJSON[key]) {\n deltaJSON[key] = [];\n }\n newObject.__state = {\n id: currentObject.id || currentObject.name\n };\n deltaJSON[key].push(newObject);\n }\n } else {\n // We need to delete\n const newObject = {\n __state: {\n deleteId: originalObject.id || originalObject.name\n }\n };\n if (!deltaJSON[key]) {\n deltaJSON[key] = [];\n }\n deltaJSON[key].push(newObject);\n }\n }\n // Checking for new objects\n for (let index = 0; index < current.length; index++) {\n const currentObject = current[index];\n const currentUniqueId = currentObject.uniqueId;\n // Object was added\n if (originalUniqueIds.indexOf(currentUniqueId) === -1) {\n if (!deltaJSON[key]) {\n deltaJSON[key] = [];\n }\n deltaJSON[key].push(currentObject);\n }\n }\n return true;\n }\n _compareObjects(originalObjet, currentObject, deltaJSON) {\n let aDifferenceWasFound = false;\n for (const prop in originalObjet) {\n if (!Object.prototype.hasOwnProperty.call(originalObjet, prop)) {\n continue;\n }\n const originalValue = originalObjet[prop];\n const currentValue = currentObject[prop];\n let diffFound = false;\n if (Array.isArray(originalValue)) {\n diffFound = JSON.stringify(originalValue) !== JSON.stringify(currentValue);\n } else if (!isNaN(originalValue) || Object.prototype.toString.call(originalValue) == \"[object String]\") {\n diffFound = originalValue !== currentValue;\n } else if (typeof originalValue === \"object\" && typeof currentValue === \"object\") {\n const newObject = {};\n if (!this._compareObjects(originalValue, currentValue, newObject)) {\n deltaJSON[prop] = newObject;\n aDifferenceWasFound = true;\n }\n }\n if (diffFound) {\n aDifferenceWasFound = true;\n deltaJSON[prop] = currentValue;\n }\n }\n return !aDifferenceWasFound;\n }\n _compareCollections(key, original, current, deltaJSON) {\n // Same ?\n if (original === current) {\n return;\n }\n if (original && current) {\n // Array?\n if (Array.isArray(original) && Array.isArray(current)) {\n if (this._compareArray(key, original, current, deltaJSON)) {\n return;\n }\n } else if (typeof original === \"object\" && typeof current === \"object\") {\n // Object\n const newObject = {};\n if (!this._compareObjects(original, current, newObject)) {\n deltaJSON[key] = newObject;\n }\n return;\n }\n }\n }\n static GetShadowGeneratorById(scene, id) {\n const allGenerators = scene.lights.map(l => l.getShadowGenerators());\n for (const generators of allGenerators) {\n if (generators) {\n const iterator = generators.values();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const generator = key.value;\n if (generator && generator.id === id) {\n return generator;\n }\n }\n }\n }\n return null;\n }\n /**\n * Apply a given delta to a given scene\n * @param deltaJSON defines the JSON containing the delta\n * @param scene defines the scene to apply the delta to\n */\n static ApplyDelta(deltaJSON, scene) {\n if (typeof deltaJSON === \"string\") {\n deltaJSON = JSON.parse(deltaJSON);\n }\n // Scene\n const anyScene = scene;\n for (const prop in deltaJSON) {\n const source = deltaJSON[prop];\n const property = anyScene[prop];\n if (Array.isArray(property) || prop === \"shadowGenerators\") {\n // Restore array\n switch (prop) {\n case \"cameras\":\n this._ApplyDeltaForEntity(source, scene, scene.getCameraById.bind(scene), data => Camera.Parse(data, scene));\n break;\n case \"lights\":\n this._ApplyDeltaForEntity(source, scene, scene.getLightById.bind(scene), data => Light.Parse(data, scene));\n break;\n case \"shadowGenerators\":\n this._ApplyDeltaForEntity(source, scene, id => this.GetShadowGeneratorById(scene, id), data => ShadowGenerator.Parse(data, scene));\n break;\n case \"meshes\":\n this._ApplyDeltaForEntity(source, scene, scene.getMeshById.bind(scene), data => Mesh.Parse(data, scene, \"\"));\n break;\n case \"skeletons\":\n this._ApplyDeltaForEntity(source, scene, scene.getSkeletonById.bind(scene), data => Skeleton.Parse(data, scene));\n break;\n case \"materials\":\n this._ApplyDeltaForEntity(source, scene, scene.getMaterialById.bind(scene), data => Material.Parse(data, scene, \"\"));\n break;\n case \"multiMaterials\":\n this._ApplyDeltaForEntity(source, scene, scene.getMaterialById.bind(scene), data => MultiMaterial.Parse(data, scene, \"\"));\n break;\n case \"transformNodes\":\n this._ApplyDeltaForEntity(source, scene, scene.getTransformNodeById.bind(scene), data => TransformNode.Parse(data, scene, \"\"));\n break;\n case \"particleSystems\":\n this._ApplyDeltaForEntity(source, scene, scene.getParticleSystemById.bind(scene), data => ParticleSystem.Parse(data, scene, \"\"));\n break;\n case \"morphTargetManagers\":\n this._ApplyDeltaForEntity(source, scene, scene.getMorphTargetById.bind(scene), data => MorphTargetManager.Parse(data, scene));\n break;\n case \"postProcesses\":\n this._ApplyDeltaForEntity(source, scene, scene.getPostProcessByName.bind(scene), data => PostProcess.Parse(data, scene, \"\"));\n break;\n }\n } else if (!isNaN(property)) {\n anyScene[prop] = source;\n } else if (property.fromArray) {\n property.fromArray(source);\n }\n }\n }\n static _ApplyPropertiesToEntity(deltaJSON, entity) {\n for (const prop in deltaJSON) {\n const source = deltaJSON[prop];\n const property = entity[prop];\n if (property === undefined) {\n continue;\n }\n if (!isNaN(property) || Array.isArray(property)) {\n entity[prop] = source;\n } else if (property.fromArray) {\n property.fromArray(source);\n } else if (typeof property === \"object\" && property !== null) {\n this._ApplyPropertiesToEntity(source, property);\n }\n }\n }\n static _ApplyDeltaForEntity(sources, scene, finder, addNew) {\n for (const source of sources) {\n // Update\n if (source.__state && source.__state.id !== undefined) {\n const targetEntity = finder(source.__state.id);\n if (targetEntity) {\n // This first pass applies properties that aren't on the serialization list\n this._ApplyPropertiesToEntity(source, targetEntity);\n // The second pass applies the serializable properties\n SerializationHelper.ParseProperties(source, targetEntity, scene, null);\n }\n } else if (source.__state && source.__state.deleteId !== undefined) {\n const target = finder(source.__state.deleteId);\n target === null || target === void 0 || target.dispose();\n } else {\n // New\n addNew(source);\n }\n }\n }\n}","map":{"version":3,"names":["SceneSerializer","Mesh","Light","Camera","Skeleton","Material","MultiMaterial","TransformNode","ParticleSystem","MorphTargetManager","ShadowGenerator","PostProcess","Texture","SerializationHelper","SceneRecorder","constructor","_trackedScene","track","scene","AllowLoadingUniqueId","_savedJSON","Serialize","getDelta","currentForceSerializeBuffers","ForceSerializeBuffers","newJSON","deltaJSON","node","_compareCollections","_compareArray","key","original","current","length","isNaN","index","originalUniqueIds","originalObject","originalUniqueId","uniqueId","push","currentObjects","filter","c","currentObject","newObject","_compareObjects","__state","id","name","deleteId","currentUniqueId","indexOf","originalObjet","aDifferenceWasFound","prop","Object","prototype","hasOwnProperty","call","originalValue","currentValue","diffFound","Array","isArray","JSON","stringify","toString","GetShadowGeneratorById","allGenerators","lights","map","l","getShadowGenerators","generators","iterator","values","next","done","generator","value","ApplyDelta","parse","anyScene","source","property","_ApplyDeltaForEntity","getCameraById","bind","data","Parse","getLightById","getMeshById","getSkeletonById","getMaterialById","getTransformNodeById","getParticleSystemById","getMorphTargetById","getPostProcessByName","fromArray","_ApplyPropertiesToEntity","entity","undefined","sources","finder","addNew","targetEntity","ParseProperties","target","dispose"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/sceneRecorder.js"],"sourcesContent":["import { SceneSerializer } from \"./sceneSerializer.js\";\nimport { Mesh } from \"../Meshes/mesh.js\";\nimport { Light } from \"../Lights/light.js\";\nimport { Camera } from \"../Cameras/camera.js\";\nimport { Skeleton } from \"../Bones/skeleton.js\";\nimport { Material } from \"../Materials/material.js\";\nimport { MultiMaterial } from \"../Materials/multiMaterial.js\";\nimport { TransformNode } from \"../Meshes/transformNode.js\";\nimport { ParticleSystem } from \"../Particles/particleSystem.js\";\nimport { MorphTargetManager } from \"../Morph/morphTargetManager.js\";\nimport { ShadowGenerator } from \"../Lights/Shadows/shadowGenerator.js\";\nimport { PostProcess } from \"../PostProcesses/postProcess.js\";\nimport { Texture } from \"../Materials/Textures/texture.js\";\nimport { SerializationHelper } from \"./decorators.serialization.js\";\n/**\n * Class used to record delta files between 2 scene states\n */\nexport class SceneRecorder {\n constructor() {\n this._trackedScene = null;\n }\n /**\n * Track a given scene. This means the current scene state will be considered the original state\n * @param scene defines the scene to track\n */\n track(scene) {\n this._trackedScene = scene;\n SerializationHelper.AllowLoadingUniqueId = true;\n this._savedJSON = SceneSerializer.Serialize(scene);\n SerializationHelper.AllowLoadingUniqueId = false;\n }\n /**\n * Get the delta between current state and original state\n * @returns a any containing the delta\n */\n getDelta() {\n if (!this._trackedScene) {\n return null;\n }\n const currentForceSerializeBuffers = Texture.ForceSerializeBuffers;\n Texture.ForceSerializeBuffers = false;\n SerializationHelper.AllowLoadingUniqueId = true;\n const newJSON = SceneSerializer.Serialize(this._trackedScene);\n SerializationHelper.AllowLoadingUniqueId = false;\n const deltaJSON = {};\n for (const node in newJSON) {\n this._compareCollections(node, this._savedJSON[node], newJSON[node], deltaJSON);\n }\n Texture.ForceSerializeBuffers = currentForceSerializeBuffers;\n return deltaJSON;\n }\n _compareArray(key, original, current, deltaJSON) {\n if (original.length === 0 && current.length === 0) {\n return true;\n }\n // Numbers?\n if ((original.length && !isNaN(original[0])) || (current.length && !isNaN(current[0]))) {\n if (original.length !== current.length) {\n return false;\n }\n if (original.length === 0) {\n return true;\n }\n for (let index = 0; index < original.length; index++) {\n if (original[index] !== current[index]) {\n deltaJSON[key] = current;\n return false;\n }\n }\n return true;\n }\n // let's use uniqueId to find similar objects\n const originalUniqueIds = [];\n for (let index = 0; index < original.length; index++) {\n const originalObject = original[index];\n const originalUniqueId = originalObject.uniqueId;\n originalUniqueIds.push(originalUniqueId);\n // Look for that object in current state\n const currentObjects = current.filter((c) => c.uniqueId === originalUniqueId);\n if (currentObjects.length) {\n // We have a candidate\n const currentObject = currentObjects[0];\n const newObject = {};\n if (!this._compareObjects(originalObject, currentObject, newObject)) {\n if (!deltaJSON[key]) {\n deltaJSON[key] = [];\n }\n newObject.__state = {\n id: currentObject.id || currentObject.name,\n };\n deltaJSON[key].push(newObject);\n }\n }\n else {\n // We need to delete\n const newObject = {\n __state: {\n deleteId: originalObject.id || originalObject.name,\n },\n };\n if (!deltaJSON[key]) {\n deltaJSON[key] = [];\n }\n deltaJSON[key].push(newObject);\n }\n }\n // Checking for new objects\n for (let index = 0; index < current.length; index++) {\n const currentObject = current[index];\n const currentUniqueId = currentObject.uniqueId;\n // Object was added\n if (originalUniqueIds.indexOf(currentUniqueId) === -1) {\n if (!deltaJSON[key]) {\n deltaJSON[key] = [];\n }\n deltaJSON[key].push(currentObject);\n }\n }\n return true;\n }\n _compareObjects(originalObjet, currentObject, deltaJSON) {\n let aDifferenceWasFound = false;\n for (const prop in originalObjet) {\n if (!Object.prototype.hasOwnProperty.call(originalObjet, prop)) {\n continue;\n }\n const originalValue = originalObjet[prop];\n const currentValue = currentObject[prop];\n let diffFound = false;\n if (Array.isArray(originalValue)) {\n diffFound = JSON.stringify(originalValue) !== JSON.stringify(currentValue);\n }\n else if (!isNaN(originalValue) || Object.prototype.toString.call(originalValue) == \"[object String]\") {\n diffFound = originalValue !== currentValue;\n }\n else if (typeof originalValue === \"object\" && typeof currentValue === \"object\") {\n const newObject = {};\n if (!this._compareObjects(originalValue, currentValue, newObject)) {\n deltaJSON[prop] = newObject;\n aDifferenceWasFound = true;\n }\n }\n if (diffFound) {\n aDifferenceWasFound = true;\n deltaJSON[prop] = currentValue;\n }\n }\n return !aDifferenceWasFound;\n }\n _compareCollections(key, original, current, deltaJSON) {\n // Same ?\n if (original === current) {\n return;\n }\n if (original && current) {\n // Array?\n if (Array.isArray(original) && Array.isArray(current)) {\n if (this._compareArray(key, original, current, deltaJSON)) {\n return;\n }\n }\n else if (typeof original === \"object\" && typeof current === \"object\") {\n // Object\n const newObject = {};\n if (!this._compareObjects(original, current, newObject)) {\n deltaJSON[key] = newObject;\n }\n return;\n }\n }\n }\n static GetShadowGeneratorById(scene, id) {\n const allGenerators = scene.lights.map((l) => l.getShadowGenerators());\n for (const generators of allGenerators) {\n if (generators) {\n const iterator = generators.values();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const generator = key.value;\n if (generator && generator.id === id) {\n return generator;\n }\n }\n }\n }\n return null;\n }\n /**\n * Apply a given delta to a given scene\n * @param deltaJSON defines the JSON containing the delta\n * @param scene defines the scene to apply the delta to\n */\n static ApplyDelta(deltaJSON, scene) {\n if (typeof deltaJSON === \"string\") {\n deltaJSON = JSON.parse(deltaJSON);\n }\n // Scene\n const anyScene = scene;\n for (const prop in deltaJSON) {\n const source = deltaJSON[prop];\n const property = anyScene[prop];\n if (Array.isArray(property) || prop === \"shadowGenerators\") {\n // Restore array\n switch (prop) {\n case \"cameras\":\n this._ApplyDeltaForEntity(source, scene, scene.getCameraById.bind(scene), (data) => Camera.Parse(data, scene));\n break;\n case \"lights\":\n this._ApplyDeltaForEntity(source, scene, scene.getLightById.bind(scene), (data) => Light.Parse(data, scene));\n break;\n case \"shadowGenerators\":\n this._ApplyDeltaForEntity(source, scene, (id) => this.GetShadowGeneratorById(scene, id), (data) => ShadowGenerator.Parse(data, scene));\n break;\n case \"meshes\":\n this._ApplyDeltaForEntity(source, scene, scene.getMeshById.bind(scene), (data) => Mesh.Parse(data, scene, \"\"));\n break;\n case \"skeletons\":\n this._ApplyDeltaForEntity(source, scene, scene.getSkeletonById.bind(scene), (data) => Skeleton.Parse(data, scene));\n break;\n case \"materials\":\n this._ApplyDeltaForEntity(source, scene, scene.getMaterialById.bind(scene), (data) => Material.Parse(data, scene, \"\"));\n break;\n case \"multiMaterials\":\n this._ApplyDeltaForEntity(source, scene, scene.getMaterialById.bind(scene), (data) => MultiMaterial.Parse(data, scene, \"\"));\n break;\n case \"transformNodes\":\n this._ApplyDeltaForEntity(source, scene, scene.getTransformNodeById.bind(scene), (data) => TransformNode.Parse(data, scene, \"\"));\n break;\n case \"particleSystems\":\n this._ApplyDeltaForEntity(source, scene, scene.getParticleSystemById.bind(scene), (data) => ParticleSystem.Parse(data, scene, \"\"));\n break;\n case \"morphTargetManagers\":\n this._ApplyDeltaForEntity(source, scene, scene.getMorphTargetById.bind(scene), (data) => MorphTargetManager.Parse(data, scene));\n break;\n case \"postProcesses\":\n this._ApplyDeltaForEntity(source, scene, scene.getPostProcessByName.bind(scene), (data) => PostProcess.Parse(data, scene, \"\"));\n break;\n }\n }\n else if (!isNaN(property)) {\n anyScene[prop] = source;\n }\n else if (property.fromArray) {\n property.fromArray(source);\n }\n }\n }\n static _ApplyPropertiesToEntity(deltaJSON, entity) {\n for (const prop in deltaJSON) {\n const source = deltaJSON[prop];\n const property = entity[prop];\n if (property === undefined) {\n continue;\n }\n if (!isNaN(property) || Array.isArray(property)) {\n entity[prop] = source;\n }\n else if (property.fromArray) {\n property.fromArray(source);\n }\n else if (typeof property === \"object\" && property !== null) {\n this._ApplyPropertiesToEntity(source, property);\n }\n }\n }\n static _ApplyDeltaForEntity(sources, scene, finder, addNew) {\n for (const source of sources) {\n // Update\n if (source.__state && source.__state.id !== undefined) {\n const targetEntity = finder(source.__state.id);\n if (targetEntity) {\n // This first pass applies properties that aren't on the serialization list\n this._ApplyPropertiesToEntity(source, targetEntity);\n // The second pass applies the serializable properties\n SerializationHelper.ParseProperties(source, targetEntity, scene, null);\n }\n }\n else if (source.__state && source.__state.deleteId !== undefined) {\n const target = finder(source.__state.deleteId);\n target?.dispose();\n }\n else {\n // New\n addNew(source);\n }\n }\n }\n}\n"],"mappings":"AAAA,SAASA,eAAe,QAAQ,sBAAsB;AACtD,SAASC,IAAI,QAAQ,mBAAmB;AACxC,SAASC,KAAK,QAAQ,oBAAoB;AAC1C,SAASC,MAAM,QAAQ,sBAAsB;AAC7C,SAASC,QAAQ,QAAQ,sBAAsB;AAC/C,SAASC,QAAQ,QAAQ,0BAA0B;AACnD,SAASC,aAAa,QAAQ,+BAA+B;AAC7D,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,kBAAkB,QAAQ,gCAAgC;AACnE,SAASC,eAAe,QAAQ,sCAAsC;AACtE,SAASC,WAAW,QAAQ,iCAAiC;AAC7D,SAASC,OAAO,QAAQ,kCAAkC;AAC1D,SAASC,mBAAmB,QAAQ,+BAA+B;AACnE;AACA;AACA;AACA,OAAO,MAAMC,aAAa,CAAC;EACvBC,WAAWA,CAAA,EAAG;IACV,IAAI,CAACC,aAAa,GAAG,IAAI;EAC7B;EACA;AACJ;AACA;AACA;EACIC,KAAKA,CAACC,KAAK,EAAE;IACT,IAAI,CAACF,aAAa,GAAGE,KAAK;IAC1BL,mBAAmB,CAACM,oBAAoB,GAAG,IAAI;IAC/C,IAAI,CAACC,UAAU,GAAGpB,eAAe,CAACqB,SAAS,CAACH,KAAK,CAAC;IAClDL,mBAAmB,CAACM,oBAAoB,GAAG,KAAK;EACpD;EACA;AACJ;AACA;AACA;EACIG,QAAQA,CAAA,EAAG;IACP,IAAI,CAAC,IAAI,CAACN,aAAa,EAAE;MACrB,OAAO,IAAI;IACf;IACA,MAAMO,4BAA4B,GAAGX,OAAO,CAACY,qBAAqB;IAClEZ,OAAO,CAACY,qBAAqB,GAAG,KAAK;IACrCX,mBAAmB,CAACM,oBAAoB,GAAG,IAAI;IAC/C,MAAMM,OAAO,GAAGzB,eAAe,CAACqB,SAAS,CAAC,IAAI,CAACL,aAAa,CAAC;IAC7DH,mBAAmB,CAACM,oBAAoB,GAAG,KAAK;IAChD,MAAMO,SAAS,GAAG,CAAC,CAAC;IACpB,KAAK,MAAMC,IAAI,IAAIF,OAAO,EAAE;MACxB,IAAI,CAACG,mBAAmB,CAACD,IAAI,EAAE,IAAI,CAACP,UAAU,CAACO,IAAI,CAAC,EAAEF,OAAO,CAACE,IAAI,CAAC,EAAED,SAAS,CAAC;IACnF;IACAd,OAAO,CAACY,qBAAqB,GAAGD,4BAA4B;IAC5D,OAAOG,SAAS;EACpB;EACAG,aAAaA,CAACC,GAAG,EAAEC,QAAQ,EAAEC,OAAO,EAAEN,SAAS,EAAE;IAC7C,IAAIK,QAAQ,CAACE,MAAM,KAAK,CAAC,IAAID,OAAO,CAACC,MAAM,KAAK,CAAC,EAAE;MAC/C,OAAO,IAAI;IACf;IACA;IACA,IAAKF,QAAQ,CAACE,MAAM,IAAI,CAACC,KAAK,CAACH,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAMC,OAAO,CAACC,MAAM,IAAI,CAACC,KAAK,CAACF,OAAO,CAAC,CAAC,CAAC,CAAE,EAAE;MACpF,IAAID,QAAQ,CAACE,MAAM,KAAKD,OAAO,CAACC,MAAM,EAAE;QACpC,OAAO,KAAK;MAChB;MACA,IAAIF,QAAQ,CAACE,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,IAAI;MACf;MACA,KAAK,IAAIE,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGJ,QAAQ,CAACE,MAAM,EAAEE,KAAK,EAAE,EAAE;QAClD,IAAIJ,QAAQ,CAACI,KAAK,CAAC,KAAKH,OAAO,CAACG,KAAK,CAAC,EAAE;UACpCT,SAAS,CAACI,GAAG,CAAC,GAAGE,OAAO;UACxB,OAAO,KAAK;QAChB;MACJ;MACA,OAAO,IAAI;IACf;IACA;IACA,MAAMI,iBAAiB,GAAG,EAAE;IAC5B,KAAK,IAAID,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGJ,QAAQ,CAACE,MAAM,EAAEE,KAAK,EAAE,EAAE;MAClD,MAAME,cAAc,GAAGN,QAAQ,CAACI,KAAK,CAAC;MACtC,MAAMG,gBAAgB,GAAGD,cAAc,CAACE,QAAQ;MAChDH,iBAAiB,CAACI,IAAI,CAACF,gBAAgB,CAAC;MACxC;MACA,MAAMG,cAAc,GAAGT,OAAO,CAACU,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACJ,QAAQ,KAAKD,gBAAgB,CAAC;MAC7E,IAAIG,cAAc,CAACR,MAAM,EAAE;QACvB;QACA,MAAMW,aAAa,GAAGH,cAAc,CAAC,CAAC,CAAC;QACvC,MAAMI,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAACC,eAAe,CAACT,cAAc,EAAEO,aAAa,EAAEC,SAAS,CAAC,EAAE;UACjE,IAAI,CAACnB,SAAS,CAACI,GAAG,CAAC,EAAE;YACjBJ,SAAS,CAACI,GAAG,CAAC,GAAG,EAAE;UACvB;UACAe,SAAS,CAACE,OAAO,GAAG;YAChBC,EAAE,EAAEJ,aAAa,CAACI,EAAE,IAAIJ,aAAa,CAACK;UAC1C,CAAC;UACDvB,SAAS,CAACI,GAAG,CAAC,CAACU,IAAI,CAACK,SAAS,CAAC;QAClC;MACJ,CAAC,MACI;QACD;QACA,MAAMA,SAAS,GAAG;UACdE,OAAO,EAAE;YACLG,QAAQ,EAAEb,cAAc,CAACW,EAAE,IAAIX,cAAc,CAACY;UAClD;QACJ,CAAC;QACD,IAAI,CAACvB,SAAS,CAACI,GAAG,CAAC,EAAE;UACjBJ,SAAS,CAACI,GAAG,CAAC,GAAG,EAAE;QACvB;QACAJ,SAAS,CAACI,GAAG,CAAC,CAACU,IAAI,CAACK,SAAS,CAAC;MAClC;IACJ;IACA;IACA,KAAK,IAAIV,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGH,OAAO,CAACC,MAAM,EAAEE,KAAK,EAAE,EAAE;MACjD,MAAMS,aAAa,GAAGZ,OAAO,CAACG,KAAK,CAAC;MACpC,MAAMgB,eAAe,GAAGP,aAAa,CAACL,QAAQ;MAC9C;MACA,IAAIH,iBAAiB,CAACgB,OAAO,CAACD,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE;QACnD,IAAI,CAACzB,SAAS,CAACI,GAAG,CAAC,EAAE;UACjBJ,SAAS,CAACI,GAAG,CAAC,GAAG,EAAE;QACvB;QACAJ,SAAS,CAACI,GAAG,CAAC,CAACU,IAAI,CAACI,aAAa,CAAC;MACtC;IACJ;IACA,OAAO,IAAI;EACf;EACAE,eAAeA,CAACO,aAAa,EAAET,aAAa,EAAElB,SAAS,EAAE;IACrD,IAAI4B,mBAAmB,GAAG,KAAK;IAC/B,KAAK,MAAMC,IAAI,IAAIF,aAAa,EAAE;MAC9B,IAAI,CAACG,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACN,aAAa,EAAEE,IAAI,CAAC,EAAE;QAC5D;MACJ;MACA,MAAMK,aAAa,GAAGP,aAAa,CAACE,IAAI,CAAC;MACzC,MAAMM,YAAY,GAAGjB,aAAa,CAACW,IAAI,CAAC;MACxC,IAAIO,SAAS,GAAG,KAAK;MACrB,IAAIC,KAAK,CAACC,OAAO,CAACJ,aAAa,CAAC,EAAE;QAC9BE,SAAS,GAAGG,IAAI,CAACC,SAAS,CAACN,aAAa,CAAC,KAAKK,IAAI,CAACC,SAAS,CAACL,YAAY,CAAC;MAC9E,CAAC,MACI,IAAI,CAAC3B,KAAK,CAAC0B,aAAa,CAAC,IAAIJ,MAAM,CAACC,SAAS,CAACU,QAAQ,CAACR,IAAI,CAACC,aAAa,CAAC,IAAI,iBAAiB,EAAE;QAClGE,SAAS,GAAGF,aAAa,KAAKC,YAAY;MAC9C,CAAC,MACI,IAAI,OAAOD,aAAa,KAAK,QAAQ,IAAI,OAAOC,YAAY,KAAK,QAAQ,EAAE;QAC5E,MAAMhB,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAACC,eAAe,CAACc,aAAa,EAAEC,YAAY,EAAEhB,SAAS,CAAC,EAAE;UAC/DnB,SAAS,CAAC6B,IAAI,CAAC,GAAGV,SAAS;UAC3BS,mBAAmB,GAAG,IAAI;QAC9B;MACJ;MACA,IAAIQ,SAAS,EAAE;QACXR,mBAAmB,GAAG,IAAI;QAC1B5B,SAAS,CAAC6B,IAAI,CAAC,GAAGM,YAAY;MAClC;IACJ;IACA,OAAO,CAACP,mBAAmB;EAC/B;EACA1B,mBAAmBA,CAACE,GAAG,EAAEC,QAAQ,EAAEC,OAAO,EAAEN,SAAS,EAAE;IACnD;IACA,IAAIK,QAAQ,KAAKC,OAAO,EAAE;MACtB;IACJ;IACA,IAAID,QAAQ,IAAIC,OAAO,EAAE;MACrB;MACA,IAAI+B,KAAK,CAACC,OAAO,CAACjC,QAAQ,CAAC,IAAIgC,KAAK,CAACC,OAAO,CAAChC,OAAO,CAAC,EAAE;QACnD,IAAI,IAAI,CAACH,aAAa,CAACC,GAAG,EAAEC,QAAQ,EAAEC,OAAO,EAAEN,SAAS,CAAC,EAAE;UACvD;QACJ;MACJ,CAAC,MACI,IAAI,OAAOK,QAAQ,KAAK,QAAQ,IAAI,OAAOC,OAAO,KAAK,QAAQ,EAAE;QAClE;QACA,MAAMa,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAACC,eAAe,CAACf,QAAQ,EAAEC,OAAO,EAAEa,SAAS,CAAC,EAAE;UACrDnB,SAAS,CAACI,GAAG,CAAC,GAAGe,SAAS;QAC9B;QACA;MACJ;IACJ;EACJ;EACA,OAAOuB,sBAAsBA,CAAClD,KAAK,EAAE8B,EAAE,EAAE;IACrC,MAAMqB,aAAa,GAAGnD,KAAK,CAACoD,MAAM,CAACC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,mBAAmB,CAAC,CAAC,CAAC;IACtE,KAAK,MAAMC,UAAU,IAAIL,aAAa,EAAE;MACpC,IAAIK,UAAU,EAAE;QACZ,MAAMC,QAAQ,GAAGD,UAAU,CAACE,MAAM,CAAC,CAAC;QACpC,KAAK,IAAI9C,GAAG,GAAG6C,QAAQ,CAACE,IAAI,CAAC,CAAC,EAAE/C,GAAG,CAACgD,IAAI,KAAK,IAAI,EAAEhD,GAAG,GAAG6C,QAAQ,CAACE,IAAI,CAAC,CAAC,EAAE;UACtE,MAAME,SAAS,GAAGjD,GAAG,CAACkD,KAAK;UAC3B,IAAID,SAAS,IAAIA,SAAS,CAAC/B,EAAE,KAAKA,EAAE,EAAE;YAClC,OAAO+B,SAAS;UACpB;QACJ;MACJ;IACJ;IACA,OAAO,IAAI;EACf;EACA;AACJ;AACA;AACA;AACA;EACI,OAAOE,UAAUA,CAACvD,SAAS,EAAER,KAAK,EAAE;IAChC,IAAI,OAAOQ,SAAS,KAAK,QAAQ,EAAE;MAC/BA,SAAS,GAAGuC,IAAI,CAACiB,KAAK,CAACxD,SAAS,CAAC;IACrC;IACA;IACA,MAAMyD,QAAQ,GAAGjE,KAAK;IACtB,KAAK,MAAMqC,IAAI,IAAI7B,SAAS,EAAE;MAC1B,MAAM0D,MAAM,GAAG1D,SAAS,CAAC6B,IAAI,CAAC;MAC9B,MAAM8B,QAAQ,GAAGF,QAAQ,CAAC5B,IAAI,CAAC;MAC/B,IAAIQ,KAAK,CAACC,OAAO,CAACqB,QAAQ,CAAC,IAAI9B,IAAI,KAAK,kBAAkB,EAAE;QACxD;QACA,QAAQA,IAAI;UACR,KAAK,SAAS;YACV,IAAI,CAAC+B,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAACqE,aAAa,CAACC,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAKtF,MAAM,CAACuF,KAAK,CAACD,IAAI,EAAEvE,KAAK,CAAC,CAAC;YAC9G;UACJ,KAAK,QAAQ;YACT,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAACyE,YAAY,CAACH,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAKvF,KAAK,CAACwF,KAAK,CAACD,IAAI,EAAEvE,KAAK,CAAC,CAAC;YAC5G;UACJ,KAAK,kBAAkB;YACnB,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAG8B,EAAE,IAAK,IAAI,CAACoB,sBAAsB,CAAClD,KAAK,EAAE8B,EAAE,CAAC,EAAGyC,IAAI,IAAK/E,eAAe,CAACgF,KAAK,CAACD,IAAI,EAAEvE,KAAK,CAAC,CAAC;YACtI;UACJ,KAAK,QAAQ;YACT,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAAC0E,WAAW,CAACJ,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAKxF,IAAI,CAACyF,KAAK,CAACD,IAAI,EAAEvE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9G;UACJ,KAAK,WAAW;YACZ,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAAC2E,eAAe,CAACL,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAKrF,QAAQ,CAACsF,KAAK,CAACD,IAAI,EAAEvE,KAAK,CAAC,CAAC;YAClH;UACJ,KAAK,WAAW;YACZ,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAAC4E,eAAe,CAACN,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAKpF,QAAQ,CAACqF,KAAK,CAACD,IAAI,EAAEvE,KAAK,EAAE,EAAE,CAAC,CAAC;YACtH;UACJ,KAAK,gBAAgB;YACjB,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAAC4E,eAAe,CAACN,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAKnF,aAAa,CAACoF,KAAK,CAACD,IAAI,EAAEvE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3H;UACJ,KAAK,gBAAgB;YACjB,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAAC6E,oBAAoB,CAACP,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAKlF,aAAa,CAACmF,KAAK,CAACD,IAAI,EAAEvE,KAAK,EAAE,EAAE,CAAC,CAAC;YAChI;UACJ,KAAK,iBAAiB;YAClB,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAAC8E,qBAAqB,CAACR,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAKjF,cAAc,CAACkF,KAAK,CAACD,IAAI,EAAEvE,KAAK,EAAE,EAAE,CAAC,CAAC;YAClI;UACJ,KAAK,qBAAqB;YACtB,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAAC+E,kBAAkB,CAACT,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAKhF,kBAAkB,CAACiF,KAAK,CAACD,IAAI,EAAEvE,KAAK,CAAC,CAAC;YAC/H;UACJ,KAAK,eAAe;YAChB,IAAI,CAACoE,oBAAoB,CAACF,MAAM,EAAElE,KAAK,EAAEA,KAAK,CAACgF,oBAAoB,CAACV,IAAI,CAACtE,KAAK,CAAC,EAAGuE,IAAI,IAAK9E,WAAW,CAAC+E,KAAK,CAACD,IAAI,EAAEvE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9H;QACR;MACJ,CAAC,MACI,IAAI,CAACgB,KAAK,CAACmD,QAAQ,CAAC,EAAE;QACvBF,QAAQ,CAAC5B,IAAI,CAAC,GAAG6B,MAAM;MAC3B,CAAC,MACI,IAAIC,QAAQ,CAACc,SAAS,EAAE;QACzBd,QAAQ,CAACc,SAAS,CAACf,MAAM,CAAC;MAC9B;IACJ;EACJ;EACA,OAAOgB,wBAAwBA,CAAC1E,SAAS,EAAE2E,MAAM,EAAE;IAC/C,KAAK,MAAM9C,IAAI,IAAI7B,SAAS,EAAE;MAC1B,MAAM0D,MAAM,GAAG1D,SAAS,CAAC6B,IAAI,CAAC;MAC9B,MAAM8B,QAAQ,GAAGgB,MAAM,CAAC9C,IAAI,CAAC;MAC7B,IAAI8B,QAAQ,KAAKiB,SAAS,EAAE;QACxB;MACJ;MACA,IAAI,CAACpE,KAAK,CAACmD,QAAQ,CAAC,IAAItB,KAAK,CAACC,OAAO,CAACqB,QAAQ,CAAC,EAAE;QAC7CgB,MAAM,CAAC9C,IAAI,CAAC,GAAG6B,MAAM;MACzB,CAAC,MACI,IAAIC,QAAQ,CAACc,SAAS,EAAE;QACzBd,QAAQ,CAACc,SAAS,CAACf,MAAM,CAAC;MAC9B,CAAC,MACI,IAAI,OAAOC,QAAQ,KAAK,QAAQ,IAAIA,QAAQ,KAAK,IAAI,EAAE;QACxD,IAAI,CAACe,wBAAwB,CAAChB,MAAM,EAAEC,QAAQ,CAAC;MACnD;IACJ;EACJ;EACA,OAAOC,oBAAoBA,CAACiB,OAAO,EAAErF,KAAK,EAAEsF,MAAM,EAAEC,MAAM,EAAE;IACxD,KAAK,MAAMrB,MAAM,IAAImB,OAAO,EAAE;MAC1B;MACA,IAAInB,MAAM,CAACrC,OAAO,IAAIqC,MAAM,CAACrC,OAAO,CAACC,EAAE,KAAKsD,SAAS,EAAE;QACnD,MAAMI,YAAY,GAAGF,MAAM,CAACpB,MAAM,CAACrC,OAAO,CAACC,EAAE,CAAC;QAC9C,IAAI0D,YAAY,EAAE;UACd;UACA,IAAI,CAACN,wBAAwB,CAAChB,MAAM,EAAEsB,YAAY,CAAC;UACnD;UACA7F,mBAAmB,CAAC8F,eAAe,CAACvB,MAAM,EAAEsB,YAAY,EAAExF,KAAK,EAAE,IAAI,CAAC;QAC1E;MACJ,CAAC,MACI,IAAIkE,MAAM,CAACrC,OAAO,IAAIqC,MAAM,CAACrC,OAAO,CAACG,QAAQ,KAAKoD,SAAS,EAAE;QAC9D,MAAMM,MAAM,GAAGJ,MAAM,CAACpB,MAAM,CAACrC,OAAO,CAACG,QAAQ,CAAC;QAC9C0D,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEC,OAAO,CAAC,CAAC;MACrB,CAAC,MACI;QACD;QACAJ,MAAM,CAACrB,MAAM,CAAC;MAClB;IACJ;EACJ;AACJ","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|