@colyseus/schema 5.0.2 → 5.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/encoding/spec.ts","../src/symbol.shim.ts","../src/types/symbols.ts","../src/encoding/encode.ts","../src/encoding/decode.ts","../src/types/registry.ts","../src/encoder/streaming.ts","../src/types/TypeContext.ts","../src/Metadata.ts","../src/encoder/ChangeRecorder.ts","../src/encoder/EncodeDescriptor.ts","../src/encoder/changeTree/parentChain.ts","../src/encoder/changeTree/liveIteration.ts","../src/encoder/changeTree/inheritedFlags.ts","../src/encoder/subscriptions.ts","../src/encoder/changeTree/treeAttachment.ts","../src/encoder/ChangeTree.ts","../src/encoder/EncodeOperation.ts","../src/decoder/DecodeOperation.ts","../src/encoding/assert.ts","../src/types/custom/ArraySchema.ts","../src/encoder/MapJournal.ts","../src/types/custom/MapSchema.ts","../src/types/custom/CollectionSchema.ts","../src/types/custom/SetSchema.ts","../src/types/custom/StreamSchema.ts","../src/types/builder.ts","../src/annotations.ts","../src/utils.ts","../src/Schema.ts","../src/encoder/RefIdAllocator.ts","../src/encoder/Root.ts","../src/encoder/Encoder.ts","../src/types/utils.ts","../src/decoder/ReferenceTracker.ts","../src/decoder/Decoder.ts","../src/Reflection.ts","../src/decoder/strategy/getDecoderStateCallbacks.ts","../src/decoder/strategy/RawChanges.ts","../src/decoder/strategy/Callbacks.ts","../src/encoder/StateView.ts","../src/index.ts"],"sourcesContent":["export const SWITCH_TO_STRUCTURE = 255; // (decoding collides with DELETE_AND_ADD + fieldIndex = 63)\nexport const TYPE_ID = 213;\n\n/**\n * Encoding Schema field operations.\n */\nexport enum OPERATION {\n ADD = 128, // (10000000) add new structure/primitive\n REPLACE = 0, // (00000001) replace structure/primitive\n DELETE = 64, // (01000000) delete field\n DELETE_AND_MOVE = 96, // () ArraySchema only\n MOVE_AND_ADD = 160, // () ArraySchema only\n DELETE_AND_ADD = 192, // (11000000) DELETE field, followed by an ADD\n\n /**\n * Collection operations\n */\n CLEAR = 10,\n\n /**\n * ArraySchema operations\n */\n REVERSE = 15,\n MOVE = 32,\n DELETE_BY_REFID = 33, // This operation is only used at ENCODING time. During DECODING, DELETE_BY_REFID is converted to DELETE\n ADD_BY_REFID = 129,\n}\n","\n//\n// Must have Symbol.metadata defined for metadata support on decorators:\n// https://github.com/microsoft/TypeScript/issues/55453#issuecomment-1687496648\n//\nexport {};\ndeclare global {\n interface SymbolConstructor {\n readonly metadata: unique symbol;\n }\n}\n(Symbol as any).metadata ??= Symbol.for(\"Symbol.metadata\");","//\n// Cross-bundle symbol sharing.\n//\n// When @colyseus/schema is loaded more than once into the same JS realm\n// (e.g. main bundle + ./input subpath bundle), plain `Symbol(\"$x\")` calls\n// in each copy produce distinct values — breaking identity checks like\n// `instance[$values]` when the reader and the writer come from different\n// copies.\n//\n// `Symbol.for(key)` resolves to the engine's process-wide Symbol Registry,\n// so every copy gets the same symbol regardless of which one created it.\n//\n// Fallback: runtimes that lack `Symbol.for` get a polyfill anchored on\n// globalThis (also shared across module copies).\n//\ndeclare const self: any;\ndeclare const window: any;\n\nconst _g: any = (function () {\n if (typeof globalThis !== \"undefined\") return globalThis;\n if (typeof global !== \"undefined\") return global;\n if (typeof self !== \"undefined\") return self;\n if (typeof window !== \"undefined\") return window;\n return {};\n})();\n\nif (typeof Symbol === \"function\" && typeof (Symbol as any).for !== \"function\") {\n const REGISTRY_KEY = \"colyseus.symbolRegistry\";\n const registry: { [k: string]: symbol } =\n _g[REGISTRY_KEY] || (_g[REGISTRY_KEY] = Object.create(null));\n (Symbol as any).for = function (key: string): symbol {\n return registry[key] || (registry[key] = Symbol(key));\n };\n (Symbol as any).keyFor = function (sym: symbol): string | undefined {\n for (const k in registry) if (registry[k] === sym) return k;\n return undefined;\n };\n}\n\nexport const $refId: unique symbol = Symbol.for(\"$refId\");\nexport const $track = \"~track\";\nexport const $encoder = \"~encoder\";\nexport const $decoder = \"~decoder\";\n\nexport const $filter = \"~filter\";\n\nexport const $getByIndex = \"~getByIndex\";\nexport const $deleteByIndex = \"~deleteByIndex\";\n\n/**\n * Used to hold ChangeTree instances whitin the structures.\n *\n * Real JS Symbol — see the `$values` comment for rationale.\n */\nexport const $changes: unique symbol = Symbol.for(\"$changes\");\n\n/**\n * Used to keep track of the type of the child elements of a collection\n * (MapSchema, ArraySchema, etc.). Real Symbol — same rationale as $values.\n */\nexport const $childType: unique symbol = Symbol.for(\"$childType\");\n\n/**\n * Self-reference an instance sets on `this` so its own methods can recover\n * the underlying object even when `this` is a Proxy wrapper. Used by\n * ArraySchema (whose public API is a Proxy) to grab the underlying instance\n * once at the top of hot methods and then access fields directly without\n * paying the Proxy.get cost on every read.\n */\nexport const $proxyTarget: unique symbol = Symbol.for(\"$proxyTarget\");\n\n/**\n * Optional \"discard\" method for custom types (ArraySchema)\n * (Discards changes for next serialization)\n */\nexport const $onEncodeEnd = '~onEncodeEnd';\n\n/**\n * When decoding, this method is called after the instance is fully decoded\n */\nexport const $onDecodeEnd = \"~onDecodeEnd\";\n\n/**\n * Per-instance dense array holding field values by index.\n * Replaces per-field _fieldName shadow properties.\n *\n * Real JS Symbol (not \"~\"-prefixed string) so plain assignment is safe —\n * symbols are non-enumerable to Object.keys / JSON.stringify / for-in,\n * which means we can drop Object.defineProperty(...{ enumerable: false })\n * and avoid the slow-path / dictionary-mode hazards that come with it.\n */\nexport const $values: unique symbol = Symbol.for(\"$values\");\n\n/**\n * Brand for FieldBuilder instances so schema() can detect them.\n */\nexport const $builder = \"~builder\";\n\n/**\n * Metadata\n */\nexport const $descriptors = \"~descriptors\";\n\n/**\n * Per-class bitmask: bit i set iff field i carries a @view tag.\n * Lazily computed from $viewFieldIndexes on first encode pass.\n * Skips the per-field metadata[i].tag property chase in the hot encode loop.\n */\nexport const $filterBitmask = \"~__filterBitmask\";\n\n/**\n * Cached per-class encode descriptor: bundles encoder fn, filter fn,\n * metadata, isSchema flag, and filterBitmask into one object stashed on\n * the constructor. Replaces 5 separate per-tree property chases /\n * function calls in the encode loop with a single property load.\n */\nexport const $encodeDescriptor = \"~__encodeDescriptor\";\nexport const $encoders = \"~encoders\";\nexport const $numFields = \"~__numFields\";\nexport const $refTypeFieldIndexes = \"~__refTypeFieldIndexes\";\nexport const $viewFieldIndexes = \"~__viewFieldIndexes\";\nexport const $fieldIndexesByViewTag = \"$__fieldIndexesByViewTag\";\nexport const $unreliableFieldIndexes = \"~__unreliableFieldIndexes\";\nexport const $transientFieldIndexes = \"~__transientFieldIndexes\";\nexport const $staticFieldIndexes = \"~__staticFieldIndexes\";\nexport const $streamFieldIndexes = \"~__streamFieldIndexes\";\nexport const $streamPriorities = \"~__streamPriorities\";\n","// @ts-nocheck\n\n/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\nimport type { TextEncoder } from \"util\";\nimport type { Iterator } from \"./decode.js\";\n\nexport type BufferLike = ArrayLike<number> & { [index: number]: number };\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\nlet textEncoder: TextEncoder;\n// @ts-ignore\ntry { textEncoder = new TextEncoder(); } catch (e) { }\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _convoBuffer = new ArrayBuffer(8);\nconst _int32 = new Int32Array(_convoBuffer);\nconst _float32 = new Float32Array(_convoBuffer);\nconst _float64 = new Float64Array(_convoBuffer);\nconst _int64 = new BigInt64Array(_convoBuffer);\n\nconst hasBufferByteLength = (typeof Buffer !== 'undefined' && Buffer.byteLength);\n\nconst utf8Length: (str: string, _?: any) => number = (hasBufferByteLength)\n ? Buffer.byteLength // node\n : function (str: string, _?: any) {\n var c = 0, length = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n }\n\nfunction utf8Write(view: BufferLike, str: string, it: Iterator) {\n var c = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n view[it.offset++] = c;\n }\n else if (c < 0x800) {\n view[it.offset] = 0xc0 | (c >> 6);\n view[it.offset + 1] = 0x80 | (c & 0x3f);\n it.offset += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n view[it.offset] = 0xe0 | (c >> 12);\n view[it.offset+1] = 0x80 | (c >> 6 & 0x3f);\n view[it.offset+2] = 0x80 | (c & 0x3f);\n it.offset += 3;\n }\n else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n view[it.offset] = 0xf0 | (c >> 18);\n view[it.offset+1] = 0x80 | (c >> 12 & 0x3f);\n view[it.offset+2] = 0x80 | (c >> 6 & 0x3f);\n view[it.offset+3] = 0x80 | (c & 0x3f);\n it.offset += 4;\n }\n }\n}\n\nfunction int8(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n};\n\nfunction uint8(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n};\n\nfunction int16(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n bytes[it.offset++] = (value >> 8) & 255;\n};\n\nfunction uint16(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n bytes[it.offset++] = (value >> 8) & 255;\n};\n\nfunction int32(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n bytes[it.offset++] = (value >> 8) & 255;\n bytes[it.offset++] = (value >> 16) & 255;\n bytes[it.offset++] = (value >> 24) & 255;\n};\n\nfunction uint32(bytes: BufferLike, value: number, it: Iterator) {\n const b4 = value >> 24;\n const b3 = value >> 16;\n const b2 = value >> 8;\n const b1 = value;\n bytes[it.offset++] = b1 & 255;\n bytes[it.offset++] = b2 & 255;\n bytes[it.offset++] = b3 & 255;\n bytes[it.offset++] = b4 & 255;\n};\n\nfunction int64(bytes: BufferLike, value: number, it: Iterator) {\n const high = Math.floor(value / Math.pow(2, 32));\n const low = value >>> 0;\n uint32(bytes, low, it);\n uint32(bytes, high, it);\n};\n\nfunction uint64(bytes: BufferLike, value: number, it: Iterator) {\n const high = (value / Math.pow(2, 32)) >> 0;\n const low = value >>> 0;\n uint32(bytes, low, it);\n uint32(bytes, high, it);\n};\n\nfunction bigint64(bytes: BufferLike, value: bigint, it: Iterator) {\n _int64[0] = BigInt.asIntN(64, value);\n int32(bytes, _int32[0], it);\n int32(bytes, _int32[1], it);\n}\n\nfunction biguint64(bytes: BufferLike, value: bigint, it: Iterator) {\n _int64[0] = BigInt.asIntN(64, value);\n int32(bytes, _int32[0], it);\n int32(bytes, _int32[1], it);\n}\n\nfunction float32(bytes: BufferLike, value: number, it: Iterator) {\n _float32[0] = value;\n int32(bytes, _int32[0], it);\n}\n\nfunction float64(bytes: BufferLike, value: number, it: Iterator) {\n _float64[0] = value;\n int32(bytes, _int32[_isLittleEndian ? 0 : 1], it);\n int32(bytes, _int32[_isLittleEndian ? 1 : 0], it);\n}\n\nfunction boolean(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value ? 1 : 0; // uint8\n};\n\nfunction string(bytes: BufferLike, value: string, it: Iterator) {\n // encode `null` strings as empty.\n if (!value) { value = \"\"; }\n\n let length = utf8Length(value, \"utf8\");\n let size = 0;\n\n // fixstr\n if (length < 0x20) {\n bytes[it.offset++] = length | 0xa0;\n size = 1;\n }\n // str 8\n else if (length < 0x100) {\n bytes[it.offset++] = 0xd9;\n bytes[it.offset++] = length;\n size = 2;\n }\n // str 16\n else if (length < 0x10000) {\n bytes[it.offset++] = 0xda;\n uint16(bytes, length, it);\n size = 3;\n }\n // str 32\n else if (length < 0x100000000) {\n bytes[it.offset++] = 0xdb;\n uint32(bytes, length, it);\n size = 5;\n } else {\n throw new Error('String too long');\n }\n\n utf8Write(bytes, value, it);\n\n return size + length;\n}\n\nfunction number(bytes: BufferLike, value: number, it: Iterator) {\n if (isNaN(value)) {\n return number(bytes, 0, it);\n\n } else if (!isFinite(value)) {\n return number(bytes, (value > 0) ? Number.MAX_SAFE_INTEGER : -Number.MAX_SAFE_INTEGER, it);\n\n } else if (value !== (value|0)) {\n if (Math.abs(value) <= 3.4028235e+38) { // range check\n _float32[0] = value;\n if (Math.abs(Math.abs(_float32[0]) - Math.abs(value)) < 1e-4) { // precision check; adjust 1e-n (n = precision) to in-/decrease acceptable precision loss\n // now we know value is in range for f32 and has acceptable precision for f32\n bytes[it.offset++] = 0xca;\n float32(bytes, value, it);\n return 5;\n }\n }\n\n bytes[it.offset++] = 0xcb;\n float64(bytes, value, it);\n return 9;\n }\n\n if (value >= 0) {\n // positive fixnum\n if (value < 0x80) {\n bytes[it.offset++] = value & 255; // uint8\n return 1;\n }\n\n // uint 8\n if (value < 0x100) {\n bytes[it.offset++] = 0xcc;\n bytes[it.offset++] = value & 255; // uint8\n return 2;\n }\n\n // uint 16\n if (value < 0x10000) {\n bytes[it.offset++] = 0xcd;\n uint16(bytes, value, it);\n return 3;\n }\n\n // uint 32\n if (value < 0x100000000) {\n bytes[it.offset++] = 0xce;\n uint32(bytes, value, it);\n return 5;\n }\n\n // uint 64\n bytes[it.offset++] = 0xcf;\n uint64(bytes, value, it);\n return 9;\n\n } else {\n\n // negative fixnum\n if (value >= -0x20) {\n bytes[it.offset++] = 0xe0 | (value + 0x20);\n return 1;\n }\n\n // int 8\n if (value >= -0x80) {\n bytes[it.offset++] = 0xd0;\n int8(bytes, value, it);\n return 2;\n }\n\n // int 16\n if (value >= -0x8000) {\n bytes[it.offset++] = 0xd1;\n int16(bytes, value, it);\n return 3;\n }\n\n // int 32\n if (value >= -0x80000000) {\n bytes[it.offset++] = 0xd2;\n int32(bytes, value, it);\n return 5;\n }\n\n // int 64\n bytes[it.offset++] = 0xd3;\n int64(bytes, value, it);\n return 9;\n }\n}\n\nexport const encode = {\n int8,\n uint8,\n int16,\n uint16,\n int32,\n uint32,\n int64,\n uint64,\n bigint64,\n biguint64,\n float32,\n float64,\n boolean,\n string,\n number,\n utf8Write,\n utf8Length,\n}","// @ts-nocheck\n\n/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\nimport type { BufferLike } from \"./encode.js\";\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\nexport interface Iterator { offset: number; }\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _convoBuffer = new ArrayBuffer(8);\n\nconst _int32 = new Int32Array(_convoBuffer);\nconst _float32 = new Float32Array(_convoBuffer);\nconst _float64 = new Float64Array(_convoBuffer);\nconst _uint64 = new BigUint64Array(_convoBuffer);\nconst _int64 = new BigInt64Array(_convoBuffer);\n\nfunction utf8Read(bytes: BufferLike, it: Iterator, length: number) {\n // boundary check\n if (length > bytes.length - it.offset) { length = bytes.length - it.offset; }\n\n var string = '', chr = 0;\n for (var i = it.offset, end = it.offset + length; i < end; i++) {\n var byte = bytes[i];\n if ((byte & 0x80) === 0x00) {\n string += String.fromCharCode(byte);\n continue;\n }\n if ((byte & 0xe0) === 0xc0) {\n string += String.fromCharCode(\n ((byte & 0x1f) << 6) |\n (bytes[++i] & 0x3f)\n );\n continue;\n }\n if ((byte & 0xf0) === 0xe0) {\n string += String.fromCharCode(\n ((byte & 0x0f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0)\n );\n continue;\n }\n if ((byte & 0xf8) === 0xf0) {\n chr = ((byte & 0x07) << 18) |\n ((bytes[++i] & 0x3f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0);\n if (chr >= 0x010000) { // surrogate pair\n chr -= 0x010000;\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n continue;\n }\n\n // (do not throw error to avoid server/client from crashing due to hack attemps)\n // throw new Error('Invalid byte ' + byte.toString(16));\n\n console.error('decode.utf8Read(): Invalid byte ' + byte + ' at offset ' + i + '. Skip to end of string: ' + (it.offset + length));\n break;\n }\n it.offset += length;\n return string;\n}\n\nfunction int8 (bytes: BufferLike, it: Iterator) {\n return uint8(bytes, it) << 24 >> 24;\n};\n\nfunction uint8 (bytes: BufferLike, it: Iterator) {\n return bytes[it.offset++];\n};\n\nfunction int16 (bytes: BufferLike, it: Iterator) {\n return uint16(bytes, it) << 16 >> 16;\n};\n\nfunction uint16 (bytes: BufferLike, it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8;\n};\n\nfunction int32 (bytes: BufferLike, it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8 | bytes[it.offset++] << 16 | bytes[it.offset++] << 24;\n};\n\nfunction uint32 (bytes: BufferLike, it: Iterator) {\n return int32(bytes, it) >>> 0;\n};\n\nfunction float32 (bytes: BufferLike, it: Iterator) {\n _int32[0] = int32(bytes, it);\n return _float32[0];\n};\n\nfunction float64 (bytes: BufferLike, it: Iterator) {\n _int32[_isLittleEndian ? 0 : 1] = int32(bytes, it);\n _int32[_isLittleEndian ? 1 : 0] = int32(bytes, it);\n return _float64[0];\n};\n\nfunction int64(bytes: BufferLike, it: Iterator) {\n const low = uint32(bytes, it);\n const high = int32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nfunction uint64(bytes: BufferLike, it: Iterator) {\n const low = uint32(bytes, it);\n const high = uint32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nfunction bigint64(bytes: BufferLike, it: Iterator) {\n _int32[0] = int32(bytes, it);\n _int32[1] = int32(bytes, it);\n return _int64[0];\n}\n\nfunction biguint64(bytes: BufferLike, it: Iterator) {\n _int32[0] = int32(bytes, it);\n _int32[1] = int32(bytes, it);\n return _uint64[0];\n}\n\nfunction boolean (bytes: BufferLike, it: Iterator) {\n return uint8(bytes, it) > 0;\n};\n\nfunction string (bytes: BufferLike, it: Iterator) {\n const prefix = bytes[it.offset++];\n let length: number;\n\n if (prefix < 0xc0) {\n // fixstr\n length = prefix & 0x1f;\n\n } else if (prefix === 0xd9) {\n length = uint8(bytes, it);\n\n } else if (prefix === 0xda) {\n length = uint16(bytes, it);\n\n } else if (prefix === 0xdb) {\n length = uint32(bytes, it);\n }\n\n return utf8Read(bytes, it, length);\n}\n\nfunction number (bytes: BufferLike, it: Iterator) {\n const prefix = bytes[it.offset++];\n\n if (prefix < 0x80) {\n // positive fixint\n return prefix;\n\n } else if (prefix === 0xca) {\n // float 32\n return float32(bytes, it);\n\n } else if (prefix === 0xcb) {\n // float 64\n return float64(bytes, it);\n\n } else if (prefix === 0xcc) {\n // uint 8\n return uint8(bytes, it);\n\n } else if (prefix === 0xcd) {\n // uint 16\n return uint16(bytes, it);\n\n } else if (prefix === 0xce) {\n // uint 32\n return uint32(bytes, it);\n\n } else if (prefix === 0xcf) {\n // uint 64\n return uint64(bytes, it);\n\n } else if (prefix === 0xd0) {\n // int 8\n return int8(bytes, it);\n\n } else if (prefix === 0xd1) {\n // int 16\n return int16(bytes, it);\n\n } else if (prefix === 0xd2) {\n // int 32\n return int32(bytes, it);\n\n } else if (prefix === 0xd3) {\n // int 64\n return int64(bytes, it);\n\n } else if (prefix > 0xdf) {\n // negative fixint\n return (0xff - prefix + 1) * -1\n }\n};\n\nexport function stringCheck(bytes: BufferLike, it: Iterator) {\n const prefix = bytes[it.offset];\n return (\n // fixstr\n (prefix < 0xc0 && prefix > 0xa0) ||\n // str 8\n prefix === 0xd9 ||\n // str 16\n prefix === 0xda ||\n // str 32\n prefix === 0xdb\n );\n}\n\nexport const decode = {\n utf8Read,\n int8,\n uint8,\n int16,\n uint16,\n int32,\n uint32,\n float32,\n float64,\n int64,\n uint64,\n bigint64,\n biguint64,\n boolean,\n string,\n number,\n stringCheck,\n};","import { DefinitionType, type } from \"../annotations.js\";\nimport { BufferLike, encode } from \"../encoding/encode.js\";\nimport { decode, Iterator } from \"../encoding/decode.js\";\n\nexport interface TypeDefinition {\n constructor?: any,\n encode?: (bytes: BufferLike, value: any, it: Iterator) => any;\n decode?: (bytes: BufferLike, it: Iterator) => any;\n}\n\nexport const registeredTypes: {[identifier: string] : TypeDefinition} = {};\n\nconst identifiers = new Map<any, string>();\n\nexport function registerType(identifier: string, definition: TypeDefinition) {\n if (definition.constructor) {\n identifiers.set(definition.constructor, identifier);\n registeredTypes[identifier] = definition;\n }\n\n if (definition.encode) { (encode as any)[identifier] = definition.encode; }\n if (definition.decode) { (decode as any)[identifier] = definition.decode; }\n}\n\nexport function getIdentifier(klass: any): string {\n return identifiers.get(klass);\n}\n\nexport function getType(identifier: string): TypeDefinition {\n return registeredTypes[identifier];\n}\n\nexport function defineCustomTypes<T extends {[key: string]: TypeDefinition}>(types: T) {\n for (const identifier in types) {\n registerType(identifier, types[identifier]);\n }\n\n return (t: keyof T) => type(t as DefinitionType);\n}","/**\n * Shared routing helpers for streamable collections (`StreamSchema`,\n * `MapSchema.stream()`, etc.).\n *\n * Each streamable class carries exactly one lazy slot (`_stream`) that\n * holds the 6 per-view / broadcast bookkeeping structures. Keeping the\n * slot undefined until streaming actually activates means non-streaming\n * `MapSchema` / `SetSchema` instances pay zero Map/Set allocations. One\n * declared slot → hidden-class shape stays stable across streaming and\n * non-streaming instances, so V8's ICs on `$items` / `journal` / etc.\n * stay monomorphic.\n *\n * Lives alongside `changeTree/*.ts` — another directory of module-level\n * free functions that operate on ChangeTree instances.\n */\nimport { OPERATION } from \"../encoding/spec.js\";\nimport type { Root, Streamable } from \"./Root.js\";\n\n/**\n * Thrown (from both the `FieldBuilder` chainable and the decorator's\n * `addField` auto-flag) when a user attempts to stream an ArraySchema.\n * Centralized so the two callsites emit the same diagnostic.\n */\nexport const ARRAY_STREAM_NOT_SUPPORTED =\n \"ArraySchema does not support streaming — positional ops \" +\n \"(splice / unshift / reverse) shift subsequent indexes, so holding \" +\n \"ADDs back for a later tick under `maxPerTick` would desync the \" +\n \"decoder. Use `t.stream(X)` (stable monotonic positions) or \" +\n \"`t.map(X).stream()` (stable keys) instead.\";\n\n/**\n * Per-instance bookkeeping for a streamable collection. Lazily allocated\n * by `ensureStreamState` when the collection's ChangeTree picks up the\n * `isStreamCollection` flag (or when the user touches `maxPerTick`).\n */\nexport interface StreamableState {\n /** Per-view ADD backlog: wire-indexes not yet sent to that view. */\n pendingByView: Map<number, Set<number>>;\n /** Per-view SENT set — decides whether `remove()` emits a DELETE. */\n sentByView: Map<number, Set<number>>;\n /** Broadcast-mode ADD backlog (no active views). */\n broadcastPending: Set<number>;\n /** Broadcast-mode SENT set. */\n sentBroadcast: Set<number>;\n /** Broadcast-mode DELETE queue — flushes next shared tick. */\n broadcastDeletes: Set<number>;\n /** Max ADD ops emitted per tick per view (or per shared tick). */\n maxPerTick: number;\n /**\n * Priority callback seeded from the schema declaration. Receives the\n * client's StateView and the candidate element; higher return values\n * emit first. Broadcast `encode()` ignores this and drains FIFO.\n * Instance-level override: assign to `stream.priority`.\n */\n priority?: (view: any, element: any) => number;\n}\n\nexport function createStreamableState(): StreamableState {\n return {\n pendingByView: new Map(),\n sentByView: new Map(),\n broadcastPending: new Set(),\n sentBroadcast: new Set(),\n broadcastDeletes: new Set(),\n maxPerTick: 32,\n };\n}\n\n/** Allocate `_stream` on first use (idempotent). Returns the state. */\nexport function ensureStreamState(s: Streamable): StreamableState {\n return (s._stream ??= createStreamableState());\n}\n\n/**\n * Route an ADD into the pending backlogs.\n * - No active views: push into broadcast pending (shared encode drains up\n * to `maxPerTick` per tick).\n * - With views: push into per-view pending for every currently-bound view.\n */\nexport function streamRouteAdd(s: Streamable, root: Root, index: number): void {\n // Broadcast mode (no views registered): seed broadcast pending so\n // the shared `encode()` pass drains it up to `maxPerTick` per tick.\n // View mode: do nothing — users must call `view.add(element)` per\n // entity to subscribe it for that view. This matches the StateView\n // design philosophy: per-client visibility is imperative, not\n // declarative. An encode-time predicate would be O(views × entities)\n // each tick — the whole reason StateView exists is to push that\n // bookkeeping to game-loop cadence.\n if (root.activeViews.size === 0) {\n ensureStreamState(s).broadcastPending.add(index);\n }\n}\n\n/**\n * Route a REMOVE: silent-drop if never sent, force DELETE if already sent.\n * Returns `true` iff no wire op reached any channel (caller can skip\n * follow-on work like snapshotting the deleted value).\n */\nexport function streamRouteRemove(\n s: Streamable,\n root: Root,\n refId: number,\n index: number,\n): boolean {\n // If `_stream` is still undefined, streaming never saw any add/remove —\n // nothing to unwind, and nothing was ever emitted.\n const st = s._stream;\n if (st === undefined) return true;\n\n let neverSent = false;\n\n // Broadcast side.\n if (st.broadcastPending.delete(index)) {\n neverSent = true;\n } else if (st.sentBroadcast.delete(index)) {\n st.broadcastDeletes.add(index);\n }\n\n // Per-view side.\n root.forEachActiveView((view) => {\n const pending = st.pendingByView.get(view.id);\n if (pending?.has(index)) {\n pending.delete(index);\n neverSent = true;\n return;\n }\n const sent = st.sentByView.get(view.id);\n if (sent?.has(index)) {\n sent.delete(index);\n let changes = view.changes.get(refId);\n if (changes === undefined) {\n changes = new Map();\n view.changes.set(refId, changes);\n }\n changes.set(index, OPERATION.DELETE);\n }\n });\n\n return neverSent;\n}\n\n/**\n * Queue DELETE ops for every already-sent entry on all channels and\n * reset pending. Caller is responsible for actually clearing its own\n * storage and releasing any element refs it owns.\n */\nexport function streamRouteClear(s: Streamable, root: Root, refId: number): void {\n const st = s._stream;\n if (st === undefined) return;\n\n // Broadcast: drop never-sent pending; force DELETE for sent entries.\n st.broadcastPending.clear();\n for (const index of st.sentBroadcast) st.broadcastDeletes.add(index);\n st.sentBroadcast.clear();\n\n // Per-view: clear pending; force DELETE for sent entries via\n // `view.changes` (drained first in encodeView).\n root.forEachActiveView((view) => {\n st.pendingByView.get(view.id)?.clear();\n\n const sent = st.sentByView.get(view.id);\n if (sent !== undefined && sent.size > 0) {\n let changes = view.changes.get(refId);\n if (changes === undefined) {\n changes = new Map();\n view.changes.set(refId, changes);\n }\n for (const index of sent) changes.set(index, OPERATION.DELETE);\n sent.clear();\n }\n });\n}\n\n/**\n * Push a single position into `_pendingByView[viewId]` — the building\n * block for `StateView.add(element)` when the element lives under a\n * streamable collection. Idempotent for already-pending positions.\n */\nexport function streamEnqueueForView(s: Streamable, viewId: number, index: number): void {\n const st = ensureStreamState(s);\n let pending = st.pendingByView.get(viewId);\n if (pending === undefined) {\n pending = new Set();\n st.pendingByView.set(viewId, pending);\n }\n pending.add(index);\n}\n\n/**\n * Unsubscribe a single position from a view. Returns true iff the\n * element had already been sent and a DELETE op was queued on\n * `view.changes`; false if it was only pending (silent drop) or not\n * present at all.\n */\nexport function streamDequeueForView(\n s: Streamable,\n viewId: number,\n refId: number,\n index: number,\n viewChanges: Map<number, Map<number, number>>,\n): boolean {\n const st = s._stream;\n if (st === undefined) return false;\n const pending = st.pendingByView.get(viewId);\n if (pending?.has(index)) {\n pending.delete(index);\n return false;\n }\n const sent = st.sentByView.get(viewId);\n if (sent?.has(index)) {\n sent.delete(index);\n let changes = viewChanges.get(refId);\n if (changes === undefined) {\n changes = new Map();\n viewChanges.set(refId, changes);\n }\n changes.set(index, OPERATION.DELETE);\n return true;\n }\n return false;\n}\n\n/**\n * Drop all per-view state for a disposing/GC'd StateView. Keeps memory\n * bounded in long-running rooms with client churn.\n */\nexport function streamDropView(s: Streamable, viewId: number): void {\n const st = s._stream;\n if (st === undefined) return;\n st.pendingByView.delete(viewId);\n st.sentByView.delete(viewId);\n}\n","import { Metadata } from \"../Metadata.js\";\nimport { Schema } from \"../Schema.js\";\nimport { $streamFieldIndexes, $viewFieldIndexes } from \"./symbols.js\";\n\nexport class TypeContext {\n types: { [id: number]: typeof Schema; } = {};\n schemas = new Map<typeof Schema, number>();\n\n hasFilters: boolean = false;\n parentFiltered: {[typeIdAndParentIndex: string]: boolean} = {};\n /**\n * True iff `parentFiltered` has at least one entry. Flipped on by\n * `registerFilteredByParent` and read in `checkInheritedFlags` as a\n * cheap gate to skip the string-keyed `parentFiltered[key]` lookup\n * when no class has registered filter inheritance via ancestry — the\n * common case when @view tags exist only on sibling fields, not\n * along any attachment chain.\n */\n hasParentFilteredEntries: boolean = false;\n\n /**\n * For inheritance support\n * Keeps track of which classes extends which. (parent -> children)\n */\n static inheritedTypes = new Map<typeof Schema, Set<typeof Schema>>();\n static cachedContexts = new Map<typeof Schema, TypeContext>();\n\n static register(target: typeof Schema) {\n const parent = Object.getPrototypeOf(target);\n if (parent !== Schema) {\n let inherits = TypeContext.inheritedTypes.get(parent);\n if (!inherits) {\n inherits = new Set<typeof Schema>();\n TypeContext.inheritedTypes.set(parent, inherits);\n }\n inherits.add(target);\n }\n }\n\n static cache (rootClass: typeof Schema) {\n let context = TypeContext.cachedContexts.get(rootClass);\n if (!context) {\n context = new TypeContext(rootClass);\n TypeContext.cachedContexts.set(rootClass, context);\n }\n return context;\n }\n\n constructor(rootClass?: typeof Schema) {\n if (rootClass) {\n this.discoverTypes(rootClass);\n }\n }\n\n has(schema: typeof Schema) {\n return this.schemas.has(schema);\n }\n\n get(typeid: number) {\n return this.types[typeid];\n }\n\n add(schema: typeof Schema, typeid = this.schemas.size) {\n // skip if already registered\n if (this.schemas.has(schema)) {\n return false;\n }\n\n this.types[typeid] = schema;\n\n //\n // Workaround to allow using an empty Schema (with no `@type()` fields)\n //\n if (schema[Symbol.metadata] === undefined) {\n Metadata.initialize(schema);\n }\n\n this.schemas.set(schema, typeid);\n return true;\n }\n\n getTypeId(klass: typeof Schema) {\n return this.schemas.get(klass);\n }\n\n private discoverTypes(klass: typeof Schema, parentType?: typeof Schema, parentIndex?: number, parentHasViewTag?: boolean) {\n if (parentHasViewTag) {\n this.registerFilteredByParent(klass, parentType, parentIndex);\n }\n\n // skip if already registered\n if (!this.add(klass)) { return; }\n\n // add classes inherited from this base class\n TypeContext.inheritedTypes.get(klass)?.forEach((child) => {\n this.discoverTypes(child, parentType, parentIndex, parentHasViewTag);\n });\n\n // add parent classes\n let parent: any = klass;\n while (\n (parent = Object.getPrototypeOf(parent)) &&\n parent !== Schema && // stop at root (Schema)\n parent !== Function.prototype // stop at root (non-Schema)\n ) {\n this.discoverTypes(parent);\n }\n\n const metadata: Metadata = (klass[Symbol.metadata] ??= {} as Metadata);\n\n // if any schema/field has filters, mark \"context\" as having filters.\n // Stream fields are always view-scoped — treat like @view tags for\n // filter inheritance.\n if (metadata[$viewFieldIndexes] || metadata[$streamFieldIndexes]) {\n this.hasFilters = true;\n }\n\n for (const fieldIndex in metadata) {\n const index = fieldIndex as any as number;\n\n const fieldType = metadata[index].type;\n const fieldHasViewTag = (metadata[index].tag !== undefined);\n\n if (typeof (fieldType) === \"string\") {\n continue;\n }\n\n if (typeof (fieldType) === \"function\") {\n this.discoverTypes(fieldType as typeof Schema, klass, index, parentHasViewTag || fieldHasViewTag);\n\n } else {\n const type = Object.values(fieldType)[0];\n\n // skip primitive types\n if (typeof (type) === \"string\") {\n continue;\n }\n\n this.discoverTypes(type as typeof Schema, klass, index, parentHasViewTag || fieldHasViewTag);\n }\n }\n }\n\n /**\n * Keep track of which classes have filters applied.\n * Format: `${typeid}-${parentTypeid}-${parentIndex}`\n */\n private registerFilteredByParent(schema: typeof Schema, parentType?: typeof Schema, parentIndex?: number) {\n const typeid = this.schemas.get(schema) ?? this.schemas.size;\n\n let key = `${typeid}`;\n if (parentType) { key += `-${this.schemas.get(parentType)}`; }\n\n key += `-${parentIndex}`;\n this.parentFiltered[key] = true;\n this.hasParentFilteredEntries = true;\n }\n\n debug() {\n let parentFiltered = \"\";\n\n for (const key in this.parentFiltered) {\n const keys: number[] = key.split(\"-\").map(Number);\n const fieldIndex = keys.pop();\n\n parentFiltered += `\\n\\t\\t`;\n parentFiltered += `${key}: ${keys.reverse().map((id, i) => {\n const klass = this.types[id];\n const metadata: Metadata = klass[Symbol.metadata];\n let txt = klass.name;\n if (i === 0) { txt += `[${metadata[fieldIndex].name}]`; }\n return `${txt}`;\n }).join(\" -> \")}`;\n }\n\n return `TypeContext ->\\n` +\n `\\tSchema types: ${this.schemas.size}\\n` +\n `\\thasFilters: ${this.hasFilters}\\n` +\n `\\tparentFiltered:${parentFiltered}`;\n }\n\n}\n","import { DefinitionType, getPropertyDescriptor } from \"./annotations.js\";\nimport { Schema } from \"./Schema.js\";\nimport { getType, registeredTypes, TypeDefinition } from \"./types/registry.js\";\nimport { $decoder, $descriptors, $encoder, $encoders, $fieldIndexesByViewTag, $numFields, $refTypeFieldIndexes, $staticFieldIndexes, $streamFieldIndexes, $streamPriorities, $track, $transientFieldIndexes, $unreliableFieldIndexes, $viewFieldIndexes } from \"./types/symbols.js\";\nimport { ARRAY_STREAM_NOT_SUPPORTED } from \"./encoder/streaming.js\";\nimport { encode } from \"./encoding/encode.js\";\nimport { TypeContext } from \"./types/TypeContext.js\";\n\nexport type MetadataField = {\n type: DefinitionType,\n name: string,\n index: number,\n tag?: number,\n unreliable?: boolean,\n transient?: boolean,\n deprecated?: boolean,\n owned?: boolean,\n static?: boolean,\n stream?: boolean,\n optional?: boolean,\n};\n\nexport type Metadata =\n { [$numFields]: number; } & // number of fields\n { [$viewFieldIndexes]: number[]; } & // all field indexes with \"view\" tag\n { [$fieldIndexesByViewTag]: {[tag: number]: number[]}; } & // field indexes by \"view\" tag\n { [$refTypeFieldIndexes]: number[]; } & // all field indexes containing Ref types (Schema, ArraySchema, MapSchema, etc)\n { [$unreliableFieldIndexes]: number[]; } & // all field indexes tagged with @unreliable\n { [$transientFieldIndexes]: number[]; } & // all field indexes tagged with @transient (not persisted to snapshots)\n { [$staticFieldIndexes]: number[]; } & // all field indexes tagged with @static (not tracked after assignment)\n { [$streamFieldIndexes]: number[]; } & // all field indexes holding a t.stream(...) collection\n { [$streamPriorities]: { [field: number]: (view: any, element: any) => number }; } & // per-stream-field priority callback declared at schema definition time\n { [$encoders]: Array<(bytes: Uint8Array, value: any, it: any) => void>; } & // pre-computed encoder fn per primitive field\n { [field: number]: MetadataField; } & // index => field name\n { [field: string]: number; } & // field name => field metadata\n { [$descriptors]: { [field: string]: PropertyDescriptor } } // property descriptors\n\n/**\n * Given a normalized field type (`\"number\"`, `{ map: Foo }`, `Player`,\n * etc.), split into the collection-type descriptor (`{ constructor:\n * MapSchema, ... }`) if applicable and the inner child type. Shared by\n * `@type()` decoration and `Metadata.setFields` — both need to build a\n * property accessor that knows whether the slot holds a collection.\n */\nexport function resolveFieldType(type: any): { complexTypeKlass: TypeDefinition | false, childType: any } {\n const complexTypeKlass = typeof (Object.keys(type)[0]) === \"string\" && getType(Object.keys(type)[0]);\n return {\n complexTypeKlass,\n childType: complexTypeKlass ? Object.values(type)[0] : type,\n };\n}\n\nexport function getNormalizedType(type: any): DefinitionType {\n if (Array.isArray(type)) {\n return { array: getNormalizedType(type[0]) };\n\n } else if (typeof (type['type']) !== \"undefined\") {\n return type['type'];\n\n } else if (isTSEnum(type)) {\n // Detect TS Enum type (either string or number)\n return Object.keys(type).every(key => typeof type[key] === \"string\")\n ? \"string\"\n : \"number\";\n\n } else if (typeof type === \"object\" && type !== null) {\n // Handle collection types\n const collectionType = Object.keys(type).find(k => registeredTypes[k] !== undefined);\n if (collectionType) {\n type[collectionType] = getNormalizedType(type[collectionType]);\n return type;\n }\n }\n return type;\n}\n\nfunction isTSEnum(_enum: any) {\n if (typeof _enum === 'function' && _enum[Symbol.metadata]) {\n return false;\n }\n\n const keys = Object.keys(_enum);\n const numericFields = keys.filter(k => /\\d+/.test(k));\n\n // Check for number enum (has numeric keys and reverse mapping)\n if (numericFields.length > 0 && numericFields.length === (keys.length / 2) && _enum[_enum[numericFields[0]]] == numericFields[0]) {\n return true;\n }\n\n // Check for string enum (all values are strings and keys match values)\n if (keys.length > 0 && keys.every(key => typeof _enum[key] === 'string' && _enum[key] === key)) {\n return true;\n }\n\n return false;\n}\n\nexport const Metadata = {\n\n addField(metadata: any, index: number, name: string, type: DefinitionType, descriptor?: PropertyDescriptor) {\n if (index > 64) {\n throw new Error(`Can't define field '${name}'.\\nSchema instances may only have up to 64 fields.`);\n }\n\n metadata[index] = Object.assign(\n metadata[index] || {}, // avoid overwriting previous field metadata (@owned / @deprecated)\n {\n type: getNormalizedType(type),\n index,\n name,\n }\n );\n\n // create \"descriptors\" map\n Object.defineProperty(metadata, $descriptors, {\n value: metadata[$descriptors] || {},\n enumerable: false,\n configurable: true,\n });\n\n if (descriptor) {\n // Accessor descriptor for the public field name.\n // Installed on the prototype at class-definition time.\n metadata[$descriptors][name] = descriptor;\n } else {\n // For decoder: simple writable slot, also on prototype.\n metadata[$descriptors][name] = {\n value: undefined,\n writable: true,\n enumerable: true,\n configurable: true,\n };\n }\n\n // map -1 as last field index\n Object.defineProperty(metadata, $numFields, {\n value: index,\n enumerable: false,\n configurable: true\n });\n\n // map field name => index (non enumerable)\n Object.defineProperty(metadata, name, {\n value: index,\n enumerable: false,\n configurable: true,\n });\n\n // if child Ref/complex type, add to -4\n if (typeof (metadata[index].type) !== \"string\") {\n if (metadata[$refTypeFieldIndexes] === undefined) {\n Object.defineProperty(metadata, $refTypeFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n });\n }\n metadata[$refTypeFieldIndexes].push(index);\n }\n\n // `{ stream: ... }` collections are always view-scoped (priority-\n // batched emit). Auto-flag here so both `@type({stream: ...})` and\n // the `t.stream(...)` builder route into the same filter / encoder\n // dispatch without the caller needing an extra setStream() call.\n const t = metadata[index].type;\n if (t && typeof t === \"object\" && (t as any)[\"stream\"] !== undefined) {\n // Reject the combined shorthand `@type({ array: X, stream:\n // true })` at decoration time — same diagnostic as the\n // builder chainable throws for `t.array(X).stream()`.\n if ((t as any).array !== undefined) {\n throw new Error(ARRAY_STREAM_NOT_SUPPORTED);\n }\n metadata[index].stream = true;\n if (!metadata[$streamFieldIndexes]) {\n Object.defineProperty(metadata, $streamFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n if (!metadata[$streamFieldIndexes].includes(index)) {\n metadata[$streamFieldIndexes].push(index);\n }\n // Pick up the declaration-scope priority callback if present in\n // the `@type({ stream: X, priority: fn })` shorthand.\n const priorityFn = (type as any)?.priority;\n if (typeof priorityFn === \"function\") {\n Metadata.setStreamPriority(metadata as any, name, priorityFn);\n }\n }\n },\n\n setTag(metadata: Metadata, fieldName: string, tag: number) {\n const index = metadata[fieldName];\n const field = metadata[index];\n\n // add 'tag' to the field\n field.tag = tag;\n\n if (!metadata[$viewFieldIndexes]) {\n // -2: all field indexes with \"view\" tag\n Object.defineProperty(metadata, $viewFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true\n });\n\n // -3: field indexes by \"view\" tag\n Object.defineProperty(metadata, $fieldIndexesByViewTag, {\n value: {},\n enumerable: false,\n configurable: true\n });\n }\n\n metadata[$viewFieldIndexes].push(index);\n\n if (!metadata[$fieldIndexesByViewTag][tag]) {\n metadata[$fieldIndexesByViewTag][tag] = [];\n }\n\n metadata[$fieldIndexesByViewTag][tag].push(index);\n },\n\n setUnreliable(metadata: Metadata, fieldName: string) {\n const index = metadata[fieldName];\n const fieldType = metadata[index].type;\n // `@unreliable` is only valid on primitive fields. Ref-type fields\n // (Schema sub-classes, MapSchema, ArraySchema, SetSchema,\n // CollectionSchema) carry refIds whose ADD/DELETE must arrive\n // on the reliable channel — otherwise a dropped unreliable packet\n // would leave the decoder unable to interpret subsequent packets\n // referencing the orphan refId. Primitive types are encoded as\n // strings (\"number\", \"string\", \"int32\", ...); anything else is a\n // ref. Reject at decoration time so the bug surfaces in dev, not\n // under packet loss in prod.\n if (typeof fieldType !== \"string\") {\n throw new Error(\n `@unreliable cannot be applied to ref-type field \"${fieldName}\". ` +\n `For ref-type fields, mark each primitive sub-field with @unreliable instead. ` +\n `See README \"Limitations and best practices\".`\n );\n }\n metadata[index].unreliable = true;\n\n if (!metadata[$unreliableFieldIndexes]) {\n Object.defineProperty(metadata, $unreliableFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$unreliableFieldIndexes].push(index);\n },\n\n setTransient(metadata: Metadata, fieldName: string) {\n const index = metadata[fieldName];\n metadata[index].transient = true;\n\n if (!metadata[$transientFieldIndexes]) {\n Object.defineProperty(metadata, $transientFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$transientFieldIndexes].push(index);\n },\n\n setStatic(metadata: Metadata, fieldName: string) {\n const index = metadata[fieldName];\n metadata[index].static = true;\n\n if (!metadata[$staticFieldIndexes]) {\n Object.defineProperty(metadata, $staticFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$staticFieldIndexes].push(index);\n },\n\n setStream(metadata: Metadata, fieldName: string) {\n const index = metadata[fieldName];\n metadata[index].stream = true;\n\n if (!metadata[$streamFieldIndexes]) {\n Object.defineProperty(metadata, $streamFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$streamFieldIndexes].push(index);\n },\n\n /**\n * Attach a declaration-scope priority callback to a stream field.\n * Called at schema definition time (via `t.stream(X).priority(fn)` or\n * `@type({ stream: X, priority: fn })`), looked up at stream-attach\n * time to seed the instance's `_stream.priority` slot. The callback\n * signature is `(view: StateView, element: V) => number` — only fires\n * during `encodeView`, broadcast mode emits FIFO regardless.\n */\n setStreamPriority(\n metadata: Metadata,\n fieldName: string,\n fn: (view: any, element: any) => number,\n ) {\n const index = metadata[fieldName];\n if (!metadata[$streamPriorities]) {\n Object.defineProperty(metadata, $streamPriorities, {\n value: {},\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$streamPriorities][index] = fn;\n },\n\n getStreamPriority(metadata: Metadata | undefined, index: number) {\n return metadata?.[$streamPriorities]?.[index];\n },\n\n setFields<T extends { new (...args: any[]): InstanceType<T> } = any>(target: T, fields: { [field in keyof InstanceType<T>]?: DefinitionType }) {\n // for inheritance support\n const constructor = target.prototype.constructor;\n TypeContext.register(constructor);\n\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata = parentClass && parentClass[Symbol.metadata];\n const metadata = Metadata.initialize(constructor);\n\n // Use Schema's methods if not defined in the class\n if (!constructor[$track]) { constructor[$track] = Schema[$track]; }\n if (!constructor[$encoder]) { constructor[$encoder] = Schema[$encoder]; }\n if (!constructor[$decoder]) { constructor[$decoder] = Schema[$decoder]; }\n if (!constructor.prototype.toJSON) { constructor.prototype.toJSON = Schema.prototype.toJSON; }\n\n //\n // detect index for this field, considering inheritance\n //\n let fieldIndex = metadata[$numFields] // current structure already has fields defined\n ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined\n ?? -1; // no fields defined\n\n fieldIndex++;\n\n // Pre-computed encoder function table: metadata[$encoders][fieldIndex] = encode.uint8 etc.\n if (!metadata[$encoders]) {\n Object.defineProperty(metadata, $encoders, {\n value: parentMetadata?.[$encoders] ? [...parentMetadata[$encoders]] : [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n for (const field in fields) {\n const type = getNormalizedType(fields[field]);\n\n const { complexTypeKlass, childType } = resolveFieldType(type);\n\n Metadata.addField(\n metadata,\n fieldIndex,\n field,\n type,\n getPropertyDescriptor(field, fieldIndex, childType, complexTypeKlass)\n );\n\n // Install accessor descriptor on the prototype (once per class field).\n if (metadata[$descriptors][field]) {\n Object.defineProperty(target.prototype, field, metadata[$descriptors][field]);\n }\n\n // Pre-compute encoder function for primitive types.\n if (typeof type === \"string\") {\n metadata[$encoders][fieldIndex] = (encode as any)[type];\n }\n\n fieldIndex++;\n }\n\n return target;\n },\n\n isDeprecated(metadata: any, field: string) {\n return metadata[field].deprecated === true;\n },\n\n initialize(constructor: any) {\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata: Metadata = parentClass[Symbol.metadata];\n\n let metadata: Metadata = constructor[Symbol.metadata] ?? Object.create(null);\n\n // make sure inherited classes have their own metadata object.\n if (parentClass !== Schema && metadata === parentMetadata) {\n metadata = Object.create(null);\n\n if (parentMetadata) {\n //\n // assign parent metadata to current\n //\n Object.setPrototypeOf(metadata, parentMetadata);\n\n // $numFields\n Object.defineProperty(metadata, $numFields, {\n value: parentMetadata[$numFields],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n\n // $viewFieldIndexes / $fieldIndexesByViewTag\n if (parentMetadata[$viewFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $viewFieldIndexes, {\n value: [...parentMetadata[$viewFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n Object.defineProperty(metadata, $fieldIndexesByViewTag, {\n value: { ...parentMetadata[$fieldIndexesByViewTag] },\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $refTypeFieldIndexes\n if (parentMetadata[$refTypeFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $refTypeFieldIndexes, {\n value: [...parentMetadata[$refTypeFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $unreliableFieldIndexes\n if (parentMetadata[$unreliableFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $unreliableFieldIndexes, {\n value: [...parentMetadata[$unreliableFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $transientFieldIndexes\n if (parentMetadata[$transientFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $transientFieldIndexes, {\n value: [...parentMetadata[$transientFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $staticFieldIndexes\n if (parentMetadata[$staticFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $staticFieldIndexes, {\n value: [...parentMetadata[$staticFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $streamFieldIndexes\n if (parentMetadata[$streamFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $streamFieldIndexes, {\n value: [...parentMetadata[$streamFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $descriptors\n Object.defineProperty(metadata, $descriptors, {\n value: { ...parentMetadata[$descriptors] },\n enumerable: false,\n configurable: true,\n writable: true,\n });\n\n // $encoders\n if (parentMetadata[$encoders] !== undefined) {\n Object.defineProperty(metadata, $encoders, {\n value: [...parentMetadata[$encoders]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n }\n }\n\n Object.defineProperty(constructor, Symbol.metadata, {\n value: metadata,\n writable: false,\n configurable: true\n });\n\n return metadata;\n },\n\n isValidInstance(klass: any) {\n return (\n klass.constructor[Symbol.metadata] &&\n Object.prototype.hasOwnProperty.call(klass.constructor[Symbol.metadata], $numFields) as boolean\n );\n },\n\n getFields(klass: any) {\n const metadata: Metadata = klass[Symbol.metadata];\n const fields: any = {};\n for (let i = 0; i <= metadata[$numFields]; i++) {\n fields[metadata[i].name] = metadata[i].type;\n }\n return fields;\n },\n\n hasViewTagAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$viewFieldIndexes]?.includes(index);\n },\n\n hasUnreliableAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$unreliableFieldIndexes]?.includes(index);\n },\n\n hasTransientAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$transientFieldIndexes]?.includes(index);\n },\n\n hasStaticAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$staticFieldIndexes]?.includes(index);\n },\n\n hasStreamAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$streamFieldIndexes]?.includes(index);\n }\n}","import { OPERATION } from \"../encoding/spec.js\";\n\n/**\n * ChangeRecorder — \"what changed this tick\" for a single ref.\n *\n * This file holds the two standalone recorder classes used for the\n * unreliable channel (lazy, opt-in). The reliable channel is inlined on\n * `ChangeTree` for perf; see `ChangeTree._isSchema` dispatch.\n *\n * Interface design (ISP):\n * - {@link ChangeRecorder}: common ops, implemented by both Schema and\n * Collection recorders.\n * - {@link ICollectionChangeRecorder}: extends with `recordPure` +\n * `shift` — collection-only. Schema recorders do NOT carry these.\n *\n * Per-field filter/visibility is decided at encode time, not record time.\n * Full-sync output is derived structurally via `ChangeTree.forEachLive`.\n */\nexport interface ChangeRecorder {\n /**\n * Record a change at the given index. Handles op merge\n * (DELETE followed by ADD becomes DELETE_AND_ADD).\n */\n record(index: number, op: OPERATION): void;\n\n /** Record a DELETE at the given index. */\n recordDelete(index: number, op: OPERATION): void;\n\n /**\n * Record an operation without op-merge semantics. Used by ArraySchema\n * positional writes where DELETE→ADD merge is undesirable.\n */\n recordRaw(index: number, op: OPERATION): void;\n\n /** Current operation at index, or undefined if none. */\n operationAt(index: number): OPERATION | undefined;\n\n /** Overwrite the operation at index. */\n setOperationAt(index: number, op: OPERATION): void;\n\n /**\n * Iterate (index, op) pairs in record order.\n * Pure operations emit with index = -op (wire convention).\n */\n forEach(cb: (index: number, op: OPERATION) => void): void;\n\n /** Closure-free forEach variant for the hot encode path. */\n forEachWithCtx<T>(ctx: T, cb: (ctx: T, index: number, op: OPERATION) => void): void;\n\n size(): number;\n has(): boolean;\n reset(): void;\n}\n\n/**\n * Extended recorder for collection types — adds `recordPure` (CLEAR /\n * REVERSE) and `shift` (ArraySchema.unshift support).\n */\nexport interface ICollectionChangeRecorder extends ChangeRecorder {\n /**\n * Record a pure operation (CLEAR / REVERSE) with no index.\n * Interleaves with indexed ops at record order.\n */\n recordPure(op: OPERATION): void;\n\n /** Shift current-tick dirty indexes by `shiftIndex`. */\n shift(shiftIndex: number): void;\n}\n\n// Module-scope adapter: lets `forEach(cb)` delegate to `forEachWithCtx`\n// by passing the user's callback as ctx. No per-call allocation.\nconst _invokeNoCtx = (\n cb: (index: number, op: OPERATION) => void,\n index: number,\n op: OPERATION,\n) => cb(index, op);\n\n// ──────────────────────────────────────────────────────────────────────────\n// SchemaChangeRecorder — bitmask + Uint8Array, for Schema types (≤64 fields)\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Schema field operations are limited to ADD(128), DELETE(64), and\n * DELETE_AND_ADD(192). REPLACE(0) is collection-only, so `ops[i] === 0`\n * is a safe \"no operation\" sentinel.\n */\nexport class SchemaChangeRecorder implements ChangeRecorder {\n // Bitmask storage for fields 0-31 (low) and 32-63 (high).\n private dirtyLow = 0;\n private dirtyHigh = 0;\n\n // ops[fieldIndex] = OPERATION value. Pre-sized to numFields+1.\n private readonly ops: Uint8Array;\n\n constructor(numFields: number) {\n this.ops = new Uint8Array(Math.max(numFields + 1, 1));\n }\n\n record(index: number, op: OPERATION): void {\n const prev = this.ops[index];\n if (prev === 0) this.ops[index] = op;\n else if (prev === OPERATION.DELETE) this.ops[index] = OPERATION.DELETE_AND_ADD;\n // Promote ADD → DELETE_AND_ADD when a ref is replaced in the same\n // tick. See `ChangeTree.record` for rationale — same logic, this\n // interface implementation is kept in sync.\n else if (prev === OPERATION.ADD && op === OPERATION.DELETE_AND_ADD) {\n this.ops[index] = OPERATION.DELETE_AND_ADD;\n }\n // else preserve existing ADD / DELETE_AND_ADD.\n\n if (index < 32) this.dirtyLow |= (1 << index);\n else this.dirtyHigh |= (1 << (index - 32));\n }\n\n recordDelete(index: number, op: OPERATION): void {\n this.ops[index] = op;\n if (index < 32) this.dirtyLow |= (1 << index);\n else this.dirtyHigh |= (1 << (index - 32));\n }\n\n recordRaw(index: number, op: OPERATION): void {\n this.record(index, op);\n }\n\n operationAt(index: number): OPERATION | undefined {\n const op = this.ops[index];\n return op === 0 ? undefined : op;\n }\n\n setOperationAt(index: number, op: OPERATION): void {\n this.ops[index] = op;\n }\n\n forEach(cb: (index: number, op: OPERATION) => void): void {\n this.forEachWithCtx(cb, _invokeNoCtx);\n }\n\n forEachWithCtx<T>(ctx: T, cb: (ctx: T, index: number, op: OPERATION) => void): void {\n let low = this.dirtyLow;\n let high = this.dirtyHigh;\n const ops = this.ops;\n // Iterate set bits via clz32 (CPU-level bit scan).\n while (low !== 0) {\n const bit = low & -low;\n const fieldIndex = 31 - Math.clz32(bit);\n low ^= bit;\n cb(ctx, fieldIndex, ops[fieldIndex]);\n }\n while (high !== 0) {\n const bit = high & -high;\n const fieldIndex = 31 - Math.clz32(bit) + 32;\n high ^= bit;\n cb(ctx, fieldIndex, ops[fieldIndex]);\n }\n }\n\n size(): number {\n return popcount32(this.dirtyLow) + popcount32(this.dirtyHigh);\n }\n\n has(): boolean {\n return (this.dirtyLow | this.dirtyHigh) !== 0;\n }\n\n reset(): void {\n this.dirtyLow = 0;\n this.dirtyHigh = 0;\n this.ops.fill(0);\n }\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// CollectionChangeRecorder — Map-based, for collections with sparse indexes\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Collection items have sparse indexes (e.g. 0, 7, 1024) exceeding the\n * 64-field cap Schema imposes. Map-based storage handles arbitrary\n * indexes; the value at each entry is the OPERATION.\n *\n * Pure operations (CLEAR, REVERSE) live in `pureOps` as `[position, op]`\n * entries where `position` is `dirty.size` at record time — preserves\n * insertion-order interleaving with indexed ops (e.g. CLEAR must emit\n * BEFORE subsequent ADDs).\n */\nexport class CollectionChangeRecorder implements ICollectionChangeRecorder {\n private dirty: Map<number, OPERATION> = new Map();\n private pureOps: Array<[number, OPERATION]> = [];\n\n record(index: number, op: OPERATION): void {\n const prev = this.dirty.get(index);\n if (prev === undefined) this.dirty.set(index, op);\n else if (prev === OPERATION.DELETE) this.dirty.set(index, OPERATION.DELETE_AND_ADD);\n // Promote ADD → DELETE_AND_ADD for same-tick replacement of a ref\n // (see `SchemaChangeRecorder.record` for rationale).\n else if (prev === OPERATION.ADD && op === OPERATION.DELETE_AND_ADD) {\n this.dirty.set(index, OPERATION.DELETE_AND_ADD);\n }\n // else preserve existing op.\n }\n\n recordDelete(index: number, op: OPERATION): void {\n this.dirty.set(index, op);\n }\n\n recordRaw(index: number, op: OPERATION): void {\n this.dirty.set(index, op);\n }\n\n recordPure(op: OPERATION): void {\n this.pureOps.push([this.dirty.size, op]);\n }\n\n operationAt(index: number): OPERATION | undefined {\n return this.dirty.get(index);\n }\n\n setOperationAt(index: number, op: OPERATION): void {\n if (this.dirty.has(index)) this.dirty.set(index, op);\n }\n\n forEach(cb: (index: number, op: OPERATION) => void): void {\n this.forEachWithCtx(cb, _invokeNoCtx);\n }\n\n forEachWithCtx<T>(ctx: T, cb: (ctx: T, index: number, op: OPERATION) => void): void {\n const pure = this.pureOps;\n if (pure.length > 0) {\n let pureIdx = 0, i = 0;\n for (const [index, op] of this.dirty) {\n while (pureIdx < pure.length && pure[pureIdx][0] <= i) {\n const pureOp = pure[pureIdx++][1];\n cb(ctx, -pureOp, pureOp);\n }\n cb(ctx, index, op);\n i++;\n }\n while (pureIdx < pure.length) {\n const pureOp = pure[pureIdx++][1];\n cb(ctx, -pureOp, pureOp);\n }\n } else {\n for (const [index, op] of this.dirty) cb(ctx, index, op);\n }\n }\n\n size(): number {\n return this.dirty.size + this.pureOps.length;\n }\n\n has(): boolean {\n return this.dirty.size > 0 || this.pureOps.length > 0;\n }\n\n reset(): void {\n this.dirty.clear();\n this.pureOps.length = 0;\n }\n\n shift(shiftIndex: number): void {\n const dst = new Map<number, OPERATION>();\n for (const [idx, val] of this.dirty) dst.set(idx + shiftIndex, val);\n this.dirty = dst;\n }\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// Helpers\n// ──────────────────────────────────────────────────────────────────────────\n\n/** 32-bit Hamming weight (popcount). */\nexport function popcount32(n: number): number {\n n = n - ((n >>> 1) & 0x55555555);\n n = (n & 0x33333333) + ((n >>> 2) & 0x33333333);\n return (((n + (n >>> 4)) & 0x0f0f0f0f) * 0x01010101) >>> 24;\n}\n","/**\n * EncodeDescriptor — per-class snapshot of the values the encode loop needs\n * from a Ref's constructor. Lazily computed once per class (the first time\n * a tree of that class is constructed) and stashed on the constructor via\n * `$encodeDescriptor`. Each ChangeTree caches a reference to its class's\n * descriptor at construction time, so the encode loop reads a single\n * property from the tree instead of chasing 5 separate per-tree lookups:\n *\n * ctor[$encoder]\n * ctor[$filter]\n * ctor[Symbol.metadata]\n * Metadata.isValidInstance(ref)\n * getFilterBitmask(metadata)\n *\n * Lives in its own file to break the Encoder.ts ↔ ChangeTree.ts import\n * cycle (ChangeTree caches descriptors at construction; Encoder reads them\n * during encode).\n */\nimport { Metadata } from \"../Metadata.js\";\nimport { $encodeDescriptor, $encoder, $encoders, $filter, $filterBitmask, $numFields, $staticFieldIndexes, $streamFieldIndexes, $unreliableFieldIndexes, $viewFieldIndexes } from \"../types/symbols.js\";\nimport type { StateView } from \"./StateView.js\";\nimport type { EncodeOperation } from \"./EncodeOperation.js\";\n\nexport interface EncodeDescriptor {\n encoder: EncodeOperation;\n filter: ((ref: any, index: number, view?: StateView) => boolean) | undefined;\n metadata: any;\n isSchema: boolean;\n /**\n * Bit i set iff field i has a @view tag. 0 for collection trees.\n * Lets `encodeChangeCb` do a single bitwise op instead of a\n * per-field metadata[i]?.tag chase.\n */\n filterBitmask: number;\n\n /**\n * Class-level \"any field has the flag\" booleans + per-field bitmasks.\n * Hot path: per-mutation `_routeAndRecord` calls `isFieldStatic` and\n * `isFieldUnreliable`. The common case is \"no static/unreliable fields\n * anywhere on this class\" (booleans short-circuit before the symbol-keyed\n * metadata lookup); the secondary common case is \"this class has some\n * such fields and we need to know if THIS field is one\" — the bitmask\n * answers in one bitwise op instead of an `Array.includes` linear scan.\n *\n * Bitmasks cover fields 0–31 only (matches the `filterBitmask` limitation).\n * Fields ≥32 fall back to `Metadata.hasXAtIndex` — same handling as the\n * filter-bitmask path.\n */\n hasAnyStatic: boolean;\n hasAnyUnreliable: boolean;\n hasAnyStream: boolean;\n /**\n * Class-level \"any field carries a `@view` tag\" — covers fields both\n * within and beyond index 31 (unlike `filterBitmask`, which only\n * captures the low 32). Read by `ChangeTree.hasFilteredFields` to\n * decide whether a parent tree must be included in a view's bootstrap.\n */\n hasAnyView: boolean;\n staticBitmask: number;\n unreliableBitmask: number;\n /**\n * Bit i set iff field i holds a `t.stream(...)` collection. Hot encode\n * path reads this to dispatch stream fields into the priority/budget\n * gate instead of the normal recorder iteration.\n */\n streamBitmask: number;\n\n /**\n * Per-field parallel arrays — Schemas only (empty arrays for\n * collections). Replaces hot-path `metadata[i].name` / `metadata[i].type`\n * / `metadata[i].tag` chains with direct array indexing on a small\n * fixed-shape object.\n *\n * Sparse where natural: `tags[i]` is undefined unless field i carries\n * a @view tag; readers should null-check before comparing.\n *\n * `encoders[i]` mirrors `metadata[$encoders]` — the pre-computed\n * encoder fn for primitive-typed fields. Cached here so encode loops\n * skip a `metadata[$encoders]?.[i]` symbol-chain per emission.\n */\n names: string[];\n types: any[];\n tags: (number | undefined)[];\n encoders: (((bytes: Uint8Array, value: any, it: any) => void) | undefined)[];\n}\n\nfunction computeFilterBitmask(metadata: any): number {\n if (metadata === undefined) return 0;\n let bm: number | undefined = metadata[$filterBitmask];\n if (bm !== undefined) return bm;\n bm = 0;\n const tagged = metadata[$viewFieldIndexes];\n if (tagged !== undefined) {\n for (let i = 0, len = tagged.length; i < len; i++) bm |= (1 << tagged[i]);\n }\n // Non-enumerable so `for (const k in metadata)` iteration in TypeContext\n // and elsewhere doesn't mistake this cache for a real field index.\n Object.defineProperty(metadata, $filterBitmask, {\n value: bm,\n enumerable: false,\n writable: true,\n configurable: true,\n });\n return bm;\n}\n\n/**\n * Bitmask of field indexes 0–31 in `indexes`. For fields ≥32 callers must\n * fall back to the array lookup (same as `filterBitmask`).\n */\nfunction indexesToBitmask(indexes: number[] | undefined): number {\n if (indexes === undefined) return 0;\n let bm = 0;\n for (let i = 0, len = indexes.length; i < len; i++) {\n const idx = indexes[i];\n if (idx < 32) bm |= (1 << idx);\n }\n return bm;\n}\n\n/**\n * Build the per-field parallel arrays once at descriptor construction.\n * For collection trees (no metadata or no $numFields) this returns empty\n * arrays — readers branch on `isSchema` before touching them anyway.\n */\nfunction buildFieldArrays(metadata: any): {\n names: string[];\n types: any[];\n tags: (number | undefined)[];\n encoders: (((bytes: Uint8Array, value: any, it: any) => void) | undefined)[];\n} {\n const names: string[] = [];\n const types: any[] = [];\n const tags: (number | undefined)[] = [];\n const encoders: (((bytes: Uint8Array, value: any, it: any) => void) | undefined)[] = [];\n\n if (metadata === undefined) return { names, types, tags, encoders };\n\n const numFields = metadata[$numFields];\n if (numFields === undefined) return { names, types, tags, encoders };\n\n const srcEncoders = metadata[$encoders];\n for (let i = 0; i <= numFields; i++) {\n const field = metadata[i];\n if (field === undefined) {\n // Holes are normal — inheritance can leave gaps. Fill with\n // undefined so indexing is valid.\n names[i] = undefined!;\n types[i] = undefined;\n tags[i] = undefined;\n encoders[i] = undefined;\n continue;\n }\n names[i] = field.name;\n types[i] = field.type;\n tags[i] = field.tag;\n encoders[i] = srcEncoders?.[i];\n }\n return { names, types, tags, encoders };\n}\n\nexport function getEncodeDescriptor(ref: any): EncodeDescriptor {\n const ctor = ref.constructor;\n\n // Use hasOwn — Object.defineProperty on a parent class would otherwise\n // be inherited by every subclass via the prototype chain, and a\n // subclass's instance would read the parent's metadata/encoder. See\n // \"should encode the correct class inside an array\" for the regression.\n if (Object.prototype.hasOwnProperty.call(ctor, $encodeDescriptor)) {\n return ctor[$encodeDescriptor];\n }\n\n const metadata = ctor[Symbol.metadata];\n const isSchema = Metadata.isValidInstance(ref);\n const hasAnyView = (metadata?.[$viewFieldIndexes]?.length ?? 0) > 0;\n const arrays = buildFieldArrays(metadata);\n // For Schema classes with no `@view`-tagged fields, the per-field\n // `ctx.filter(ref, index, view)` call on the encode hot path is a\n // provable no-op: `Schema[$filter]` does `metadata[index]?.tag === undefined`\n // which is always true when no field carries a tag. Setting filter to\n // `undefined` here lets the `ctx.filter !== undefined && …` short-circuit\n // in `encodeChangeCb` skip the call entirely — the metadata lookup +\n // comparison adds up across 10k+ field encodes/tick.\n // Collection classes keep their filter — their `[$filter]` does\n // instance-level `ref[$childType]` / view-visibility checks that can't\n // be decided class-wide.\n const filter = (isSchema && !hasAnyView) ? undefined : ctor[$filter];\n const desc: EncodeDescriptor = {\n encoder: ctor[$encoder],\n filter,\n metadata,\n isSchema,\n filterBitmask: isSchema ? computeFilterBitmask(metadata) : 0,\n hasAnyStatic: (metadata?.[$staticFieldIndexes]?.length ?? 0) > 0,\n hasAnyUnreliable: (metadata?.[$unreliableFieldIndexes]?.length ?? 0) > 0,\n hasAnyStream: (metadata?.[$streamFieldIndexes]?.length ?? 0) > 0,\n hasAnyView,\n staticBitmask: indexesToBitmask(metadata?.[$staticFieldIndexes]),\n unreliableBitmask: indexesToBitmask(metadata?.[$unreliableFieldIndexes]),\n streamBitmask: indexesToBitmask(metadata?.[$streamFieldIndexes]),\n names: arrays.names,\n types: arrays.types,\n tags: arrays.tags,\n encoders: arrays.encoders,\n };\n Object.defineProperty(ctor, $encodeDescriptor, {\n value: desc,\n enumerable: false,\n writable: true,\n configurable: true,\n });\n return desc;\n}\n","/**\n * Parent-chain helpers for ChangeTree. A tree can have multiple parents\n * (rare — instance sharing between Schema/Collection containers). The\n * primary parent is stored inline on the tree (`parentRef` / `_parentIndex`);\n * additional parents live in the `extraParents` linked list.\n */\nimport { $changes } from \"../../types/symbols.js\";\nimport type { ChangeTree, ParentChain, Ref } from \"../ChangeTree.js\";\n\n/**\n * Add a parent to the chain. If `parent` already exists anywhere in the\n * chain, update the primary parent's index instead (matches legacy\n * behavior).\n */\nexport function addParent(tree: ChangeTree, parent: Ref, index: number): void {\n // Check if this parent already exists anywhere in the chain\n if (tree.parentRef) {\n if (tree.parentRef[$changes] === parent[$changes]) {\n // Primary parent matches — update index\n tree._parentIndex = index;\n return;\n }\n\n // Check extra parents for duplicate\n if (hasParent(tree, (p, _) => p[$changes] === parent[$changes])) {\n // Match old behavior: update primary parent's index\n tree._parentIndex = index;\n return;\n }\n }\n\n if (tree.parentRef === undefined) {\n // First parent — store inline\n tree.parentRef = parent;\n tree._parentIndex = index;\n } else {\n // Push current inline parent to extraParents, set new as primary\n tree.extraParents = {\n ref: tree.parentRef,\n index: tree._parentIndex,\n next: tree.extraParents\n };\n tree.parentRef = parent;\n tree._parentIndex = index;\n }\n}\n\n/**\n * Remove a parent from the chain.\n * @returns true if parent was found and removed (Root.remove relies on this).\n */\nexport function removeParent(tree: ChangeTree, parent: Ref): boolean {\n //\n // FIXME: it is required to check against `$changes` here because\n // ArraySchema is instance of Proxy\n //\n if (tree.parentRef && tree.parentRef[$changes] === parent[$changes]) {\n // Removing inline parent — promote first extra parent if exists\n if (tree.extraParents) {\n tree.parentRef = tree.extraParents.ref;\n tree._parentIndex = tree.extraParents.index;\n tree.extraParents = tree.extraParents.next;\n } else {\n tree.parentRef = undefined;\n tree._parentIndex = undefined;\n }\n return true;\n }\n\n // Search extra parents\n let current = tree.extraParents;\n let previous = null;\n while (current) {\n if (current.ref[$changes] === parent[$changes]) {\n if (previous) {\n previous.next = current.next;\n } else {\n tree.extraParents = current.next;\n }\n return true;\n }\n previous = current;\n current = current.next;\n }\n return tree.parentRef === undefined;\n}\n\n/**\n * Find the first parent in the chain matching `predicate`.\n */\nexport function findParent(\n tree: ChangeTree,\n predicate: (parent: Ref, index: number) => boolean,\n): ParentChain | undefined {\n // Check inline parent first\n if (tree.parentRef && predicate(tree.parentRef, tree._parentIndex)) {\n return { ref: tree.parentRef, index: tree._parentIndex };\n }\n\n let current = tree.extraParents;\n while (current) {\n if (predicate(current.ref, current.index)) {\n return current;\n }\n current = current.next;\n }\n return undefined;\n}\n\nexport function hasParent(\n tree: ChangeTree,\n predicate: (parent: Ref, index: number) => boolean,\n): boolean {\n return findParent(tree, predicate) !== undefined;\n}\n\n/**\n * Return all parents as an array (debug/test helper).\n */\nexport function getAllParents(tree: ChangeTree): Array<{ ref: Ref, index: number }> {\n const parents: Array<{ ref: Ref, index: number }> = [];\n if (tree.parentRef) {\n parents.push({ ref: tree.parentRef, index: tree._parentIndex });\n }\n let current = tree.extraParents;\n while (current) {\n parents.push({ ref: current.ref, index: current.index });\n current = current.next;\n }\n return parents;\n}\n","/**\n * Walk all currently-populated non-transient indexes on a tree, emitting\n * each index once. Used by Root.add (re-stage), Encoder.encodeAll, and\n * StateView.add to derive full-sync output from the live structure.\n *\n * Transient fields (`@transient`) are skipped — they're delivered only on\n * tick patches and not persisted to snapshots. Collections whose parent\n * field is @transient inherit the skip (`tree.isTransient`).\n */\nimport { $childType, $numFields, $transientFieldIndexes } from \"../../types/symbols.js\";\nimport type { ChangeTree } from \"../ChangeTree.js\";\n\n// Adapter that lets `forEachLive(cb)` delegate to `forEachLiveWithCtx(cb, _invokeNoCtx)` —\n// keeps the no-ctx path closure-free and shares one walker implementation.\nconst _invokeNoCtx = (cb: (index: number) => void, index: number) => cb(index);\n\nexport function forEachLive(tree: ChangeTree, callback: (index: number) => void): void {\n forEachLiveWithCtx(tree, callback, _invokeNoCtx);\n}\n\nexport function forEachLiveWithCtx<C>(\n tree: ChangeTree,\n ctx: C,\n cb: (ctx: C, index: number) => void,\n): void {\n // `refTarget` skips the ArraySchema Proxy on every `.items` / `.$items`\n // / `[$childType]` read below. Same reference as `ref` for non-proxied\n // types. See `ChangeTree.refTarget` doc.\n const ref = tree.refTarget as any;\n\n if (ref[$childType] !== undefined) {\n // Collection inheriting @transient from parent field: skip entirely.\n if (tree.isTransient) return;\n\n // Collection types: dispatch by shape.\n if (Array.isArray(ref.items)) {\n // ArraySchema\n const items = ref.items as any[];\n for (let i = 0, len = items.length; i < len; i++) {\n if (items[i] !== undefined) cb(ctx, i);\n }\n } else if (ref.journal !== undefined) {\n // MapSchema\n for (const [index, key] of ref.journal.keyByIndex as Map<number, any>) {\n if (ref.$items.has(key)) cb(ctx, index);\n }\n } else if (ref.$items !== undefined) {\n // SetSchema / CollectionSchema (key === wire index)\n for (const index of (ref.$items as Map<number, any>).keys()) {\n cb(ctx, index);\n }\n }\n } else {\n // Schema: walk declared fields. `null` is treated as absent —\n // the setter records a DELETE when a field is set to null or\n // undefined, so it should not appear in full-sync output.\n //\n // Read names from the per-class descriptor's parallel array —\n // saves the `metadata[i]` (per-field obj) + `.name` chain on\n // every iteration of the full-sync DFS.\n const metadata = tree.metadata;\n if (!metadata) return;\n const numFields = (metadata[$numFields] ?? -1) as number;\n const transientIndexes = metadata[$transientFieldIndexes];\n const names = tree.encDescriptor.names;\n for (let i = 0; i <= numFields; i++) {\n const name = names[i];\n if (name === undefined) continue;\n if (transientIndexes && transientIndexes.includes(i)) continue;\n const value = ref[name];\n if (value !== undefined && value !== null) cb(ctx, i);\n }\n }\n}\n","/**\n * Filter / unreliable / transient / static inheritance helpers for\n * ChangeTree. Called by setRoot / setParent to derive child flags from\n * the parent field's annotation + the parent tree's own state.\n */\nimport { Metadata } from \"../../Metadata.js\";\nimport {\n $changes, $childType,\n $staticFieldIndexes, $streamFieldIndexes,\n $transientFieldIndexes, $viewFieldIndexes,\n // $unreliableFieldIndexes — tree-level unreliable currently disabled\n // (see INHERITABLE_FLAGS comment in ChangeTree.ts). Per-field unreliable\n // routing on primitive fields still uses it via `isFieldUnreliable()`.\n} from \"../../types/symbols.js\";\nimport type { Schema } from \"../../Schema.js\";\nimport {\n INHERITABLE_FLAGS, IS_STATIC, IS_TRANSIENT,\n // IS_UNRELIABLE — tree-level unreliable currently disabled; see\n // INHERITABLE_FLAGS comment in ChangeTree.ts.\n type ChangeTree, type Ref,\n} from \"../ChangeTree.js\";\nimport type { ICollectionChangeRecorder } from \"../ChangeRecorder.js\";\nimport type { Streamable } from \"../Root.js\";\nimport { ensureStreamState } from \"../streaming.js\";\n\n/**\n * Reconcile queue membership + inherited flags for a tree that just had\n * its root/parent assigned. See `_checkInheritedFlags` for the flag\n * inheritance logic.\n */\nexport function checkIsFiltered(\n tree: ChangeTree,\n parent: Ref,\n parentIndex: number,\n _isNewChangeTree: boolean,\n): void {\n checkInheritedFlags(tree, parent, parentIndex);\n\n // Static trees never track per-tick changes — skip the queue entirely.\n // Full-sync reaches them via structural walk (forEachChild).\n if (tree.isStatic) return;\n\n // Mutations that happened before setRoot (e.g. class-field initializers)\n // recorded into the appropriate recorder but couldn't enqueue yet.\n // Reconcile both queues now.\n if (tree.has()) {\n tree.root?.enqueueChangeTree(tree);\n }\n if (tree.unreliableRecorder?.has()) {\n tree.root?.enqueueUnreliable(tree);\n }\n // Fresh tree with nothing recorded: still enqueue into its primary\n // queue so the tree is reachable for its first mutation cycle.\n //\n // Tree-level unreliable is disabled (see INHERITABLE_FLAGS) so the\n // unreliable branch is unreachable today. Kept as a comment for\n // re-enablement.\n if (!tree.has() && !(tree.unreliableRecorder?.has())) {\n // if (tree.isUnreliable) {\n // tree.root?.enqueueUnreliable(tree);\n // } else {\n tree.root?.enqueueChangeTree(tree);\n // }\n }\n}\n\n/**\n * Inherit filter / unreliable / transient / static classification from\n * the parent field's annotation. Collections (MapSchema / ArraySchema /\n * etc.) inherit these from the Schema field that holds them.\n *\n * The common case — fresh tree attached to a parent field that carries\n * none of the inheritable annotations — produces no flag change, no\n * queue update, and no `parentFiltered` hit. Two small structural\n * choices keep that case cheap without any precomputed descriptor\n * bitmask:\n *\n * 1) Flag inheritance is a single bitwise OR onto `tree.flags`. The\n * three per-annotation reads pack into `fieldBits`, the parent's\n * inherited bits come from `parentChangeTree.flags` directly; one\n * read-modify-write replaces three getter/setter cycles, and the\n * bit diff against `beforeFlags` gives us the \"just became static /\n * unreliable\" signal for the side-effect branches.\n *\n * 2) The `parentFiltered` string-key lookup is gated on\n * `types.hasParentFilteredEntries`, which is only flipped true when\n * `registerFilteredByParent` actually records an entry — i.e. when\n * some @view-tagged field reaches this (child, parent, index)\n * triple through the ancestry walk. Schemas with @view tags only on\n * sibling fields (not along any attachment chain) skip the string\n * concat + hash lookup entirely.\n */\nexport function checkInheritedFlags(tree: ChangeTree, parent: Ref, parentIndex: number): void {\n if (!parent) { return; }\n\n // Walk up a collection level so `parent` lands on the Schema that\n // owns the field at `parentIndex`. Field annotations live on Schema\n // metadata; collections have none.\n let parentChangeTree: ChangeTree = parent[$changes];\n const parentIsCollection = !Metadata.isValidInstance(parent);\n if (parentIsCollection) {\n parent = parentChangeTree.parent;\n parentIndex = parentChangeTree.parentIndex;\n }\n\n const parentMetadata: any = (parent as any)?.constructor?.[Symbol.metadata];\n\n // Flag inheritance — pack the transient/static annotation checks into\n // flag bits alongside the parent's own transitive flags, then OR onto\n // `tree.flags` in one write. The bit diff tells us which flag just\n // went from 0→1, cheaper than the prior `becameX = !tree.isX && (...)`\n // pairs. IS_UNRELIABLE is omitted from both sides — tree-level\n // unreliable is disabled (see INHERITABLE_FLAGS in ChangeTree.ts).\n const fieldBits =\n (parentMetadata?.[$transientFieldIndexes]?.includes(parentIndex) ? IS_TRANSIENT : 0)\n | (parentMetadata?.[$staticFieldIndexes]?.includes(parentIndex) ? IS_STATIC : 0);\n const inheritedBits = (parentChangeTree.flags & INHERITABLE_FLAGS) | fieldBits;\n const beforeFlags = tree.flags;\n tree.flags = beforeFlags | inheritedBits;\n const gainedBits = inheritedBits & ~beforeFlags;\n\n // If this tree just became static via inheritance, discard any entries\n // that may have been recorded before the parent was assigned (e.g.\n // `new Config().assign({...})` populates the recorder before the\n // Config instance is attached). Static trees ship state via structural\n // walk only; per-tick dirty entries would leak post-first-sync.\n if (gainedBits & IS_STATIC) {\n tree.reset();\n tree.unreliableRecorder?.reset();\n }\n // Tree-level unreliable promotion is disabled — no tree can gain\n // IS_UNRELIABLE via inheritance under the current decoration-time\n // rejection (`Metadata.setUnreliable` on ref-type fields throws). The\n // promotion block used to migrate reliable-recorder entries populated\n // before attach (`new Item().assign({...})` then push into an\n // unreliable collection) over to the unreliable recorder. Kept here\n // as a comment for re-enablement if a safe tree-level unreliable\n // semantics is designed later.\n //\n // else if ((gainedBits & IS_UNRELIABLE) && tree.has()) {\n // const dst = tree.ensureUnreliableRecorder() as ICollectionChangeRecorder;\n // tree.forEach((index, op) => {\n // if (index < 0) dst.recordPure(op);\n // else dst.record(index, op);\n // });\n // tree.reset();\n // }\n\n // Filter inheritance — only when the type context has any @view or\n // @stream fields registered anywhere.\n const types = tree.root?.types;\n if (!types?.hasFilters) return;\n\n const fieldHasViewTag = parentMetadata?.[$viewFieldIndexes]?.includes(parentIndex) ?? false;\n // Stream fields are always view-scoped: the stream itself and its\n // child elements must behave as filtered trees. Elements must NOT\n // share visibility with the parent stream — `encodeView`'s priority\n // pass is the only way elements become visible to a view.\n const fieldHasStream = parentMetadata?.[$streamFieldIndexes]?.includes(parentIndex) ?? false;\n\n // Skip the `parentFiltered` string-key lookup when no class has\n // actually registered filter inheritance via ancestry. The lookup\n // cannot hit in that state, so the string concat + hash lookup would\n // be wasted work every attach.\n let parentFiltered = false;\n const parentConstructor = (parent as any)?.constructor as typeof Schema | undefined;\n if (types.hasParentFilteredEntries && parentConstructor !== undefined) {\n const refType = Metadata.isValidInstance(tree.ref)\n ? tree.ref.constructor\n : (tree.ref as any)[$childType];\n const key = `${types.getTypeId(refType as typeof Schema)}-${types.schemas.get(parentConstructor)}-${parentIndex}`;\n parentFiltered = types.parentFiltered[key] ?? false;\n }\n\n const newFiltered = parentChangeTree.isFiltered || parentFiltered || fieldHasViewTag || fieldHasStream;\n tree.isFiltered = newFiltered;\n\n // Flag collection trees attached to a `.stream()` field so the encoder\n // routes their emission through the priority/broadcast pass. Applies\n // when the tree IS the collection (not the collection's parent\n // structure walk above). `parentIsCollection` was true at entry iff\n // `tree.ref` is a child-of-collection (e.g. stream element) — we only\n // set the flag on the collection itself, not its elements.\n if (fieldHasStream && !parentIsCollection) {\n tree.isStreamCollection = true;\n // Allocate the lazy `_stream` slot once, here — so downstream\n // helpers (`streamRouteAdd`, `_emitStreamPriority`, …) never need\n // a null-check. `_stream` was always declared on the class at\n // `undefined`, so this is a value write, not a shape transition.\n const state = ensureStreamState(tree.ref as unknown as Streamable);\n // Seed the priority callback from the schema declaration (builder's\n // `.priority(fn)` or decorator's `{ stream: X, priority: fn }`).\n // Instance-level overrides via `stream.priority = ...` win — only\n // assign if the instance slot hasn't already been set.\n if (state.priority === undefined) {\n const declared = Metadata.getStreamPriority(parentMetadata, parentIndex);\n if (declared !== undefined) state.priority = declared;\n }\n // Auto-register with `root.streamTrees` so the encoder's priority /\n // broadcast pass picks it up. Covers both `StreamSchema` and any\n // `.stream()`-opted collection (e.g. `MapSchema.stream()`).\n tree.root?.registerStream(tree.ref as any);\n }\n\n if (newFiltered) {\n const refType = Metadata.isValidInstance(tree.ref)\n ? tree.ref.constructor\n : (tree.ref as any)[$childType];\n tree.isVisibilitySharedWithParent = (\n parentChangeTree.isFiltered\n && typeof refType !== \"string\"\n && !fieldHasViewTag\n && !fieldHasStream\n && parentIsCollection\n );\n }\n}\n","/**\n * Per-view collection subscriptions — `view.subscribe(collection)` opts\n * a view into ALL future content changes of a collection, not just a\n * one-shot snapshot. Covers every collection type:\n *\n * - `ArraySchema` / `MapSchema` / `SetSchema` / `CollectionSchema`: new\n * children are force-shipped immediately via `view._addImmediate(child)`.\n * Subsequent field mutations on those children emit via the normal\n * view pass (the children are now visible).\n * - `StreamSchema` (or a `.stream()` map/set): new positions are\n * enqueued into `_pendingByView` so the encoder's priority pass\n * drains them respecting `maxPerTick`.\n *\n * The propagation hook is in `changeTree/treeAttachment.ts setParent`\n * — every new child attachment to a collection checks the parent tree's\n * `subscribedViews` bitmap and fans out to subscribed views.\n */\nimport type { ChangeTree, Ref } from \"./ChangeTree.js\";\nimport type { Root, Streamable } from \"./Root.js\";\nimport { streamEnqueueForView } from \"./streaming.js\";\nimport { $changes } from \"../types/symbols.js\";\n\n/**\n * Walk the `subscribedViews` bitmap of `parentTree` and propagate a new\n * child attachment to every subscribed view. Streams route through the\n * priority/pending queue; all other collections force-ship immediately.\n */\nexport function propagateNewChildToSubscribers(\n parentTree: ChangeTree,\n childIndex: number,\n childRef: Ref,\n root: Root,\n): void {\n const subs = parentTree.subscribedViews;\n if (subs === undefined) return;\n\n const isStream = parentTree.isStreamCollection;\n const streamable = isStream ? (parentTree.ref as unknown as Streamable) : undefined;\n const childTree = isStream ? undefined : childRef[$changes];\n\n // Walk set bits via clz32 — same pattern as the inline recorder\n // iteration elsewhere in the encoder.\n for (let slot = 0, n = subs.length; slot < n; slot++) {\n let bits = subs[slot];\n while (bits !== 0) {\n const bit = bits & -bits;\n bits ^= bit;\n const viewId = slot * 32 + (31 - Math.clz32(bit));\n const weakRef = root.activeViews.get(viewId);\n const view = weakRef?.deref();\n if (view === undefined) {\n // View was disposed / GC'd; clear the stale subscription bit.\n subs[slot] &= ~bit;\n continue;\n }\n if (isStream) {\n // Streams bypass the recorder — enqueue for the priority\n // pass to drain under `maxPerTick`.\n streamEnqueueForView(streamable!, viewId, childIndex);\n } else if (childTree !== undefined) {\n // Non-stream collections: just markVisible. The parent's\n // recorder already carries the ADD op (triggered by the\n // push/set/add that led to this setParent), and the\n // child's tree carries its construction-time dirty state\n // — the encoder's normal view pass picks both up on the\n // next encode, no view.changes seeding needed.\n view.markVisible(childTree);\n }\n }\n }\n}\n","/**\n * Tree-attachment helpers: setRoot / setParent + child-iteration recursion.\n * Hot path: every new Schema/Collection instance attached to the root\n * goes through here, which is why the recursive walk uses a hoisted\n * callback + ctx-pool instead of per-call closures.\n */\nimport type { MapSchema } from \"../../types/custom/MapSchema.js\";\nimport { $changes, $childType, $refTypeFieldIndexes } from \"../../types/symbols.js\";\nimport { Root } from \"../Root.js\";\nimport type { ChangeTree, Ref } from \"../ChangeTree.js\";\nimport { checkIsFiltered } from \"./inheritedFlags.js\";\nimport { propagateNewChildToSubscribers } from \"../subscriptions.js\";\n\nexport function setRoot(tree: ChangeTree, root: Root): void {\n tree.root = root;\n\n const isNewChangeTree = root.add(tree);\n\n checkIsFiltered(tree, tree.parent, tree.parentIndex, isNewChangeTree);\n\n // Recursively set root on child structures (closure-free hot path).\n if (isNewChangeTree) {\n forEachChildWithCtx(tree, root, _setRootChildCb);\n }\n}\n\nexport function setParent(\n tree: ChangeTree,\n parent: Ref,\n root?: Root,\n parentIndex?: number,\n): void {\n tree.addParent(parent, parentIndex);\n\n // avoid setting parents with empty `root`\n if (!root) { return; }\n\n const isNewChangeTree = root.add(tree);\n\n // skip if parent is already set\n if (root !== tree.root) {\n tree.root = root;\n checkIsFiltered(tree, parent, parentIndex, isNewChangeTree);\n }\n\n // Persistent-subscription propagation — when this new child is being\n // attached to a collection that has one or more subscribed views,\n // force-ship (or enqueue, for streams) the new child to each of them.\n // Gated by `parent` being a collection (not a Schema) and the parent\n // tree having a non-empty `subscribedViews` bitmap; both common-case\n // short circuits are cheap.\n const parentTree = parent?.[$changes];\n if (\n parentTree !== undefined &&\n parentTree.subscribedViews !== undefined &&\n // Collection check: `$childType` on the ref identifies Array/Map/\n // Set/Collection/Stream. Schema-field parents don't have it.\n (parent as any)[$childType] !== undefined\n ) {\n propagateNewChildToSubscribers(parentTree, parentIndex!, tree.ref, root);\n }\n\n // assign same parent on child structures (closure-free hot path).\n // setParent recurses, so each depth gets its own ctx from a pool\n // that grows to the recursion depth (typically tree height = 3-5).\n if (isNewChangeTree) {\n let ctx = _setParentCtxPool[_setParentDepth];\n if (ctx === undefined) {\n ctx = { parentRef: undefined!, root: undefined! };\n _setParentCtxPool[_setParentDepth] = ctx;\n }\n ctx.parentRef = tree.ref;\n ctx.root = root;\n _setParentDepth++;\n forEachChildWithCtx(tree, ctx, _setParentChildCb);\n _setParentDepth--;\n }\n}\n\nexport function forEachChild(\n tree: ChangeTree,\n callback: (change: ChangeTree, at: any) => void,\n): void {\n //\n // assign same parent on child structures\n //\n if ((tree.ref as any)[$childType]) {\n if (typeof ((tree.ref as any)[$childType]) !== \"string\") {\n // MapSchema / ArraySchema, etc.\n for (const [key, value] of (tree.ref as MapSchema).entries()) {\n if (!value) { continue; } // sparse arrays can have undefined values\n callback(value[$changes], (tree.ref as any)._collectionIndexes?.[key] ?? key);\n };\n }\n\n } else {\n const names = tree.encDescriptor.names;\n for (const index of tree.metadata?.[$refTypeFieldIndexes] ?? []) {\n const value = tree.ref[names[index] as keyof Ref];\n if (!value) { continue; }\n callback(value[$changes], index);\n }\n }\n}\n\n/**\n * Closure-free variant of {@link forEachChild}. Hot setRoot / setParent\n * recursion calls this once per new Schema instance attached to the\n * tree — the per-call closure was the #1 JS hotspot in profile-baseline.\n * Pass an explicit `ctx` so callers can hoist the callback to module\n * scope and avoid the allocation.\n */\nexport function forEachChildWithCtx<C>(\n tree: ChangeTree,\n ctx: C,\n callback: (ctx: C, change: ChangeTree, at: any) => void,\n): void {\n // `refTarget` is the raw backing instance — identical to `ref` for all\n // non-Proxy types (Schema / Map / Set / Collection / Stream), and the\n // un-wrapped `$proxyTarget` for ArraySchema. Reading through it here\n // skips the ArraySchema Proxy `get` trap on every `$childType`,\n // `_collectionIndexes`, `.entries()`, `.items` lookup below — hot during\n // the encodeAll DFS walk which touches every ArraySchema in the tree.\n const ref = tree.refTarget as any;\n if (ref[$childType]) {\n if (typeof ref[$childType] !== \"string\") {\n const collectionIndexes = ref._collectionIndexes;\n for (const [key, value] of (ref as MapSchema).entries()) {\n if (!value) { continue; }\n callback(ctx, value[$changes], collectionIndexes?.[key] ?? key);\n }\n }\n } else {\n const metadata = tree.metadata;\n const indexes = metadata?.[$refTypeFieldIndexes];\n if (!indexes) return;\n const names = tree.encDescriptor.names;\n for (let i = 0, len = indexes.length; i < len; i++) {\n const index = indexes[i];\n const value = ref[names[index]];\n if (!value) { continue; }\n callback(ctx, value[$changes], index);\n }\n }\n}\n\n// Hoisted callbacks used by setRoot / setParent to avoid per-call\n// closure allocation in the recursive attach path.\n\nfunction _setRootChildCb(root: Root, child: ChangeTree, _index: any): void {\n if (child.root !== root) {\n child.setRoot(root);\n } else {\n root.add(child); // increment refCount\n }\n}\n\ninterface SetParentCtx { parentRef: Ref; root: Root; }\n// Pool of ctx objects, indexed by setParent recursion depth. Grows to\n// max depth seen (typically tree height = 3-5 in bench), then stays put.\nconst _setParentCtxPool: SetParentCtx[] = [];\nlet _setParentDepth = 0;\n\nfunction _setParentChildCb(ctx: SetParentCtx, child: ChangeTree, index: any): void {\n if (child.root === ctx.root) {\n ctx.root.add(child);\n ctx.root.moveNextToParent(child);\n return;\n }\n child.setParent(ctx.parentRef, ctx.root, index);\n}\n","/**\n * ChangeTree — the per-`Ref` mutation tracker attached via `$changes`.\n *\n * This file owns: class shape (fields, flags, ctor), inline\n * ChangeRecorder implementation (record / forEach / …), mutation API\n * (change / delete / operation / …), and encode lifecycle (endEncode /\n * discard / …). Helpers split out into ./changeTree/:\n *\n * - parentChain.ts addParent / removeParent / find / has / getAll\n * - liveIteration.ts forEachLive\n * - inheritedFlags.ts filter / unreliable / transient / static inheritance\n * - treeAttachment.ts setRoot / setParent / forEachChild(+WithCtx)\n *\n * Public surface on ChangeTree is unchanged — methods are thin pass-throughs\n * into the helpers. V8 inlines the pass-throughs; the runtime shape stays\n * a single class to preserve hidden-class + IC behavior.\n */\nimport { OPERATION } from \"../encoding/spec.js\";\nimport { Schema } from \"../Schema.js\";\nimport { $changes, $childType, $decoder, $onEncodeEnd, $encoder, $getByIndex, $proxyTarget, $refId, $refTypeFieldIndexes, $numFields, type $deleteByIndex } from \"../types/symbols.js\";\n\nimport type { MapSchema } from \"../types/custom/MapSchema.js\";\nimport type { ArraySchema } from \"../types/custom/ArraySchema.js\";\nimport type { CollectionSchema } from \"../types/custom/CollectionSchema.js\";\nimport type { SetSchema } from \"../types/custom/SetSchema.js\";\nimport type { StreamSchema } from \"../types/custom/StreamSchema.js\";\n\nimport { Root } from \"./Root.js\";\nimport { Metadata } from \"../Metadata.js\";\nimport { type ChangeRecorder, type ICollectionChangeRecorder, SchemaChangeRecorder, CollectionChangeRecorder, popcount32 } from \"./ChangeRecorder.js\";\nimport type { EncodeOperation } from \"./EncodeOperation.js\";\nimport { type EncodeDescriptor, getEncodeDescriptor } from \"./EncodeDescriptor.js\";\nimport type { DecodeOperation } from \"../decoder/DecodeOperation.js\";\n\nimport {\n addParent as _addParent, removeParent as _removeParent,\n findParent as _findParent, hasParent as _hasParent,\n getAllParents as _getAllParents,\n} from \"./changeTree/parentChain.js\";\nimport { forEachLive as _forEachLive, forEachLiveWithCtx as _forEachLiveWithCtx } from \"./changeTree/liveIteration.js\";\nimport {\n setRoot as _setRoot, setParent as _setParent,\n forEachChild as _forEachChild, forEachChildWithCtx as _forEachChildWithCtx,\n} from \"./changeTree/treeAttachment.js\";\n\n// Augmenting the global `Object` interface is a deliberate trade-off:\n// any Schema / collection instance — regardless of which bundled\n// `@colyseus/schema` version created it — can be duck-typed against\n// these Symbol-keyed slots. Narrower shapes (e.g. on `IRef`) would break\n// cross-version interop where server-bundled types coexist with client-\n// bundled ones in the same process.\ndeclare global {\n interface Object {\n [$changes]?: ChangeTree;\n // [$refId]?: number;\n [$encoder]?: EncodeOperation,\n [$decoder]?: DecodeOperation,\n }\n}\n\n// Pure arithmetic, no `this` — V8 inlines into encode-loop forEach.\n// Mirror of `ChangeTree._opAt` for the inline-ops-only branch.\nfunction readInlineOpByte(low: number, high: number, index: number): number {\n const shift = (index & 3) << 3;\n return (index < 4)\n ? (low >>> shift) & 0xFF\n : (high >>> shift) & 0xFF;\n}\n\n// Adapter that lets `forEach(cb)` delegate to `forEachWithCtx(cb, _invokeNoCtx)` —\n// no per-call closure allocation. See ChangeRecorder.ts for the same pattern.\nconst _invokeNoCtx = (\n cb: (index: number, op: OPERATION) => void,\n index: number,\n op: OPERATION,\n) => cb(index, op);\n\nexport interface IRef {\n // `[$changes]?: ChangeTree;` is intentionally omitted here — see the\n // `declare global` augmentation above. Narrowing to IRef would break\n // cross-version interop (Cocos Creator bundles server- and client-\n // side schema types together; a strict declaration here would reject\n // one side's instances at compile time).\n [$refId]?: number;\n // `$getByIndex` / `$deleteByIndex` are required on every actual ref\n // the decoder / encoder ever touches (Schema + every collection\n // implements both). Keeping them non-optional lets hot-path call\n // sites skip the `(ref as any)` cast.\n [$getByIndex](index: number, isEncodeAll?: boolean): any;\n [$deleteByIndex](index: number): void;\n}\n\nexport type Ref = Schema | ArraySchema | MapSchema | CollectionSchema | SetSchema | StreamSchema;\n\n// Linked list node for change trees\nexport interface ChangeTreeNode {\n changeTree: ChangeTree;\n next?: ChangeTreeNode;\n prev?: ChangeTreeNode;\n position: number; // Cached position in the linked list for O(1) lookup\n}\n\n// Linked list for change trees\nexport interface ChangeTreeList {\n next?: ChangeTreeNode;\n tail?: ChangeTreeNode;\n}\n\n// Linked list helper functions\nexport function createChangeTreeList(): ChangeTreeList {\n return { next: undefined, tail: undefined };\n}\n\nexport interface ParentChain {\n ref: Ref;\n index: number;\n next?: ParentChain;\n}\n\n// Flags bitfield. *_UNRELIABLE / _TRANSIENT / _STATIC mirror the parent\n// field's annotation — inherited at setParent/setRoot time.\nexport const IS_FILTERED = 1, IS_VISIBILITY_SHARED = 2, IS_NEW = 4;\nexport const IS_UNRELIABLE = 8, IS_TRANSIENT = 16, IS_STATIC = 32;\n// Collection tree attached to a parent field annotated `.stream()` —\n// drives the encoder's priority/broadcast pass. Set in inheritedFlags\n// so both `t.stream(X)` (via StreamSchema's `$isStream` brand) and\n// `t.map(X).stream()` / `t.set(X).stream()` route through the same\n// emission machinery.\nexport const IS_STREAM_COLLECTION = 64;\n/**\n * Flags a child inherits from its parent's own transitive state via\n * `checkInheritedFlags`. Read as a bitwise mask so the inheritance step\n * is a single OR instead of three getter/setter pairs.\n *\n * `IS_UNRELIABLE` is intentionally excluded: `@unreliable` is rejected\n * at decoration time for ref-type fields (see `Metadata.setUnreliable`)\n * because an unreliable ADD/DELETE could leave the decoder unable to\n * interpret later packets referencing an orphan refId. Tree-level\n * unreliable is therefore dead on every Schema/Collection tree today;\n * the bit and its machinery are kept in place so this can be\n * reconsidered if a safe semantics (e.g. reliable ADD + unreliable\n * field mutations only) is designed later.\n */\nexport const INHERITABLE_FLAGS = IS_TRANSIENT | IS_STATIC;\n\nexport class ChangeTree<T extends Ref = any> implements ChangeRecorder {\n ref: T;\n\n /**\n * Non-Proxy target of `ref` for encoder hot-path reads. For\n * `ArraySchema`, `ref` is the Proxy users interact with; every property\n * access on it runs through the `get` trap (even for symbol keys, which\n * fall through to `Reflect.get` — one extra hop per lookup). The encoder\n * loop reads `[$getByIndex]`, `[$childType]`, `.items`, `.tmpItems` at\n * high frequency during `encode()` / `encodeAll()`; going through\n * `refTarget` skips all of those traps.\n *\n * For non-proxied types (Schema, MapSchema, SetSchema, CollectionSchema,\n * StreamSchema), `refTarget === ref`. Consumers that need the user-\n * facing identity (debug output, callback parents) keep using `ref`.\n */\n refTarget: T;\n\n metadata: Metadata;\n\n /**\n * Per-class cache of encoder fn / filter fn / isSchema / filterBitmask /\n * metadata, looked up once at construction. The encode loop reads\n * `tree.encDescriptor` and never touches `ref.constructor` again. See\n * EncodeDescriptor.ts.\n */\n encDescriptor: EncodeDescriptor;\n\n root?: Root;\n\n // Inline single parent (the common case)\n parentRef?: Ref;\n _parentIndex?: number;\n extraParents?: ParentChain; // linked list for 2nd+ parents (rare: instance sharing)\n\n // Packed boolean flags. See IS_* constants above for bit layout.\n flags: number = IS_NEW;\n\n /**\n * Per-walk visit stamp written by `Encoder.encodeFullSync`'s DFS. A\n * tree is considered \"already visited by the current walk\" iff\n * `tree._fullSyncGen === ctx.gen` — the encoder bumps its generation\n * counter once per walk, then stamps each tree with that value on\n * first visit; any later encounter of the same tree (shared refs\n * reachable through multiple parents) short-circuits on the equality\n * check instead of recursing again.\n */\n _fullSyncGen: number = 0;\n\n // Schema vs Collection discriminator. Set once in ctor, never changes —\n // per-tree-stable branch for inline ChangeRecorder dispatch.\n _isSchema: boolean = false;\n\n // Inline reliable SchemaChangeRecorder state (valid only if _isSchema).\n dirtyLow: number = 0;\n dirtyHigh: number = 0;\n\n // Inline ops for Schemas with ≤8 fields (4 op-bytes per number).\n // When `ops` is set (>8 fields), reads/writes go through the Uint8Array.\n opsLow: number = 0;\n opsHigh: number = 0;\n ops?: Uint8Array;\n\n // Inline reliable CollectionChangeRecorder state (valid only if !_isSchema).\n // `collDirty` is allocated in the ctor. `collPureOps` stays undefined\n // until the first CLEAR/REVERSE (most workloads never hit this).\n collDirty?: Map<number, OPERATION>;\n collPureOps?: Array<[number, OPERATION]>;\n\n // Lazy-allocated unreliable-channel recorder (rare — opt-in via @unreliable).\n unreliableRecorder?: ChangeRecorder;\n\n // When true, mutations on the ref are NOT tracked. See pause/resume/untracked.\n paused: boolean = false;\n\n changesNode?: ChangeTreeNode; // Root.changes linked-list node\n unreliableChangesNode?: ChangeTreeNode; // Root.unreliableChanges linked-list node\n\n // Per-StateView visibility bitmaps. Bit `(viewId & 31)` in slot\n // `(viewId >> 5)` is set iff the view can see this tree. Replaces\n // per-view WeakSet lookups with direct bitwise ops.\n // Lazy: undefined until the tree participates in any view.\n visibleViews?: number[];\n invisibleViews?: number[];\n\n // Per-(view, tag) bitmap, indexed by tag. Custom tags only —\n // DEFAULT_VIEW_TAG visibility lives in `visibleViews`.\n tagViews?: Map<number, number[]>;\n\n /**\n * Per-view subscription bitmap — same layout as `visibleViews`. Set by\n * `StateView.subscribe(collection)` to mark the view as persistently\n * interested in this collection's contents. When a new child is\n * attached to a subscribed collection (setParent hook), it's\n * auto-propagated to every subscribed view (force-shipped for\n * Array/Map/Set/Collection; enqueued into per-view pending for\n * streams). Undefined until the first subscribe.\n */\n subscribedViews?: number[];\n\n // Accessor properties for flags\n get isFiltered() { return (this.flags & IS_FILTERED) !== 0; }\n set isFiltered(v: boolean) { this.flags = v ? (this.flags | IS_FILTERED) : (this.flags & ~IS_FILTERED); }\n get isVisibilitySharedWithParent() { return (this.flags & IS_VISIBILITY_SHARED) !== 0; }\n set isVisibilitySharedWithParent(v: boolean) { this.flags = v ? (this.flags | IS_VISIBILITY_SHARED) : (this.flags & ~IS_VISIBILITY_SHARED); }\n get isNew() { return (this.flags & IS_NEW) !== 0; }\n set isNew(v: boolean) { this.flags = v ? (this.flags | IS_NEW) : (this.flags & ~IS_NEW); }\n get isUnreliable() { return (this.flags & IS_UNRELIABLE) !== 0; }\n set isUnreliable(v: boolean) { this.flags = v ? (this.flags | IS_UNRELIABLE) : (this.flags & ~IS_UNRELIABLE); }\n get isTransient() { return (this.flags & IS_TRANSIENT) !== 0; }\n set isTransient(v: boolean) { this.flags = v ? (this.flags | IS_TRANSIENT) : (this.flags & ~IS_TRANSIENT); }\n get isStatic() { return (this.flags & IS_STATIC) !== 0; }\n set isStatic(v: boolean) { this.flags = v ? (this.flags | IS_STATIC) : (this.flags & ~IS_STATIC); }\n get isStreamCollection() { return (this.flags & IS_STREAM_COLLECTION) !== 0; }\n set isStreamCollection(v: boolean) { this.flags = v ? (this.flags | IS_STREAM_COLLECTION) : (this.flags & ~IS_STREAM_COLLECTION); }\n\n // True iff tree inherits `isFiltered` OR its Schema class declares any\n // @view-tagged fields. StateView.addParentOf uses this to decide whether\n // a parent must be included in a view's bootstrap. Reads the class-level\n // \"any viewed field\" flag that `EncodeDescriptor` precomputes — same\n // pattern as `hasAnyStatic` / `hasAnyUnreliable` / `hasAnyStream`.\n get hasFilteredFields(): boolean {\n return this.isFiltered || this.encDescriptor.hasAnyView;\n }\n\n ensureUnreliableRecorder(): ChangeRecorder {\n if (this.unreliableRecorder === undefined) {\n const isSchema = Metadata.isValidInstance(this.ref);\n this.unreliableRecorder = isSchema\n ? new SchemaChangeRecorder((this.metadata?.[$numFields] ?? 0) as number)\n : new CollectionChangeRecorder();\n }\n return this.unreliableRecorder;\n }\n\n isFieldUnreliable(index: number): boolean {\n // Tree-level `isUnreliable` is disabled — @unreliable is rejected\n // on ref-type fields at decoration time, so no tree ever carries\n // the flag. Kept as a comment in case a safe semantics is added\n // later (see INHERITABLE_FLAGS rationale).\n // if (this.isUnreliable) return true;\n // Class-level fast path: most schemas have zero unreliable fields,\n // so the per-mutation check resolves without the symbol-keyed\n // metadata lookup. For schemas that DO have unreliable fields, the\n // bitmask answers fields 0-31 in one bitwise op (no Array.includes\n // linear scan). Fields ≥32 always fall back to the metadata lookup\n // (same limitation as filterBitmask — bitmask only covers low 32).\n const desc = this.encDescriptor;\n if (!desc.hasAnyUnreliable) return false;\n if (index < 32) return (desc.unreliableBitmask & (1 << index)) !== 0;\n return Metadata.hasUnreliableAtIndex(this.metadata, index);\n }\n\n // @static fields sync once via full-sync; post-init mutations are ignored\n // by the tracker (the value still lives on the instance).\n isFieldStatic(index: number): boolean {\n if (this.isStatic) return true;\n const desc = this.encDescriptor;\n if (!desc.hasAnyStatic) return false;\n if (index < 32) return (desc.staticBitmask & (1 << index)) !== 0;\n return Metadata.hasStaticAtIndex(this.metadata, index);\n }\n\n // `t.stream(...)` collection fields — encoded via per-view priority/budget\n // gate instead of emitting all dirty ADDs in one tick. Class-level short\n // circuit avoids the metadata chase on schemas that carry no stream fields.\n isFieldStream(index: number): boolean {\n const desc = this.encDescriptor;\n if (!desc.hasAnyStream) return false;\n if (index < 32) return (desc.streamBitmask & (1 << index)) !== 0;\n return Metadata.hasStreamAtIndex(this.metadata, index);\n }\n\n constructor(ref: T) {\n this.ref = ref;\n // `$proxyTarget` is a self-reference set by ArraySchema on the raw\n // target; for non-proxied refs it's undefined and we fall back to\n // `ref`. Cached here so hot-path reads skip the Proxy `get` trap.\n this.refTarget = ((ref as any)[$proxyTarget] ?? ref) as T;\n\n // Single per-class lookup that subsumes Symbol.metadata,\n // isValidInstance, $encoder, $filter, and the filter bitmask.\n // After this, the encode loop never touches `ref.constructor`.\n const desc = getEncodeDescriptor(ref);\n this.encDescriptor = desc;\n this.metadata = desc.metadata;\n\n const isSchema = desc.isSchema;\n this._isSchema = isSchema;\n\n // Assign every optional slot so Schema and Collection trees share\n // one hidden-class transition path (tsconfig useDefineForClassFields=false\n // otherwise leaves uninitialized class fields absent from the shape).\n this.ops = undefined;\n this.collDirty = undefined;\n this.collPureOps = undefined;\n\n if (isSchema) {\n const numFields = (this.metadata?.[$numFields] ?? 0) as number;\n if (numFields > 7) this.ops = new Uint8Array(numFields + 1);\n } else {\n this.collDirty = new Map();\n }\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Inline ChangeRecorder implementation. Each method branches once on\n // `_isSchema` (per-tree-stable → predictable branch). Kills one\n // CollectionChangeRecorder+Map allocation per Collection tree.\n // ────────────────────────────────────────────────────────────────────\n\n // Schema-only helpers that own all inline-vs-array dispatch.\n private _opAt(index: number): number {\n const ops = this.ops;\n if (ops !== undefined) return ops[index];\n const shift = (index & 3) << 3;\n return (index < 4)\n ? (this.opsLow >>> shift) & 0xFF\n : (this.opsHigh >>> shift) & 0xFF;\n }\n\n private _opPut(index: number, op: OPERATION): void {\n const ops = this.ops;\n if (ops !== undefined) {\n ops[index] = op;\n return;\n }\n const shift = (index & 3) << 3;\n const mask = ~(0xFF << shift);\n if (index < 4) this.opsLow = (this.opsLow & mask) | (op << shift);\n else this.opsHigh = (this.opsHigh & mask) | (op << shift);\n }\n\n private _markDirty(index: number): void {\n if (index < 32) this.dirtyLow |= (1 << index);\n else this.dirtyHigh |= (1 << (index - 32));\n }\n\n record(index: number, op: OPERATION): void {\n if (this._isSchema) {\n const prev = this._opAt(index);\n if (prev === 0) this._opPut(index, op);\n else if (prev === OPERATION.DELETE) this._opPut(index, OPERATION.DELETE_AND_ADD);\n // Promote ADD → DELETE_AND_ADD when a ref is replaced in the\n // same tick. Otherwise the on-wire op collapses to plain ADD\n // and the decoder's `refs` map leaks the displaced refId —\n // harmless on its own, but refId pooling turns that leak into\n // a catastrophic rebinding when the refId is later reused.\n else if (prev === OPERATION.ADD && op === OPERATION.DELETE_AND_ADD) {\n this._opPut(index, OPERATION.DELETE_AND_ADD);\n }\n // else: existing ADD / DELETE_AND_ADD — preserve op-byte.\n this._markDirty(index);\n } else {\n const dirty = this.collDirty!;\n const prev = dirty.get(index);\n let finalOp: OPERATION;\n if (prev === undefined) finalOp = op;\n else if (prev === OPERATION.DELETE) finalOp = OPERATION.DELETE_AND_ADD;\n else if (prev === OPERATION.ADD && op === OPERATION.DELETE_AND_ADD) finalOp = OPERATION.DELETE_AND_ADD;\n else finalOp = prev;\n dirty.set(index, finalOp);\n }\n }\n\n recordDelete(index: number, op: OPERATION): void {\n if (this._isSchema) {\n this._opPut(index, op);\n this._markDirty(index);\n } else {\n this.collDirty!.set(index, op);\n }\n }\n\n recordRaw(index: number, op: OPERATION): void {\n if (this._isSchema) {\n this._opPut(index, op);\n this._markDirty(index);\n } else {\n this.collDirty!.set(index, op);\n }\n }\n\n recordPure(op: OPERATION): void {\n if (this._isSchema) {\n throw new Error(\"ChangeTree (Schema): pure operations are not supported\");\n }\n (this.collPureOps ??= []).push([this.collDirty!.size, op]);\n }\n\n operationAt(index: number): OPERATION | undefined {\n if (this._isSchema) {\n const op = this._opAt(index);\n return op === 0 ? undefined : op;\n }\n return this.collDirty!.get(index);\n }\n\n setOperationAt(index: number, op: OPERATION): void {\n // Schema: overwrite only (no dirty-mark). Collection: overwrite iff key exists (legacy).\n if (this._isSchema) {\n this._opPut(index, op);\n } else {\n const dirty = this.collDirty!;\n if (dirty.has(index)) dirty.set(index, op);\n }\n }\n\n // Cold-path delegate: all `forEach` callers are debug/dump utilities\n // (Schema.ts debug output, utils.ts change dump, discardAll in tests).\n // The hot encode loop uses `forEachWithCtx` directly. See ChangeRecorder.ts\n // for the same adapter pattern.\n forEach(cb: (index: number, op: OPERATION) => void): void {\n this.forEachWithCtx(cb, _invokeNoCtx);\n }\n\n forEachWithCtx<C>(ctx: C, cb: (ctx: C, index: number, op: OPERATION) => void): void {\n if (this._isSchema) {\n let low = this.dirtyLow;\n let high = this.dirtyHigh;\n const ops = this.ops;\n if (ops !== undefined) {\n while (low !== 0) {\n const bit = low & -low;\n const fieldIndex = 31 - Math.clz32(bit);\n low ^= bit;\n cb(ctx, fieldIndex, ops[fieldIndex]);\n }\n while (high !== 0) {\n const bit = high & -high;\n const fieldIndex = 31 - Math.clz32(bit) + 32;\n high ^= bit;\n cb(ctx, fieldIndex, ops[fieldIndex]);\n }\n } else {\n const ol = this.opsLow;\n const oh = this.opsHigh;\n while (low !== 0) {\n const bit = low & -low;\n const fieldIndex = 31 - Math.clz32(bit);\n low ^= bit;\n cb(ctx, fieldIndex, readInlineOpByte(ol, oh, fieldIndex));\n }\n }\n return;\n }\n const dirty = this.collDirty!;\n const pure = this.collPureOps;\n if (pure !== undefined && pure.length > 0) {\n let pureIdx = 0, i = 0;\n for (const [index, op] of dirty) {\n while (pureIdx < pure.length && pure[pureIdx][0] <= i) {\n const pureOp = pure[pureIdx++][1];\n cb(ctx, -pureOp, pureOp);\n }\n cb(ctx, index, op);\n i++;\n }\n while (pureIdx < pure.length) {\n const pureOp = pure[pureIdx++][1];\n cb(ctx, -pureOp, pureOp);\n }\n } else {\n for (const [index, op] of dirty) cb(ctx, index, op);\n }\n }\n\n size(): number {\n if (this._isSchema) return popcount32(this.dirtyLow) + popcount32(this.dirtyHigh);\n return this.collDirty!.size + (this.collPureOps?.length ?? 0);\n }\n\n has(): boolean {\n if (this._isSchema) return (this.dirtyLow | this.dirtyHigh) !== 0;\n return this.collDirty!.size > 0 || (this.collPureOps !== undefined && this.collPureOps.length > 0);\n }\n\n reset(): void {\n if (this._isSchema) {\n this.dirtyLow = 0;\n this.dirtyHigh = 0;\n if (this.ops !== undefined) this.ops.fill(0);\n else { this.opsLow = 0; this.opsHigh = 0; }\n return;\n }\n this.collDirty!.clear();\n if (this.collPureOps !== undefined) this.collPureOps.length = 0;\n }\n\n shift(shiftIndex: number): void {\n if (this._isSchema) throw new Error(\"ChangeTree (Schema): shift is not supported\");\n const src = this.collDirty!;\n const dst = new Map<number, OPERATION>();\n for (const [idx, val] of src) dst.set(idx + shiftIndex, val);\n this.collDirty = dst;\n }\n\n // Tree attachment + child iteration — see ./changeTree/treeAttachment.ts.\n setRoot(root: Root): void { _setRoot(this, root); }\n setParent(parent: Ref, root?: Root, parentIndex?: number): void { _setParent(this, parent, root, parentIndex); }\n forEachChild(cb: (change: ChangeTree, at: any) => void): void { _forEachChild(this, cb); }\n forEachChildWithCtx<C>(ctx: C, cb: (ctx: C, change: ChangeTree, at: any) => void): void {\n _forEachChildWithCtx(this, ctx, cb);\n }\n forEachLive(cb: (index: number) => void): void { _forEachLive(this, cb); }\n forEachLiveWithCtx<C>(ctx: C, cb: (ctx: C, index: number) => void): void {\n _forEachLiveWithCtx(this, ctx, cb);\n }\n\n operation(op: OPERATION) {\n if (this.paused || this.isStatic) return;\n // Pure ops (CLEAR/REVERSE) only emit from collection trees — the\n // recorder here is always a CollectionChangeRecorder by construction.\n //\n // Tree-level `isUnreliable` is disabled (see INHERITABLE_FLAGS):\n // no collection tree can be marked unreliable as a whole under the\n // ref-field rejection rule in `Metadata.setUnreliable`. The branch\n // is kept as a comment for re-enablement.\n // if (this.isUnreliable) {\n // (this.ensureUnreliableRecorder() as ICollectionChangeRecorder).recordPure(op);\n // this.root?.enqueueUnreliable(this);\n // } else {\n this.recordPure(op);\n this.root?.enqueueChangeTree(this);\n // }\n }\n\n /**\n * Route a field-level mutation to the reliable or unreliable channel\n * and enqueue into the matching queue. Shared by `change` and\n * `indexedOperation`; `raw=true` bypasses DELETE→ADD merge\n * (ArraySchema positional writes), `raw=false` merges inside `record`.\n *\n * Note: record() on both channels handles DELETE→ADD merge internally,\n * so callers do not need to pre-compute the merged op.\n *\n * `@unreliable` is decoration-time-validated to apply only to primitive\n * fields (see annotations.ts), so the per-field unreliable flag here\n * always means \"primitive value updates\" — the structural-ADD-routes-\n * reliable footgun for ref-type fields can't reach this code path.\n */\n private _routeAndRecord(index: number, op: OPERATION, raw: boolean): void {\n if (this.paused || this.isFieldStatic(index)) return;\n if (this.isFieldUnreliable(index)) {\n const r = this.ensureUnreliableRecorder();\n if (raw) r.recordRaw(index, op);\n else r.record(index, op);\n this.root?.enqueueUnreliable(this);\n return;\n }\n if (raw) this.recordRaw(index, op);\n else this.record(index, op);\n this.root?.enqueueChangeTree(this);\n }\n\n change(index: number, operation: OPERATION = OPERATION.ADD) {\n this._routeAndRecord(index, operation, false);\n }\n\n indexedOperation(index: number, operation: OPERATION) {\n this._routeAndRecord(index, operation, true);\n }\n\n // ArraySchema#unshift(): apply shift to both channels.\n // Unreliable recorder on an array is always a CollectionChangeRecorder.\n shiftChangeIndexes(shiftIndex: number) {\n this.shift(shiftIndex);\n (this.unreliableRecorder as ICollectionChangeRecorder | undefined)?.shift(shiftIndex);\n }\n\n getChange(index: number) {\n return this.operationAt(index);\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Change-tracking control API\n // ────────────────────────────────────────────────────────────────────\n\n pause(): void { this.paused = true; }\n resume(): void { this.paused = false; }\n\n untracked<T>(fn: () => T): T {\n const wasPaused = this.paused;\n this.paused = true;\n try { return fn(); }\n finally { this.paused = wasPaused; }\n }\n\n // Manually mark a field dirty for the next encode(). Useful after a\n // paused mutation or a nested mutation that bypassed the setter.\n markDirty(index: number, operation: OPERATION = OPERATION.ADD): void {\n const wasPaused = this.paused;\n this.paused = false;\n try { this.change(index, operation); }\n finally { this.paused = wasPaused; }\n }\n\n // used during `.encode()` — `isEncodeAll` is only consumed by ArraySchema.\n // Reads via `refTarget` so ArraySchema's Proxy trap is bypassed on the\n // hot per-field encode path.\n getValue(index: number, isEncodeAll: boolean = false) {\n return this.refTarget[$getByIndex](index, isEncodeAll);\n }\n\n delete(index: number, operation?: OPERATION) {\n if (index === undefined) {\n try {\n throw new Error(`@colyseus/schema ${this.ref.constructor.name}: trying to delete non-existing index '${index}'`);\n } catch (e) {\n console.warn(e);\n }\n return;\n }\n\n if (this.paused || this.isFieldStatic(index)) return this.getValue(index);\n\n const unreliable = this.isFieldUnreliable(index);\n if (unreliable) this.ensureUnreliableRecorder().recordDelete(index, operation ?? OPERATION.DELETE);\n else this.recordDelete(index, operation ?? OPERATION.DELETE);\n\n const previousValue = this.getValue(index);\n\n // `this.root` is always undefined on decoder-side instances\n // (they're built via `initializeForDecoder`, which skips Root\n // attachment). The optional chain handles both sides; this is\n // an intentional invariant, not a bug.\n if (previousValue && previousValue[$changes]) this.root?.remove(previousValue[$changes]);\n\n if (unreliable) this.root?.enqueueUnreliable(this);\n else this.root?.enqueueChangeTree(this);\n\n return previousValue;\n }\n\n // Clear the reliable dirty bucket after a reliable encode pass.\n endEncode() {\n this.reset();\n this.changesNode = undefined;\n (this.ref as any)[$onEncodeEnd]?.();\n this.isNew = false;\n }\n\n // Clear the unreliable dirty bucket after an unreliable encode pass.\n endEncodeUnreliable() {\n this.unreliableRecorder?.reset();\n this.unreliableChangesNode = undefined;\n (this.ref as any)[$onEncodeEnd]?.();\n }\n\n discard() {\n (this.ref as any)[$onEncodeEnd]?.();\n this.reset();\n this.unreliableRecorder?.reset();\n }\n\n // Recursively discard all changes on this + child structures. Tests only.\n discardAll() {\n const discardChild = (index: number) => {\n if (index < 0) return;\n const value = this.getValue(index);\n if (value && value[$changes]) value[$changes].discardAll();\n };\n this.forEach(discardChild);\n this.unreliableRecorder?.forEach(discardChild);\n this.discard();\n }\n\n get changed() {\n return this.has() || (this.unreliableRecorder?.has() ?? false);\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Parent chain — implementations in ./changeTree/parentChain.ts.\n // ────────────────────────────────────────────────────────────────────\n\n /** Immediate parent (primary). See `extraParents` for the 2nd+ chain. */\n get parent(): Ref | undefined { return this.parentRef; }\n get parentIndex(): number | undefined { return this._parentIndex; }\n\n addParent(parent: Ref, index: number): void { _addParent(this, parent, index); }\n\n /** @returns true if parent was found and removed */\n removeParent(parent: Ref = this.parent): boolean { return _removeParent(this, parent); }\n\n findParent(predicate: (parent: Ref, index: number) => boolean): ParentChain | undefined {\n return _findParent(this, predicate);\n }\n\n hasParent(predicate: (parent: Ref, index: number) => boolean): boolean {\n return _hasParent(this, predicate);\n }\n\n getAllParents(): Array<{ ref: Ref, index: number }> { return _getAllParents(this); }\n\n}\n\n/**\n * Lightweight per-instance no-op ChangeTree used for instances the decoder\n * builds. Those instances never feed back into an Encoder, so the full\n * `ChangeTree` machinery (EncodeDescriptor lookup, recorder state, Maps /\n * Uint8Arrays for change slots) is pure overhead — this stub carries only a\n * `ref` back-pointer and no-op methods, so tree walkers and debug tooling\n * continue to work.\n *\n * Plug-in contract: each collection class and the `Decoder` pick between\n * `new ChangeTree(ref)` and `createUntrackedChangeTree(ref)` explicitly via\n * dedicated factories (`initializeForDecoder` on collections,\n * `createInstanceOfType` on the `Decoder`). There is no global state — every\n * decision is local to the call site.\n */\nexport class UntrackedChangeTree {\n ref: Ref;\n\n // Mirror the subset of ChangeTree state that decoder-path readers touch.\n // Everything else is deliberately undefined (matches the shape of a\n // freshly-constructed tree that never participated in a Root).\n root: undefined = undefined;\n parentRef: undefined = undefined;\n paused: boolean = false;\n isNew: boolean = false;\n flags: number = 0;\n\n constructor(ref: Ref) {\n this.ref = ref;\n }\n\n // Mutation surface — all no-ops.\n change(): void {}\n delete(): void {}\n indexedOperation(): void {}\n operation(): void {}\n setParent(): void {}\n addParent(): void {}\n removeParent(): boolean { return false; }\n getChange(): number { return 0; }\n discard(): void {}\n discardAll(): void {}\n pause(): void {}\n resume(): void {}\n untracked<T>(fn: () => T): T { return fn(); }\n markDirty(): void {}\n\n // Tree-walk surface. Mirrors `treeAttachment.forEachChild` so debug tools\n // and `ArraySchema.clear()` can still descend from a tracked root into\n // decoder-built subtrees and read each child's `$changes` (which is\n // itself an UntrackedChangeTree carrying the right `ref`).\n forEachChild(callback: (change: any, at: any) => void): void {\n const ref = this.ref as any;\n if (ref[$childType]) {\n if (typeof ref[$childType] !== \"string\") {\n for (const [key, value] of ref.entries()) {\n if (!value) continue;\n callback(value[$changes], ref._collectionIndexes?.[key] ?? key);\n }\n }\n return;\n }\n const ctor = ref.constructor as any;\n const metadata = ctor?.[Symbol.metadata];\n if (!metadata) return;\n const refFieldIndexes: number[] = metadata[$refTypeFieldIndexes] ?? [];\n for (let i = 0; i < refFieldIndexes.length; i++) {\n const index = refFieldIndexes[i];\n const value = ref[metadata[index].name];\n if (!value) continue;\n callback(value[$changes], index);\n }\n }\n\n forEachChildWithCtx<C>(ctx: C, callback: (ctx: C, change: any, at: any) => void): void {\n this.forEachChild((change, at) => callback(ctx, change, at));\n }\n\n forEachLive(): void {}\n forEachLiveWithCtx(): void {}\n forEach(): void {}\n}\n\n// Factory, cast to ChangeTree so call sites that type `$changes` as\n// `ChangeTree` accept it. The surface overlap above covers every read/write\n// the decoder path reaches.\nexport function createUntrackedChangeTree(ref: Ref): ChangeTree {\n return new UntrackedChangeTree(ref) as unknown as ChangeTree;\n}\n\n/**\n * Install a non-enumerable `$changes: UntrackedChangeTree` on `target`.\n * Shared by `Schema.initializeForDecoder` and every collection's\n * `initializeForDecoder`. `publicRef` defaults to `target` — pass a Proxy\n * instead (ArraySchema) so children attached to this tree see the Proxy\n * as their parent, not the raw target.\n *\n * `enumerable: false` is load-bearing — tests use `deepStrictEqual` on\n * decoded instances and walking into `$changes` would recurse through\n * circular refs. Same descriptor shape as the tracked `Schema.initialize`\n * + collection ctors.\n */\nexport function installUntrackedChangeTree(target: object, publicRef: object = target): void {\n Object.defineProperty(target, $changes, {\n value: createUntrackedChangeTree(publicRef as Ref),\n enumerable: false,\n writable: true,\n });\n}\n","import { OPERATION } from \"../encoding/spec.js\";\nimport { $changes, $childType, $encoders, $getByIndex, $refId, $values } from \"../types/symbols.js\";\n\nimport { encode } from \"../encoding/encode.js\";\n\nimport type { ChangeTree, Ref } from \"./ChangeTree.js\";\nimport type { Encoder } from \"./Encoder.js\";\nimport type { Schema } from \"../Schema.js\";\n\nimport type { Iterator } from \"../encoding/decode.js\";\nimport type { ArraySchema } from \"../types/custom/ArraySchema.js\";\nimport type { Metadata } from \"../Metadata.js\";\n\nexport type EncodeOperation<T extends Ref = any> = (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree<T>,\n index: number,\n operation: OPERATION,\n it: Iterator,\n isEncodeAll: boolean,\n hasView: boolean,\n metadata?: Metadata,\n) => void;\n\nexport function encodeValue(\n encoder: Encoder,\n bytes: Uint8Array,\n type: any,\n value: any,\n operation: OPERATION,\n it: Iterator,\n encoderFn?: (bytes: Uint8Array, value: any, it: Iterator) => void,\n) {\n if (encoderFn !== undefined) {\n // Fast path: pre-computed encoder for primitive types.\n encoderFn(bytes, value, it);\n\n } else if (typeof (type) === \"string\") {\n // Fallback for types not pre-computed (e.g. runtime-constructed).\n (encode as any)[type]?.(bytes, value, it);\n\n } else if (type[Symbol.metadata] !== undefined) {\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value[$refId], it);\n\n // Try to encode inherited TYPE_ID if it's an ADD operation.\n if ((operation & OPERATION.ADD) === OPERATION.ADD) {\n encoder.tryEncodeTypeId(bytes, type as typeof Schema, value.constructor as typeof Schema, it);\n }\n\n } else {\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value[$refId], it);\n }\n}\n\n/**\n * Used for Schema instances.\n * @private\n */\nexport const encodeSchemaOperation: EncodeOperation = function <T extends Schema> (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree<T>,\n index: number,\n operation: OPERATION,\n it: Iterator,\n _: any,\n __: any,\n) {\n // \"compress\" field index + operation\n bytes[it.offset++] = (index | operation) & 255;\n\n // Do not encode value for DELETE operations\n if (operation === OPERATION.DELETE) {\n return;\n }\n\n // Read field info from the per-class descriptor's parallel arrays —\n // replaces `metadata[index]` (returns a per-field obj) + `.name` /\n // `.type` chains. The `encoders` array is also pre-baked here so we\n // skip a `metadata[$encoders]?.[index]` symbol-keyed lookup per call.\n const desc = changeTree.encDescriptor;\n const ref = changeTree.ref as any;\n\n // Direct $values[index] read — bypasses prototype getter + metadata name lookup.\n // Falls back to named property for manual fields (which don't use $values).\n const value = ref[$values][index] ?? ref[desc.names[index]];\n\n encodeValue(\n encoder,\n bytes,\n desc.types[index],\n value,\n operation,\n it,\n desc.encoders[index],\n );\n}\n\n/**\n * Encode a single MapSchema entry. Splits the legacy\n * `encodeKeyValueOperation` so the per-emission `typeof ref['set']` check\n * is gone — MapSchema instances are routed here via their `[$encoder]`\n * static, the dynamic-key string emission is unconditional on ADD.\n *\n * @private\n */\nexport const encodeMapEntry: EncodeOperation = function (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree,\n index: number,\n operation: OPERATION,\n it: Iterator,\n) {\n bytes[it.offset++] = operation & 255;\n encode.number(bytes, index, it);\n\n if (operation === OPERATION.DELETE) return;\n\n const ref = changeTree.ref;\n\n // ADD or DELETE_AND_ADD: emit the user-facing string key for dynamic\n // map fields. SetSchema/CollectionSchema use a different encoder and\n // skip this entirely (no dynamic key).\n if ((operation & OPERATION.ADD) === OPERATION.ADD) {\n const dynamicIndex = (ref as any)['$indexes'].get(index);\n encode.string(bytes, dynamicIndex, it);\n }\n\n encodeValue(\n encoder,\n bytes,\n (ref as any)[$childType],\n ref[$getByIndex](index),\n operation,\n it,\n );\n}\n\n/**\n * Encode a single SetSchema / CollectionSchema entry. Wire format is the\n * same as MapSchema minus the dynamic-key string, so this path skips the\n * legacy `typeof ref['set']` check entirely.\n *\n * @private\n */\nexport const encodeIndexedEntry: EncodeOperation = function (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree,\n index: number,\n operation: OPERATION,\n it: Iterator,\n) {\n bytes[it.offset++] = operation & 255;\n encode.number(bytes, index, it);\n\n if (operation === OPERATION.DELETE) return;\n\n const ref = changeTree.ref;\n encodeValue(\n encoder,\n bytes,\n (ref as any)[$childType],\n ref[$getByIndex](index),\n operation,\n it,\n );\n}\n\n/**\n * Unified encoder kept for back-compat with external consumers that may\n * have registered it directly via `static [$encoder] =\n * encodeKeyValueOperation`. New code (and all internal collections)\n * should use the split variants — `encodeMapEntry` for MapSchema and\n * `encodeIndexedEntry` for SetSchema / CollectionSchema.\n *\n * The runtime `typeof ref['set']` check below is the per-emission cost\n * the split is designed to remove.\n */\nexport const encodeKeyValueOperation: EncodeOperation = function (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree,\n index: number,\n operation: OPERATION,\n it: Iterator,\n) {\n const ref = changeTree.ref as any;\n if ((operation & OPERATION.ADD) === OPERATION.ADD && typeof ref['set'] === \"function\") {\n encodeMapEntry(encoder, bytes, changeTree, index, operation, it, false, false);\n } else {\n encodeIndexedEntry(encoder, bytes, changeTree, index, operation, it, false, false);\n }\n}\n\n/**\n * Used for collections (MapSchema, ArraySchema, etc.)\n * @private\n */\nexport const encodeArray: EncodeOperation = function (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree<ArraySchema>,\n field: number,\n operation: OPERATION,\n it: Iterator,\n isEncodeAll: boolean,\n hasView: boolean,\n) {\n // Read through `refTarget` so every property access below skips the\n // ArraySchema Proxy `get` trap. `refTarget` points at the raw backing\n // instance; `ref` (the Proxy) stays the user-facing identity.\n const ref = changeTree.refTarget as any;\n // ArraySchema stores its per-instance child type at `$childType`.\n // This encoder is array-only — there's no Schema fallback to consider.\n const type = ref[$childType];\n const useOperationByRefId = hasView && changeTree.isFiltered && typeof type !== \"string\";\n\n let refOrIndex: number;\n\n if (useOperationByRefId) {\n const item = ref.tmpItems[field];\n\n // Skip encoding if item is undefined (e.g. when clear() is called)\n if (!item) { return; }\n\n refOrIndex = item[$refId];\n\n if (operation === OPERATION.DELETE) {\n operation = OPERATION.DELETE_BY_REFID;\n\n } else if (operation === OPERATION.ADD) {\n operation = OPERATION.ADD_BY_REFID;\n }\n\n } else {\n refOrIndex = field;\n }\n\n // encode operation\n bytes[it.offset++] = operation & 255;\n\n // encode index\n encode.number(bytes, refOrIndex, it);\n\n // Do not encode value for DELETE operations\n if (operation === OPERATION.DELETE || operation === OPERATION.DELETE_BY_REFID) {\n return;\n }\n\n // `type` was already read above. Direct $getByIndex call — skips\n // ChangeTree.getValue's pass-through wrapper.\n const value = ref[$getByIndex](field, isEncodeAll);\n\n encodeValue(\n encoder,\n bytes,\n type,\n value,\n operation,\n it\n );\n}","import { OPERATION } from \"../encoding/spec.js\";\nimport { Metadata } from \"../Metadata.js\";\nimport { Schema } from \"../Schema.js\";\nimport type { IRef, Ref } from \"../encoder/ChangeTree.js\";\nimport type { Decoder } from \"./Decoder.js\";\nimport { Iterator, decode } from \"../encoding/decode.js\";\nimport { $childType, $deleteByIndex, $getByIndex, $proxyTarget, $refId } from \"../types/symbols.js\";\n\nimport type { ArraySchema } from \"../types/custom/ArraySchema.js\";\n\nimport { getType } from \"../types/registry.js\";\nimport { Collection } from \"../types/HelperTypes.js\";\n\nexport interface DataChange<T = any, F = string> {\n ref: IRef,\n refId: number,\n op: OPERATION,\n /** Set for Schema field changes; omitted for collection item changes (which carry a `dynamicIndex` instead). */\n field?: F;\n dynamicIndex?: number | string;\n value: T;\n previousValue: T;\n}\n\nexport const DEFINITION_MISMATCH = -1;\n\n/**\n * When no `triggerChanges` subscriber is attached, `Decoder.decode` passes\n * `null` so the per-field change objects are never allocated. Every push\n * site uses `allChanges?.push(...)` — optional chaining also short-circuits\n * the object literal, so there's nothing to collect and nothing to throw\n * away.\n */\nexport type DecodeOperation<T extends Schema = any> = (\n decoder: Decoder<T>,\n bytes: Uint8Array,\n it: Iterator,\n ref: IRef,\n allChanges: DataChange[] | null,\n) => number | void;\n\n/**\n * Collection-kind discriminator declared on each collection class as\n * `static COLLECTION_KIND = CollectionKind.X`. The decoder's key/value\n * dispatch used to make three back-to-back `typeof(ref.method) ===\n * \"function\"` checks per entry; those collapse into one switch on the\n * target's class tag. Missing / `undefined` on a ref hits the switch's\n * `default` branch and logs a warning — a guard for future collection\n * types that land without a tag.\n *\n * Declared as a `const` object (not a TS `enum`) so the codegen parser —\n * which picks up every `EnumDeclaration` in the lib source via transitive\n * imports — doesn't emit a generated .cs file for it.\n */\nexport const CollectionKind = {\n Map: 1,\n Array: 2,\n Set: 3,\n Collection: 4,\n Stream: 5,\n} as const;\nexport type CollectionKind = typeof CollectionKind[keyof typeof CollectionKind];\n\n/**\n * Structural type for any class that participates in the `decodeKeyValue-\n * Operation` dispatch. Lets the hot-path read `tgt.constructor.COLLECTION_KIND`\n * without an `any` cast.\n */\nexport interface CollectionCtor {\n readonly COLLECTION_KIND: CollectionKind;\n}\n\n/**\n * Decode the next wire value for `ref[index]`. Returns the decoded value.\n *\n * Callers pass `previousValue` explicitly — it's the current value at the\n * slot before decoding and is needed for ref-count bookkeeping (on DELETE)\n * and for the DELETE_AND_ADD self-reassign case. Keeping it as a parameter\n * lets this function return a single primitive instead of a pair, so the\n * hot call path allocates nothing.\n */\nexport function decodeValue<T extends Ref>(\n decoder: Decoder,\n operation: OPERATION,\n ref: T,\n index: number,\n previousValue: any,\n type: any,\n bytes: Uint8Array,\n it: Iterator,\n allChanges: DataChange[] | null,\n): any {\n const $root = decoder.root;\n\n let value: any;\n\n if ((operation & OPERATION.DELETE) === OPERATION.DELETE)\n {\n // Flag `refId` for garbage collection.\n const previousRefId = previousValue?.[$refId];\n if (previousRefId !== undefined) { $root.removeRef(previousRefId); }\n\n //\n // Delete operations\n //\n if (operation !== OPERATION.DELETE_AND_ADD) {\n ref[$deleteByIndex](index);\n }\n\n value = undefined;\n }\n\n if (operation === OPERATION.DELETE) {\n //\n // Don't do anything\n //\n\n } else if (typeof (type) === \"string\") {\n //\n // Primitive value (number, string, boolean, …). Hot-path first\n // because steady-state ticks are dominated by primitive field\n // updates — moves us past a cheap typeof check instead of a\n // Symbol-metadata lookup via `Schema.is`.\n //\n value = (decode as any)[type](bytes, it);\n\n } else if (Schema.is(type)) {\n const refId = decode.number(bytes, it);\n value = $root.refs.get(refId);\n\n if ((operation & OPERATION.ADD) === OPERATION.ADD) {\n const childType = decoder.getInstanceType(bytes, it, type);\n if (!value) {\n value = decoder.createInstanceOfType(childType);\n }\n\n $root.addRef(\n refId,\n value,\n (\n value !== previousValue || // increment ref count if value has changed\n (operation === OPERATION.DELETE_AND_ADD && value === previousValue) // increment ref count if the same instance is being added again\n )\n );\n }\n\n } else {\n const typeDef = getType(Object.keys(type)[0]);\n const refId = decode.number(bytes, it);\n\n // `initializeForDecoder` is a static on every registered collection\n // class — it does `Object.create(Class.prototype)` + the class-\n // field init + assigns an untracked `$changes` directly. Keeps\n // the decoder free of collection-type internals.\n const valueRef: Ref = ($root.refs.has(refId))\n ? previousValue || $root.refs.get(refId)\n : (typeDef.constructor as any).initializeForDecoder();\n\n value = valueRef.clone(true);\n value[$childType] = Object.values(type)[0]; // cache childType for ArraySchema and MapSchema\n\n if (previousValue) {\n let previousRefId = previousValue[$refId];\n\n if (previousRefId !== undefined && refId !== previousRefId) {\n //\n // enqueue onRemove if structure has been replaced.\n //\n const entries: IterableIterator<[any, any]> = (previousValue as any).entries();\n let iter: IteratorResult<[any, any]>;\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n\n // if value is a schema, remove its reference\n if (typeof(value) === \"object\") {\n previousRefId = value[$refId];\n $root.removeRef(previousRefId);\n }\n\n allChanges?.push({\n ref: previousValue,\n refId: previousRefId,\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value,\n });\n }\n\n }\n }\n\n $root.addRef(refId, value, (\n valueRef !== previousValue ||\n (operation === OPERATION.DELETE_AND_ADD && valueRef === previousValue)\n ));\n }\n\n return value;\n}\n\nexport const decodeSchemaOperation: DecodeOperation = function <T extends Schema>(\n decoder: Decoder<any>,\n bytes: Uint8Array,\n it: Iterator,\n ref: T,\n allChanges: DataChange[] | null,\n) {\n const first_byte = bytes[it.offset++];\n const metadata: Metadata = (ref.constructor as typeof Schema)[Symbol.metadata];\n\n // \"compressed\" index + operation\n const operation = (first_byte >> 6) << 6\n const index = first_byte % (operation || 255);\n\n // skip early if field is not defined\n const field = metadata[index];\n if (field === undefined) {\n console.warn(\"@colyseus/schema: field not defined at\", { index, ref: ref.constructor.name, metadata });\n return DEFINITION_MISMATCH;\n }\n\n const previousValue = ref[$getByIndex](index);\n const value = decodeValue(\n decoder,\n operation,\n ref,\n index,\n previousValue,\n field.type,\n bytes,\n it,\n allChanges,\n );\n\n if (value !== null && value !== undefined) {\n // Write via the generated setter. Bypass to `(ref as any)[$values][index]`\n // was attempted but only works for @type-decorated classes (which\n // install accessor descriptors reading from `$values`). Reflection-\n // decoded classes install a plain data-property descriptor instead,\n // so their value lives as an own property on the instance — direct\n // `$values[index]` writes are invisible to the getter on that path.\n // Two-mode dispatch would cost more than the ~3% it'd save.\n ref[field.name as keyof T] = value;\n }\n\n // add change\n if (previousValue !== value) {\n allChanges?.push({\n ref,\n refId: decoder.currentRefId,\n op: operation,\n field: field.name,\n value,\n previousValue,\n });\n }\n}\n\nexport const decodeKeyValueOperation: DecodeOperation = function (\n decoder: Decoder<any>,\n bytes: Uint8Array,\n it: Iterator,\n ref: Ref,\n allChanges: DataChange[] | null,\n) {\n // Unwrap ArraySchema Proxy once so subsequent property reads skip the\n // `get` trap. `$proxyTarget` is a self-reference on the target; on\n // non-proxied collections (Map/Set/Collection/Stream) the lookup is\n // undefined and we fall back to `ref`.\n const tgt: any = (ref as any)[$proxyTarget] ?? ref;\n\n // \"uncompressed\" index + operation (array/map items)\n const operation = bytes[it.offset++];\n\n if (operation === OPERATION.CLEAR) {\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n decoder.removeChildRefs(tgt as Collection, allChanges);\n\n tgt.clear();\n return;\n }\n\n const index = decode.number(bytes, it);\n const type = tgt[$childType];\n // One constructor lookup, one integer read → switch. Replaces three\n // `typeof(ref.method) === \"function\"` dispatches per entry.\n const kind: CollectionKind = (tgt.constructor as CollectionCtor).COLLECTION_KIND;\n\n let dynamicIndex: number | string;\n\n if ((operation & OPERATION.ADD) === OPERATION.ADD) { // ADD or DELETE_AND_ADD\n if (kind === CollectionKind.Map) {\n dynamicIndex = decode.string(bytes, it); // MapSchema uses a wire-delivered string key\n tgt.setIndex(index, dynamicIndex);\n } else {\n dynamicIndex = index;\n }\n } else {\n dynamicIndex = tgt.getIndex(index);\n }\n\n const previousValue = tgt[$getByIndex](index);\n const value = decodeValue(\n decoder,\n operation,\n ref,\n index,\n previousValue,\n type,\n bytes,\n it,\n allChanges,\n );\n\n if (value !== null && value !== undefined) {\n switch (kind) {\n case CollectionKind.Map:\n tgt.$items.set(dynamicIndex as string, value);\n break;\n\n case CollectionKind.Array:\n tgt.$setAt(index, value, operation);\n break;\n\n // SetSchema / CollectionSchema / StreamSchema — use the wire-\n // index we decoded above so server/client `$items` stay in sync\n // regardless of duplicate emission (e.g. a bootstrap that walks\n // both `encodeAll` and the shared recorder emits the same ADD\n // op twice). Previous implementation called `ref.add(value)`\n // and let the decoder-side `$refId++` allocate a new index per\n // call — which for CollectionSchema (no value-dedup) turned\n // duplicate wire ADDs into duplicate client-side entries.\n case CollectionKind.Set:\n case CollectionKind.Collection:\n case CollectionKind.Stream:\n if (!tgt.$items.has(index)) {\n tgt.$items.set(index, value);\n // Keep the decoder's monotonic counter ahead of any\n // wire-index we've seen so future server-side `.add()`\n // allocations don't collide with ones already decoded.\n // (StreamSchema has no `$refId` counter — `typeof`\n // guards the Set/Collection path.)\n if (typeof tgt.$refId === \"number\" && index >= tgt.$refId) {\n tgt.$refId = index + 1;\n }\n }\n break;\n\n default:\n // A future collection type landed without a COLLECTION_KIND\n // tag. Surface it loudly instead of silently dropping the\n // value — the missing entry here is the only place the new\n // type's item-storage semantics need to be wired up.\n console.warn(\n `@colyseus/schema: missing COLLECTION_KIND on ${tgt.constructor?.name} — item at index ${index} was not stored.`\n );\n break;\n }\n }\n\n // add change\n if (previousValue !== value) {\n allChanges?.push({\n ref,\n refId: decoder.currentRefId,\n op: operation,\n dynamicIndex,\n value,\n previousValue,\n });\n }\n}\n\nexport const decodeArray: DecodeOperation = function (\n decoder: Decoder<any>,\n bytes: Uint8Array,\n it: Iterator,\n ref: ArraySchema,\n allChanges: DataChange[] | null,\n) {\n // Unwrap the Proxy once — ref is always an ArraySchema here.\n const tgt: any = (ref as any)[$proxyTarget] ?? ref;\n\n // \"uncompressed\" index + operation (array/map items)\n let operation = bytes[it.offset++];\n let index: number;\n\n if (operation === OPERATION.CLEAR) {\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n decoder.removeChildRefs(tgt as Collection, allChanges);\n tgt.clear();\n return;\n\n } else if (operation === OPERATION.REVERSE) {\n tgt.reverse();\n return;\n\n } else if (operation === OPERATION.DELETE_BY_REFID) {\n // TODO: refactor here, try to follow same flow as below\n const refId = decode.number(bytes, it);\n const previousValue = decoder.root.refs.get(refId);\n index = tgt.findIndex((value: any) => value === previousValue);\n tgt[$deleteByIndex](index);\n allChanges?.push({\n ref,\n refId: decoder.currentRefId,\n op: OPERATION.DELETE,\n dynamicIndex: index,\n value: undefined,\n previousValue,\n });\n\n return;\n\n } else if (operation === OPERATION.ADD_BY_REFID) {\n const refId = decode.number(bytes, it);\n const itemByRefId = decoder.root.refs.get(refId);\n\n // if item already exists, use existing index\n if (itemByRefId) {\n index = tgt.findIndex((value: any) => value === itemByRefId);\n }\n\n // fallback to use last index\n if (index === -1 || index === undefined) {\n index = tgt.length;\n }\n\n } else {\n index = decode.number(bytes, it);\n }\n\n const type = tgt[$childType];\n\n let dynamicIndex: number | string = index;\n\n // Direct `items[index]` read — ArraySchema's `$getByIndex` is encoder-only\n // (it consults `tmpItems`/`deletedIndexes`, which the decoder doesn't\n // maintain). The decoder's authoritative state is `items`.\n const previousValue = tgt.items[index];\n const value = decodeValue(\n decoder,\n operation,\n ref,\n index,\n previousValue,\n type,\n bytes,\n it,\n allChanges,\n );\n\n if (\n value !== null && value !== undefined &&\n value !== previousValue // avoid setting same value twice (if index === 0 it will result in a \"unshift\" for ArraySchema)\n ) {\n tgt.$setAt(index, value, operation);\n }\n\n // add change\n if (previousValue !== value) {\n allChanges?.push({\n ref,\n refId: decoder.currentRefId,\n op: operation,\n dynamicIndex,\n value,\n previousValue,\n });\n }\n}","import type { Schema } from \"../Schema.js\";\nimport type { CollectionSchema } from \"../types/custom/CollectionSchema.js\";\nimport type { MapSchema } from \"../types/custom/MapSchema.js\";\nimport type { SetSchema } from \"../types/custom/SetSchema.js\";\nimport type { ArraySchema } from \"../types/custom/ArraySchema.js\";\nimport type { Ref } from \"../encoder/ChangeTree.js\";\n\nexport class EncodeSchemaError extends Error {}\n\nexport function assertType(value: any, type: string, klass: Schema, field: string | number) {\n let typeofTarget: string;\n let allowNull: boolean = false;\n\n switch (type) {\n case \"number\":\n case \"int8\":\n case \"uint8\":\n case \"int16\":\n case \"uint16\":\n case \"int32\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"float32\":\n case \"float64\":\n typeofTarget = \"number\";\n if (isNaN(value)) {\n console.log(`trying to encode \"NaN\" in ${klass.constructor.name}#${field}`);\n }\n break;\n case \"bigint64\":\n case \"biguint64\":\n typeofTarget = \"bigint\";\n break;\n case \"string\":\n typeofTarget = \"string\";\n allowNull = true;\n break;\n case \"boolean\":\n // boolean is always encoded as true/false based on truthiness\n return;\n default:\n // skip assertion for custom types\n // TODO: allow custom types to define their own assertions\n return;\n }\n\n if (typeof (value) !== typeofTarget && (!allowNull || (allowNull && value !== null))) {\n let foundValue = `'${JSON.stringify(value)}'${(value && value.constructor && ` (${value.constructor.name})`) || ''}`;\n throw new EncodeSchemaError(`a '${typeofTarget}' was expected, but ${foundValue} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nexport function assertInstanceType(\n value: Ref,\n type: typeof Schema\n | typeof ArraySchema\n | typeof MapSchema\n | typeof CollectionSchema\n | typeof SetSchema,\n instance: Ref,\n field: string | number,\n) {\n if (!(value instanceof type)) {\n throw new EncodeSchemaError(`a '${type.name}' was expected, but '${value && (value as any).constructor.name}' was provided in ${instance.constructor.name}#${field}`);\n }\n}","import { $changes, $childType, $decoder, $deleteByIndex, $onEncodeEnd, $encoder, $filter, $getByIndex, $onDecodeEnd, $proxyTarget, $refId } from \"../symbols.js\";\nimport type { Schema } from \"../../Schema.js\";\nimport { type IRef, ChangeTree, installUntrackedChangeTree } from \"../../encoder/ChangeTree.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport { Collection } from \"../HelperTypes.js\";\n\nimport { encodeArray } from \"../../encoder/EncodeOperation.js\";\nimport { CollectionKind, decodeArray } from \"../../decoder/DecodeOperation.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport { assertInstanceType } from \"../../encoding/assert.js\";\n\nconst DEFAULT_SORT = (a: any, b: any) => {\n const A = a.toString();\n const B = b.toString();\n if (A < B) return -1;\n else if (A > B) return 1;\n else return 0\n}\n\n/**\n * Module-level Proxy handler shared by every `ArraySchema` instance. Hoisted\n * out of the ctor so per-instance Proxy setup stops allocating ~6 arrow\n * closures (the `__name` wrappers around those closures dominated one slice\n * of the decoder profile). The handlers reference the target via the trap's\n * `obj` arg — they don't need a captured `this`. Both `new ArraySchema()`\n * and `ArraySchema.initializeForDecoder()` plug into it.\n */\nconst ARRAY_PROXY_HANDLER: ProxyHandler<any> = {\n get: (obj, prop) => {\n if (\n typeof (prop) !== \"symbol\" &&\n // FIXME: d8 accuses this as low performance\n !isNaN(prop as any) // https://stackoverflow.com/a/175787/892698\n ) {\n return obj.items[prop as unknown as number];\n }\n return Reflect.get(obj, prop);\n },\n\n set: (obj, key, setValue) => {\n if (typeof (key) !== \"symbol\" && !isNaN(key as any)) {\n if (setValue === undefined || setValue === null) {\n obj.$deleteAt(key as unknown as number);\n\n } else {\n if (setValue[$changes]) {\n assertInstanceType(setValue, obj[$childType] as typeof Schema, obj, key);\n\n const previousValue = obj.items[key as unknown as number];\n\n if (!obj.isMovingItems) {\n obj.$changeAt(Number(key), setValue);\n\n } else {\n if (previousValue !== undefined) {\n if (setValue[$changes].isNew) {\n obj[$changes].indexedOperation(Number(key), OPERATION.MOVE_AND_ADD);\n\n } else {\n if ((obj[$changes].getChange(Number(key)) & OPERATION.DELETE) === OPERATION.DELETE) {\n obj[$changes].indexedOperation(Number(key), OPERATION.DELETE_AND_MOVE);\n\n } else {\n obj[$changes].indexedOperation(Number(key), OPERATION.MOVE);\n }\n }\n\n } else if (setValue[$changes].isNew) {\n obj[$changes].indexedOperation(Number(key), OPERATION.ADD);\n }\n\n setValue[$changes].setParent(obj, obj[$changes].root, key);\n }\n\n if (previousValue !== undefined) {\n // remove root reference from previous value\n previousValue[$changes].root?.remove(previousValue[$changes]);\n }\n\n } else {\n obj.$changeAt(Number(key), setValue);\n }\n\n obj.items[key as unknown as number] = setValue;\n obj.tmpItems[key as unknown as number] = setValue;\n }\n\n return true;\n }\n return Reflect.set(obj, key, setValue);\n },\n\n deleteProperty: (obj, prop) => {\n if (typeof (prop) === \"number\") {\n obj.$deleteAt(prop);\n } else {\n delete obj[prop as unknown as number];\n }\n return true;\n },\n\n has: (obj, key) => {\n if (typeof (key) !== \"symbol\" && !isNaN(Number(key))) {\n return Reflect.has(obj.items, key);\n }\n return Reflect.has(obj, key);\n },\n};\n\nexport class ArraySchema<V = any> implements Array<V>, Collection<number, V>, IRef {\n [n: number]: V;\n [$changes]: ChangeTree;\n [$refId]?: number;\n [$proxyTarget]: this;\n\n protected [$childType]: string | typeof Schema;\n\n protected items: V[] = [];\n protected tmpItems: V[] = [];\n protected deletedIndexes: boolean[] = [];\n protected isMovingItems = false;\n\n static [$encoder] = encodeArray;\n static [$decoder] = decodeArray;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Array;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: ArraySchema, index: number, view: StateView) {\n return (\n !view ||\n typeof (ref[$childType]) === \"string\" ||\n view.isChangeTreeVisible(ref['tmpItems'][index]?.[$changes])\n );\n }\n\n static is(type: any) {\n return (\n // type format: [\"string\"]\n Array.isArray(type) ||\n\n // type format: { array: \"string\" }\n (type['array'] !== undefined)\n );\n }\n\n static from<T>(iterable: Iterable<T> | ArrayLike<T>) {\n return new ArraySchema<T>(...Array.from(iterable));\n }\n\n constructor (...items: V[]) {\n this[$childType] = undefined as any;\n // Self-reference so methods called via the Proxy can recover the\n // underlying instance and access fields directly. See $proxyTarget.\n this[$proxyTarget] = this;\n\n const proxy = new Proxy(this, ARRAY_PROXY_HANDLER);\n\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(proxy),\n enumerable: false,\n writable: true,\n });\n\n if (items.length > 0) {\n this.push(...items);\n }\n\n return proxy;\n }\n\n /**\n * Decoder-side factory. Skips the `ChangeTree` allocation and\n * replicates the class-field initializers by hand (since `Object.create`\n * bypasses them). Must stay in sync with the class-field declarations\n * and the constructor body above.\n *\n * Pass the Proxy to `installUntrackedChangeTree` as the public identity\n * so children set their parent to the Proxy, not the raw target.\n */\n static initializeForDecoder<V = any>(): ArraySchema<V> {\n const self: any = Object.create(ArraySchema.prototype);\n self.items = [];\n // `tmpItems` / `deletedIndexes` are encoder-only (consulted by the\n // staged-snapshot path in `$getByIndex`, `$onEncodeEnd`, etc.). The\n // decoder reads from `items` directly and never maintains them.\n self.isMovingItems = false;\n self[$childType] = undefined;\n self[$proxyTarget] = self;\n\n const proxy = new Proxy(self, ARRAY_PROXY_HANDLER);\n installUntrackedChangeTree(self, proxy);\n return proxy;\n }\n\n set length (newLength: number) {\n if (newLength === 0) {\n this.clear();\n } else if (newLength < this.items.length) {\n this.splice(newLength, this.length - newLength);\n } else {\n console.warn(\"ArraySchema: can't set .length to a higher value than its length.\");\n }\n }\n\n get length() {\n return this.items.length;\n }\n\n // ────── Change tracking control (same API as Schema) ──────\n pauseTracking(): void { this[$changes].pause(); }\n resumeTracking(): void { this[$changes].resume(); }\n untracked<T>(fn: () => T): T { return this[$changes].untracked(fn); }\n get isTrackingPaused(): boolean { return this[$changes].paused; }\n\n push(...values: V[]) {\n // `this` is the Proxy when called from user code. Grab the underlying\n // instance once so the body's field reads (items, tmpItems, $changes,\n // $childType) skip the Proxy.get trap on every iteration.\n const self = this[$proxyTarget];\n const items = self.items;\n const tmpItems = self.tmpItems;\n const changeTree = self[$changes];\n const childType = self[$childType];\n let length = tmpItems.length;\n\n for (let i = 0, l = values.length; i < l; i++, length++) {\n const value = values[i];\n\n if (value === undefined || value === null) {\n // skip null values\n return;\n\n } else if (typeof (value) === \"object\" && childType) {\n assertInstanceType(value as any, childType as typeof Schema, self, i);\n // TODO: move value[$changes]?.setParent() to this block.\n }\n\n changeTree.indexedOperation(length, OPERATION.ADD);\n\n items.push(value);\n tmpItems.push(value);\n\n //\n // set value's parent after the value is set\n // (to avoid encoding \"refId\" operations before parent's \"ADD\" operation)\n // Pass `this` (the Proxy) as parent — the Proxy is the public\n // identity of the array; ChangeTree.parentRef compares by identity.\n //\n value[$changes]?.setParent(this, changeTree.root, length);\n }\n\n return length;\n }\n\n /**\n * Removes the last element from an array and returns it.\n */\n pop(): V | undefined {\n // Unwrap Proxy once — see push() for rationale.\n const self = this[$proxyTarget];\n const tmpItems = self.tmpItems;\n const deletedIndexes = self.deletedIndexes;\n let index: number = -1;\n\n // find last non-undefined index\n for (let i = tmpItems.length - 1; i >= 0; i--) {\n if (deletedIndexes[i] !== true) {\n index = i;\n break;\n }\n }\n\n if (index < 0) {\n return undefined;\n }\n\n self[$changes].delete(index);\n deletedIndexes[index] = true;\n\n return self.items.pop();\n }\n\n at(index: number) {\n // Allow negative indexing from the end\n if (index < 0) index += this.length;\n return this.items[index];\n }\n\n // encoding only\n protected $changeAt(index: number, value: V) {\n if (value === undefined || value === null) {\n console.error(\"ArraySchema items cannot be null nor undefined; Use `deleteAt(index)` instead.\");\n return;\n }\n\n // skip if the value is the same as cached.\n if (this.items[index] === value) {\n return;\n }\n\n const operation = (this.items[index] !== undefined)\n ? typeof(value) === \"object\"\n ? OPERATION.DELETE_AND_ADD // schema child\n : OPERATION.REPLACE // primitive\n : OPERATION.ADD;\n\n const changeTree = this[$changes];\n changeTree.change(index, operation);\n\n //\n // set value's parent after the value is set\n // (to avoid encoding \"refId\" operations before parent's \"ADD\" operation)\n //\n value[$changes]?.setParent(this, changeTree.root, index);\n }\n\n // encoding only\n protected $deleteAt(index: number, operation?: OPERATION) {\n this[$changes].delete(index, operation);\n }\n\n // decoding only\n protected $setAt(index: number, value: V, operation: OPERATION) {\n if (\n index === 0 &&\n operation === OPERATION.ADD &&\n this.items[index] !== undefined\n ) {\n // handle decoding unshift\n this.items.unshift(value);\n\n } else if (operation === OPERATION.DELETE_AND_MOVE) {\n this.items.splice(index, 1);\n this.items[index] = value;\n\n } else {\n this.items[index] = value;\n }\n }\n\n clear() {\n const self = this[$proxyTarget];\n // skip if already clear\n if (self.items.length === 0) {\n return;\n }\n\n // discard previous operations.\n const changeTree = self[$changes];\n\n // remove children references\n changeTree.forEachChild((childChangeTree, _) => {\n changeTree.root?.remove(childChangeTree);\n });\n\n changeTree.discard();\n changeTree.operation(OPERATION.CLEAR);\n\n self.items.length = 0;\n self.tmpItems.length = 0;\n }\n\n /**\n * Combines two or more arrays.\n * @param items Additional items to add to the end of array1.\n */\n // @ts-ignore\n concat(...items: (V | ConcatArray<V>)[]): ArraySchema<V> {\n return new ArraySchema(...this.items.concat(...items));\n }\n\n /**\n * Adds all the elements of an array separated by the specified separator string.\n * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\n */\n join(separator?: string): string {\n return this.items.join(separator);\n }\n\n /**\n * Reverses the elements in an Array.\n */\n // @ts-ignore\n reverse(): ArraySchema<V> {\n const self = this[$proxyTarget];\n self[$changes].operation(OPERATION.REVERSE);\n self.items.reverse();\n self.tmpItems.reverse();\n return this;\n }\n\n /**\n * Removes the first element from an array and returns it.\n */\n shift(): V | undefined {\n const self = this[$proxyTarget];\n const items = self.items;\n if (items.length === 0) { return undefined; }\n\n const changeTree = self[$changes];\n const first = items[0];\n const index = self.tmpItems.findIndex(item => item === first);\n changeTree.delete(index, OPERATION.DELETE);\n self.deletedIndexes[index] = true;\n\n return items.shift();\n }\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array.\n * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n */\n slice(start?: number, end?: number): V[] {\n const sliced = new ArraySchema<V>();\n sliced.push(...this.items.slice(start, end));\n return sliced as unknown as V[];\n }\n\n /**\n * Sorts an array.\n * @param compareFn Function used to determine the order of the elements. It is expected to return\n * a negative value if first argument is less than second argument, zero if they're equal and a positive\n * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\n * ```ts\n * [11,2,22,1].sort((a, b) => a - b)\n * ```\n */\n sort(compareFn: (a: V, b: V) => number = DEFAULT_SORT): this {\n const self = this[$proxyTarget];\n self.isMovingItems = true;\n\n const changeTree = self[$changes];\n const sortedItems = self.items.sort(compareFn);\n\n // wouldn't OPERATION.MOVE make more sense here?\n sortedItems.forEach((_, i) => changeTree.change(i, OPERATION.REPLACE));\n\n self.tmpItems.sort(compareFn);\n\n self.isMovingItems = false;\n return this;\n }\n\n /**\n * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @param insertItems Elements to insert into the array in place of the deleted elements.\n */\n splice(\n start: number,\n deleteCount?: number,\n ...insertItems: V[]\n ): V[] {\n const self = this[$proxyTarget];\n const changeTree = self[$changes];\n const items = self.items;\n const tmpItems = self.tmpItems;\n const deletedIndexes = self.deletedIndexes;\n\n const itemsLength = items.length;\n const tmpItemsLength = tmpItems.length;\n const insertCount = insertItems.length;\n\n // build up-to-date list of indexes, excluding removed values.\n const indexes: number[] = [];\n for (let i = 0; i < tmpItemsLength; i++) {\n if (deletedIndexes[i] !== true) {\n indexes.push(i);\n }\n }\n\n if (itemsLength > start) {\n // if deleteCount is not provided, delete all items from start to end\n if (deleteCount === undefined) {\n deleteCount = itemsLength - start;\n }\n\n //\n // delete operations at correct index\n //\n for (let i = start; i < start + deleteCount; i++) {\n const index = indexes[i];\n changeTree.delete(index, OPERATION.DELETE);\n deletedIndexes[index] = true;\n }\n\n } else {\n // not enough items to delete\n deleteCount = 0;\n }\n\n // insert operations\n if (insertCount > 0) {\n if (insertCount > deleteCount) {\n console.error(\"Inserting more elements than deleting during ArraySchema#splice()\");\n throw new Error(\"ArraySchema#splice(): insertCount must be equal or lower than deleteCount.\");\n }\n\n for (let i = 0; i < insertCount; i++) {\n const addIndex = (indexes[start] ?? itemsLength) + i;\n\n changeTree.indexedOperation(\n addIndex,\n (deletedIndexes[addIndex])\n ? OPERATION.DELETE_AND_ADD\n : OPERATION.ADD\n );\n\n // set value's parent/root — use `this` (Proxy) as parent.\n insertItems[i][$changes]?.setParent(this, changeTree.root, addIndex);\n }\n }\n\n changeTree.root?.enqueueChangeTree(changeTree);\n\n return items.splice(start, deleteCount, ...insertItems);\n }\n\n /**\n * Inserts new elements at the start of an array.\n * @param items Elements to insert at the start of the Array.\n */\n unshift(...items: V[]): number {\n const self = this[$proxyTarget];\n const changeTree = self[$changes];\n\n // Existing items shift up — `shiftChangeIndexes` handles their\n // relocation bookkeeping. The prepended `items` are genuinely new\n // (no prior existence to MOVE), so each records an ADD.\n changeTree.shiftChangeIndexes(items.length);\n items.forEach((_, index) => {\n changeTree.change(index, OPERATION.ADD)\n });\n\n self.tmpItems.unshift(...items);\n\n return self.items.unshift(...items);\n }\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n indexOf(searchElement: V, fromIndex?: number): number {\n return this.items.indexOf(searchElement, fromIndex);\n }\n\n /**\n * Returns the index of the last occurrence of a specified value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\n */\n lastIndexOf(searchElement: V, fromIndex: number = this.length - 1): number {\n return this.items.lastIndexOf(searchElement, fromIndex);\n }\n\n /**\n * Determines whether all the members of an array satisfy the specified test.\n * @param callbackfn A function that accepts up to three arguments. The every method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value false, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n every<S extends V>(predicate: (value: V, index: number, array: V[]) => value is S, thisArg?: any): this is S[];\n every(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean;\n every(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return this.items.every(callbackfn, thisArg);\n }\n\n /**\n * Determines whether the specified callback function returns true for any element of an array.\n * @param callbackfn A function that accepts up to three arguments. The some method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value true, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n some(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return this.items.some(callbackfn, thisArg);\n }\n\n /**\n * Performs the specified action for each element in an array.\n * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n forEach(callbackfn: (value: V, index: number, array: V[]) => void, thisArg?: any): void {\n return this.items.forEach(callbackfn, thisArg);\n }\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n map<U>(callbackfn: (value: V, index: number, array: V[]) => U, thisArg?: any): U[] {\n return this.items.map(callbackfn, thisArg);\n }\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n filter(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): V[]\n filter<S extends V>(callbackfn: (value: V, index: number, array: V[]) => value is S, thisArg?: any): V[] {\n return this.items.filter(callbackfn, thisArg);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduce<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return this.items.reduce(callbackfn, initialValue);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduceRight<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return this.items.reduceRight(callbackfn, initialValue);\n }\n\n /**\n * Returns the value of the first element in the array where predicate is true, and undefined\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found, find\n * immediately returns that element value. Otherwise, find returns undefined.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n find(predicate: (value: V, index: number, obj: V[]) => boolean, thisArg?: any): V | undefined {\n return this.items.find(predicate, thisArg);\n }\n\n /**\n * Returns the index of the first element in the array where predicate is true, and -1\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n findIndex(predicate: (value: V, index: number, obj: V[]) => unknown, thisArg?: any): number {\n return this.items.findIndex(predicate, thisArg);\n }\n\n /**\n * Returns the this object after filling the section identified by start and end with value\n * @param value value to fill array section with\n * @param start index to start filling the array at. If start is negative, it is treated as\n * length+start where length is the length of the array.\n * @param end index to stop filling the array at. If end is negative, it is treated as\n * length+end.\n */\n fill(value: V, start?: number, end?: number): this {\n throw new Error(\"ArraySchema#fill() not implemented\");\n }\n\n /**\n * Returns the this object after copying a section of the array identified by start and end\n * to the same array starting at position target\n * @param target If target is negative, it is treated as length+target where length is the\n * length of the array.\n * @param start If start is negative, it is treated as length+start. If end is negative, it\n * is treated as length+end.\n * @param end If not specified, length of the this object is used as its default value.\n */\n copyWithin(target: number, start: number, end?: number): this {\n throw new Error(\"ArraySchema#copyWithin() not implemented\");\n }\n\n /**\n * Returns a string representation of an array.\n */\n toString(): string {\n return this.items.toString();\n }\n\n /**\n * Returns a string representation of an array. The elements are converted to string using their toLocalString methods.\n */\n toLocaleString(): string {\n return this.items.toLocaleString()\n };\n\n /** Iterator */\n [Symbol.iterator](): ArrayIterator<V> {\n return this.items[Symbol.iterator]();\n }\n\n static get [Symbol.species]() {\n return ArraySchema;\n }\n\n // WORKAROUND for compatibility\n // - TypeScript 4 defines @@unscopables as a function\n // - TypeScript 5 defines @@unscopables as an object\n [Symbol.unscopables]: any;\n\n /**\n * Returns an iterable of key, value pairs for every entry in the array\n */\n entries(): ArrayIterator<[number, V]> { return this.items.entries(); }\n\n /**\n * Returns an iterable of keys in the array\n */\n keys(): ArrayIterator<number> { return this.items.keys(); }\n\n /**\n * Returns an iterable of values in the array\n */\n values(): ArrayIterator<V> { return this.items.values(); }\n\n /**\n * Determines whether an array includes a certain element, returning true or false as appropriate.\n * @param searchElement The element to search for.\n * @param fromIndex The position in this array at which to begin searching for searchElement.\n */\n includes(searchElement: V, fromIndex?: number): boolean {\n return this.items.includes(searchElement, fromIndex);\n }\n\n //\n // ES2022\n //\n\n /**\n * Calls a defined callback function on each element of an array. Then, flattens the result into\n * a new array.\n * This is identical to a map followed by flat with depth 1.\n *\n * @param callback A function that accepts up to three arguments. The flatMap method calls the\n * callback function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callback function. If\n * thisArg is omitted, undefined is used as the this value.\n */\n // @ts-ignore\n flatMap<U, This = undefined>(callback: (this: This, value: V, index: number, array: V[]) => U | ReadonlyArray<U>, thisArg?: This): U[] {\n // @ts-ignore\n throw new Error(\"ArraySchema#flatMap() is not supported.\");\n }\n\n /**\n * Returns a new array with all sub-array elements concatenated into it recursively up to the\n * specified depth.\n *\n * @param depth The maximum recursion depth\n */\n // @ts-ignore\n flat<A, D extends number = 1>(this: A, depth?: D): any {\n throw new Error(\"ArraySchema#flat() is not supported.\");\n }\n\n findLast() {\n // @ts-ignore\n return this.items.findLast.apply(this.items, arguments);\n }\n\n findLastIndex(...args: any[]) {\n // @ts-ignore\n return this.items.findLastIndex.apply(this.items, arguments);\n }\n\n //\n // ES2023\n //\n with(index: number, value: V): ArraySchema<V> {\n const copy = this.items.slice();\n // Allow negative indexing from the end\n if (index < 0) index += this.length;\n copy[index] = value;\n return new ArraySchema(...copy);\n }\n toReversed(): V[] {\n return this.items.slice().reverse();\n }\n toSorted(compareFn?: (a: V, b: V) => number): V[] {\n return this.items.slice().sort(compareFn);\n }\n toSpliced(start: number, deleteCount: number, ...items: V[]): V[];\n toSpliced(start: number, deleteCount?: number): V[];\n // @ts-ignore\n toSpliced(start: unknown, deleteCount?: unknown, ...items?: unknown[]): V[] {\n // @ts-ignore\n return this.items.toSpliced.apply(copy, arguments);\n }\n\n shuffle() {\n return this.move((_) => {\n let currentIndex = this.items.length;\n while (currentIndex != 0) {\n let randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n [this[currentIndex], this[randomIndex]] = [this[randomIndex], this[currentIndex]];\n }\n });\n }\n\n /**\n * Allows to move items around in the array.\n *\n * Example:\n * state.cards.move((cards) => {\n * [cards[4], cards[3]] = [cards[3], cards[4]];\n * [cards[3], cards[2]] = [cards[2], cards[3]];\n * [cards[2], cards[0]] = [cards[0], cards[2]];\n * [cards[1], cards[1]] = [cards[1], cards[1]];\n * [cards[0], cards[0]] = [cards[0], cards[0]];\n * })\n *\n * @param cb\n * @returns\n */\n move(cb: (arr: this) => void) {\n this.isMovingItems = true;\n cb(this);\n this.isMovingItems = false;\n return this;\n }\n\n /**\n * Encoder-only. Reads the staged-snapshot (`tmpItems`) so the encoder can\n * resolve a wire-index even after the user has mutated `items` mid-tick.\n * The decoder reads `items[index]` directly — see `decodeArray` and\n * `$deleteByIndex` below.\n */\n [$getByIndex](index: number, isEncodeAll: boolean = false): any {\n return (isEncodeAll)\n ? this.items[index]\n : this.deletedIndexes[index]\n ? this.items[index]\n : this.tmpItems[index] || this.items[index];\n }\n\n [$deleteByIndex](index: number): void {\n this.items[index] = undefined;\n }\n\n protected [$onEncodeEnd]() {\n this.tmpItems = this.items.slice();\n this.deletedIndexes.length = 0;\n }\n\n protected [$onDecodeEnd]() {\n this.items = this.items.filter((item) => item !== undefined);\n }\n\n toArray() {\n return this.items.slice(0);\n }\n\n toJSON() {\n return this.toArray().map((value: any) => {\n return (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): ArraySchema<V> {\n let cloned: ArraySchema;\n\n if (isDecoding) {\n cloned = new ArraySchema();\n cloned.push(...this.items);\n\n } else {\n cloned = new ArraySchema(...this.map(item => (\n (item[$changes])\n ? (item as any as Schema).clone()\n : item\n )));\n }\n\n return cloned;\n };\n\n}\n\nregisterType(\"array\", { constructor: ArraySchema });\n","/**\n * MapJournal — owns the change-tracking and wire-protocol identity for a MapSchema.\n *\n * Replaces three parallel structures that previously lived on MapSchema:\n * - `$indexes: Map<number, K>` → `keyByIndex`\n * - `_collectionIndexes: { [key]: number }` (+ counter) → `indexByKey` + `nextIndex`\n * - `deletedItems: { [index]: V }` → `snapshots`\n *\n * The journal is the single source of truth for:\n * - assigning wire-protocol indexes to keys (server side)\n * - looking up keys from wire indexes (server + client)\n * - holding snapshots of removed values (for view-filter visibility checks)\n *\n * The journal does NOT track per-index operation types or maintain enqueue\n * order — those remain on `ChangeTree` for now. A future iteration may pull\n * them in too, but this version is intentionally scoped to the data-model\n * cleanup so we can validate the abstraction before going deeper.\n */\nexport class MapJournal<K = any> {\n /** index → key (was MapSchema.$indexes). Used by encoder and decoder. */\n keyByIndex: Map<number, K> = new Map();\n\n /**\n * key → index (was MapSchema._collectionIndexes — forward direction).\n * Server-only. Plain object so MapSchema can expose it via a getter\n * for backwards-compatible `_collectionIndexes?.[key]` access from\n * ChangeTree.forEachChild and similar polymorphic call sites.\n */\n indexByKey: { [key: string]: number } = {};\n\n /** Monotonic counter for assigning new indexes. Server-only. */\n private nextIndex: number = 0;\n\n /**\n * Snapshot of values at the moment they were deleted. Lazy — only\n * allocated on first delete, since most maps are pure-grow and never\n * touch this. Used by `MapSchema[$filter]` to check view visibility\n * of a value that's already been removed from `$items` but whose\n * DELETE op is still in the encode queue.\n */\n snapshots?: Map<number, any>;\n\n // ──────────────────────────────────────────────────────────────────\n // Server-side: recording mutations\n // ──────────────────────────────────────────────────────────────────\n\n /** Get the index assigned to a key, or undefined if never assigned. */\n indexOf(key: K): number | undefined {\n const idx = this.indexByKey[key as unknown as string];\n return idx === undefined ? undefined : idx;\n }\n\n /** Assign and return a new wire index for an unseen key. */\n assign(key: K): number {\n const index = this.nextIndex++;\n this.indexByKey[key as unknown as string] = index;\n this.keyByIndex.set(index, key);\n return index;\n }\n\n /** Stash a value at the moment it's deleted (for filter visibility checks). */\n snapshot(index: number, value: any): void {\n (this.snapshots ??= new Map()).set(index, value);\n }\n\n /** Discard a snapshot — called when a deleted slot is being re-set. */\n forgetSnapshot(index: number): void {\n this.snapshots?.delete(index);\n }\n\n /** Look up a snapshot. Returns undefined if no DELETE is pending for this index. */\n snapshotAt(index: number): any {\n return this.snapshots?.get(index);\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Client-side (decoder): index↔key sync from the wire\n // ──────────────────────────────────────────────────────────────────\n\n /** Decoder calls this when it sees an ADD/DELETE_AND_ADD on the wire. */\n setIndex(index: number, key: K): void {\n this.keyByIndex.set(index, key);\n // Forward direction maintained for symmetry, even though decoder\n // rarely needs it. Cheap insert; keeps invariants aligned.\n this.indexByKey[key as unknown as string] = index;\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Lookups (both sides)\n // ──────────────────────────────────────────────────────────────────\n\n /** Reverse lookup: wire index → key. */\n keyOf(index: number): K | undefined {\n return this.keyByIndex.get(index);\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Lifecycle\n // ──────────────────────────────────────────────────────────────────\n\n /**\n * Called from MapSchema's $onEncodeEnd hook.\n * Cleans up index/key mappings for entries that were deleted in this tick.\n */\n cleanupAfterEncode(): void {\n if (this.snapshots === undefined) return;\n for (const [index] of this.snapshots) {\n const key = this.keyByIndex.get(index);\n if (key !== undefined) {\n delete this.indexByKey[key as unknown as string];\n this.keyByIndex.delete(index);\n }\n }\n this.snapshots.clear();\n }\n\n /** Reset everything (called on .clear()). */\n reset(): void {\n this.indexByKey = {};\n this.keyByIndex.clear();\n this.snapshots?.clear();\n this.nextIndex = 0;\n }\n}\n","import { $changes, $childType, $decoder, $deleteByIndex, $onEncodeEnd, $encoder, $filter, $getByIndex, $refId } from \"../symbols.js\";\nimport { ChangeTree, installUntrackedChangeTree, IRef } from \"../../encoder/ChangeTree.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport { Collection } from \"../HelperTypes.js\";\nimport { CollectionKind, decodeKeyValueOperation } from \"../../decoder/DecodeOperation.js\";\nimport { encodeMapEntry } from \"../../encoder/EncodeOperation.js\";\nimport { MapJournal } from \"../../encoder/MapJournal.js\";\nimport {\n createStreamableState,\n streamDropView,\n streamRouteAdd,\n streamRouteRemove,\n type StreamableState,\n} from \"../../encoder/streaming.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport type { Schema } from \"../../Schema.js\";\nimport { assertInstanceType } from \"../../encoding/assert.js\";\n\nexport class MapSchema<V=any, K extends string = string> implements Map<K, V>, Collection<K, V, [K, V]>, IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected childType: new () => V;\n protected [$childType]: string | typeof Schema;\n\n protected $items: Map<K, V> = new Map<K, V>();\n\n /**\n * Wire-protocol identity + change-tracking metadata for this map.\n *\n * Owns: index↔key mapping, monotonic index counter, snapshots of removed\n * values for filter visibility checks. Replaces what used to live as three\n * separate fields on this class ($indexes, _collectionIndexes, deletedItems).\n */\n protected journal: MapJournal<K> = new MapJournal<K>();\n\n /**\n * Streamable state — lazily allocated by `inheritedFlags` (or the\n * `maxPerTick` setter) when streaming actually activates. `undefined`\n * on every non-streaming MapSchema so the common case pays zero\n * Map/Set allocation. Single slot → hidden-class shape stays stable\n * across streaming and non-streaming instances.\n */\n _stream?: StreamableState;\n\n /** Max ADD ops emitted per tick per view. Ignored outside streaming mode. */\n get maxPerTick(): number {\n return this._stream?.maxPerTick ?? 32;\n }\n set maxPerTick(n: number) {\n (this._stream ??= createStreamableState()).maxPerTick = n;\n }\n\n /**\n * Per-view priority callback for `.stream()` maps. Initialized from the\n * schema declaration (`t.map(X).stream().priority(fn)` or `@type({ map,\n * priority })`); assigning here overrides for this instance. Only fires\n * during `encodeView` — broadcast mode drains FIFO.\n */\n get priority(): ((view: any, element: V) => number) | undefined {\n return this._stream?.priority as ((view: any, element: V) => number) | undefined;\n }\n set priority(fn: ((view: any, element: V) => number) | undefined) {\n (this._stream ??= createStreamableState()).priority = fn;\n }\n\n /** Backwards-compat alias for `journal.keyByIndex`. */\n get $indexes(): Map<number, K> { return this.journal.keyByIndex; }\n\n /**\n * Backwards-compat alias for `journal.indexByKey`. Plain object so\n * polymorphic call sites like `ref._collectionIndexes?.[key]` keep working.\n */\n get _collectionIndexes(): { [key: string]: number } { return this.journal.indexByKey; }\n\n static [$encoder] = encodeMapEntry;\n static [$decoder] = decodeKeyValueOperation;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Map;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: MapSchema, index: number, view: StateView) {\n if (!view || typeof (ref[$childType]) === \"string\") return true;\n const value = ref[$getByIndex](index) ?? ref.journal.snapshotAt(index);\n return view.isChangeTreeVisible(value[$changes]);\n }\n\n static is(type: any) {\n return type['map'] !== undefined;\n }\n\n constructor (initialValues?: Map<K, V> | Record<K, V>) {\n // $changes MUST be non-enumerable — see Schema.initialize comment.\n // ChangeTree has circular refs (root→changeTrees→…) and would send\n // `assert.deepStrictEqual` into exponential recursion.\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(this),\n enumerable: false,\n writable: true,\n });\n this[$childType] = undefined as any;\n\n if (initialValues) {\n if (\n initialValues instanceof Map ||\n initialValues instanceof MapSchema\n ) {\n initialValues.forEach((v, k) => this.set(k, v));\n\n } else {\n for (const k in initialValues) {\n this.set(k, initialValues[k]);\n }\n }\n }\n }\n\n /**\n * Decoder-side factory. Skips the tracking `ChangeTree` allocation;\n * `Object.create` also bypasses the class-field initializers, so we\n * replicate the minimum slot init here. Must stay in sync with the\n * class-field declarations above and with the constructor body.\n */\n static initializeForDecoder<V = any, K extends string = string>(): MapSchema<V, K> {\n const self: any = Object.create(MapSchema.prototype);\n self.$items = new Map<K, V>();\n self.journal = new MapJournal<K>();\n self[$childType] = undefined;\n installUntrackedChangeTree(self);\n return self;\n }\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<[K, V]> { return this.$items[Symbol.iterator](); }\n get [Symbol.toStringTag]() { return this.$items[Symbol.toStringTag] }\n\n static get [Symbol.species]() { return MapSchema; }\n\n set(key: K, value: V) {\n if (value === undefined || value === null) {\n throw new Error(`MapSchema#set('${key}', ${value}): trying to set ${value} value on '${key}'.`);\n\n } else if (typeof(value) === \"object\" && this[$childType]) {\n assertInstanceType(value as any, this[$childType] as typeof Schema, this, key);\n }\n\n // Force \"key\" as string\n // See: https://github.com/colyseus/colyseus/issues/561#issuecomment-1646733468\n key = key.toString() as K;\n\n const changeTree = this[$changes];\n const isRef = (value[$changes]) !== undefined;\n const journal = this.journal;\n\n let index = journal.indexOf(key);\n let operation: OPERATION;\n\n if (index !== undefined) {\n // REPLACE branch\n operation = OPERATION.REPLACE;\n\n const previousValue = this.$items.get(key);\n if (previousValue === value) {\n // if value is the same, avoid re-encoding it.\n return;\n\n } else if (isRef) {\n // if is schema, force ADD operation if value differ from previous one.\n operation = OPERATION.DELETE_AND_ADD;\n\n // remove reference from previous value\n if (previousValue !== undefined) {\n previousValue[$changes].root?.remove(previousValue[$changes]);\n }\n }\n\n // Re-setting after a delete: discard the snapshot.\n if (journal.snapshotAt(index) !== undefined) {\n journal.forgetSnapshot(index);\n }\n\n } else {\n // ADD branch\n index = journal.assign(key);\n operation = OPERATION.ADD;\n }\n\n this.$items.set(key, value);\n\n // Streaming-mode ADD: route the new entry into per-view or broadcast\n // pending instead of recording on the tree. The encoder's priority /\n // broadcast pass will drain up to `maxPerTick` per tick. REPLACE\n // and DELETE_AND_ADD fall through to the normal recorder path — the\n // old value is already being emitted, so the swap just mutates.\n if (operation === OPERATION.ADD && changeTree.isStreamCollection) {\n if (changeTree.root !== undefined) {\n streamRouteAdd(this, changeTree.root, index);\n }\n } else {\n changeTree.change(index, operation);\n }\n\n //\n // set value's parent after the value is set\n // (to avoid encoding \"refId\" operations before parent's \"ADD\" operation)\n //\n if (isRef) {\n value[$changes].setParent(this, changeTree.root, index);\n }\n\n return this;\n }\n\n get(key: K): V | undefined {\n return this.$items.get(key);\n }\n\n delete(key: K) {\n if (!this.$items.has(key)) {\n return false;\n }\n\n const index = this.journal.indexOf(key)!;\n const previousValue = this.$items.get(key)!;\n const changeTree = this[$changes];\n\n // Streaming-mode: silent-drop if the entry never made it out to any\n // client (still in pending). Otherwise force DELETE on the channels\n // where it was already sent — bypasses the normal recorder so the\n // emission path stays symmetric with StreamSchema.\n if (changeTree.isStreamCollection) {\n const root = changeTree.root;\n let neverSent = false;\n if (root !== undefined) {\n neverSent = streamRouteRemove(this, root, this[$refId], index);\n }\n if ((previousValue as any)?.[$changes] !== undefined) {\n root?.remove(previousValue[$changes]);\n }\n this.$items.delete(key);\n // Only snapshot if we actually need a DELETE op (already-sent):\n // filter visibility checks look up the snapshot until the next\n // encode end. Never-sent entries can skip the snapshot work.\n if (!neverSent) this.journal.snapshot(index, previousValue);\n return true;\n }\n\n // Snapshot the deleted value (used by [$filter] for visibility checks\n // until $onEncodeEnd cleans it up).\n this.journal.snapshot(index, previousValue);\n\n changeTree.delete(index);\n\n return this.$items.delete(key);\n }\n\n clear() {\n const changeTree = this[$changes];\n\n // discard previous operations.\n changeTree.discard();\n\n // remove children references\n changeTree.forEachChild((childChangeTree, _) => {\n changeTree.root?.remove(childChangeTree);\n });\n\n // reset journal (clears all index/key state and snapshots)\n this.journal.reset();\n\n // clear items\n this.$items.clear();\n\n changeTree.operation(OPERATION.CLEAR);\n }\n\n has (key: K) {\n return this.$items.has(key);\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void) {\n this.$items.forEach(callbackfn);\n }\n\n entries () {\n return this.$items.entries();\n }\n\n keys () {\n return this.$items.keys();\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n // ────── Change tracking control (same API as Schema) ──────\n pauseTracking(): void { this[$changes].pause(); }\n resumeTracking(): void { this[$changes].resume(); }\n untracked<T>(fn: () => T): T { return this[$changes].untracked(fn); }\n get isTrackingPaused(): boolean { return this[$changes].paused; }\n\n protected setIndex(index: number, key: K) {\n this.journal.setIndex(index, key);\n }\n\n protected getIndex(index: number) {\n return this.journal.keyOf(index);\n }\n\n [$getByIndex](index: number): V | undefined {\n const key = this.journal.keyOf(index);\n return key !== undefined ? this.$items.get(key) : undefined;\n }\n\n [$deleteByIndex](index: number): void {\n const key = this.journal.keyOf(index);\n if (key !== undefined) {\n this.$items.delete(key);\n this.journal.keyByIndex.delete(index);\n }\n }\n\n protected [$onEncodeEnd]() {\n this.journal.cleanupAfterEncode();\n }\n\n // ─── Streamable interface (Encoder priority / broadcast pass) ──────\n\n _dropView(viewId: number): void {\n streamDropView(this, viewId);\n }\n\n _unregister(): void {\n // no-op — `Root.unregisterStream` handles the Set removal.\n }\n\n toJSON() {\n const map: any = {};\n\n this.forEach((value: any, key) => {\n map[key] = (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n\n return map;\n }\n\n //\n // Decoding utilities\n //\n // @ts-ignore\n clone(isDecoding?: boolean): MapSchema<V> {\n let cloned: MapSchema<V>;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new MapSchema(), this);\n\n } else {\n // server-side\n cloned = new MapSchema();\n\n this.forEach((value: any, key) => {\n if (value[$changes]) {\n cloned.set(key, value['clone']());\n } else {\n cloned.set(key, value);\n }\n })\n\n }\n\n return cloned;\n }\n\n}\n\nregisterType(\"map\", { constructor: MapSchema });\n","import { $changes, $childType, $decoder, $deleteByIndex, $encoder, $filter, $getByIndex, $onEncodeEnd, $refId } from \"../symbols.js\";\nimport { ChangeTree, installUntrackedChangeTree, type IRef } from \"../../encoder/ChangeTree.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport { Collection } from \"../HelperTypes.js\";\nimport { CollectionKind, decodeKeyValueOperation } from \"../../decoder/DecodeOperation.js\";\nimport { encodeIndexedEntry } from \"../../encoder/EncodeOperation.js\";\nimport {\n createStreamableState,\n streamDropView,\n streamRouteAdd,\n streamRouteRemove,\n type StreamableState,\n} from \"../../encoder/streaming.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport type { Schema } from \"../../Schema.js\";\n\ntype K = number; // TODO: allow to specify K generic on MapSchema.\n\nexport class CollectionSchema<V=any> implements Collection<K, V>, IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected [$childType]: string | typeof Schema;\n\n /** The user-visible data, keyed directly by the wire-protocol index. */\n protected $items: Map<number, V> = new Map<number, V>();\n\n /** Snapshots of values that were deleted this tick (for filter visibility). */\n protected deletedItems: { [field: string]: V } = {};\n\n /** Monotonic counter for assigning indexes to newly-added items. */\n protected $refId: number = 0;\n\n /**\n * Streamable state — lazily allocated when the field is opted into\n * streaming via `t.collection(X).stream()`. See MapSchema for the\n * same pattern / rationale.\n */\n _stream?: StreamableState;\n\n get maxPerTick(): number {\n return this._stream?.maxPerTick ?? 32;\n }\n set maxPerTick(n: number) {\n (this._stream ??= createStreamableState()).maxPerTick = n;\n }\n\n get priority(): ((view: any, element: V) => number) | undefined {\n return this._stream?.priority as ((view: any, element: V) => number) | undefined;\n }\n set priority(fn: ((view: any, element: V) => number) | undefined) {\n (this._stream ??= createStreamableState()).priority = fn;\n }\n\n static [$encoder] = encodeIndexedEntry;\n static [$decoder] = decodeKeyValueOperation;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Collection;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: CollectionSchema, index: number, view: StateView) {\n return (\n !view ||\n typeof (ref[$childType]) === \"string\" ||\n view.isChangeTreeVisible((ref[$getByIndex](index) ?? ref.deletedItems[index])[$changes])\n );\n }\n\n static is(type: any) {\n return type['collection'] !== undefined;\n }\n\n constructor (initialValues?: Array<V>) {\n // $changes must be non-enumerable — see Schema.initialize.\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(this),\n enumerable: false,\n writable: true,\n });\n this[$childType] = undefined as any;\n\n if (initialValues) {\n initialValues.forEach((v) => this.add(v));\n }\n }\n\n /**\n * Decoder-side factory. Skips the tracking `ChangeTree` allocation;\n * `Object.create` also bypasses the class-field initializers, so we\n * replicate the minimum slot init here. Must stay in sync with the\n * class-field declarations above.\n */\n static initializeForDecoder<V = any>(): CollectionSchema<V> {\n const self: any = Object.create(CollectionSchema.prototype);\n self.$items = new Map<number, V>();\n self.deletedItems = {};\n self.$refId = 0;\n self[$childType] = undefined;\n installUntrackedChangeTree(self);\n return self;\n }\n\n add(value: V) {\n // assign the next wire-protocol index\n const index = this.$refId++;\n\n const changeTree = this[$changes];\n const isRef = (value[$changes]) !== undefined;\n if (isRef) {\n value[$changes].setParent(this, changeTree.root, index);\n }\n\n this.$items.set(index, value);\n\n if (changeTree.isStreamCollection) {\n if (changeTree.root !== undefined) {\n streamRouteAdd(this, changeTree.root, index);\n }\n } else {\n changeTree.change(index);\n }\n\n return index;\n }\n\n at(index: number): V | undefined {\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\n }\n\n entries() {\n return this.$items.entries();\n }\n\n delete(item: V) {\n const entries = this.$items.entries();\n\n let index: K;\n let entry: IteratorResult<[number, V]>;\n while (entry = entries.next()) {\n if (entry.done) { break; }\n\n if (item === entry.value[1]) {\n index = entry.value[0];\n break;\n }\n }\n\n if (index === undefined) {\n return false;\n }\n\n const changeTree = this[$changes];\n if (changeTree.isStreamCollection) {\n const root = changeTree.root;\n const previousValue = this.$items.get(index);\n if (root !== undefined) {\n streamRouteRemove(this, root, (this as any)[$refId], index);\n }\n if ((previousValue as any)?.[$changes] !== undefined) {\n root?.remove((previousValue as any)[$changes]);\n }\n this.deletedItems[index] = previousValue as V;\n return this.$items.delete(index);\n }\n\n this.deletedItems[index] = changeTree.delete(index);\n\n return this.$items.delete(index);\n }\n\n clear() {\n const changeTree = this[$changes];\n\n // discard previous operations.\n changeTree.discard();\n\n // remove children references\n changeTree.forEachChild((childChangeTree, _) => {\n changeTree.root?.remove(childChangeTree);\n });\n\n // clear items\n this.$items.clear();\n\n changeTree.operation(OPERATION.CLEAR);\n }\n\n has (value: V): boolean {\n return Array.from(this.$items.values()).some((v) => v === value);\n }\n\n forEach(callbackfn: (value: V, key: K, collection: CollectionSchema<V>) => void) {\n this.$items.forEach((value, key, _) => callbackfn(value, key, this));\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n // ────── Change tracking control (same API as Schema) ──────\n pauseTracking(): void { this[$changes].pause(); }\n resumeTracking(): void { this[$changes].resume(); }\n untracked<T>(fn: () => T): T { return this[$changes].untracked(fn); }\n get isTrackingPaused(): boolean { return this[$changes].paused; }\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<V> {\n return this.$items.values();\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Decoder-side index hooks. CollectionSchema's \"key\" IS the wire index,\n // so these are identity operations. Kept for protocol symmetry with\n // MapSchema (decoder calls them polymorphically).\n // ────────────────────────────────────────────────────────────────────\n\n protected setIndex(_index: number, _key: number) {\n // no-op: indexes are identity\n }\n\n protected getIndex(index: number): number {\n return index;\n }\n\n [$getByIndex](index: number): any {\n return this.$items.get(index);\n }\n\n [$deleteByIndex](index: number): void {\n this.$items.delete(index);\n }\n\n protected [$onEncodeEnd]() {\n for (const key in this.deletedItems) { delete this.deletedItems[key]; }\n }\n\n // ─── Streamable interface (Encoder priority / broadcast pass) ──────\n\n _dropView(viewId: number): void {\n streamDropView(this, viewId);\n }\n\n _unregister(): void {\n // no-op — `Root.unregisterStream` handles the Set removal.\n }\n\n toArray() {\n return Array.from(this.$items.values());\n }\n\n toJSON() {\n const values: V[] = [];\n\n this.forEach((value: any, key: K) => {\n values.push(\n (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value\n );\n });\n\n return values;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): CollectionSchema<V> {\n let cloned: CollectionSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new CollectionSchema(), this);\n\n } else {\n // server-side\n cloned = new CollectionSchema();\n this.forEach((value: any) => {\n if (value[$changes]) {\n cloned.add(value['clone']());\n } else {\n cloned.add(value);\n }\n })\n }\n\n return cloned;\n }\n\n}\n\nregisterType(\"collection\", { constructor: CollectionSchema, });\n","import { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport { $changes, $childType, $decoder, $deleteByIndex, $encoder, $filter, $getByIndex, $onEncodeEnd, $refId } from \"../symbols.js\";\nimport { Collection } from \"../HelperTypes.js\";\nimport { ChangeTree, installUntrackedChangeTree, type IRef } from \"../../encoder/ChangeTree.js\";\nimport { encodeIndexedEntry } from \"../../encoder/EncodeOperation.js\";\nimport { CollectionKind, decodeKeyValueOperation } from \"../../decoder/DecodeOperation.js\";\nimport {\n createStreamableState,\n streamDropView,\n streamRouteAdd,\n streamRouteRemove,\n type StreamableState,\n} from \"../../encoder/streaming.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport type { Schema } from \"../../Schema.js\";\n\nexport class SetSchema<V=any> implements Collection<number, V>, IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected [$childType]: string | typeof Schema;\n\n /** The user-visible data, keyed directly by the wire-protocol index. */\n protected $items: Map<number, V> = new Map<number, V>();\n\n /** Snapshots of values that were deleted this tick (for filter visibility). */\n protected deletedItems: { [field: string]: V } = {};\n\n /** Monotonic counter for assigning indexes to newly-added items. */\n protected $refId: number = 0;\n\n /**\n * Streamable state — lazily allocated when the field is opted into\n * streaming via `t.set(X).stream()`. See MapSchema for the same\n * pattern / rationale.\n */\n _stream?: StreamableState;\n\n /** Max ADD ops emitted per tick per view. Ignored outside streaming mode. */\n get maxPerTick(): number {\n return this._stream?.maxPerTick ?? 32;\n }\n set maxPerTick(n: number) {\n (this._stream ??= createStreamableState()).maxPerTick = n;\n }\n\n /** Per-view priority callback — see StreamSchema / MapSchema. */\n get priority(): ((view: any, element: V) => number) | undefined {\n return this._stream?.priority as ((view: any, element: V) => number) | undefined;\n }\n set priority(fn: ((view: any, element: V) => number) | undefined) {\n (this._stream ??= createStreamableState()).priority = fn;\n }\n\n static [$encoder] = encodeIndexedEntry;\n static [$decoder] = decodeKeyValueOperation;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Set;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: SetSchema, index: number, view: StateView) {\n return (\n !view ||\n typeof (ref[$childType]) === \"string\" ||\n view.isVisible((ref[$getByIndex](index) ?? ref.deletedItems[index])[$changes])\n );\n }\n\n static is(type: any) {\n return type['set'] !== undefined;\n }\n\n constructor (initialValues?: Array<V>) {\n // $changes must be non-enumerable to avoid deepStrictEqual recursing\n // into ChangeTree's circular refs.\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(this),\n enumerable: false,\n writable: true,\n });\n this[$childType] = undefined as any;\n\n if (initialValues) {\n initialValues.forEach((v) => this.add(v));\n }\n }\n\n /**\n * Decoder-side factory. Skips the tracking `ChangeTree` allocation;\n * `Object.create` also bypasses the class-field initializers, so we\n * replicate the minimum slot init here. Must stay in sync with the\n * class-field declarations above.\n */\n static initializeForDecoder<V = any>(): SetSchema<V> {\n const self: any = Object.create(SetSchema.prototype);\n self.$items = new Map<number, V>();\n self.deletedItems = {};\n self.$refId = 0;\n self[$childType] = undefined;\n installUntrackedChangeTree(self);\n return self;\n }\n\n add(value: V) {\n // immediatelly return false if value already added.\n if (this.has(value)) { return false; }\n\n // assign the next wire-protocol index\n const index = this.$refId++;\n\n const changeTree = this[$changes];\n if ((value[$changes]) !== undefined) {\n value[$changes].setParent(this, changeTree.root, index);\n }\n\n this.$items.set(index, value);\n\n // Streaming-mode ADD: route into per-view pending or broadcast\n // pending instead of the tree's recorder. See MapSchema.set for\n // the same branch / rationale.\n if (changeTree.isStreamCollection) {\n if (changeTree.root !== undefined) {\n streamRouteAdd(this, changeTree.root, index);\n }\n } else {\n changeTree.change(index, OPERATION.ADD);\n }\n return index;\n }\n\n entries () {\n return this.$items.entries();\n }\n\n delete(item: V) {\n const entries = this.$items.entries();\n\n let index: number;\n let entry: IteratorResult<[number, V]>;\n while (entry = entries.next()) {\n if (entry.done) { break; }\n\n if (item === entry.value[1]) {\n index = entry.value[0];\n break;\n }\n }\n\n if (index === undefined) {\n return false;\n }\n\n const changeTree = this[$changes];\n\n // Streaming-mode: route through stream's pending/sent bookkeeping\n // — silent drop if never sent to any view, force DELETE for views\n // that already received it. Mirror of MapSchema.delete's streaming\n // branch.\n if (changeTree.isStreamCollection) {\n const root = changeTree.root;\n const previousValue = this.$items.get(index);\n if (root !== undefined) {\n streamRouteRemove(this, root, (this as any)[$refId], index);\n }\n if ((previousValue as any)?.[$changes] !== undefined) {\n root?.remove((previousValue as any)[$changes]);\n }\n this.deletedItems[index] = previousValue as V;\n return this.$items.delete(index);\n }\n\n this.deletedItems[index] = changeTree.delete(index);\n\n return this.$items.delete(index);\n }\n\n clear() {\n const changeTree = this[$changes];\n\n // discard previous operations.\n changeTree.discard();\n\n // clear items\n this.$items.clear();\n\n changeTree.operation(OPERATION.CLEAR);\n }\n\n has (value: V): boolean {\n const values = this.$items.values();\n\n let has = false;\n let entry: IteratorResult<V>;\n\n while (entry = values.next()) {\n if (entry.done) { break; }\n if (value === entry.value) {\n has = true;\n break;\n }\n }\n\n return has;\n }\n\n forEach(callbackfn: (value: V, key: number, collection: SetSchema<V>) => void) {\n this.$items.forEach((value, key, _) => callbackfn(value, key, this));\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n // ────── Change tracking control (same API as Schema) ──────\n pauseTracking(): void { this[$changes].pause(); }\n resumeTracking(): void { this[$changes].resume(); }\n untracked<T>(fn: () => T): T { return this[$changes].untracked(fn); }\n get isTrackingPaused(): boolean { return this[$changes].paused; }\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<V> {\n return this.$items.values();\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Decoder-side index hooks. SetSchema's \"key\" IS the wire index, so\n // these are identity operations. Kept for protocol symmetry with\n // MapSchema (decoder calls them polymorphically).\n // ────────────────────────────────────────────────────────────────────\n\n protected setIndex(_index: number, _key: number) {\n // no-op: indexes are identity\n }\n\n protected getIndex(index: number): number {\n return index;\n }\n\n [$getByIndex](index: number): any {\n return this.$items.get(index);\n }\n\n [$deleteByIndex](index: number): void {\n this.$items.delete(index);\n }\n\n protected [$onEncodeEnd]() {\n for (const key in this.deletedItems) { delete this.deletedItems[key]; }\n }\n\n // ─── Streamable interface (Encoder priority / broadcast pass) ──────\n\n _dropView(viewId: number): void {\n streamDropView(this, viewId);\n }\n\n _unregister(): void {\n // no-op — `Root.unregisterStream` handles the Set removal.\n }\n\n toArray() {\n return Array.from(this.$items.values());\n }\n\n toJSON() {\n const values: V[] = [];\n\n this.forEach((value: any, key: number) => {\n values.push(\n (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value\n );\n });\n\n return values;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): SetSchema<V> {\n let cloned: SetSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new SetSchema(), this);\n\n } else {\n // server-side\n cloned = new SetSchema();\n this.forEach((value: any) => {\n if (value[$changes]) {\n cloned.add(value['clone']());\n } else {\n cloned.add(value);\n }\n })\n }\n\n return cloned;\n }\n\n}\n\nregisterType(\"set\", { constructor: SetSchema });\n","import { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport {\n $changes,\n $childType,\n $decoder,\n $deleteByIndex,\n $encoder,\n $filter,\n $getByIndex,\n $onEncodeEnd,\n $refId,\n} from \"../symbols.js\";\nimport { ChangeTree, installUntrackedChangeTree, type IRef } from \"../../encoder/ChangeTree.js\";\nimport { encodeIndexedEntry } from \"../../encoder/EncodeOperation.js\";\nimport { CollectionKind, decodeKeyValueOperation } from \"../../decoder/DecodeOperation.js\";\nimport {\n createStreamableState,\n streamDropView,\n streamRouteAdd,\n streamRouteClear,\n streamRouteRemove,\n type StreamableState,\n} from \"../../encoder/streaming.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport type { Schema } from \"../../Schema.js\";\n\n/**\n * `t.stream(Entity)` — priority-batched collection of Schema instances.\n *\n * Designed for ECS-style use cases where many entities spawn/despawn each\n * tick and the full set won't fit in one encode budget. Adds are queued\n * per-client and drained in priority order (callback on StateView) up to\n * `maxPerTick` per encode pass. Field mutations on already-sent elements\n * propagate through the normal reliable channel without consuming the\n * per-tick budget. Chain `.static()` on the field builder to suppress\n * post-add mutation tracking entirely.\n */\nexport class StreamSchema<V = any> implements IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected [$childType]: string | typeof Schema;\n\n /**\n * Wire-keyed storage: `position → element`. Position is a monotonic\n * counter assigned by `add()` — stable identity even when elements\n * are removed, so pending/sent view state can keep using the same\n * keys across ticks. Map (not Array) so `$items.keys()` / `.values()`\n * skip removed positions without a sparse-slot check.\n */\n protected $items: Map<number, V> = new Map();\n\n /** Monotonic position counter. Incremented on every `add()`. */\n protected $nextPosition: number = 0;\n\n /** Reverse lookup for O(1) `remove(el)`. */\n protected _itemIndex: Map<V, number> = new Map();\n\n /**\n * Streamable state — holds per-view and broadcast bookkeeping. Lazily\n * allocated when the stream is attached to a Root (or when the user\n * touches `maxPerTick`). `undefined` on detached streams so\n * construction is cheap.\n */\n _stream?: StreamableState;\n\n /** Max element ADDs emitted per encode tick (per view, or broadcast). */\n get maxPerTick(): number {\n return this._stream?.maxPerTick ?? 32;\n }\n set maxPerTick(n: number) {\n (this._stream ??= createStreamableState()).maxPerTick = n;\n }\n\n /**\n * Per-view priority callback. Initialized from the schema declaration\n * (`.priority(fn)` or `@type({ stream, priority })`); assigning here\n * overrides the class-level default for this instance. Only fires\n * during `encodeView` — broadcast mode drains FIFO.\n */\n get priority(): ((view: any, element: V) => number) | undefined {\n return this._stream?.priority as ((view: any, element: V) => number) | undefined;\n }\n set priority(fn: ((view: any, element: V) => number) | undefined) {\n (this._stream ??= createStreamableState()).priority = fn;\n }\n\n /**\n * Brand used by Root / StateView to detect stream trees without\n * importing this class (avoids circular deps). The `isStreamCollection`\n * ChangeTree flag (set via `inheritedFlags`) is the preferred runtime\n * check — this brand is kept for back-compat.\n */\n static readonly $isStream: true = true;\n\n static [$encoder] = encodeIndexedEntry;\n static [$decoder] = decodeKeyValueOperation;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Stream;\n\n /**\n * Element-level visibility. Identical to SetSchema's filter: stream\n * elements are always per-view, the filter just defers to the view's\n * per-tree visibility bitmap.\n */\n static [$filter](ref: StreamSchema, index: number, view: StateView) {\n if (!view) return true;\n const value = (ref as any)[$getByIndex](index);\n if (value === undefined) return false;\n return view.isVisible(value[$changes]);\n }\n\n static is(type: any): boolean {\n return type && type['stream'] !== undefined;\n }\n\n constructor() {\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(this),\n enumerable: false,\n writable: true,\n });\n this[$childType] = undefined;\n // `isFiltered` / `isStreamCollection` are set via `inheritedFlags`\n // when this stream is attached to a parent field — no constructor-\n // time init needed (the stream tree is inert until assignment).\n }\n\n /**\n * Decoder-side factory. Skips the tracking `ChangeTree` allocation;\n * `Object.create` also bypasses the class-field initializers, so we\n * replicate the minimum slot init here. Must stay in sync with the\n * class-field declarations above.\n */\n static initializeForDecoder<V = any>(): StreamSchema<V> {\n const self: any = Object.create(StreamSchema.prototype);\n self.$items = new Map<number, V>();\n self.$nextPosition = 0;\n self._itemIndex = new Map();\n self[$childType] = undefined;\n installUntrackedChangeTree(self);\n return self;\n }\n\n /**\n * Append an element to the stream. Returns the assigned position,\n * or -1 if the element was already in the stream.\n */\n add(value: V): number {\n if (this._itemIndex.has(value)) return -1;\n\n const position = this.$nextPosition++;\n this.$items.set(position, value);\n this._itemIndex.set(value, position);\n\n const tree = this[$changes];\n const root = tree.root;\n\n // Attach element as a child — assigns $refId and wires the parent\n // chain so the element's own ChangeTree participates in encoding.\n if (value[$changes] !== undefined) {\n value[$changes].setParent(this, root, position);\n }\n\n if (root !== undefined) streamRouteAdd(this, root, position);\n return position;\n }\n\n /**\n * Remove an element by reference. If the element was pending (never sent\n * to a view), the pending entry is dropped silently. If already sent,\n * a DELETE op is forced on next `encodeView` for that view.\n */\n remove(value: V): boolean {\n const position = this._itemIndex.get(value);\n if (position === undefined) return false;\n\n this._itemIndex.delete(value);\n this.$items.delete(position);\n\n const root = this[$changes].root;\n if (root !== undefined) {\n streamRouteRemove(this, root, (this as any)[$refId], position);\n if (value[$changes] !== undefined) {\n root.remove((value as any)[$changes]);\n }\n }\n\n return true;\n }\n\n has(value: V): boolean {\n return this._itemIndex.has(value);\n }\n\n /** Remove every element; queue DELETE wire ops for already-sent items. */\n clear(): void {\n const root = this[$changes].root;\n if (root !== undefined) {\n streamRouteClear(this, root, (this as any)[$refId]);\n for (const el of this.$items.values()) {\n if (el[$changes] !== undefined) {\n root.remove((el as any)[$changes]);\n }\n }\n }\n this.$items.clear();\n this._itemIndex.clear();\n }\n\n forEach(callback: (value: V, index: number, collection: StreamSchema<V>) => void): void {\n for (const [index, value] of this.$items) callback(value, index, this);\n }\n\n values(): IterableIterator<V> {\n return this.$items.values();\n }\n\n /**\n * Iterate `[position, value]` pairs in insertion order. Used by\n * `setParent` recursion when the stream is reassigned to a new parent.\n */\n entries(): IterableIterator<[number, V]> {\n return this.$items.entries();\n }\n\n [Symbol.iterator](): IterableIterator<V> {\n return this.$items.values();\n }\n\n /** Live element count. */\n get size(): number {\n return this.$items.size;\n }\n\n /** Alias for `size`. */\n get length(): number {\n return this.$items.size;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Decoder / encoder plumbing — same shape as SetSchema so\n // {encode,decode}KeyValueOperation can route uniformly. StreamSchema\n // keys are identity (wire index === position), so `setIndex`/`getIndex`\n // are no-ops / identity like SetSchema.\n // ────────────────────────────────────────────────────────────────────\n\n protected setIndex(_index: number, _key: number): void {\n // no-op: indexes are identity\n }\n\n protected getIndex(index: number): number {\n return index;\n }\n\n [$getByIndex](index: number): V {\n return this.$items.get(index) as V;\n }\n\n [$deleteByIndex](index: number): void {\n const value = this.$items.get(index);\n if (value !== undefined) {\n this._itemIndex.delete(value);\n this.$items.delete(index);\n }\n }\n\n protected [$onEncodeEnd](): void {\n // No per-tick cleanup: pending/sent state spans encode ticks by design.\n }\n\n toArray(): V[] {\n return Array.from(this.$items.values());\n }\n\n toJSON(): any[] {\n const out: any[] = [];\n this.forEach((v: any) => {\n out.push(typeof v?.toJSON === \"function\" ? v.toJSON() : v);\n });\n return out;\n }\n\n clone(isDecoding?: boolean): StreamSchema<V> {\n if (isDecoding) {\n const cloned = Object.assign(new StreamSchema<V>(), this);\n return cloned;\n }\n const cloned = new StreamSchema<V>();\n cloned.maxPerTick = this.maxPerTick;\n this.forEach((v: any) => {\n cloned.add(typeof v?.clone === \"function\" ? v.clone() : v);\n });\n return cloned;\n }\n\n // ─── Streamable interface (Encoder priority / broadcast pass) ──────\n\n _dropView(viewId: number): void {\n streamDropView(this, viewId);\n }\n\n /** Called by Root.remove when the stream's refcount hits zero. */\n _unregister(): void {\n // no-op — `Root.unregisterStream` handles the Set removal.\n }\n}\n\nregisterType(\"stream\", { constructor: StreamSchema });\n","import type { ArraySchema } from \"./custom/ArraySchema.js\";\nimport type { MapSchema } from \"./custom/MapSchema.js\";\nimport type { SetSchema } from \"./custom/SetSchema.js\";\nimport type { CollectionSchema } from \"./custom/CollectionSchema.js\";\nimport type { StreamSchema } from \"./custom/StreamSchema.js\";\nimport type { Schema } from \"../Schema.js\";\nimport type { DefinitionType, RawPrimitiveType } from \"../annotations.js\";\nimport type { InferValueType, Constructor } from \"./HelperTypes.js\";\nimport { $builder } from \"./symbols.js\";\nimport { ARRAY_STREAM_NOT_SUPPORTED } from \"../encoder/streaming.js\";\n\ntype CollectionKind = \"array\" | \"map\" | \"set\" | \"collection\";\n\n/**\n * Internal record produced by FieldBuilder#toDefinition() and consumed by schema().\n */\nexport interface BuilderDefinition {\n type: DefinitionType;\n default?: any;\n hasDefault: boolean;\n view?: number; // tag value; undefined = no view\n owned?: boolean;\n unreliable?: boolean;\n transient?: boolean;\n deprecated?: boolean;\n deprecatedThrows?: boolean;\n static?: boolean;\n stream?: boolean;\n optional?: boolean;\n /** Declaration-scope priority callback for `.stream()` fields. */\n streamPriority?: (view: any, element: any) => number;\n}\n\n/**\n * Type-function that infers the instance value for a builder.\n */\nexport type BuilderOf<T> = FieldBuilder<T>;\n\n/**\n * Chainable field builder. Instances are produced by `t.*()` factories.\n *\n * Generics:\n * - `T` is the runtime/JS type of the field (e.g. `number`, `string`,\n * `ArraySchema<Item>`). `.optional()` widens it to `T | undefined`\n * so the inferred instance/toJSON shapes reflect absence.\n * - `HasDefault` is a compile-time flag that the field carries a\n * construction-time default — either an explicit `.default(v)` or an\n * auto-default from a collection factory (`t.array`, `t.map`, …) or a\n * Schema ref whose `initialize` takes zero args.\n * - `IsOptional` is a compile-time brand for `.optional()`. Both\n * `HasDefault` and `IsOptional` make the field omittable in\n * `BuilderInitProps<T>`. A separate brand (rather than reading\n * `undefined extends V`) sidesteps a TypeScript quirk where\n * class-generic-inferred `V` resolves `undefined extends V` as `true`\n * even for non-undefined types.\n *\n * schema() reads the internal configuration via `toDefinition()` and wires\n * up metadata through the existing pipeline.\n */\nexport class FieldBuilder<\n T = unknown,\n HasDefault extends boolean = false,\n IsOptional extends boolean = false,\n> {\n readonly [$builder]: true = true;\n\n // Internal configuration. Public so schema() and tests can read it, but not\n // meant to be mutated by users directly.\n _type: DefinitionType;\n _default: any = undefined;\n _hasDefault = false;\n _view: number | undefined = undefined;\n _owned = false;\n _unreliable = false;\n _transient = false;\n _deprecated = false;\n _deprecatedThrows = true;\n _static = false;\n _stream = false;\n _optional = false;\n _streamPriority: ((view: any, element: any) => number) | undefined = undefined;\n\n constructor(type: DefinitionType) {\n this._type = type;\n }\n\n /** Provide a default value for this field. */\n default(value: T): FieldBuilder<T, true, IsOptional> {\n this._default = value;\n this._hasDefault = true;\n return this as unknown as FieldBuilder<T, true, IsOptional>;\n }\n\n /** Tag this field with a view tag (DEFAULT_VIEW_TAG when called without arg). */\n view(tag?: number): this {\n // -1 is DEFAULT_VIEW_TAG; kept numeric here to avoid a circular import.\n this._view = tag ?? -1;\n return this;\n }\n\n /** Mark this field as owned (encoder-side ownership filtering). */\n owned(): this {\n this._owned = true;\n return this;\n }\n\n /**\n * Mark this field as unreliable — tick patches emit it on the unreliable\n * transport channel. Still persisted to full-sync snapshots unless also\n * tagged with `.transient()`.\n */\n unreliable(): this {\n this._unreliable = true;\n return this;\n }\n\n /**\n * Mark this field as transient — NOT persisted to full-sync snapshots\n * (`encodeAll` / `encodeAllView`). Late-joining clients see the field\n * only after its next mutation is emitted on a tick patch. Orthogonal\n * to `.unreliable()`.\n */\n transient(): this {\n this._transient = true;\n return this;\n }\n\n /**\n * Mark this field as static.\n * - Primitive / Schema fields: synchronized once, skips change tracking.\n * - Stream fields (`t.stream(X).static()`): child elements are frozen\n * after add — post-add field mutations on elements become no-ops.\n */\n static(): this {\n this._static = true;\n return this;\n }\n\n /**\n * Opt a collection field into priority-batched streaming delivery —\n * ADDs drain at most `maxPerTick` per tick per view (or per broadcast\n * tick without a view). Applies to `t.map(X)` / `t.set(X)` /\n * `t.collection(X)`. Redundant on `t.stream(X)` (the factory already\n * sets this flag).\n *\n * **Not supported on `t.array(X)`.** Array positional operations\n * (`splice`, `unshift`, `reverse`) shift every subsequent index —\n * holding some ADDs back for a later tick while indexes mutate\n * underneath would produce a decoder-side state that doesn't match\n * the server. Use `t.stream(X)` (stable monotonic positions) or\n * `t.map(X).stream()` (keys never shift) instead.\n */\n stream(): this {\n const t = this._type as any;\n if (t && typeof t === \"object\" && t.array !== undefined) {\n throw new Error(ARRAY_STREAM_NOT_SUPPORTED);\n }\n this._stream = true;\n return this;\n }\n\n /**\n * Attach a priority callback for per-view `encodeView` delivery. The\n * callback receives the client's StateView and the candidate element;\n * higher return values emit first. Does nothing in broadcast mode\n * (shared `encode()` drains FIFO). Only meaningful on stream fields.\n *\n * ```ts\n * t.stream(Enemy).priority((view, enemy) =>\n * -dist2(view.anchor, enemy)\n * )\n * ```\n */\n priority<V = any>(fn: (view: any, element: V) => number): this {\n this._streamPriority = fn as (view: any, element: any) => number;\n return this;\n }\n\n /** Mark this field as deprecated. Pass `false` to silence the access error. */\n deprecated(throws = true): this {\n this._deprecated = true;\n this._deprecatedThrows = throws;\n return this;\n }\n\n /**\n * Mark this field as optional — inferred instance type becomes\n * `T | undefined` and the property becomes omittable in initialization\n * props. Skips the auto-instantiation of collection / Schema-ref\n * defaults, so the field starts as `undefined` at runtime.\n */\n optional(): FieldBuilder<T | undefined, HasDefault, true> {\n this._optional = true;\n return this as unknown as FieldBuilder<T | undefined, HasDefault, true>;\n }\n\n toDefinition(): BuilderDefinition {\n return {\n type: this._type,\n default: this._default,\n hasDefault: this._hasDefault,\n view: this._view,\n owned: this._owned,\n unreliable: this._unreliable,\n transient: this._transient,\n deprecated: this._deprecated,\n deprecatedThrows: this._deprecatedThrows,\n static: this._static,\n stream: this._stream,\n optional: this._optional,\n streamPriority: this._streamPriority,\n };\n }\n}\n\nexport function isBuilder(value: any): value is FieldBuilder<any> {\n return value != null && value[$builder] === true;\n}\n\n// ---------------------------------------------------------------------------\n// Factory helpers\n// ---------------------------------------------------------------------------\n\nfunction primitive<T>(name: RawPrimitiveType): () => FieldBuilder<T> {\n return () => new FieldBuilder<T>(name);\n}\n\n// Accepts a Schema class, a primitive string, or another FieldBuilder as a child type.\nexport type ChildType =\n | RawPrimitiveType\n | Constructor<Schema>\n | FieldBuilder<any>;\n\nfunction resolveChild(child: ChildType): DefinitionType {\n if (isBuilder(child)) {\n return child._type;\n }\n return child as DefinitionType;\n}\n\n// ---------------------------------------------------------------------------\n// t namespace\n// ---------------------------------------------------------------------------\n\n// Overloaded factories for collections. Implementation lives in a single function;\n// overloads narrow the return type for Schema/primitive/builder children.\n// All collection factories tag `HasDefault = true` because schema() auto-\n// instantiates an empty collection when no explicit default is given.\ninterface ArrayFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<ArraySchema<InstanceType<C>>, true, false>;\n <P extends RawPrimitiveType>(child: P): FieldBuilder<ArraySchema<InferValueType<P>>, true, false>;\n <V>(child: FieldBuilder<V>): FieldBuilder<ArraySchema<V>, true, false>;\n}\ninterface MapFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<MapSchema<InstanceType<C>>, true, false>;\n <P extends RawPrimitiveType>(child: P): FieldBuilder<MapSchema<InferValueType<P>>, true, false>;\n <V>(child: FieldBuilder<V>): FieldBuilder<MapSchema<V>, true, false>;\n}\ninterface SetFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<SetSchema<InstanceType<C>>, true, false>;\n <P extends RawPrimitiveType>(child: P): FieldBuilder<SetSchema<InferValueType<P>>, true, false>;\n <V>(child: FieldBuilder<V>): FieldBuilder<SetSchema<V>, true, false>;\n}\ninterface CollectionFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<CollectionSchema<InstanceType<C>>, true, false>;\n <P extends RawPrimitiveType>(child: P): FieldBuilder<CollectionSchema<InferValueType<P>>, true, false>;\n <V>(child: FieldBuilder<V>): FieldBuilder<CollectionSchema<V>, true, false>;\n}\n// t.stream(Entity) — priority-batched collection of Schema instances.\n// Element type is restricted to Schema subclasses (no primitives) because\n// priority batching relies on stable refIds, which primitives don't carry.\ninterface StreamFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<StreamSchema<InstanceType<C>>, true, false>;\n}\n\nconst arrayFactory: ArrayFactory = ((child: ChildType) =>\n new FieldBuilder({ array: resolveChild(child) } as DefinitionType)) as ArrayFactory;\nconst mapFactory: MapFactory = ((child: ChildType) =>\n new FieldBuilder({ map: resolveChild(child) } as DefinitionType)) as MapFactory;\nconst setFactory: SetFactory = ((child: ChildType) =>\n new FieldBuilder({ set: resolveChild(child) } as DefinitionType)) as SetFactory;\nconst collectionFactory: CollectionFactory = ((child: ChildType) =>\n new FieldBuilder({ collection: resolveChild(child) } as DefinitionType)) as CollectionFactory;\nconst streamFactory: StreamFactory = ((child: ChildType) => {\n const b = new FieldBuilder({ stream: resolveChild(child) } as DefinitionType);\n b._stream = true;\n return b;\n}) as StreamFactory;\n\n// Compile-time: does this Schema subclass need arguments at construction?\n// A zero-arg or absent `initialize(...)` means schema() will auto-default the\n// field to `new X()`, so `HasDefault = true`. A non-zero-arg initialize means\n// the user has to provide the ref explicitly.\ntype RefHasDefault<C> =\n C extends { prototype: { initialize(...args: infer P): any } }\n ? (P extends readonly [] ? true : false)\n : true;\n\ninterface RefFactory {\n <C extends Constructor<Schema>>(ctor: C): FieldBuilder<InstanceType<C>, RefHasDefault<C>, false>;\n}\n\nconst refFactory: RefFactory = (<C extends Constructor<Schema>>(ctor: C) =>\n new FieldBuilder<InstanceType<C>>(ctor as unknown as DefinitionType)) as RefFactory;\n\nexport const t = Object.freeze({\n // Primitives\n string: primitive<string>(\"string\"),\n number: primitive<number>(\"number\"),\n boolean: primitive<boolean>(\"boolean\"),\n int8: primitive<number>(\"int8\"),\n uint8: primitive<number>(\"uint8\"),\n int16: primitive<number>(\"int16\"),\n uint16: primitive<number>(\"uint16\"),\n int32: primitive<number>(\"int32\"),\n uint32: primitive<number>(\"uint32\"),\n int64: primitive<number>(\"int64\"),\n uint64: primitive<number>(\"uint64\"),\n float32: primitive<number>(\"float32\"),\n float64: primitive<number>(\"float64\"),\n bigint64: primitive<bigint>(\"bigint64\"),\n biguint64: primitive<bigint>(\"biguint64\"),\n\n /** Reference to a Schema subtype. `t.array(Item)` usually reads better, but this is available when a plain ref is needed. */\n ref: refFactory,\n array: arrayFactory,\n map: mapFactory,\n set: setFactory,\n collection: collectionFactory,\n stream: streamFactory,\n});\n","import \"./symbol.shim.js\";\nimport { Schema } from './Schema.js';\nimport { ArraySchema } from './types/custom/ArraySchema.js';\nimport { MapSchema } from './types/custom/MapSchema.js';\nimport { getNormalizedType, Metadata, resolveFieldType } from \"./Metadata.js\";\nimport { $changes, $childType, $descriptors, $encoders, $numFields, $track, $values } from \"./types/symbols.js\";\nimport { encode } from \"./encoding/encode.js\";\nimport { TypeDefinition, getType } from \"./types/registry.js\";\nimport { OPERATION } from \"./encoding/spec.js\";\nimport { TypeContext } from \"./types/TypeContext.js\";\nimport { assertInstanceType, assertType, EncodeSchemaError } from \"./encoding/assert.js\";\nimport type { InferValueType, InferSchemaInstanceType, AssignableProps, BuilderInitProps, IsNever } from \"./types/HelperTypes.js\";\nimport { CollectionSchema } from \"./types/custom/CollectionSchema.js\";\nimport { SetSchema } from \"./types/custom/SetSchema.js\";\nimport { StreamSchema } from \"./types/custom/StreamSchema.js\";\nimport { FieldBuilder, isBuilder } from \"./types/builder.js\";\n\nexport type RawPrimitiveType = \"string\" |\n \"number\" |\n \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"float32\" |\n \"float64\" |\n \"bigint64\" |\n \"biguint64\";\n\nexport type PrimitiveType = RawPrimitiveType | typeof Schema | object;\n\n// TODO: infer \"default\" value type correctly.\nexport type DefinitionType<T extends PrimitiveType = PrimitiveType> = T\n | T[]\n | { type: T, default?: InferValueType<T>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { array: T, default?: ArraySchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { map: T, default?: MapSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { collection: T, default?: CollectionSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { set: T, default?: SetSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { stream: T, default?: StreamSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean, priority?: (view: any, element: InferValueType<T>) => number };\n\nexport type Definition = { [field: string]: DefinitionType };\n\nexport interface TypeOptions {\n manual?: boolean,\n}\n\nexport const DEFAULT_VIEW_TAG = -1;\n\nexport function entity(constructor: any): any {\n TypeContext.register(constructor as typeof Schema);\n return constructor;\n}\n\n/**\n * [See documentation](https://docs.colyseus.io/state/schema/)\n *\n * Annotate a Schema property to be serializeable.\n * \\@type()'d fields are automatically flagged as \"dirty\" for the next patch.\n *\n * @example Standard usage, with automatic change tracking.\n * ```\n * \\@type(\"string\") propertyName: string;\n * ```\n *\n * @example You can provide the \"manual\" option if you'd like to manually control your patches via .setDirty().\n * ```\n * \\@type(\"string\", { manual: true })\n * ```\n */\n// export function type(type: DefinitionType, options?: TypeOptions) {\n// return function ({ get, set }, context: ClassAccessorDecoratorContext): ClassAccessorDecoratorResult<Schema, any> {\n// if (context.kind !== \"accessor\") {\n// throw new Error(\"@type() is only supported for class accessor properties\");\n// }\n\n// const field = context.name.toString();\n\n// //\n// // detect index for this field, considering inheritance\n// //\n// const parent = Object.getPrototypeOf(context.metadata);\n// let fieldIndex: number = context.metadata[$numFields] // current structure already has fields defined\n// ?? (parent && parent[$numFields]) // parent structure has fields defined\n// ?? -1; // no fields defined\n// fieldIndex++;\n\n// if (\n// !parent && // the parent already initializes the `$changes` property\n// !Metadata.hasFields(context.metadata)\n// ) {\n// context.addInitializer(function (this: Ref) {\n// Object.defineProperty(this, $changes, {\n// value: new ChangeTree(this),\n// enumerable: false,\n// writable: true\n// });\n// });\n// }\n\n// Metadata.addField(context.metadata, fieldIndex, field, type);\n\n// const isArray = ArraySchema.is(type);\n// const isMap = !isArray && MapSchema.is(type);\n\n// // if (options && options.manual) {\n// // // do not declare getter/setter descriptor\n// // definition.descriptors[field] = {\n// // enumerable: true,\n// // configurable: true,\n// // writable: true,\n// // };\n// // return;\n// // }\n\n// return {\n// init(value) {\n// // TODO: may need to convert ArraySchema/MapSchema here\n\n// // do not flag change if value is undefined.\n// if (value !== undefined) {\n// this[$changes].change(fieldIndex);\n\n// // automaticallty transform Array into ArraySchema\n// if (isArray) {\n// if (!(value instanceof ArraySchema)) {\n// value = new ArraySchema(...value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // automaticallty transform Map into MapSchema\n// if (isMap) {\n// if (!(value instanceof MapSchema)) {\n// value = new MapSchema(value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // try to turn provided structure into a Proxy\n// if (value['$proxy'] === undefined) {\n// if (isMap) {\n// value = getMapProxy(value);\n// }\n// }\n\n// }\n\n// return value;\n// },\n\n// get() {\n// return get.call(this);\n// },\n\n// set(value: any) {\n// /**\n// * Create Proxy for array or map items\n// */\n\n// // skip if value is the same as cached.\n// if (value === get.call(this)) {\n// return;\n// }\n\n// if (\n// value !== undefined &&\n// value !== null\n// ) {\n// // automaticallty transform Array into ArraySchema\n// if (isArray) {\n// if (!(value instanceof ArraySchema)) {\n// value = new ArraySchema(...value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // automaticallty transform Map into MapSchema\n// if (isMap) {\n// if (!(value instanceof MapSchema)) {\n// value = new MapSchema(value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // try to turn provided structure into a Proxy\n// if (value['$proxy'] === undefined) {\n// if (isMap) {\n// value = getMapProxy(value);\n// }\n// }\n\n// // flag the change for encoding.\n// this[$changes].change(fieldIndex);\n\n// //\n// // call setParent() recursively for this and its child\n// // structures.\n// //\n// if (value[$changes]) {\n// value[$changes].setParent(\n// this,\n// this[$changes].root,\n// Metadata.getIndex(context.metadata, field),\n// );\n// }\n\n// } else if (get.call(this)) {\n// //\n// // Setting a field to `null` or `undefined` will delete it.\n// //\n// this[$changes].delete(field);\n// }\n\n// set.call(this, value);\n// },\n// };\n// }\n// }\n\nexport function view<T> (tag: number = DEFAULT_VIEW_TAG) {\n return function(target: T, fieldName: string) {\n const metadata = Metadata.initialize(target.constructor as typeof Schema);\n Metadata.setTag(metadata, fieldName, tag);\n }\n}\n\nexport function owned<T> (target: T, field: string) {\n const metadata = Metadata.initialize(target.constructor as typeof Schema);\n metadata[metadata[field]].owned = true;\n}\n\nexport function unreliable<T> (target: T, field: string) {\n const metadata = Metadata.initialize(target.constructor as typeof Schema);\n Metadata.setUnreliable(metadata, field);\n}\n\n/**\n * @transient — mark a field as not persisted to snapshots (encodeAll /\n * encodeAllView). Transient fields are still emitted on per-tick patches\n * (reliable or unreliable), but late-joining clients won't see them until\n * the next mutation.\n *\n * Orthogonal to @unreliable: a field can be either, both, or neither.\n */\nexport function transient<T> (target: T, field: string) {\n const metadata = Metadata.initialize(target.constructor as typeof Schema);\n Metadata.setTransient(metadata, field);\n}\n\nexport function type (\n type: DefinitionType,\n options?: TypeOptions\n): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n const constructor = target.constructor as typeof Schema;\n\n if (!type) {\n throw new Error(`${constructor.name}: @type() reference provided for \"${field}\" is undefined. Make sure you don't have any circular dependencies.`);\n }\n\n // Normalize type (enum/collection/etc)\n type = getNormalizedType(type);\n\n // for inheritance support\n TypeContext.register(constructor);\n\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata = parentClass[Symbol.metadata];\n const metadata = Metadata.initialize(constructor);\n\n let fieldIndex: number = metadata[field];\n\n /**\n * skip if descriptor already exists for this field (`@deprecated()`)\n */\n if (metadata[fieldIndex] !== undefined) {\n if (metadata[fieldIndex].deprecated) {\n // do not create accessors for deprecated properties.\n return;\n\n } else if (metadata[fieldIndex].type !== undefined) {\n // trying to define same property multiple times across inheritance.\n // https://github.com/colyseus/colyseus-unity3d/issues/131#issuecomment-814308572\n try {\n throw new Error(`@colyseus/schema: Duplicate '${field}' definition on '${constructor.name}'.\\nCheck @type() annotation`);\n\n } catch (e) {\n const definitionAtLine = e.stack.split(\"\\n\")[4].trim();\n throw new Error(`${e.message} ${definitionAtLine}`);\n }\n }\n\n } else {\n //\n // detect index for this field, considering inheritance\n //\n fieldIndex = metadata[$numFields] // current structure already has fields defined\n ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined\n ?? -1; // no fields defined\n fieldIndex++;\n }\n\n if (options && options.manual) {\n Metadata.addField(\n metadata,\n fieldIndex,\n field,\n type,\n {\n // do not declare getter/setter descriptor\n enumerable: true,\n configurable: true,\n writable: true,\n }\n );\n\n } else {\n const { complexTypeKlass, childType } = resolveFieldType(type);\n\n Metadata.addField(\n metadata,\n fieldIndex,\n field,\n type,\n getPropertyDescriptor(field, fieldIndex, childType, complexTypeKlass)\n );\n }\n\n // Install accessor descriptor on the prototype (once per class field).\n if (metadata[$descriptors][field]) {\n Object.defineProperty(target, field, metadata[$descriptors][field]);\n }\n\n // Pre-compute encoder function for primitive types.\n if (typeof type === \"string\") {\n if (!metadata[$encoders]) {\n Object.defineProperty(metadata, $encoders, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$encoders][fieldIndex] = (encode as any)[type];\n }\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────\n// Per-field-shape specialized setters.\n//\n// Single shared closure used to handle all three shapes (primitive /\n// schema-ref / collection) in one body with many branches. V8's inliner\n// gave up on it because of the size + polymorphism. Splitting into three\n// dedicated factories yields smaller, monomorphic bodies that the JIT can\n// inline into hot setters like `position.x = 100`.\n// ────────────────────────────────────────────────────────────────────────\n\n/** typeof target per primitive type. Cached once, looked up O(1) at decoration. */\nconst PRIMITIVE_TYPEOF: Record<string, \"number\" | \"string\" | \"boolean\" | \"bigint\"> = {\n number: \"number\",\n int8: \"number\", uint8: \"number\",\n int16: \"number\", uint16: \"number\",\n int32: \"number\", uint32: \"number\",\n int64: \"number\", uint64: \"number\",\n float32: \"number\", float64: \"number\",\n bigint64: \"bigint\", biguint64: \"bigint\",\n string: \"string\",\n boolean: \"boolean\",\n};\n\nfunction makePrimitiveSetter(fieldName: string, fieldIndex: number, type: string) {\n const typeofTarget = PRIMITIVE_TYPEOF[type]; // undefined for custom types\n const allowNull = type === \"string\";\n const isBool = type === \"boolean\";\n return function (this: Schema, value: any) {\n const values = this[$values];\n const previousValue = values[fieldIndex];\n if (value === previousValue) return;\n\n if (value !== undefined && value !== null) {\n // Inlined assertType primitive check.\n if (\n !isBool &&\n typeofTarget !== undefined &&\n typeof value !== typeofTarget &&\n !(allowNull && value === null)\n ) {\n const ctorSuffix = (value && value.constructor) ? ` (${value.constructor.name})` : '';\n throw new EncodeSchemaError(\n `a '${typeofTarget}' was expected, but '${JSON.stringify(value)}'${ctorSuffix} was provided in ${this.constructor.name}#${fieldName}`\n );\n }\n (this.constructor as typeof Schema)[$track](this[$changes], fieldIndex, OPERATION.ADD);\n } else if (previousValue !== undefined && previousValue !== null) {\n this[$changes].delete(fieldIndex);\n }\n values[fieldIndex] = value;\n };\n}\n\nfunction makeSchemaRefSetter(fieldName: string, fieldIndex: number, type: typeof Schema) {\n return function (this: Schema, value: any) {\n const values = this[$values];\n const previousValue = values[fieldIndex];\n if (value === previousValue) return;\n\n if (value !== undefined && value !== null) {\n assertInstanceType(value, type, this, fieldName);\n\n const changeTree = this[$changes];\n const ctor = this.constructor as typeof Schema;\n\n if (previousValue !== undefined && previousValue !== null && previousValue[$changes]) {\n changeTree.root?.remove(previousValue[$changes]);\n ctor[$track](changeTree, fieldIndex, OPERATION.DELETE_AND_ADD);\n } else {\n ctor[$track](changeTree, fieldIndex, OPERATION.ADD);\n }\n\n // External Schema-like instances may not carry a ChangeTree.\n value[$changes]?.setParent(this, changeTree.root, fieldIndex);\n\n } else if (previousValue !== undefined && previousValue !== null) {\n this[$changes].delete(fieldIndex);\n }\n values[fieldIndex] = value;\n };\n}\n\nfunction makeCollectionSetter(\n _fieldName: string,\n fieldIndex: number,\n type: DefinitionType,\n complexTypeKlass: TypeDefinition,\n) {\n const isArrayKlass = complexTypeKlass.constructor === ArraySchema;\n const isMapKlass = complexTypeKlass.constructor === MapSchema;\n return function (this: Schema, value: any) {\n const values = this[$values];\n const previousValue = values[fieldIndex];\n if (value === previousValue) return;\n\n if (value !== undefined && value !== null) {\n // automatic Array → ArraySchema / Map → MapSchema conversion.\n if (isArrayKlass && !(value instanceof ArraySchema)) {\n value = new ArraySchema(...value);\n } else if (isMapKlass && !(value instanceof MapSchema)) {\n value = new MapSchema(value);\n }\n value[$childType] = type;\n\n const changeTree = this[$changes];\n const ctor = this.constructor as typeof Schema;\n\n if (previousValue !== undefined && previousValue !== null && previousValue[$changes]) {\n changeTree.root?.remove(previousValue[$changes]);\n ctor[$track](changeTree, fieldIndex, OPERATION.DELETE_AND_ADD);\n } else {\n ctor[$track](changeTree, fieldIndex, OPERATION.ADD);\n }\n\n value[$changes]?.setParent(this, changeTree.root, fieldIndex);\n\n } else if (previousValue !== undefined && previousValue !== null) {\n this[$changes].delete(fieldIndex);\n }\n values[fieldIndex] = value;\n };\n}\n\nexport function getPropertyDescriptor(\n fieldName: string,\n fieldIndex: number,\n type: DefinitionType,\n complexTypeKlass: TypeDefinition | false,\n) {\n let setter: (this: Schema, value: any) => void;\n if (complexTypeKlass) {\n setter = makeCollectionSetter(fieldName, fieldIndex, type, complexTypeKlass);\n } else if (typeof type === \"string\") {\n setter = makePrimitiveSetter(fieldName, fieldIndex, type);\n } else {\n setter = makeSchemaRefSetter(fieldName, fieldIndex, type as typeof Schema);\n }\n return {\n get: function (this: Schema) { return this[$values][fieldIndex]; },\n set: setter,\n enumerable: true,\n configurable: true,\n };\n}\n\n/**\n * `@deprecated()` flag a field as deprecated.\n * The previous `@type()` annotation should remain along with this one.\n */\n\nexport function deprecated(throws: boolean = true): PropertyDecorator {\n return function (klass: typeof Schema, field: string) {\n const metadata = Metadata.initialize(klass.constructor as typeof Schema);\n const fieldIndex = metadata[field];\n\n metadata[fieldIndex].deprecated = true;\n\n if (throws) {\n metadata[$descriptors] ??= {};\n metadata[$descriptors][field] = {\n get: function () { throw new Error(`${field} is deprecated.`); },\n set: function (this: Schema, _value: any) { /* throw new Error(`${field} is deprecated.`); */ },\n enumerable: false,\n configurable: true\n };\n // Override accessor on the prototype so deprecated throws at access.\n Object.defineProperty(klass, field, metadata[$descriptors][field]);\n }\n\n // flag metadata[field] as non-enumerable\n Object.defineProperty(metadata, fieldIndex, {\n value: metadata[fieldIndex],\n enumerable: false,\n configurable: true\n });\n }\n}\n\n// Helper type to extract InitProps from initialize method.\n// - Non-empty initialize params: use them directly.\n// - Zero-arg initialize: no args accepted (`never`) — user-supplied field\n// values would be dropped at runtime (parent's initialize is skipped\n// during child construction via the `new.target === klass` guard, and\n// own-field auto-assignment happens only inside initialize).\n// - No initialize at all: derive from fields map.\ntype ExtractInitProps<T> = T extends { initialize: (...args: infer P) => void }\n ? P extends readonly []\n ? never\n : P extends readonly [infer First]\n ? First extends object\n ? First\n : P\n : P\n : BuilderInitProps<T>;\n\n// Does the init-props shape have at least one required property?\ntype HasRequiredKeys<X> = {} extends X ? false : true;\n\n// Whether the constructor's init-props argument must be supplied.\n// Mirrors the cases inside ExtractInitProps: non-empty initialize params\n// are required; zero-arg initialize accepts nothing; no initialize\n// depends on whether the derived BuilderInitProps has any required keys.\ntype IsInitPropsRequired<T> = T extends { initialize: (...args: infer P) => void }\n ? P extends readonly []\n ? false\n : true\n : HasRequiredKeys<BuilderInitProps<T>>;\n\n// Whether T declares any non-empty `initialize` method. Used to tighten\n// the constructor signature: authors who write an explicit `initialize()`\n// with args opt into strict required args. Without an initialize the sig\n// also allows `[]` so the common `new X(); x.field = ...` pattern works.\ntype HasExplicitInit<T> = T extends { initialize: (...args: infer P) => void }\n ? P extends readonly [] ? false : true\n : false;\n\n/**\n * A `schema()` field definition accepts a FieldBuilder, a Schema subclass\n * (shorthand for `t.ref(Class)`), or a method (attached to the prototype).\n */\nexport type FieldsAndMethods = Record<string, FieldBuilder<any, boolean, boolean> | (new (...args: any[]) => Schema) | Function>;\n\nexport interface SchemaWithExtends<T, P extends typeof Schema> {\n extend: <T2 extends FieldsAndMethods = FieldsAndMethods>(\n fields: T2 & ThisType<InferSchemaInstanceType<T & T2>>,\n name?: string,\n ) => SchemaWithExtendsConstructor<T & T2, ExtractInitProps<T & T2>, P>;\n}\n\n/**\n * Get the type of the schema defined via `schema('Name', {...})` method.\n *\n * @example\n * const Entity = schema('Entity', {\n * x: t.number(),\n * y: t.number(),\n * });\n * type Entity = SchemaType<typeof Entity>;\n */\nexport type SchemaType<T extends {'~type': any}> = T['~type'];\n\nexport interface SchemaWithExtendsConstructor<\n T,\n InitProps,\n P extends typeof Schema\n> extends SchemaWithExtends<T, P> {\n '~type': InferSchemaInstanceType<T>;\n // Constructor signature:\n // - InitProps = never (zero-arg initialize): no args.\n // - InitProps is a tuple (multi-arg initialize): spread it.\n // - Explicit `initialize(arg)` with required args: strict [InitProps]\n // — the author opted into requiring them.\n // - No initialize, but required builder fields: allow `[]` or\n // `[InitProps]`. Preserves `new X(); x.field = ...` while still\n // flagging incomplete-object mistakes like `new X({ hp: 1 })`.\n // - Otherwise: optional single-arg.\n new (...args:\n [InitProps] extends [never] ? []\n : InitProps extends readonly any[] ? InitProps\n : HasExplicitInit<T> extends true ? [InitProps]\n : IsInitPropsRequired<T> extends true ? ([] | [InitProps])\n : [InitProps?]\n ): InferSchemaInstanceType<T> & InstanceType<P>;\n prototype: InferSchemaInstanceType<T> & InstanceType<P> & {\n initialize(...args: [InitProps] extends [never] ? [] : InitProps extends readonly any[] ? InitProps : [InitProps]): void;\n };\n}\n\n/**\n * Define a Schema class declaratively.\n *\n * @example\n * import { schema, t } from '@colyseus/schema';\n *\n * const Player = schema({\n * hp: t.uint8().default(100),\n * name: t.string().view(),\n * takeDamage(n: number) { this.hp -= n; },\n * }, 'Player');\n *\n * const Warrior = Player.extend({\n * weapon: t.string(),\n * }, 'Warrior');\n */\nexport function schema<\n T extends FieldsAndMethods,\n P extends typeof Schema = typeof Schema\n>(\n fieldsAndMethods: T & ThisType<InferSchemaInstanceType<T>>,\n name?: string,\n inherits: P = Schema as P,\n): SchemaWithExtendsConstructor<T, ExtractInitProps<T>, P> {\n if (fieldsAndMethods == null || typeof fieldsAndMethods !== \"object\") {\n throw new Error(`schema(): first argument must be a fields object (got ${typeof fieldsAndMethods}).`);\n }\n\n const fields: any = {};\n const methods: any = {};\n const defaultValues: any = {};\n const viewTagFields: { [field: string]: number } = {};\n const ownedFields: string[] = [];\n const unreliableFields: string[] = [];\n const transientFields: string[] = [];\n const deprecatedFields: { [field: string]: boolean } = {};\n const staticFields: string[] = [];\n const streamFields: string[] = [];\n const streamPriorityFields: { [field: string]: (view: any, element: any) => number } = {};\n const optionalFields: string[] = [];\n\n for (const fieldName in fieldsAndMethods) {\n const value: any = (fieldsAndMethods as any)[fieldName];\n\n if (isBuilder(value)) {\n const def = value.toDefinition();\n fields[fieldName] = getNormalizedType(def.type);\n\n if (def.view !== undefined) { viewTagFields[fieldName] = def.view; }\n if (def.owned) { ownedFields.push(fieldName); }\n if (def.unreliable) { unreliableFields.push(fieldName); }\n if (def.transient) { transientFields.push(fieldName); }\n if (def.deprecated) { deprecatedFields[fieldName] = def.deprecatedThrows; }\n if (def.static) { staticFields.push(fieldName); }\n if (def.stream) { streamFields.push(fieldName); }\n if (def.streamPriority !== undefined) { streamPriorityFields[fieldName] = def.streamPriority; }\n if (def.optional) { optionalFields.push(fieldName); }\n\n if (def.hasDefault) {\n defaultValues[fieldName] = def.default;\n } else if (!def.optional) {\n // Auto-instantiate collection/Schema defaults when none is provided.\n // `.optional()` opts out — field starts as undefined.\n const rawType: any = def.type;\n if (rawType && typeof rawType === \"object\") {\n if (rawType.array !== undefined) {\n defaultValues[fieldName] = new ArraySchema();\n } else if (rawType.map !== undefined) {\n defaultValues[fieldName] = new MapSchema();\n } else if (rawType.set !== undefined) {\n defaultValues[fieldName] = new SetSchema();\n } else if (rawType.collection !== undefined) {\n defaultValues[fieldName] = new CollectionSchema();\n } else if (rawType.stream !== undefined) {\n defaultValues[fieldName] = new StreamSchema();\n }\n } else if (typeof rawType === \"function\" && Schema.is(rawType)) {\n if (!rawType.prototype.initialize || rawType.prototype.initialize.length === 0) {\n defaultValues[fieldName] = new rawType();\n }\n }\n }\n\n } else if (typeof value === \"function\") {\n if (Schema.is(value)) {\n // Convenience: allow a bare Schema subclass (equivalent to `t.ref(Class)`).\n fields[fieldName] = getNormalizedType(value);\n if (!value.prototype.initialize || value.prototype.initialize.length === 0) {\n defaultValues[fieldName] = new value();\n }\n } else {\n methods[fieldName] = value;\n }\n\n } else {\n throw new Error(\n `schema(${name ? `'${name}'` : \"\"}): field '${fieldName}' must be a t.* builder, ` +\n `Schema subclass, or method (got ${typeof value}).`\n );\n }\n }\n\n const getDefaultValues = () => {\n const defaults: any = {};\n for (const fieldName in defaultValues) {\n const defaultValue = defaultValues[fieldName];\n if (defaultValue && typeof defaultValue.clone === \"function\") {\n defaults[fieldName] = defaultValue.clone();\n } else {\n defaults[fieldName] = defaultValue;\n }\n }\n return defaults;\n };\n\n const getParentProps = (props: any) => {\n const fieldNames = Object.keys(fields);\n const parentProps: any = {};\n for (const key in props) {\n if (!fieldNames.includes(key)) {\n parentProps[key] = props[key];\n }\n }\n return parentProps;\n };\n\n /** @codegen-ignore */\n const klass = Metadata.setFields<any>(class extends (inherits as any) {\n constructor(...args: any[]) {\n if (methods.initialize && typeof methods.initialize === \"function\") {\n super(Object.assign({}, getDefaultValues(), getParentProps(args[0] || {})));\n // Only call initialize() on the exact target class, not parents.\n if (new.target === klass) {\n methods.initialize.apply(this, args);\n }\n } else {\n super(Object.assign({}, getDefaultValues(), args[0] || {}));\n }\n }\n }, fields) as unknown as SchemaWithExtendsConstructor<T, ExtractInitProps<T>, P>;\n\n (klass as any)._getDefaultValues = getDefaultValues;\n\n Object.assign(klass.prototype, methods);\n\n for (const fieldName in viewTagFields) {\n view(viewTagFields[fieldName])(klass.prototype, fieldName);\n }\n for (const fieldName of ownedFields) {\n owned(klass.prototype, fieldName);\n }\n for (const fieldName of unreliableFields) {\n unreliable(klass.prototype, fieldName);\n }\n for (const fieldName of transientFields) {\n transient(klass.prototype, fieldName);\n }\n for (const fieldName in deprecatedFields) {\n deprecated(deprecatedFields[fieldName])(klass.prototype, fieldName);\n }\n\n if (staticFields.length > 0 || streamFields.length > 0) {\n const metadata = (klass as any)[Symbol.metadata] as Metadata;\n for (const fieldName of staticFields) {\n Metadata.setStatic(metadata, fieldName);\n }\n for (const fieldName of streamFields) {\n Metadata.setStream(metadata, fieldName);\n }\n for (const fieldName in streamPriorityFields) {\n Metadata.setStreamPriority(metadata, fieldName, streamPriorityFields[fieldName]);\n }\n }\n\n if (optionalFields.length > 0) {\n const metadata = (klass as any)[Symbol.metadata] as Metadata;\n for (const fieldName of optionalFields) {\n metadata[metadata[fieldName]].optional = true;\n }\n }\n\n if (name) {\n Object.defineProperty(klass, \"name\", { value: name });\n }\n\n (klass as any).extend = <T2 extends FieldsAndMethods = FieldsAndMethods>(\n childFields: T2,\n childName?: string,\n ) => schema<T2>(childFields, childName, klass as any);\n\n return klass;\n}\n","import type { Schema } from \"./Schema.js\";\nimport { OPERATION } from \"./encoding/spec.js\";\nimport { $changes, $refId } from \"./types/symbols.js\";\n\ninterface ChangeDump {\n ops: {\n ADD?: number;\n REMOVE?: number;\n REPLACE?: number;\n },\n refs: string[],\n}\n\nexport function getIndent(level: number) {\n return (new Array(level).fill(0)).map((_, i) =>\n (i === level - 1) ? `└─ ` : ` `\n ).join(\"\");\n}\n\nexport function dumpChanges(schema: Schema) {\n const $root = schema[$changes].root;\n\n const dump: ChangeDump = {\n ops: {},\n refs: []\n };\n\n // for (const refId in $root.changes) {\n let current = $root.changes.next;\n while (current) {\n const changeTree = current.changeTree;\n // skip if ChangeTree is undefined\n if (changeTree === undefined) {\n current = current.next;\n continue;\n }\n\n dump.refs.push(`refId#${changeTree.ref[$refId]}`);\n changeTree.forEach((index, op) => {\n if (index < 0 || !op) return;\n const opName = OPERATION[op];\n if (!dump.ops[opName as keyof ChangeDump['ops']]) { dump.ops[opName as keyof ChangeDump['ops']] = 0; }\n dump.ops[opName as keyof ChangeDump['ops']]++;\n });\n current = current.next;\n }\n\n return dump;\n}\n\nexport function getNextPowerOf2(number: number) {\n // If number is already a power of 2, return it\n if ((number & (number - 1)) === 0) {\n return number;\n }\n\n // Find the position of the most significant bit\n let msbPosition = 0;\n while (number > 0) {\n number >>= 1;\n msbPosition++;\n }\n\n // Return the next power of 2\n return 1 << msbPosition;\n}","import { OPERATION } from './encoding/spec.js';\nimport { DEFAULT_VIEW_TAG, type DefinitionType } from \"./annotations.js\";\n\nimport { AssignableProps, NonFunctionPropNames, ToJSON } from './types/HelperTypes.js';\n\nimport { ChangeTree, installUntrackedChangeTree, IRef, Ref } from './encoder/ChangeTree.js';\nimport { $changes, $decoder, $deleteByIndex, $encoder, $filter, $getByIndex, $numFields, $refId, $track, $values } from './types/symbols.js';\nimport { StateView } from './encoder/StateView.js';\n\nimport { encodeSchemaOperation } from './encoder/EncodeOperation.js';\nimport { decodeSchemaOperation } from './decoder/DecodeOperation.js';\n\nimport type { Decoder } from './decoder/Decoder.js';\nimport type { Metadata, MetadataField } from './Metadata.js';\nimport { getIndent } from './utils.js';\n\n/**\n * Schema encoder / decoder\n */\nexport class Schema<C = any> implements IRef {\n static [Symbol.metadata]: Metadata;\n static [$encoder] = encodeSchemaOperation;\n static [$decoder] = decodeSchemaOperation;\n\n [$refId]?: number;\n [$values]: any[];\n\n /**\n * Initialize change tracking on this instance.\n * Field accessor descriptors (getter/setter) live on the prototype,\n * installed once at class-definition time. Per-instance work is limited\n * to allocating a ChangeTree and a values array.\n */\n static initialize(instance: any) {\n // $changes MUST be non-enumerable: tests use assert.deepStrictEqual on\n // Schema instances (e.g. arrayOfPlayers.toArray()), which walks\n // enumerable own Symbol properties. ChangeTree has circular refs\n // (root → changeTrees → other ChangeTrees), so a visible $changes\n // would send deepStrictEqual into exponential recursion. Plain\n // assignment of a Symbol key would be enumerable: true — hence we\n // keep defineProperty here.\n Object.defineProperty(instance, $changes, {\n value: new ChangeTree(instance),\n enumerable: false,\n writable: true\n });\n instance[$values] = [];\n }\n\n /**\n * Decoder-side factory. Skips the user subclass ctor entirely —\n * decoder-built instances are passive mirrors of server state, so any\n * field initializer / ctor body work would be overwritten by the\n * decoded ADDs immediately after. Assignment order matches\n * {@link Schema.initialize} so V8 assigns the same hidden class\n * ($changes, then $values), keeping decode-path ICs monomorphic even\n * when tracked and untracked instances coexist.\n *\n * The `this:` constraint pins the return type to the concrete subclass\n * when called as `Player.initializeForDecoder()`, not the base Schema.\n */\n static initializeForDecoder<T extends Schema = Schema>(this: { prototype: T } & typeof Schema): T {\n const inst: any = Object.create(this.prototype);\n installUntrackedChangeTree(inst);\n inst[$values] = [];\n return inst;\n }\n\n /**\n * Check whether `type` describes a Schema *class* (a subclass\n * constructor carrying `Symbol.metadata`, as installed by `@type`).\n * Returns false for primitive type strings like `\"number\"`, descriptor\n * objects like `{ map: Player }`, and Schema *instances*.\n *\n * For the instance-level check — \"is this value a Schema instance?\" —\n * see {@link Schema.isSchema}.\n */\n static is(type: DefinitionType) {\n return typeof((type as typeof Schema)[Symbol.metadata]) === \"object\";\n }\n\n /**\n * Check if a value is an *instance* of Schema. Uses duck-typing on\n * `.assign` to work across multiple `@colyseus/schema` versions that\n * may be loaded in the same process (e.g. bundled server types vs.\n * client types in a p2p setup).\n *\n * For the class-level check — \"is this type a Schema subclass?\" —\n * see {@link Schema.is}.\n *\n * @param obj Value to check\n * @returns true if the value is a Schema instance\n */\n static isSchema(obj: any): obj is Schema {\n return typeof obj?.assign === \"function\";\n }\n\n /**\n * Track property changes. Exposed as an override point so downstream\n * tools (debuggers, transparent proxies, custom instrumentation) can\n * intercept per-field writes. Hot-path code in `annotations.ts` calls\n * `(this.constructor as typeof Schema)[$track](...)` rather than\n * `changeTree.change(...)` directly so any subclass override wins.\n */\n static [$track] (changeTree: ChangeTree, index: number, operation: OPERATION = OPERATION.ADD) {\n changeTree.change(index, operation);\n }\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: Schema, index: number, view: StateView) {\n const metadata: Metadata = (ref.constructor as typeof Schema)[Symbol.metadata];\n const tag = metadata[index]?.tag;\n\n if (view === undefined) {\n // shared pass/encode: encode if doesn't have a tag\n return tag === undefined;\n\n } else if (tag === undefined) {\n // view pass: no tag\n return true;\n\n } else if (tag === DEFAULT_VIEW_TAG) {\n // view pass: default tag\n return view.isChangeTreeVisible(ref[$changes]);\n\n } else {\n // view pass: custom tag\n return view.hasTagOnTree(ref[$changes], tag);\n }\n }\n\n // allow inherited classes to have a constructor\n constructor(arg?: C) {\n Schema.initialize(this);\n if (arg) {\n Schema.assignProps(this, arg);\n }\n }\n\n /**\n * Assign properties to the instance.\n * @param props Properties to assign to the instance\n * @returns\n */\n public assign<T extends Partial<this>>(props: AssignableProps<T>,): this {\n Schema.assignProps(this, props);\n return this;\n }\n\n /**\n * Metadata-driven property assignment.\n * Reads tracked fields via property access (works with prototype accessors),\n * then copies any remaining own properties for non-tracked fields.\n */\n protected static assignProps(target: any, source: any) {\n const metadata: Metadata = target.constructor[Symbol.metadata];\n if (metadata && metadata[$numFields] !== undefined) {\n for (let i = 0; i <= metadata[$numFields]; i++) {\n const field = metadata[i];\n if (!field) { continue; }\n const value = source[field.name];\n if (value !== undefined) {\n target[field.name] = value;\n }\n }\n }\n // Copy non-tracked own properties (e.g. `notSynched: true`).\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (metadata && metadata[key] !== undefined) { continue; }\n target[key] = source[key];\n }\n }\n\n /**\n * Restore the instance from JSON data.\n * @param jsonData JSON data to restore the instance from\n * @returns\n */\n public restore(jsonData: ToJSON<this>): this {\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n\n for (const fieldIndex in metadata) {\n const field = metadata[fieldIndex as any as number];\n const fieldName = field.name as keyof this;\n const fieldType = field.type;\n const value = (jsonData as any)[fieldName];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (typeof fieldType === \"string\") {\n // Primitive type: assign directly\n this[fieldName] = value;\n\n } else if (Schema.is(fieldType)) {\n // Schema type: create instance and restore\n const instance = new (fieldType as typeof Schema)();\n instance.restore(value);\n this[fieldName] = instance as any;\n\n } else if (typeof fieldType === \"object\") {\n // Collection types: { map: ... }, { array: ... }, etc.\n const collectionType = Object.keys(fieldType)[0] as string;\n const childType = (fieldType as any)[collectionType];\n\n if (collectionType === \"map\") {\n const mapSchema = this[fieldName] as any;\n for (const key in value) {\n if (Schema.is(childType)) {\n const childInstance = new (childType as typeof Schema)();\n childInstance.restore(value[key]);\n mapSchema.set(key, childInstance);\n } else {\n mapSchema.set(key, value[key]);\n }\n }\n\n } else if (collectionType === \"array\") {\n const arraySchema = this[fieldName] as any;\n for (let i = 0; i < value.length; i++) {\n if (Schema.is(childType)) {\n const childInstance = new (childType as typeof Schema)();\n childInstance.restore(value[i]);\n arraySchema.push(childInstance);\n } else {\n arraySchema.push(value[i]);\n }\n }\n }\n }\n }\n\n return this;\n }\n\n /**\n * (Server-side): Flag a property to be encoded for the next patch.\n * @param instance Schema instance\n * @param property string representing the property name, or number representing the index of the property.\n * @param operation OPERATION to perform (detected automatically)\n */\n public setDirty<K extends NonFunctionPropNames<this>>(property: K | number, operation?: OPERATION) {\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n this[$changes].change(\n metadata[metadata[property as string]].index,\n operation\n );\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Change-tracking control API\n //\n // By default, every mutation to a @type() property is automatically\n // recorded as a change. These methods let you opt out for bulk-load\n // scenarios or custom batching.\n //\n // @example\n // // Bulk-load without emitting changes:\n // player.untracked(() => {\n // player.hp = 100;\n // player.name = \"alice\";\n // });\n //\n // // Pause / resume pattern:\n // player.pauseTracking();\n // player.hp = 100; // not tracked\n // player.resumeTracking();\n // player.hp = 50; // tracked\n // ────────────────────────────────────────────────────────────────────\n\n /** Stop recording mutations until resumeTracking() is called. */\n public pauseTracking(): void {\n this[$changes].pause();\n }\n\n /** Re-enable automatic change tracking. */\n public resumeTracking(): void {\n this[$changes].resume();\n }\n\n /**\n * Run `fn` with change tracking paused, then resume.\n * Returns the function's return value. Safe to nest.\n */\n public untracked<T>(fn: () => T): T {\n return this[$changes].untracked(fn);\n }\n\n /** True while tracking is paused. */\n public get isTrackingPaused(): boolean {\n return this[$changes].paused;\n }\n\n clone (): this {\n // Create instance without calling custom constructor\n const cloned = Object.create(this.constructor.prototype);\n Schema.initialize(cloned);\n\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n\n //\n // TODO: clone all properties, not only annotated ones\n //\n // for (const field in this) {\n for (const fieldIndex in metadata) {\n const field = metadata[fieldIndex as any as number].name as keyof this;\n\n if (\n typeof (this[field]) === \"object\" &&\n typeof ((this[field] as any)?.clone) === \"function\"\n ) {\n // deep clone\n cloned[field] = (this[field] as any).clone();\n\n } else {\n // primitive values\n cloned[field] = this[field];\n }\n }\n\n return cloned;\n }\n\n toJSON (this: any): ToJSON<this> {\n const obj: any = {};\n const metadata = this.constructor[Symbol.metadata];\n for (const index in metadata) {\n const field = metadata[index] as MetadataField;\n const fieldName = field.name;\n if (!field.deprecated && this[fieldName] !== null && typeof (this[fieldName]) !== \"undefined\") {\n obj[fieldName] = (typeof (this[fieldName]['toJSON']) === \"function\")\n ? this[fieldName]['toJSON']()\n : this[fieldName];\n }\n }\n return obj;\n }\n\n /**\n * Used in tests only\n * @internal\n */\n discardAllChanges() {\n this[$changes].discardAll();\n }\n\n [$getByIndex](index: number): any {\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n return this[metadata[index].name as keyof this];\n }\n\n [$deleteByIndex](index: number): void {\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n this[metadata[index].name as keyof this] = undefined;\n }\n\n /**\n * Inspect the `refId` of all Schema instances in the tree. Optionally display the contents of the instance.\n *\n * @param ref Schema instance\n * @param showContents display JSON contents of the instance\n * @returns\n */\n static debugRefIds<T extends Schema>(ref: T, showContents: boolean = false, level: number = 0, decoder?: Decoder, keyPrefix: string = \"\") {\n const contents = (showContents) ? ` - ${JSON.stringify(ref.toJSON())}` : \"\";\n const changeTree: ChangeTree = ref[$changes];\n\n const refId = (ref as IRef)[$refId];\n const root = (decoder) ? decoder.root : changeTree.root;\n\n // log reference count if > 1\n const refCount = (root?.refCount?.[refId] > 1)\n ? ` [×${root.refCount[refId]}]`\n : '';\n\n let output = `${getIndent(level)}${keyPrefix}${ref.constructor.name} (refId: ${refId})${refCount}${contents}\\n`;\n\n changeTree.forEachChild((childChangeTree, indexOrKey) => {\n let key = indexOrKey;\n if (typeof indexOrKey === 'number' && (ref as any)['$indexes']) {\n // MapSchema\n key = (ref as any)['$indexes'].get(indexOrKey) ?? indexOrKey;\n }\n const keyPrefix = ((ref as any)['forEach'] !== undefined && key !== undefined) ? `[\"${key}\"]: ` : \"\";\n output += this.debugRefIds(childChangeTree.ref, showContents, level + 1, decoder, keyPrefix);\n });\n\n return output;\n }\n\n /**\n * @param changeSet\n * - \"changes\": iterate the current-tick dirty queue (per-tick encode order)\n * - \"allChanges\" / \"allFilteredChanges\" (legacy): structurally walk the\n * tree in DFS preorder (matches the order in which full-sync emits\n * trees). The two legacy modes differ by which side of the filter\n * split they include.\n */\n static debugRefIdEncodingOrder<T extends Ref>(\n ref: T,\n changeSet: \"changes\" | \"allChanges\" | \"allFilteredChanges\" = 'allChanges'\n ) {\n const encodeOrder: number[] = [];\n const rootChangeTree = ref[$changes];\n\n if (changeSet === \"changes\") {\n let current = rootChangeTree.root.changes?.next;\n while (current) {\n if (current.changeTree) {\n encodeOrder.push(current.changeTree.ref[$refId]);\n }\n current = current.next;\n }\n return encodeOrder;\n }\n\n // Full-sync modes: DFS preorder from root, filtered by tree's\n // filter-status to match the unfiltered / filtered split.\n const wantFiltered = (changeSet === \"allFilteredChanges\");\n const visited = new Set<ChangeTree>();\n const walk = (changeTree: ChangeTree) => {\n if (visited.has(changeTree)) return;\n visited.add(changeTree);\n if (changeTree.isFiltered === wantFiltered) {\n encodeOrder.push(changeTree.ref[$refId]);\n }\n changeTree.forEachChild((child, _) => walk(child));\n };\n walk(rootChangeTree);\n return encodeOrder;\n }\n\n static debugRefIdsFromDecoder(decoder: Decoder) {\n return this.debugRefIds(decoder.state, false, 0, decoder);\n }\n\n /**\n * Return a string representation of the changes on a Schema instance.\n * The list of changes is cleared after each encode.\n *\n * @param instance Schema instance\n * @param isEncodeAll Return \"full encode\" instead of current change set.\n * @returns\n */\n static debugChanges<T extends Ref>(instance: T, isEncodeAll: boolean = false) {\n const changeTree: ChangeTree = instance[$changes];\n const label = isEncodeAll ? \"allChanges\" : \"changes\";\n let output = `${instance.constructor.name} (${instance[$refId]}) -> .${label}:\\n`;\n\n if (isEncodeAll) {\n changeTree.forEachLive((index) => {\n output += `- [${index}]: ADD (${JSON.stringify(changeTree.getValue(Number(index), true))})\\n`;\n });\n } else {\n changeTree.forEach((index, op) => {\n if (index < 0 || !op) return;\n output += `- [${index}]: ${OPERATION[op]} (${JSON.stringify(changeTree.getValue(Number(index), false))})\\n`;\n });\n }\n\n return output;\n }\n\n}\n\n","/**\n * Allocates monotonically-increasing refIds with a reuse pool.\n *\n * `acquire()` pops from the free pool when available, otherwise bumps a\n * counter. `release()` queues a refId for reuse; the id doesn't become\n * acquirable until `flushReleases()` runs — the one-tick defer is what\n * lets the encoder guarantee a DELETE for the old instance reaches the\n * wire before the refId is handed to a new one.\n *\n * `reclaim()` handles \"resurrection\": a ref that was released but whose\n * JS instance is still alive can be re-added to the tree, in which case\n * the encoder must pull the refId back out of the pool before it's\n * handed to an unrelated instance.\n */\nexport class RefIdAllocator {\n protected nextUniqueId: number;\n\n private _free: number[] = [];\n private _pending: number[] = [];\n private _pooled: Set<number> = new Set();\n\n constructor(startRefId: number = 0) {\n this.nextUniqueId = startRefId;\n }\n\n acquire(): number {\n if (this._free.length > 0) {\n const id = this._free.pop()!;\n this._pooled.delete(id);\n return id;\n }\n return this.nextUniqueId++;\n }\n\n release(refId: number): void {\n this._pending.push(refId);\n this._pooled.add(refId);\n }\n\n isPooled(refId: number): boolean {\n return this._pooled.has(refId);\n }\n\n /**\n * Remove a refId from the pool. Called when a ref whose refId was\n * released is being resurrected. O(n) scan of the relevant array,\n * but resurrection is rare.\n */\n reclaim(refId: number): void {\n if (!this._pooled.delete(refId)) return;\n let i = this._free.indexOf(refId);\n if (i !== -1) { this._free.splice(i, 1); return; }\n i = this._pending.indexOf(refId);\n if (i !== -1) { this._pending.splice(i, 1); }\n }\n\n /**\n * Promote this tick's releases into the acquirable set. Called from\n * `Encoder.discardChanges()` — never mid-encode.\n */\n flushReleases(): void {\n const pending = this._pending;\n if (pending.length === 0) return;\n const free = this._free;\n for (let i = 0; i < pending.length; i++) free.push(pending[i]);\n pending.length = 0;\n }\n}\n","import { OPERATION } from \"../encoding/spec.js\";\nimport { TypeContext } from \"../types/TypeContext.js\";\nimport { ChangeTree, ChangeTreeList, createChangeTreeList, type ChangeTreeNode } from \"./ChangeTree.js\";\nimport { $changes, $refId } from \"../types/symbols.js\";\nimport { RefIdAllocator } from \"./RefIdAllocator.js\";\nimport type { StateView } from \"./StateView.js\";\nimport type { StreamSchema } from \"../types/custom/StreamSchema.js\";\nimport type { StreamableState } from \"./streaming.js\";\n\n/**\n * Minimal shape the encoder needs from a streamable collection. Both\n * `StreamSchema` and `.stream()`-decorated `MapSchema`/`SetSchema` etc.\n * satisfy this via a single lazily-allocated `_stream` slot — the\n * per-view / broadcast bookkeeping lives on that object, not directly\n * on the collection, so non-streaming instances pay zero Map/Set\n * allocation cost.\n */\nexport interface Streamable {\n [$refId]?: number;\n [$changes]: ChangeTree;\n _stream?: StreamableState;\n _dropView(viewId: number): void;\n _unregister(): void;\n}\n\nexport class Root {\n /**\n * Allocates and recycles refIds. See `RefIdAllocator` for the reuse\n * pool semantics (one-tick defer + resurrection).\n */\n public readonly refIds: RefIdAllocator;\n\n refCount: {[id: number]: number} = {};\n changeTrees: {[refId: number]: ChangeTree} = {};\n\n /**\n * Queue of all ChangeTrees with reliable dirty state. Per-tick encode()\n * walks this queue; per-view encodeView() walks it too (filtering at\n * emission time via tree.isFiltered + per-field @view tag).\n */\n changes: ChangeTreeList = createChangeTreeList();\n\n /**\n * Queue of all ChangeTrees with unreliable dirty state. Walked by\n * `Encoder.encodeUnreliable` / `encodeUnreliableView`. A tree may live\n * in both queues when the Schema has both reliable and unreliable\n * fields dirty at the same time.\n */\n unreliableChanges: ChangeTreeList = createChangeTreeList();\n\n /**\n * Free-list of ChangeTreeNode objects. Both queues share this pool —\n * a node carries no queue affinity, only `{ changeTree, prev, next, position }`.\n * Reusing nodes turns ~1,250 per-tick allocations (in bench) into 0.\n */\n private _nodePool: ChangeTreeNode[] = [];\n\n /**\n * View ID allocator for StateView visibility bitmaps on ChangeTree.\n * Each new StateView claims the lowest free ID; releaseViewId() puts\n * the ID back. Avoids unbounded bitmap growth across long-running rooms\n * with view churn (clients joining/leaving).\n */\n private _nextViewId: number = 0;\n private _freeViewIds: number[] = [];\n\n /** Allocate a fresh view ID (lowest available). */\n public acquireViewId(): number {\n return this._freeViewIds.length > 0\n ? this._freeViewIds.pop()!\n : this._nextViewId++;\n }\n\n /** Return a view ID to the freelist for reuse. */\n public releaseViewId(id: number): void {\n this._freeViewIds.push(id);\n }\n\n /**\n * Currently-bound StateViews, keyed by view ID and held via `WeakRef`\n * so the FinalizationRegistry backstop in StateView still works when\n * the user forgets `dispose()`. Callers must iterate via\n * `forEachActiveView`, which prunes dead entries.\n */\n public activeViews: Map<number, WeakRef<StateView>> = new Map();\n\n /**\n * Streamable collections attached under this Root — `StreamSchema`\n * plus any collection opted into streaming via `.stream()` on the\n * builder. Encoder.encodeView / broadcast pass iterates this set to\n * dispatch per-view / per-tick budget gates.\n */\n public streamTrees: Set<Streamable> = new Set();\n\n public registerView(view: StateView): void {\n this.activeViews.set(view.id, new WeakRef(view));\n }\n\n public unregisterView(view: StateView): void {\n this.activeViews.delete(view.id);\n // Clear per-view state on every registered stream so dispose()ing\n // a view doesn't leak its `_pendingByView` / `_sentByView` entries\n // indefinitely. O(streams) on dispose, acceptable since dispose is\n // rare (once per client disconnect).\n const id = view.id;\n for (const stream of this.streamTrees) {\n stream._dropView(id);\n }\n }\n\n /**\n * Iterate all live StateViews bound to this Root. Prunes entries\n * whose underlying view has been garbage collected without an\n * explicit `dispose()`.\n */\n public forEachActiveView(cb: (view: StateView) => void): void {\n for (const [id, ref] of this.activeViews) {\n const view = ref.deref();\n if (view === undefined) {\n this.activeViews.delete(id);\n for (const stream of this.streamTrees) stream._dropView(id);\n continue;\n }\n cb(view);\n }\n }\n\n public registerStream(stream: Streamable): void {\n this.streamTrees.add(stream);\n }\n\n public unregisterStream(stream: Streamable): void {\n this.streamTrees.delete(stream);\n }\n\n constructor(public types: TypeContext, startRefId: number = 0) {\n this.refIds = new RefIdAllocator(startRefId);\n }\n\n add(changeTree: ChangeTree) {\n const ref = changeTree.ref;\n\n // Assign unique `refId` to ref if it doesn't have one yet.\n // $refId is a Symbol but assert.deepStrictEqual still walks\n // *enumerable* own Symbols, so we keep defineProperty(enumerable:false)\n // to keep $refId hidden from deep-equal comparisons in tests.\n if (ref[$refId] === undefined) {\n Object.defineProperty(ref, $refId, {\n value: this.refIds.acquire(),\n enumerable: false,\n writable: true\n });\n }\n\n const refId = ref[$refId];\n\n const isNewChangeTree = (this.changeTrees[refId] === undefined);\n if (isNewChangeTree) { this.changeTrees[refId] = changeTree; }\n\n // Resurrection path: a ref whose refId is still queued for reuse\n // is being re-added. Pull the refId out of the pool before it gets\n // handed out to someone else.\n if (this.refIds.isPooled(refId)) {\n this.refIds.reclaim(refId);\n }\n\n const previousRefCount = this.refCount[refId];\n if (previousRefCount === 0) {\n //\n // When a ChangeTree is re-added, it means that it was previously\n // removed. Re-stage every currently-populated non-transient index\n // as a fresh ADD in the matching dirty bucket so the next encode\n // re-emits it on the correct channel.\n //\n changeTree.forEachLive((fieldIndex) => {\n if (changeTree.isFieldUnreliable(fieldIndex)) {\n changeTree.ensureUnreliableRecorder().record(fieldIndex, OPERATION.ADD);\n } else {\n changeTree.record(fieldIndex, OPERATION.ADD);\n }\n });\n }\n\n this.refCount[refId] = (previousRefCount || 0) + 1;\n\n return isNewChangeTree;\n }\n\n remove(changeTree: ChangeTree) {\n const refId = changeTree.ref[$refId];\n const refCount = (this.refCount[refId]) - 1;\n\n if (refCount <= 0) {\n //\n // Only remove \"root\" reference if it's the last reference\n //\n changeTree.root = undefined;\n delete this.changeTrees[refId];\n\n // Streamable-collection detach (StreamSchema + any `.stream()`\n // collection). Tree flag is cheaper than the class-level\n // brand and covers both cases uniformly.\n if (changeTree.isStreamCollection) {\n const streamable = changeTree.ref as unknown as Streamable;\n streamable._unregister?.();\n this.unregisterStream(streamable);\n }\n\n this.removeFromQueue(changeTree);\n this.removeFromUnreliableQueue(changeTree);\n\n this.refCount[refId] = 0;\n\n // Return refId to the reuse pool (deferred to end-of-tick via\n // the allocator's pending set). Stream collections are excluded\n // because their per-view delivery bookkeeping is harder to\n // audit for reuse safety and the savings there are negligible.\n // If the ref is later resurrected, `add()` evicts the refId\n // from the pool before it's handed to another instance.\n if (!changeTree.isStreamCollection) {\n this.refIds.release(refId);\n }\n\n changeTree.forEachChild((child, _) => {\n if (child.removeParent(changeTree.ref)) {\n if ((\n child.parentRef === undefined || // no parent, remove it\n (child.parentRef && this.refCount[child.ref[$refId]] > 0) // parent is still in use, but has more than one reference, remove it\n )) {\n this.remove(child);\n\n } else if (child.parentRef) {\n // re-assigning a child of the same root, move it next to parent\n this.moveNextToParent(child);\n }\n }\n });\n\n } else {\n this.refCount[refId] = refCount;\n\n //\n // When losing a reference to an instance, it is best to move the\n // ChangeTree next to its parent in the encoding queue.\n //\n // This way, at decoding time, the instance that contains the\n // ChangeTree will be available before the ChangeTree itself. If the\n // containing instance is not available, the Decoder will throw\n // \"refId not found\" error.\n //\n this.recursivelyMoveNextToParent(changeTree);\n }\n\n return refCount;\n }\n\n recursivelyMoveNextToParent(changeTree: ChangeTree) {\n this.moveNextToParent(changeTree);\n changeTree.forEachChild((child, _) => this.recursivelyMoveNextToParent(child));\n }\n\n moveNextToParent(changeTree: ChangeTree): void {\n if (changeTree.changesNode) {\n this._moveNextToParentInList(this.changes, changeTree, changeTree.changesNode, \"changesNode\");\n }\n if (changeTree.unreliableChangesNode) {\n this._moveNextToParentInList(this.unreliableChanges, changeTree, changeTree.unreliableChangesNode, \"unreliableChangesNode\");\n }\n }\n\n private _moveNextToParentInList(\n changeSet: ChangeTreeList,\n changeTree: ChangeTree,\n node: ChangeTreeNode,\n nodeField: \"changesNode\" | \"unreliableChangesNode\",\n ): void {\n const parent = changeTree.parent;\n if (!parent || !parent[$changes]) return;\n\n const parentNode = parent[$changes][nodeField];\n if (!parentNode || parentNode === node) return;\n\n // Check if child is already after parent by walking from parent\n let cursor = parentNode.next;\n while (cursor) {\n if (cursor === node) return; // already after parent\n cursor = cursor.next;\n }\n // If we reach here, node is before parent — need to move\n\n // Remove node from current position\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n changeSet.next = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n changeSet.tail = node.prev;\n }\n\n // Insert node right after parent\n node.prev = parentNode;\n node.next = parentNode.next;\n\n if (parentNode.next) {\n parentNode.next.prev = node;\n } else {\n changeSet.tail = node;\n }\n\n parentNode.next = node;\n }\n\n public enqueueChangeTree(\n changeTree: ChangeTree,\n existingNode = changeTree.changesNode\n ) {\n if (existingNode) { return; }\n changeTree.changesNode = this._appendToList(this.changes, changeTree);\n }\n\n public enqueueUnreliable(\n changeTree: ChangeTree,\n existingNode = changeTree.unreliableChangesNode\n ) {\n if (existingNode) { return; }\n changeTree.unreliableChangesNode = this._appendToList(this.unreliableChanges, changeTree);\n }\n\n private _appendToList(list: ChangeTreeList, changeTree: ChangeTree): ChangeTreeNode {\n const pool = this._nodePool;\n let node: ChangeTreeNode;\n if (pool.length > 0) {\n node = pool.pop()!;\n node.changeTree = changeTree;\n node.next = undefined;\n node.prev = undefined;\n node.position = 0;\n } else {\n node = { changeTree, next: undefined, prev: undefined, position: 0 };\n }\n if (!list.next) {\n list.next = node;\n list.tail = node;\n } else {\n node.prev = list.tail;\n list.tail!.next = node;\n list.tail = node;\n }\n return node;\n }\n\n /**\n * Release a detached node back to the free-list. Caller must have\n * already unlinked it from any list and cleared the changeTree's\n * pointer to it. Clears `changeTree`/`prev`/`next` so the pool\n * doesn't retain references through the GC root.\n */\n public releaseNode(node: ChangeTreeNode): void {\n node.changeTree = undefined!;\n node.prev = undefined;\n node.next = undefined;\n this._nodePool.push(node);\n }\n\n public removeFromQueue(changeTree: ChangeTree): boolean {\n return this._removeNode(this.changes, changeTree, changeTree.changesNode, \"changesNode\");\n }\n\n public removeFromUnreliableQueue(changeTree: ChangeTree): boolean {\n return this._removeNode(this.unreliableChanges, changeTree, changeTree.unreliableChangesNode, \"unreliableChangesNode\");\n }\n\n private _removeNode(\n changeSet: ChangeTreeList,\n changeTree: ChangeTree,\n node: ChangeTreeNode | undefined,\n nodeField: \"changesNode\" | \"unreliableChangesNode\",\n ): boolean {\n if (!node || node.changeTree !== changeTree) return false;\n\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n changeSet.next = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n changeSet.tail = node.prev;\n }\n\n changeTree[nodeField] = undefined;\n this.releaseNode(node);\n return true;\n }\n}\n","import type { Schema } from \"../Schema.js\";\nimport { TypeContext } from \"../types/TypeContext.js\";\nimport { $changes, $getByIndex, $refId } from \"../types/symbols.js\";\nimport { Metadata } from \"../Metadata.js\";\n\nimport { encode } from \"../encoding/encode.js\";\nimport type { Iterator } from \"../encoding/decode.js\";\n\nimport { OPERATION, SWITCH_TO_STRUCTURE, TYPE_ID } from '../encoding/spec.js';\nimport { Root } from \"./Root.js\";\n\nimport type { StateView } from \"./StateView.js\";\nimport type { ChangeTree, ChangeTreeList, ChangeTreeNode } from \"./ChangeTree.js\";\nimport type { EncodeOperation } from \"./EncodeOperation.js\";\nimport { forEachLiveWithCtx as _forEachLiveWithCtx } from \"./changeTree/liveIteration.js\";\nimport { forEachChildWithCtx as _forEachChildWithCtx } from \"./changeTree/treeAttachment.js\";\n\n/**\n * Reusable context passed to the recorder's forEachWithCtx to iterate changes\n * without allocating a closure per ChangeTree. All fields are (re)assigned\n * inside the main encode loop before each `forEachWithCtx` call.\n */\ninterface EncodeCtx {\n self: Encoder;\n buffer: Uint8Array;\n it: Iterator;\n changeTree: ChangeTree;\n ref: any;\n encoder: EncodeOperation;\n filter: ((ref: any, index: number, view?: StateView) => boolean) | undefined;\n metadata: any;\n view: StateView | undefined;\n isEncodeAll: boolean;\n hasView: boolean;\n\n /**\n * Per-tree flags, reset before each `forEachWithCtx` call. The per-field\n * filter decision (`emitFiltered` == `treeIsFiltered || metadata[i].tag`)\n * matches `ChangeTree.change()`'s routing rule exactly.\n */\n treeIsFiltered: boolean;\n isSchema: boolean;\n emitFiltered: boolean;\n\n /**\n * Bitmask: bit i set iff field i has a @view tag. Lets the per-field\n * filter check be a single bitwise op instead of a metadata[i]?.tag chase.\n * Always 0 for collection trees.\n */\n filterBitmask: number;\n\n /**\n * Current walk's visit stamp. `_fullSyncWalk` compares it against each\n * tree's `_fullSyncGen` on entry: match means \"already visited by\n * this walk, skip\"; mismatch means \"first visit, stamp and recurse\".\n * Rewritten per walk by `encodeFullSync` before kicking off the DFS.\n */\n gen: number;\n /** Initial buffer offset at encodeFullSync entry — used by the walker to\n * decide whether to emit SWITCH_TO_STRUCTURE for the root tree. */\n initialOffset: number;\n rootChangeTree: ChangeTree;\n\n /**\n * Lazy structure-switch state. The switch header is emitted right before\n * the first field of a tree actually passes the filter, so trees that\n * contribute zero bytes in a given pass don't leave orphaned headers.\n */\n structSwitchEmitted: boolean;\n isRootTree: boolean;\n shouldEmitSwitch: boolean;\n}\n\n\n/**\n * Emit the lazy structure-switch header (SWITCH_TO_STRUCTURE + refId) for\n * the current tree if it hasn't been emitted yet in this pass.\n */\nfunction ensureStructSwitch(ctx: EncodeCtx): void {\n if (ctx.structSwitchEmitted) return;\n if (ctx.shouldEmitSwitch) {\n ctx.buffer[ctx.it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(ctx.buffer, ctx.ref[$refId], ctx.it);\n }\n ctx.structSwitchEmitted = true;\n}\n\n/**\n * Module-level adapter for `forEachLiveWithCtx`. Full-sync emits every live\n * field as ADD, so we re-enter `encodeChangeCb` with that fixed op — keeps\n * the callback closure-free across the entire DFS walk.\n */\nfunction encodeFullSyncCb(ctx: EncodeCtx, fieldIndex: number): void {\n encodeChangeCb(ctx, fieldIndex, OPERATION.ADD);\n}\n\n/**\n * Structural DFS walker for `encodeFullSync`. Hoisted to module scope so\n * the recursion allocates no per-tree closures — `_fullSyncWalkChildCb`\n * captures nothing and is handed to `forEachChildWithCtx` once.\n *\n * The stamp check at the top (`tree._fullSyncGen === ctx.gen`) is how we\n * skip shared refs that are reachable through more than one parent. On\n * first visit the tree's stamp differs from the walk's current `ctx.gen`;\n * we write `ctx.gen` onto the tree and recurse. Any later reach of the\n * same tree during the SAME walk will find matching stamps and bail.\n * Next walk bumps `ctx.gen`, so every tree starts out stale again.\n */\nfunction _fullSyncWalk(ctx: EncodeCtx, changeTree: ChangeTree): void {\n if (changeTree._fullSyncGen === ctx.gen) return;\n changeTree._fullSyncGen = ctx.gen;\n\n // Visibility gate: when a view is active, a non-visible tree contributes\n // nothing itself but we still recurse so descendants (possibly added to\n // the view explicitly) are reachable.\n let visibleHere = true;\n if (ctx.hasView) {\n const view = ctx.view!;\n if (!view.isChangeTreeVisible(changeTree)) {\n view.markInvisible(changeTree);\n visibleHere = false;\n } else {\n view.unmarkInvisible(changeTree);\n }\n }\n\n if (visibleHere) {\n const desc = changeTree.encDescriptor;\n ctx.changeTree = changeTree;\n ctx.ref = changeTree.ref;\n ctx.encoder = desc.encoder;\n ctx.filter = desc.filter;\n ctx.metadata = desc.metadata;\n ctx.treeIsFiltered = changeTree.isFiltered;\n ctx.isSchema = desc.isSchema;\n ctx.filterBitmask = desc.filterBitmask;\n ctx.structSwitchEmitted = false;\n ctx.shouldEmitSwitch = (ctx.hasView || ctx.it.offset > ctx.initialOffset || changeTree !== ctx.rootChangeTree);\n\n // Call the module function directly — the `forEachLiveWithCtx`\n // method on ChangeTree is a pass-through that V8 doesn't inline\n // under the polymorphism the encoder sees (Schema + every\n // collection class share the method slot). Direct call saves the\n // dispatched frame.\n _forEachLiveWithCtx(changeTree, ctx, encodeFullSyncCb);\n }\n\n _forEachChildWithCtx(changeTree, ctx, _fullSyncWalkChildCb);\n}\n\n/**\n * Child-iteration callback for `_fullSyncWalk`. Module-level + closure-free:\n * just re-enters `_fullSyncWalk` on each child. Replaces a per-tree\n * `(child, _) => walk(child)` closure that used to allocate 2.5M times in\n * `encodeAll(5000 entities) x 500 iterations`.\n */\nfunction _fullSyncWalkChildCb(ctx: EncodeCtx, child: ChangeTree, _index: any): void {\n _fullSyncWalk(ctx, child);\n}\n\n/**\n * Pure (non-capturing) callback for recorder.forEachWithCtx. Module-level so\n * V8 never needs to allocate a fresh function per tree. Decides per-field\n * whether to emit based on the unified filter rule, then defers to the\n * per-type encode function.\n */\nfunction encodeChangeCb(ctx: EncodeCtx, fieldIndex: number, op: OPERATION): void {\n if (fieldIndex < 0) {\n // Pure op (CLEAR/REVERSE): encoded as a single byte. Always emitted\n // for the pass that matches the tree's filter classification —\n // collections route pure ops to their single dirty bucket.\n if (ctx.treeIsFiltered !== ctx.emitFiltered) return;\n ensureStructSwitch(ctx);\n ctx.buffer[ctx.it.offset++] = Math.abs(fieldIndex) & 255;\n return;\n }\n\n // Per-field filter decision (same rule as ChangeTree.change()):\n // a field is filtered iff the tree inherits isFiltered OR the field\n // itself carries a @view tag. Schema trees check via the precomputed\n // bitmask; collection trees inherit tree-level (bitmask is 0).\n const fieldFiltered = ctx.isSchema\n ? (ctx.treeIsFiltered || (ctx.filterBitmask & (1 << fieldIndex)) !== 0)\n : ctx.treeIsFiltered;\n if (fieldFiltered !== ctx.emitFiltered) return;\n\n const operation = ctx.isEncodeAll ? OPERATION.ADD : op;\n if (operation === undefined) return;\n if (ctx.filter !== undefined && !ctx.filter(ctx.ref, fieldIndex, ctx.view)) return;\n\n ensureStructSwitch(ctx);\n ctx.encoder(ctx.self, ctx.buffer, ctx.changeTree, fieldIndex, operation, ctx.it, ctx.isEncodeAll, ctx.hasView, ctx.metadata);\n}\n\nfunction concatBytes(a: Uint8Array, b: Uint8Array): Uint8Array {\n const result = new Uint8Array(a.length + b.length);\n result.set(a, 0);\n result.set(b, a.length);\n return result;\n}\n\nexport class Encoder<T extends Schema = any> {\n static BUFFER_SIZE = 8 * 1024; // 8KB\n sharedBuffer: Uint8Array = new Uint8Array(Encoder.BUFFER_SIZE);\n\n context: TypeContext;\n state: T;\n\n root: Root;\n\n constructor(state: T, root?: Root) {\n //\n // Use .cache() here to avoid re-creating a new context for every new room instance.\n //\n // We may need to make this optional in case of dynamically created\n // schemas - which would lead to memory leaks\n //\n this.context = TypeContext.cache(state.constructor as typeof Schema);\n this.root = root ?? new Root(this.context);\n\n this.setState(state);\n }\n\n protected setState(state: T) {\n this.state = state;\n this.state[$changes].setRoot(this.root);\n }\n\n private _encodeCtx: EncodeCtx = {\n self: undefined!, buffer: undefined!, it: undefined!, changeTree: undefined!,\n ref: undefined, encoder: undefined!, filter: undefined, metadata: undefined,\n view: undefined, isEncodeAll: false, hasView: false,\n treeIsFiltered: false, isSchema: false, emitFiltered: false,\n filterBitmask: 0,\n structSwitchEmitted: false, isRootTree: false, shouldEmitSwitch: false,\n gen: 0, initialOffset: 0, rootChangeTree: undefined!,\n };\n\n /**\n * Monotonic counter bumped at the start of every `encodeFullSync`\n * call. The new value is copied to `ctx.gen` and stamped into every\n * tree the walk touches (`tree._fullSyncGen = ctx.gen`); subsequent\n * revisits of the same tree detect the equality and return early.\n */\n private _fullSyncGen: number = 0;\n\n encode(\n it: Iterator = { offset: 0 },\n view?: StateView,\n buffer: Uint8Array = this.sharedBuffer,\n initialOffset = it.offset\n ): Uint8Array {\n return this._encodeChannel(it, view, buffer, initialOffset, /* unreliable */ false);\n }\n\n /**\n * Per-tick encode of the UNRELIABLE channel. Walks `root.unreliableChanges`\n * and emits each tree's `unreliableRecorder`. Safe to call at a different\n * cadence than `encode()` (e.g. 60Hz vs 20Hz) — the two channels are\n * fully independent.\n */\n encodeUnreliable(\n it: Iterator = { offset: 0 },\n view?: StateView,\n buffer: Uint8Array = this.sharedBuffer,\n initialOffset = it.offset\n ): Uint8Array {\n return this._encodeChannel(it, view, buffer, initialOffset, /* unreliable */ true);\n }\n\n private _encodeChannel(\n it: Iterator,\n view: StateView | undefined,\n buffer: Uint8Array,\n initialOffset: number,\n unreliable: boolean,\n ): Uint8Array {\n const hasView = (view !== undefined);\n const rootChangeTree = this.state[$changes];\n\n const ctx = this._encodeCtx;\n ctx.self = this;\n ctx.buffer = buffer;\n ctx.it = it;\n ctx.view = view;\n ctx.isEncodeAll = false;\n ctx.hasView = hasView;\n // Shared pass (no view): emit unfiltered fields. View pass: emit\n // filtered fields only. Fields on the other side of the split are\n // skipped inside encodeChangeCb.\n ctx.emitFiltered = hasView;\n\n const queue: ChangeTreeList = unreliable ? this.root.unreliableChanges : this.root.changes;\n let current: ChangeTreeList | ChangeTreeNode = queue;\n\n while (current = current.next) {\n const changeTree = (current as ChangeTreeNode).changeTree;\n\n if (hasView) {\n if (!view.isChangeTreeVisible(changeTree)) {\n view.markInvisible(changeTree);\n continue;\n }\n view.unmarkInvisible(changeTree);\n }\n\n const recorder = unreliable ? changeTree.unreliableRecorder : changeTree;\n if (!recorder || !recorder.has()) { continue; }\n\n const desc = changeTree.encDescriptor;\n ctx.changeTree = changeTree;\n ctx.ref = changeTree.ref;\n ctx.encoder = desc.encoder;\n ctx.filter = desc.filter;\n ctx.metadata = desc.metadata;\n ctx.treeIsFiltered = changeTree.isFiltered;\n ctx.isSchema = desc.isSchema;\n ctx.filterBitmask = desc.filterBitmask;\n ctx.structSwitchEmitted = false;\n ctx.isRootTree = (changeTree === rootChangeTree);\n // Root's struct switch is skipped at the very start of the shared\n // pass (matches the legacy wire protocol). In view pass or after\n // the first emission, always emit the switch.\n ctx.shouldEmitSwitch = (hasView || it.offset > initialOffset || !ctx.isRootTree);\n\n recorder.forEachWithCtx(ctx, encodeChangeCb);\n }\n\n // Broadcast-mode stream emission runs after the main loop (state /\n // parent refs are already on the wire, so stream ADD ops can\n // reference element refIds safely). Reliable shared pass only;\n // skipped when any StateView is registered (priority pass in\n // `encodeView` owns emission in that mode).\n if (!unreliable && !hasView && this.root.activeViews.size === 0 && this.root.streamTrees.size > 0) {\n this._emitStreamBroadcast(buffer, it);\n }\n\n if (it.offset > buffer.byteLength) {\n buffer = this._resizeBuffer(buffer, it.offset);\n return this._encodeChannel({ offset: initialOffset }, view, buffer, initialOffset, unreliable);\n }\n\n return buffer.subarray(0, it.offset);\n }\n\n /**\n * Structural DFS walker for full-sync (encodeAll / encodeAllView).\n * Visits each ChangeTree in DFS preorder starting from the state root,\n * emitting ADD operations for every currently-populated index via\n * {@link ChangeTree.forEachLive}.\n */\n private encodeFullSync(\n it: Iterator,\n buffer: Uint8Array,\n emitFiltered: boolean,\n view?: StateView,\n initialOffset: number = it.offset\n ): Uint8Array {\n const hasView = (view !== undefined);\n const rootChangeTree = this.state[$changes];\n\n const ctx = this._encodeCtx;\n ctx.self = this;\n ctx.buffer = buffer;\n ctx.it = it;\n ctx.view = view;\n ctx.isEncodeAll = true;\n ctx.hasView = hasView;\n ctx.emitFiltered = emitFiltered;\n\n // Bump the generation counter and carry the new value on `ctx` so\n // the recursive walker can stamp every tree it visits. Any tree\n // still holding the previous walk's stamp is treated as unvisited\n // on first reach, and stamped; a second reach (shared ref via\n // multiple parents) sees the match and bails.\n ctx.gen = ++this._fullSyncGen;\n ctx.initialOffset = initialOffset;\n ctx.rootChangeTree = rootChangeTree;\n _fullSyncWalk(ctx, rootChangeTree);\n\n if (it.offset > buffer.byteLength) {\n buffer = this._resizeBuffer(buffer, it.offset);\n return this.encodeFullSync({ offset: initialOffset }, buffer, emitFiltered, view);\n }\n\n return buffer.subarray(0, it.offset);\n }\n\n private _resizeBuffer(buffer: Uint8Array, usedOffset: number): Uint8Array {\n const newSize = Math.ceil(usedOffset / Encoder.BUFFER_SIZE) * Encoder.BUFFER_SIZE;\n\n console.warn(`@colyseus/schema buffer overflow. Encoded state is higher than default BUFFER_SIZE. Use the following to increase default BUFFER_SIZE:\n\n import { Encoder } from \"@colyseus/schema\";\n Encoder.BUFFER_SIZE = ${Math.round(newSize / 1024)} * 1024; // ${Math.round(newSize / 1024)} KB\n`);\n\n const newBuffer = new Uint8Array(newSize);\n newBuffer.set(buffer);\n\n if (buffer === this.sharedBuffer) {\n this.sharedBuffer = newBuffer;\n }\n\n return newBuffer;\n }\n\n encodeAll(\n it: Iterator = { offset: 0 },\n buffer: Uint8Array = this.sharedBuffer\n ) {\n return this.encodeFullSync(it, buffer, /* emitFiltered */ false);\n }\n\n encodeAllView(\n view: StateView,\n sharedOffset: number,\n it: Iterator,\n bytes: Uint8Array = this.sharedBuffer\n ) {\n const viewOffset = it.offset;\n\n this.encodeFullSync(it, bytes, /* emitFiltered */ true, view, viewOffset);\n\n return concatBytes(\n bytes.subarray(0, sharedOffset),\n bytes.subarray(viewOffset, it.offset)\n );\n }\n\n encodeView(\n view: StateView,\n sharedOffset: number,\n it: Iterator,\n bytes: Uint8Array = this.sharedBuffer\n ) {\n const viewOffset = it.offset;\n\n // Stream priority pass: drain up to `maxPerTick` per-view entries\n // from every registered stream before draining view.changes. Each\n // selected element is passed to `view.add()` which populates\n // view.changes with the stream-link ADD + element-field ADDs.\n this._emitStreamPriority(view);\n\n // encode visibility-triggered changes collected by view.add()\n for (const [refId, changes] of view.changes) {\n const changeTree: ChangeTree = this.root.changeTrees[refId];\n\n if (changeTree === undefined) {\n // detached instance, remove from view and skip.\n view.changes.delete(refId);\n continue;\n }\n\n if (changes.size === 0) {\n continue;\n }\n\n const desc = changeTree.encDescriptor;\n const encoder = desc.encoder;\n const metadata = desc.metadata;\n // `ref` → user-facing identity (Proxy on ArraySchema), used for\n // `[$refId]`. `refTarget` → raw instance, used for the hot\n // `[$getByIndex]` lookup that runs once per change.\n const ref = changeTree.ref;\n const refTarget = changeTree.refTarget;\n\n bytes[it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(bytes, ref[$refId], it);\n\n // Iterate entries directly — the inner Map gives us the (index, op)\n // pair without an intermediate keys array or Number() parse.\n for (const [index, op] of changes) {\n // workaround when using view.add() on item that has been deleted from state\n // (see test \"adding to view item that has been removed from state\")\n const value = refTarget[$getByIndex](index);\n const operation = (value !== undefined && op) || OPERATION.DELETE;\n\n // isEncodeAll = false, hasView = true\n encoder(this, bytes, changeTree, index, operation, it, false, true, metadata);\n }\n }\n\n //\n // TODO: only clear view changes after all views are encoded\n // (to allow re-using StateView's for multiple clients)\n //\n view.changes.clear();\n\n // per-tick view-scoped pass: walks the same `changes` queue as the\n // shared pass, but `encodeChangeCb` emits only filtered fields.\n this.encode(it, view, bytes, viewOffset);\n\n return concatBytes(\n bytes.subarray(0, sharedOffset),\n bytes.subarray(viewOffset, it.offset)\n );\n }\n\n /**\n * Per-view unreliable encode. Walks `root.unreliableChanges` and emits\n * only filtered fields visible to this view. Unlike `encodeView`, this\n * doesn't emit `view.changes` entries — those are used only for\n * reliable view bootstrap (membership ADDs) and are consumed by\n * `encodeView` on the reliable channel.\n */\n encodeUnreliableView(\n view: StateView,\n sharedOffset: number,\n it: Iterator,\n bytes: Uint8Array = this.sharedBuffer\n ) {\n const viewOffset = it.offset;\n\n this.encodeUnreliable(it, view, bytes, viewOffset);\n\n return concatBytes(\n bytes.subarray(0, sharedOffset),\n bytes.subarray(viewOffset, it.offset)\n );\n }\n\n /**\n * Broadcast-mode counterpart to `_emitStreamPriority`. Runs when NO\n * StateViews are registered — streams fall back to broadcast mode\n * where up to `maxPerTick` pending ADDs per stream emit to ALL clients\n * each shared tick. DELETEs always flush (no cap).\n *\n * Emits directly to the shared-encode buffer: stream & element trees\n * are `isFiltered=true` so the main loop would otherwise skip them.\n * Runs AFTER the main loop so state / parent refs are already encoded\n * — stream ADD ops reference element refIds, which must be decodable.\n */\n private _emitStreamBroadcast(buffer: Uint8Array, it: Iterator): void {\n const streams = this.root.streamTrees;\n for (const stream of streams) {\n const s: any = stream;\n const tree: ChangeTree = s[$changes];\n // Stream is registered with Root but not yet assigned a refId\n // (e.g. created but never attached to state). Skip.\n const streamRefId = s[$refId];\n if (streamRefId === undefined) continue;\n\n // `inheritedFlags.ensureStreamState` allocates `_stream` the\n // moment the tree picks up `isStreamCollection` — Root only\n // tracks trees that reached that point, so `_stream` is\n // guaranteed defined here.\n const st = s._stream!;\n const deletes: Set<number> = st.broadcastDeletes;\n const pending: Set<number> = st.broadcastPending;\n const sent: Set<number> = st.sentBroadcast;\n const hasDeletes = deletes.size > 0;\n const hasAdds = pending.size > 0;\n\n const desc = tree.encDescriptor;\n const streamEncoder = desc.encoder;\n const streamMetadata = desc.metadata;\n\n // Emit stream ADD/DELETE ops for this tick, if any.\n if (hasDeletes || hasAdds) {\n buffer[it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(buffer, streamRefId, it);\n\n // DELETEs first (flush all).\n if (hasDeletes) {\n for (const pos of deletes) {\n streamEncoder(this, buffer, tree, pos, OPERATION.DELETE, it, false, false, streamMetadata);\n }\n deletes.clear();\n }\n\n // ADDs up to maxPerTick.\n const max: number = st.maxPerTick;\n const emittedElements: any[] = [];\n let count = 0;\n const toDelete: number[] = [];\n for (const pos of pending) {\n if (count >= max) break;\n // `$getByIndex` works for any streamable collection:\n // StreamSchema (Map<number, V>) and MapSchema (string-keyed\n // via journal index) both route through the same symbol.\n const element = s[$getByIndex](pos);\n if (element === undefined) {\n toDelete.push(pos);\n continue;\n }\n streamEncoder(this, buffer, tree, pos, OPERATION.ADD, it, false, false, streamMetadata);\n sent.add(pos);\n emittedElements.push(element);\n toDelete.push(pos);\n count++;\n }\n for (const pos of toDelete) pending.delete(pos);\n\n // Emit each element's full state — forEachLive walks populated\n // fields structurally, mirroring encodeAllView's bootstrap.\n // Covers both static elements (dirty state was reset by\n // inheritedFlags' becameStatic branch) and non-static (still\n // has dirty state but the main loop skipped them because\n // they're filtered).\n for (const element of emittedElements) {\n const elTree: ChangeTree | undefined = element[$changes];\n if (elTree === undefined) continue;\n const elRefId = element[$refId];\n if (elRefId === undefined) continue;\n\n buffer[it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(buffer, elRefId, it);\n\n const elDesc = elTree.encDescriptor;\n const elEncoder = elDesc.encoder;\n const elMetadata = elDesc.metadata;\n elTree.forEachLive((idx: number) => {\n // @unreliable fields ship on the unreliable channel only.\n if (Metadata.hasUnreliableAtIndex(elMetadata, idx)) return;\n elEncoder(this, buffer, elTree, idx, OPERATION.ADD, it, false, false, elMetadata);\n });\n }\n }\n\n // Emit mutation updates for already-sent elements. Element\n // trees are `isFiltered=true` (inherited from stream field),\n // so the main loop skips them. We pick up their dirty state\n // here so broadcast mode sees post-send field mutations.\n for (const pos of sent) {\n const element = s[$getByIndex](pos);\n if (element === undefined) continue;\n const elTree: ChangeTree | undefined = element[$changes];\n if (elTree === undefined || !elTree.has()) continue;\n\n const elRefId = element[$refId];\n if (elRefId === undefined) continue;\n\n buffer[it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(buffer, elRefId, it);\n\n const elDesc = elTree.encDescriptor;\n const elEncoder = elDesc.encoder;\n const elMetadata = elDesc.metadata;\n elTree.forEach((idx: number, op: OPERATION) => {\n if (idx < 0) return; // pure ops (collection only)\n if (Metadata.hasUnreliableAtIndex(elMetadata, idx)) return;\n elEncoder(this, buffer, elTree, idx, op, it, false, false, elMetadata);\n });\n }\n }\n }\n\n /**\n * Walk every registered stream, pick up to `maxPerTick` positions from\n * this view's pending backlog (priority-sorted when the view supplies a\n * `streamPriority` callback), and hand each element to `view.add()`.\n * `view.add()` seeds `view.changes` so the subsequent drain emits both\n * the stream-link (position → refId) and the element's field data.\n *\n * Designed to run at the very top of `encodeView`, BEFORE the\n * view.changes drain loop.\n */\n private _emitStreamPriority(view: StateView): void {\n const streams = this.root.streamTrees;\n if (streams.size === 0) return;\n\n const viewId = view.id;\n\n for (const stream of streams) {\n const s: any = stream;\n // Guaranteed non-undefined: `inheritedFlags.ensureStreamState`\n // runs before Root.registerStream.\n const st = s._stream!;\n const pending: Set<number> | undefined = st.pendingByView.get(viewId);\n if (pending === undefined || pending.size === 0) continue;\n\n // Per-stream priority callback: declared at schema time (via\n // `t.stream(X).priority(fn)` or the decorator form) and seeded\n // into `_stream.priority` when the stream was attached. Users\n // can also override per-instance by assigning to the setter.\n const priority = st.priority;\n\n // Materialize pending into an array so we can sort + slice.\n // Small sets (typical: tens to low hundreds) — allocation is\n // negligible compared to the priority sort and element walk.\n const positions: number[] = [];\n for (const p of pending) positions.push(p);\n\n if (priority !== undefined) {\n // Use the symbol-keyed accessor so Map/Set/Stream all route\n // through the same lookup regardless of $items layout.\n positions.sort(\n (a: number, b: number) => priority(view, s[$getByIndex](b)) - priority(view, s[$getByIndex](a)),\n );\n }\n\n const max = st.maxPerTick;\n const count = Math.min(positions.length, max);\n\n let sent: Set<number> | undefined = st.sentByView.get(viewId);\n if (sent === undefined) {\n sent = new Set();\n st.sentByView.set(viewId, sent);\n }\n\n for (let i = 0; i < count; i++) {\n const pos = positions[i];\n const element = s[$getByIndex](pos);\n if (element === undefined) {\n // Element was removed after being queued but before emit.\n pending.delete(pos);\n continue;\n }\n // `_addImmediate` force-ships the element through view.changes\n // (markVisible + addParentOf + forEachChild recursion) WITHOUT\n // routing stream elements back into pending — we're already\n // draining pending here, so the normal `add()` path would\n // infinite-loop. addParentOf seeds\n // `view.changes[stream.refId][pos] = ADD` (stream-link emit).\n view._addImmediate(element);\n // Force-seed element fields even when view.add skipped\n // forEachLive (isNew && !isChildAdded). Matches the\n // bootstrap emission encodeAllView does for filtered\n // refs. `@unreliable` fields are excluded — they ship\n // on the unreliable channel and force-seeding here\n // would leak onto the reliable view pass.\n const elTree = element[$changes];\n if (elTree !== undefined) {\n const elRefId = element[$refId];\n let elChanges = view.changes.get(elRefId);\n if (elChanges === undefined) {\n elChanges = new Map();\n view.changes.set(elRefId, elChanges);\n }\n const elMetadata = elTree.metadata;\n elTree.forEachLive((index: number) => {\n if (Metadata.hasUnreliableAtIndex(elMetadata, index)) return;\n elChanges!.set(index, OPERATION.ADD);\n });\n }\n pending.delete(pos);\n sent.add(pos);\n }\n }\n }\n\n discardChanges() {\n const list = this.root.changes;\n let current = list.next;\n const root = this.root;\n while (current) {\n const next = current.next;\n current.changeTree.endEncode(); // clears changesNode internally\n root.releaseNode(current);\n current = next;\n }\n list.next = undefined;\n list.tail = undefined;\n\n // End-of-tick: refIds released during this tick have now had their\n // DELETEs emitted through `encode()` / `encodeView()`, so they are\n // safe to recycle on the next tick.\n root.refIds.flushReleases();\n }\n\n discardUnreliableChanges() {\n const list = this.root.unreliableChanges;\n let current = list.next;\n const root = this.root;\n while (current) {\n const next = current.next;\n current.changeTree.endEncodeUnreliable(); // clears unreliableChangesNode internally\n root.releaseNode(current);\n current = next;\n }\n list.next = undefined;\n list.tail = undefined;\n }\n\n tryEncodeTypeId(\n bytes: Uint8Array,\n baseType: typeof Schema,\n targetType: typeof Schema,\n it: Iterator\n ) {\n const baseTypeId = this.context.getTypeId(baseType);\n const targetTypeId = this.context.getTypeId(targetType);\n\n if (targetTypeId === undefined) {\n console.warn(`@colyseus/schema WARNING: Class \"${targetType.name}\" is not registered on TypeRegistry - Please either tag the class with @entity or define a @type() field.`);\n return;\n }\n\n if (baseTypeId !== targetTypeId) {\n bytes[it.offset++] = TYPE_ID & 255;\n encode.number(bytes, targetTypeId, it);\n }\n }\n\n get hasChanges() {\n return this.root.changes.next !== undefined;\n }\n\n get hasUnreliableChanges() {\n return this.root.unreliableChanges.next !== undefined;\n }\n}\n","export function spliceOne(arr: any[], index: number): boolean {\n // manually splice an array\n if (index === -1 || index >= arr.length) {\n return false;\n }\n\n const len = arr.length - 1;\n\n for (let i = index; i < len; i++) {\n arr[i] = arr[i + 1];\n }\n\n arr.length = len;\n\n return true;\n}","import { Metadata } from \"../Metadata.js\";\nimport { $childType, $refId } from \"../types/symbols.js\";\nimport type { IRef } from \"../encoder/ChangeTree.js\";\nimport { spliceOne } from \"../types/utils.js\";\nimport { OPERATION } from \"../encoding/spec.js\";\n\nimport type { MapSchema } from \"../types/custom/MapSchema.js\";\nimport type { Schema } from \"../Schema.js\";\n\nclass DecodingWarning extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"DecodingWarning\";\n }\n}\n\n/**\n * Used for decoding only.\n */\n\nexport type SchemaCallbacks = { [field: string | number]: Function[] };\n\nexport class ReferenceTracker {\n //\n // Relation of refId => Schema structure\n // For direct access of structures during decoding time.\n //\n public refs = new Map<number, IRef>();\n\n public refCount: { [refId: number]: number; } = {};\n public deletedRefs = new Set<number>();\n\n public callbacks: { [refId: number]: SchemaCallbacks } = {};\n protected nextUniqueId: number = 0;\n\n getNextUniqueId() {\n return this.nextUniqueId++;\n }\n\n // for decoding\n addRef(refId: number, ref: IRef, incrementCount: boolean = true) {\n this.refs.set(refId, ref);\n\n // `enumerable: false` is load-bearing: tests use `deepStrictEqual`\n // on decoded instances, which WOULD walk enumerable Symbol-keyed\n // properties and include `$refId` in the comparison. Keep the\n // descriptor dance for semantic compatibility.\n Object.defineProperty(ref, $refId, {\n value: refId,\n enumerable: false,\n writable: true\n });\n\n if (incrementCount) {\n this.refCount[refId] = (this.refCount[refId] || 0) + 1;\n }\n\n if (this.deletedRefs.has(refId)) {\n this.deletedRefs.delete(refId);\n }\n }\n\n // for decoding\n removeRef(refId: number) {\n const refCount = this.refCount[refId];\n\n if (refCount === undefined) {\n try {\n throw new DecodingWarning(\"trying to remove refId that doesn't exist: \" + refId);\n } catch (e) {\n console.warn(e);\n }\n return;\n }\n\n if (refCount === 0) {\n try {\n const ref = this.refs.get(refId);\n throw new DecodingWarning(`trying to remove refId '${refId}' with 0 refCount (${ref.constructor.name}: ${JSON.stringify(ref)})`);\n } catch (e) {\n console.warn(e);\n }\n return;\n }\n\n if ((this.refCount[refId] = refCount - 1) <= 0) {\n this.deletedRefs.add(refId);\n }\n }\n\n clearRefs() {\n this.refs.clear();\n this.deletedRefs.clear();\n this.callbacks = {};\n this.refCount = {};\n }\n\n // for decoding\n garbageCollectDeletedRefs() {\n this.deletedRefs.forEach((refId) => {\n //\n // Skip active references.\n //\n if (this.refCount[refId] > 0) { return; }\n\n const ref = this.refs.get(refId);\n\n //\n // Ensure child schema instances have their references removed as well.\n //\n if ((ref.constructor as typeof Schema)[Symbol.metadata] !== undefined) {\n const metadata: Metadata = (ref.constructor as typeof Schema)[Symbol.metadata];\n for (const index in metadata) {\n const field = metadata[index as any as number].name;\n const child = ref[field as keyof IRef];\n if (typeof(child) === \"object\" && child) {\n const childRefId = (child as any)[$refId];\n if (childRefId !== undefined && !this.deletedRefs.has(childRefId)) {\n this.removeRef(childRefId);\n }\n }\n }\n\n } else {\n if (typeof ((ref as any)[$childType]) === \"function\") {\n Array.from((ref as MapSchema).values())\n .forEach((child) => {\n const childRefId = child[$refId];\n if (childRefId !== undefined && !this.deletedRefs.has(childRefId)) {\n this.removeRef(childRefId);\n }\n });\n }\n }\n\n this.refs.delete(refId); // remove ref\n delete this.refCount[refId]; // remove ref count\n delete this.callbacks[refId]; // remove callbacks\n });\n\n // clear deleted refs.\n this.deletedRefs.clear();\n }\n\n addCallback(refId: number, fieldOrOperation: string | number, callback: Function) {\n if (refId === undefined) {\n const name = (typeof(fieldOrOperation) === \"number\")\n ? OPERATION[fieldOrOperation]\n : fieldOrOperation\n throw new Error(\n `Can't addCallback on '${name}' (refId is undefined)`\n );\n }\n if (!this.callbacks[refId]) {\n this.callbacks[refId] = {};\n }\n if (!this.callbacks[refId][fieldOrOperation]) {\n this.callbacks[refId][fieldOrOperation] = [];\n }\n this.callbacks[refId][fieldOrOperation].push(callback);\n return () => this.removeCallback(refId, fieldOrOperation, callback);\n }\n\n removeCallback(refId: number, field: string | number, callback: Function) {\n const index: number | undefined = this.callbacks?.[refId]?.[field]?.indexOf(callback);\n if (index !== undefined && index !== -1) {\n spliceOne(this.callbacks[refId][field], index);\n }\n }\n\n}\n","import { TypeContext } from \"../types/TypeContext.js\";\nimport { $childType, $decoder, $onDecodeEnd, $refId } from \"../types/symbols.js\";\nimport { Schema } from \"../Schema.js\";\nimport { decode } from \"../encoding/decode.js\";\nimport { OPERATION, SWITCH_TO_STRUCTURE, TYPE_ID } from '../encoding/spec.js';\nimport { type IRef, type Ref } from \"../encoder/ChangeTree.js\";\nimport type { Iterator } from \"../encoding/decode.js\";\nimport { ReferenceTracker } from \"./ReferenceTracker.js\";\nimport { DEFINITION_MISMATCH, type DataChange, type DecodeOperation } from \"./DecodeOperation.js\";\nimport { Collection } from \"../types/HelperTypes.js\";\n\nexport class Decoder<T extends IRef = any> {\n context: TypeContext;\n\n state: T;\n root: ReferenceTracker;\n\n currentRefId: number = 0;\n\n triggerChanges?: (allChanges: DataChange[]) => void;\n\n constructor(root: T, context?: TypeContext) {\n this.setState(root);\n\n this.context = context || new TypeContext(root.constructor as typeof Schema);\n\n // console.log(\">>>>>>>>>>>>>>>> Decoder types\");\n // this.context.schemas.forEach((id, schema) => {\n // console.log(\"type:\", id, schema.name, Object.keys(schema[Symbol.metadata]));\n // });\n }\n\n protected setState(root: T) {\n this.state = root;\n this.root = new ReferenceTracker();\n this.root.addRef(0, root);\n }\n\n decode(\n bytes: Uint8Array,\n it: Iterator = { offset: 0 },\n ref: IRef = this.state,\n ) {\n // Only allocate a collection array when there's a subscriber. Every\n // decode-op push site uses `allChanges?.push(...)` — optional\n // chaining short-circuits the object literal too, so a listener-\n // free decoder does zero per-field allocation.\n const allChanges: DataChange[] | null = (this.triggerChanges !== undefined)\n ? []\n : null;\n\n const $root = this.root;\n const totalBytes = bytes.byteLength;\n\n let decoder: DecodeOperation = ref['constructor'][$decoder];\n\n this.currentRefId = 0;\n\n while (it.offset < totalBytes) {\n //\n // Peek ahead, check if it's a switch to a different structure\n //\n if (bytes[it.offset] == SWITCH_TO_STRUCTURE) {\n it.offset++;\n\n (ref as any)[$onDecodeEnd]?.()\n\n const nextRefId = decode.number(bytes, it);\n const nextRef = $root.refs.get(nextRefId);\n\n //\n // Trying to access a reference that haven't been decoded yet.\n //\n if (!nextRef) {\n // throw new Error(`\"refId\" not found: ${nextRefId}`);\n console.error(`\"refId\" not found: ${nextRefId}`, { previousRef: ref, previousRefId: this.currentRefId });\n console.warn(\"Please report this issue to the developers.\");\n this.skipCurrentStructure(bytes, it, totalBytes);\n\n } else {\n ref = nextRef;\n decoder = ref.constructor[$decoder];\n this.currentRefId = nextRefId;\n }\n\n continue;\n }\n\n const result = decoder(this, bytes, it, ref, allChanges);\n\n if (result === DEFINITION_MISMATCH) {\n console.warn(\"@colyseus/schema: definition mismatch\");\n this.skipCurrentStructure(bytes, it, totalBytes);\n continue;\n }\n }\n\n // Close out the last ref's decode session — mirrors the\n // SWITCH_TO_STRUCTURE block above, which fires it at every\n // intra-loop structure transition. ArraySchema uses this to\n // compact `items` after a tick's deletes. No other consumer\n // currently hooks it; the dual call sites stay as-is rather\n // than being extracted into a helper for a one-line body.\n (ref as any)[$onDecodeEnd]?.()\n\n // trigger changes\n if (allChanges !== null) this.triggerChanges?.(allChanges);\n\n // drop references of unused schemas\n $root.garbageCollectDeletedRefs();\n\n return allChanges;\n }\n\n skipCurrentStructure(bytes: Uint8Array, it: Iterator, totalBytes: number) {\n //\n // keep skipping next bytes until reaches a known structure\n // by local decoder.\n //\n const nextIterator: Iterator = { offset: it.offset };\n while (it.offset < totalBytes) {\n if (bytes[it.offset] === SWITCH_TO_STRUCTURE) {\n nextIterator.offset = it.offset + 1;\n if (this.root.refs.has(decode.number(bytes, nextIterator))) {\n break;\n }\n }\n it.offset++;\n }\n }\n\n getInstanceType(bytes: Uint8Array, it: Iterator, defaultType: typeof Schema): typeof Schema {\n let type: typeof Schema;\n\n if (bytes[it.offset] === TYPE_ID) {\n it.offset++;\n const type_id = decode.number(bytes, it);\n type = this.context.get(type_id);\n }\n\n return type || defaultType;\n }\n\n createInstanceOfType(type: typeof Schema): Schema {\n return type.initializeForDecoder();\n }\n\n removeChildRefs(ref: Collection, allChanges: DataChange[] | null) {\n const needRemoveRef = typeof ((ref as any)[$childType]) !== \"string\";\n const refId = (ref as Ref)[$refId];\n\n ref.forEach((value: any, key: any) => {\n allChanges?.push({\n ref: ref as Ref,\n refId,\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value\n });\n\n if (needRemoveRef) {\n this.root.removeRef(value[$refId]);\n }\n });\n }\n\n}\n","import { PrimitiveType, schema, SchemaType } from \"./annotations.js\";\nimport { TypeContext } from \"./types/TypeContext.js\";\nimport { Metadata } from \"./Metadata.js\";\nimport { Iterator } from \"./encoding/decode.js\";\nimport { Encoder } from \"./encoder/Encoder.js\";\nimport { Decoder } from \"./decoder/Decoder.js\";\nimport { Schema } from \"./Schema.js\";\nimport { t, FieldBuilder } from \"./types/builder.js\";\nimport { ArraySchema } from \"./types/custom/ArraySchema.js\";\n\n/**\n * Static methods available on Reflection\n */\ninterface ReflectionStatic {\n /**\n * Encodes the TypeContext of an Encoder into a buffer.\n *\n * @param encoder Encoder instance\n * @param it\n * @returns\n */\n encode: (encoder: Encoder, it?: Iterator) => Uint8Array;\n\n /**\n * Decodes the TypeContext from a buffer into a Decoder instance.\n *\n * @param bytes Reflection.encode() output\n * @param it\n * @returns Decoder instance\n */\n decode: <T extends Schema = Schema>(bytes: Uint8Array, it?: Iterator) => Decoder<T>;\n}\n\n/**\n * Reflection\n */\nexport const ReflectionField = schema({\n name: t.string(),\n type: t.string(),\n referencedType: t.number(),\n}, \"ReflectionField\");\nexport type ReflectionField = SchemaType<typeof ReflectionField>;\n\nexport const ReflectionType = schema({\n id: t.number(),\n extendsId: t.number(),\n fields: t.array(ReflectionField),\n}, \"ReflectionType\");\nexport type ReflectionType = SchemaType<typeof ReflectionType>;\n\nexport const Reflection = schema({\n types: t.array(ReflectionType),\n rootType: t.number(),\n}, \"Reflection\") as ReturnType<typeof schema<{\n types: FieldBuilder<ArraySchema<ReflectionType>, true, false>;\n rootType: FieldBuilder<number, false, false>;\n}>> & ReflectionStatic;\n\nexport type Reflection = SchemaType<typeof Reflection>;\n\nReflection.encode = function (encoder: Encoder, it: Iterator = { offset: 0 }) {\n const context = encoder.context;\n\n const reflection = new Reflection();\n const reflectionEncoder = new Encoder(reflection);\n\n // rootType is usually the first schema passed to the Encoder\n // (unless it inherits from another schema)\n const rootType = context.schemas.get(encoder.state.constructor);\n if (rootType > 0) { reflection.rootType = rootType; }\n\n const includedTypeIds = new Set<number>();\n const pendingReflectionTypes: { [typeid: number]: ReflectionType[] } = {};\n\n // add type to reflection in a way that respects inheritance\n // (parent types should be added before their children)\n const addType = (type: ReflectionType) => {\n if (type.extendsId === undefined || includedTypeIds.has(type.extendsId)) {\n includedTypeIds.add(type.id);\n\n reflection.types.push(type);\n\n const deps = pendingReflectionTypes[type.id];\n if (deps !== undefined) {\n delete pendingReflectionTypes[type.id];\n deps.forEach((childType) => addType(childType));\n }\n } else {\n if (pendingReflectionTypes[type.extendsId] === undefined) {\n pendingReflectionTypes[type.extendsId] = [];\n }\n pendingReflectionTypes[type.extendsId].push(type);\n }\n };\n\n context.schemas.forEach((typeid, klass) => {\n const type = new ReflectionType();\n type.id = Number(typeid);\n\n // support inheritance\n const inheritFrom = Object.getPrototypeOf(klass);\n if (inheritFrom !== Schema) {\n type.extendsId = context.schemas.get(inheritFrom);\n }\n\n const metadata = klass[Symbol.metadata];\n\n //\n // FIXME: this is a workaround for inherited types without additional fields\n // if metadata is the same reference as the parent class - it means the class has no own metadata\n //\n if (metadata !== inheritFrom[Symbol.metadata]) {\n for (const fieldIndex in metadata) {\n const index = Number(fieldIndex);\n const fieldName = metadata[index].name;\n\n // skip fields from parent classes\n if (!Object.prototype.hasOwnProperty.call(metadata, fieldName)) {\n continue;\n }\n\n const reflectionField = new ReflectionField();\n reflectionField.name = fieldName;\n\n let fieldType: string;\n\n const field = metadata[index];\n\n if (typeof (field.type) === \"string\") {\n fieldType = field.type;\n\n } else {\n let childTypeSchema: typeof Schema;\n\n //\n // TODO: refactor below.\n //\n if (Schema.is(field.type)) {\n fieldType = \"ref\";\n childTypeSchema = field.type as typeof Schema;\n\n } else {\n fieldType = Object.keys(field.type)[0];\n\n if (typeof (field.type[fieldType as keyof typeof field.type]) === \"string\") {\n fieldType += \":\" + field.type[fieldType as keyof typeof field.type]; // array:string\n\n } else {\n childTypeSchema = field.type[fieldType as keyof typeof field.type];\n }\n }\n\n reflectionField.referencedType = (childTypeSchema)\n ? context.getTypeId(childTypeSchema)\n : -1;\n }\n\n reflectionField.type = fieldType;\n type.fields.push(reflectionField);\n }\n }\n\n addType(type);\n });\n\n // in case there are types that were not added due to inheritance\n for (const typeid in pendingReflectionTypes) {\n pendingReflectionTypes[typeid].forEach((type) =>\n reflection.types.push(type))\n }\n\n const buf = reflectionEncoder.encodeAll(it);\n return buf.slice(0, it.offset);\n};\n\nReflection.decode = function <T extends Schema = Schema>(bytes: Uint8Array, it?: Iterator): Decoder<T> {\n const reflection = new Reflection();\n\n const reflectionDecoder = new Decoder(reflection);\n reflectionDecoder.decode(bytes, it);\n\n const typeContext = new TypeContext();\n\n // 1st pass, initialize metadata + inheritance\n reflection.types.forEach((reflectionType) => {\n const parentClass: typeof Schema = typeContext.get(reflectionType.extendsId) ?? Schema;\n const schema: typeof Schema = class _ extends parentClass { };\n\n // register for inheritance support\n TypeContext.register(schema);\n\n typeContext.add(schema, reflectionType.id);\n }, {});\n\n // define fields\n const addFields = (metadata: Metadata, reflectionType: ReflectionType, parentFieldIndex: number) => {\n reflectionType.fields.forEach((field, i) => {\n const fieldIndex = parentFieldIndex + i;\n\n if (field.referencedType !== undefined) {\n let fieldType = field.type;\n let refType: PrimitiveType = typeContext.get(field.referencedType);\n\n // map or array of primitive type (-1)\n if (!refType) {\n const typeInfo = field.type.split(\":\");\n fieldType = typeInfo[0];\n refType = typeInfo[1] as PrimitiveType; // string\n }\n\n if (fieldType === \"ref\") {\n Metadata.addField(metadata, fieldIndex, field.name, refType);\n\n } else {\n Metadata.addField(metadata, fieldIndex, field.name, { [fieldType]: refType });\n }\n\n } else {\n Metadata.addField(metadata, fieldIndex, field.name, field.type as PrimitiveType);\n }\n });\n };\n\n // 2nd pass, set fields\n reflection.types.forEach((reflectionType) => {\n const schema = typeContext.get(reflectionType.id);\n\n // for inheritance support\n const metadata = Metadata.initialize(schema);\n\n const inheritedTypes: ReflectionType[] = [];\n\n let parentType: ReflectionType = reflectionType;\n do {\n inheritedTypes.push(parentType);\n parentType = reflection.types.find((t) => t.id === parentType.extendsId);\n } while (parentType);\n\n let parentFieldIndex = 0;\n\n inheritedTypes.reverse().forEach((reflectionType) => {\n // add fields from all inherited classes\n // TODO: refactor this to avoid adding fields from parent classes\n addFields(metadata, reflectionType, parentFieldIndex);\n parentFieldIndex += reflectionType.fields.length;\n });\n });\n\n const state: T = new (typeContext.get(reflection.rootType || 0) as unknown as any)();\n\n return new Decoder<T>(state, typeContext);\n}","import { Metadata } from \"../../Metadata.js\";\nimport { Collection, NonFunctionNonPrimitivePropNames, NonFunctionPropNames } from \"../../types/HelperTypes.js\";\nimport { IRef, Ref } from \"../../encoder/ChangeTree.js\";\nimport { Decoder } from \"../Decoder.js\";\nimport { DataChange } from \"../DecodeOperation.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { Schema } from \"../../Schema.js\";\nimport { $refId } from \"../../types/symbols.js\";\nimport type { DefinitionType } from \"../../annotations.js\";\nimport type { CollectionSchema } from \"../../types/custom/CollectionSchema.js\";\n\n//\n// Discussion: https://github.com/colyseus/schema/issues/155\n//\n// Main points:\n// - Decouple structures from their callbacks.\n// - Registering deep callbacks can be confusing.\n// - Avoid closures by allowing to pass a context. (https://github.com/colyseus/schema/issues/155#issuecomment-1804694081)\n//\n\n/**\n * TODO: define a schema interface, which even having duplicate definitions, it could be used to get the callback proxy.\n *\n * ```ts\n * export type SchemaCallbackProxy<RoomState> = (<T extends Schema>(instance: T) => CallbackProxy<T>);\n * ```\n */\nexport type SchemaCallbackProxy<RoomState> = (<T>(instance: T) => CallbackProxy<T>);\nexport type GetCallbackProxy = SchemaCallbackProxy<any>; // workaround for compatibility for < colyseus.js0.16.6. Remove me on next major release.\n\nexport type CallbackProxy<T> = unknown extends T // is \"any\"?\n ? SchemaCallback<T> & CollectionCallback<any, any>\n : T extends Collection<infer K, infer V, infer _>\n ? CollectionCallback<K, V>\n : SchemaCallback<T>;\n\nexport type SchemaCallback<T> = {\n /**\n * Trigger callback when value of a property changes.\n *\n * @param prop name of the property\n * @param callback callback to be triggered on property change\n * @param immediate trigger immediatelly if property has been already set.\n * @return callback to detach the listener\n */\n listen<K extends NonFunctionPropNames<T>>(\n prop: K,\n callback: (value: T[K], previousValue: T[K]) => void,\n immediate?: boolean,\n ): () => void;\n\n /**\n * Trigger callback whenever any property changed within this instance.\n *\n * @param prop name of the property\n * @param callback callback to be triggered on property change\n * @param immediate trigger immediatelly if property has been already set.\n * @return callback to detach the listener\n */\n onChange(callback: () => void): () => void;\n\n /**\n * Bind properties to another object. Changes on the properties will be reflected on the target object.\n *\n * @param targetObject object to bind properties to\n * @param properties list of properties to bind. If not provided, all properties will be bound.\n */\n bindTo(targetObject: any, properties?: Array<NonFunctionPropNames<T>>): void;\n} & {\n [K in NonFunctionNonPrimitivePropNames<T>]: CallbackProxy<T[K]>;\n}\n\nexport type CollectionCallback<K, V> = {\n /**\n * Trigger callback when an item has been added to the collection.\n *\n * @param callback\n * @param immediate\n * @return callback to detach the onAdd listener\n */\n onAdd(callback: (item: V, index: K) => void, immediate?: boolean): () => void;\n\n /**\n * Trigger callback when an item has been removed to the collection.\n *\n * @param callback\n * @return callback to detach the onRemove listener\n */\n onRemove(callback: (item: V, index: K) => void): () => void;\n\n /**\n * Trigger callback when the value on a key has changed.\n *\n * THIS METHOD IS NOT RECURSIVE!\n * If you want to listen to changes on individual items, you need to attach callbacks to the them directly inside the `onAdd` callback.\n *\n * @param callback\n * @return callback to detach the onChange listener\n */\n onChange(callback: (item: V, index: K) => void): () => void;\n};\n\ntype OnInstanceAvailableCallback = (callback: (ref: Ref, existing: boolean) => void) => void;\n\ntype CallContext = {\n instance?: any,\n parentInstance?: any,\n onInstanceAvailable?: OnInstanceAvailableCallback,\n}\n\n/**\n * Legacy callback system\n *\n * @param decoder\n * @returns\n */\nexport function getDecoderStateCallbacks<T extends Schema>(decoder: Decoder<T>): SchemaCallbackProxy<T> {\n const $root = decoder.root;\n const callbacks = $root.callbacks;\n\n const onAddCalls: WeakMap<Function, boolean> = new WeakMap();\n let currentOnAddCallback: Function | undefined;\n\n decoder.triggerChanges = function (allChanges: DataChange[]) {\n const uniqueRefIds = new Set<number>();\n\n for (let i = 0, l = allChanges.length; i < l; i++) {\n const change = allChanges[i];\n const refId = change.refId;\n const ref = change.ref;\n const $callbacks = callbacks[refId];\n\n if (!$callbacks) { continue; }\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n Schema.isSchema(change.previousValue)\n ) {\n const deleteCallbacks = callbacks[(change.previousValue as Ref)[$refId]]?.[OPERATION.DELETE];\n for (let i = deleteCallbacks?.length - 1; i >= 0; i--) {\n deleteCallbacks[i]();\n }\n }\n\n if (Schema.isSchema(ref)) {\n //\n // Handle schema instance\n //\n\n if (!uniqueRefIds.has(refId)) {\n // trigger onChange\n const replaceCallbacks = $callbacks?.[OPERATION.REPLACE];\n for (let i = replaceCallbacks?.length - 1; i >= 0; i--) {\n replaceCallbacks[i]();\n }\n }\n\n if ($callbacks.hasOwnProperty(change.field)) {\n const fieldCallbacks = $callbacks[change.field];\n for (let i = fieldCallbacks?.length - 1; i >= 0; i--) {\n fieldCallbacks[i](change.value, change.previousValue);\n }\n }\n\n\n } else {\n //\n // Handle collection of items\n //\n\n if ((change.op & OPERATION.DELETE) === OPERATION.DELETE) {\n // DELETE can arrive with `previousValue === undefined` in\n // two legitimate cases — neither is fixable decoder-side:\n // 1. DELETE_AND_ADD (op byte 192) for an index/refId the\n // decoder never held (e.g. a client whose @view\n // subscription just began sees the replacement op\n // first). The ADD half still fires below.\n // 2. DELETE_BY_REFID (decodeArray) for a filtered\n // ArraySchema ref that was never ADDed on this\n // decoder; that push site is unconditional.\n // The guard prevents `onRemove(undefined, key)` from firing.\n if (change.previousValue !== undefined) {\n // triger onRemove\n const deleteCallbacks = $callbacks[OPERATION.DELETE];\n for (let i = deleteCallbacks?.length - 1; i >= 0; i--) {\n deleteCallbacks[i](change.previousValue, change.dynamicIndex ?? change.field);\n }\n }\n\n // Handle DELETE_AND_ADD operations\n if ((change.op & OPERATION.ADD) === OPERATION.ADD) {\n const addCallbacks = $callbacks[OPERATION.ADD];\n for (let i = addCallbacks?.length - 1; i >= 0; i--) {\n addCallbacks[i](change.value, change.dynamicIndex ?? change.field);\n }\n }\n\n } else if (\n (change.op & OPERATION.ADD) === OPERATION.ADD &&\n change.previousValue !== change.value\n ) {\n // triger onAdd\n const addCallbacks = $callbacks[OPERATION.ADD];\n for (let i = addCallbacks?.length - 1; i >= 0; i--) {\n addCallbacks[i](change.value, change.dynamicIndex ?? change.field);\n }\n }\n\n // trigger onChange\n // The `value !== undefined || previousValue !== undefined` half\n // suppresses spurious onChange calls for DELETEs the decoder\n // never had context for — same two cases documented above\n // (DELETE_AND_ADD post-view-grant, DELETE_BY_REFID for unseen\n // refIds), plus the historical \"ADD+DELETE collapsed to DELETE\n // on the wire\" path now neutralized at the push site.\n if (\n change.value !== change.previousValue &&\n (change.value !== undefined || change.previousValue !== undefined)\n ) {\n const replaceCallbacks = $callbacks[OPERATION.REPLACE];\n for (let i = replaceCallbacks?.length - 1; i >= 0; i--) {\n replaceCallbacks[i](change.value, change.dynamicIndex ?? change.field);\n }\n }\n }\n\n uniqueRefIds.add(refId);\n }\n };\n\n function getProxy(\n metadataOrType: Metadata | DefinitionType,\n context: CallContext\n ) {\n let metadata: Metadata = context.instance?.constructor[Symbol.metadata] || metadataOrType;\n let isCollection = (\n (context.instance && typeof (context.instance['forEach']) === \"function\") ||\n (metadataOrType && typeof ((metadataOrType as typeof Schema)[Symbol.metadata]) === \"undefined\")\n );\n\n if (metadata && !isCollection) {\n\n const onAddListen = function (\n ref: Ref,\n prop: string,\n callback: (value: any, previousValue: any) => void, immediate: boolean\n ) {\n // immediate trigger\n if (\n immediate &&\n context.instance[prop] !== undefined &&\n !onAddCalls.has(currentOnAddCallback) // Workaround for https://github.com/colyseus/schema/issues/147\n ) {\n callback(context.instance[prop], undefined);\n }\n return $root.addCallback(ref[$refId], prop, callback);\n }\n\n /**\n * Schema instances\n */\n return new Proxy({\n listen: function listen(prop: string, callback: (value: any, previousValue: any) => void, immediate: boolean = true) {\n if (context.instance) {\n return onAddListen(context.instance, prop, callback, immediate);\n\n } else {\n // collection instance not received yet\n let detachCallback = () => {};\n\n context.onInstanceAvailable((ref: Ref, existing: boolean) => {\n detachCallback = onAddListen(ref, prop, callback, immediate && existing && !onAddCalls.has(currentOnAddCallback))\n });\n\n return () => detachCallback();\n }\n },\n\n onChange: function onChange(callback: () => void) {\n return $root.addCallback(\n context.instance[$refId],\n OPERATION.REPLACE,\n callback\n );\n },\n\n //\n // TODO: refactor `bindTo()` implementation.\n // There is room for improvement.\n //\n bindTo: function bindTo(targetObject: any, properties?: string[]) {\n if (!properties) {\n properties = Object.keys(metadata).map((index) => metadata[index as any as number].name);\n }\n return $root.addCallback(\n context.instance[$refId],\n OPERATION.REPLACE,\n () => {\n properties.forEach((prop) =>\n targetObject[prop] = context.instance[prop])\n }\n );\n }\n }, {\n get(target, prop: string) {\n const metadataField = metadata[metadata[prop]];\n if (metadataField) {\n const instance = context.instance?.[prop];\n const onInstanceAvailable: OnInstanceAvailableCallback = (\n (callback: (ref: Ref, existing: boolean) => void) => {\n const unbind = $(context.instance).listen(prop, (value, _) => {\n callback(value, false);\n\n // FIXME: by \"unbinding\" the callback here,\n // it will not support when the server\n // re-instantiates the instance.\n //\n unbind?.();\n }, false);\n\n // has existing value\n if (instance?.[$refId] !== undefined) {\n callback(instance, true);\n }\n }\n );\n\n return getProxy(metadataField.type, {\n // make sure refId is available, otherwise need to wait for the instance to be available.\n instance: (instance?.[$refId] !== undefined && instance),\n parentInstance: context.instance,\n onInstanceAvailable,\n });\n\n } else {\n // accessing the function\n return target[prop as keyof typeof target];\n }\n },\n has(target, prop: string) { return metadata[prop] !== undefined; },\n set(_, _1, _2) { throw new Error(\"not allowed\"); },\n deleteProperty(_, _1) { throw new Error(\"not allowed\"); },\n });\n\n } else {\n /**\n * Collection instances\n */\n\n const onAdd = function (ref: Ref, callback: (value: any, key: any) => void, immediate: boolean) {\n // Trigger callback on existing items\n if (immediate) {\n (ref as CollectionSchema).forEach((v, k) => callback(v, k));\n }\n\n return $root.addCallback(ref[$refId], OPERATION.ADD, (value: any, key: any) => {\n onAddCalls.set(callback, true);\n currentOnAddCallback = callback;\n callback(value, key);\n onAddCalls.delete(callback)\n currentOnAddCallback = undefined;\n });\n };\n\n const onRemove = function (ref: Ref, callback: (value: any, key: any) => void) {\n return $root.addCallback(ref[$refId], OPERATION.DELETE, callback);\n };\n\n const onChange = function (ref: Ref, callback: (value: any, key: any) => void) {\n return $root.addCallback(ref[$refId], OPERATION.REPLACE, callback);\n };\n\n return new Proxy({\n onAdd: function(callback: (value: any, key: any) => void, immediate: boolean = true) {\n //\n // https://github.com/colyseus/schema/issues/147\n // If parent instance has \"onAdd\" registered, avoid triggering immediate callback.\n //\n\n if (context.instance) {\n return onAdd(context.instance, callback, immediate && !onAddCalls.has(currentOnAddCallback));\n\n } else if (context.onInstanceAvailable) {\n // collection instance not received yet\n let detachCallback = () => {};\n\n context.onInstanceAvailable((ref: Ref, existing: boolean) => {\n detachCallback = onAdd(ref, callback, immediate && existing && !onAddCalls.has(currentOnAddCallback));\n });\n\n return () => detachCallback();\n }\n },\n onRemove: function(callback: (value: any, key: any) => void) {\n if (context.instance) {\n return onRemove(context.instance, callback);\n\n } else if (context.onInstanceAvailable) {\n // collection instance not received yet\n let detachCallback = () => {};\n\n context.onInstanceAvailable((ref: Ref) => {\n detachCallback = onRemove(ref, callback)\n });\n\n return () => detachCallback();\n }\n },\n onChange: function(callback: (value: any, key: any) => void) {\n if (context.instance) {\n return onChange(context.instance, callback);\n\n } else if (context.onInstanceAvailable) {\n // collection instance not received yet\n let detachCallback = () => {};\n\n context.onInstanceAvailable((ref: Ref) => {\n detachCallback = onChange(ref, callback)\n });\n\n return () => detachCallback();\n }\n },\n }, {\n get(target, prop: string) {\n if (!target[prop as keyof typeof target]) {\n throw new Error(`Can't access '${prop}' through callback proxy. access the instance directly.`);\n }\n return target[prop as keyof typeof target];\n },\n has(target, prop) { return target[prop as keyof typeof target] !== undefined; },\n set(_, _1, _2) { throw new Error(\"not allowed\"); },\n deleteProperty(_, _1) { throw new Error(\"not allowed\"); },\n });\n }\n }\n\n function $<T>(instance: T): CallbackProxy<T> {\n return getProxy(undefined, { instance }) as unknown as CallbackProxy<T>;\n }\n\n return $;\n}\n","import { DataChange } from \"../DecodeOperation.js\";\nimport { Decoder } from \"../Decoder.js\";\n\nexport function getRawChangesCallback(\n decoder: Decoder,\n callback: (changes: DataChange[]) => void\n) {\n decoder.triggerChanges = callback;\n}","import { Metadata } from \"../../Metadata.js\";\nimport { Collection, NonFunctionPropNames } from \"../../types/HelperTypes.js\";\nimport type { IRef, Ref } from \"../../encoder/ChangeTree.js\";\nimport { Decoder } from \"../Decoder.js\";\nimport { DataChange } from \"../DecodeOperation.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { Schema } from \"../../Schema.js\";\nimport { $refId } from \"../../types/symbols.js\";\nimport { MapSchema } from \"../../types/custom/MapSchema.js\";\nimport { ArraySchema } from \"../../types/custom/ArraySchema.js\";\nimport { getDecoderStateCallbacks, type SchemaCallbackProxy } from \"./getDecoderStateCallbacks.js\";\nimport { getRawChangesCallback } from \"./RawChanges.js\";\n\n//\n// C#-style Callbacks API (https://docs.colyseus.io/state/callbacks)\n//\n// Key features:\n// - Uses string property names with TypeScript auto-completion\n// - Parameter order (value, key) for onAdd/onRemove callbacks\n// - Overloaded methods for nested instance callbacks\n//\n\ntype PropertyChangeCallback<K> = (currentValue: K, previousValue: K) => void;\ntype KeyValueCallback<K, V> = (key: K, value: V) => void;\ntype ValueKeyCallback<V, K> = (value: V, key: K) => void;\ntype InstanceChangeCallback = () => void;\n\n// Exclude internal properties from valid property names\ntype PublicPropNames<T> = Exclude<NonFunctionPropNames<T>, typeof $refId> & string;\n\n// Extract only properties that extend Collection\ntype CollectionPropNames<T> = Exclude<{\n [K in keyof T]: T[K] extends Collection<any, any> ? K : never\n}[keyof T] & string, typeof $refId>;\n\n// Infer the value type of a collection property\ntype CollectionValueType<T, K extends keyof T> =\n T[K] extends MapSchema<infer V, any> ? V :\n T[K] extends ArraySchema<infer V> ? V :\n T[K] extends Collection<any, infer V, any> ? V : never;\n\n// Infer the key type of a collection property\ntype CollectionKeyType<T, K extends keyof T> =\n T[K] extends MapSchema<any, infer Key> ? Key :\n T[K] extends ArraySchema<any> ? number :\n T[K] extends Collection<infer Key, any, any> ? Key : never;\n\nexport class StateCallbackStrategy<TState extends IRef> {\n protected decoder: Decoder<TState>;\n protected uniqueRefIds: Set<number> = new Set();\n protected isTriggering: boolean = false;\n\n constructor(decoder: Decoder<TState>) {\n this.decoder = decoder;\n this.decoder.triggerChanges = this.triggerChanges.bind(this);\n }\n\n protected get callbacks() {\n return this.decoder.root.callbacks;\n }\n\n protected get state() {\n return this.decoder.state;\n }\n\n protected addCallback(\n refId: number,\n operationOrProperty: OPERATION | string,\n handler: Function\n ): () => void {\n const $root = this.decoder.root;\n return $root.addCallback(refId, operationOrProperty, handler);\n }\n\n protected addCallbackOrWaitCollectionAvailable<TInstance extends IRef, TReturn extends Ref>(\n instance: TInstance,\n propertyName: string,\n operation: OPERATION,\n handler: Function,\n immediate: boolean = true\n ): () => void {\n let removeHandler: () => void = () => {};\n const removeOnAdd = () => removeHandler();\n\n const collection = (instance as any)[propertyName] as TReturn;\n\n // Collection not available yet. Listen for its availability before attaching the handler.\n if (!collection || collection[$refId] === undefined) {\n let removePropertyCallback: () => void;\n removePropertyCallback = this.addCallback(\n instance[$refId],\n propertyName,\n (value: TReturn, _: TReturn) => {\n if (value !== null && value !== undefined) {\n // Remove the property listener now that collection is available\n removePropertyCallback();\n removeHandler = this.addCallback(value[$refId], operation, handler);\n }\n }\n );\n removeHandler = removePropertyCallback;\n return removeOnAdd;\n\n } else {\n //\n // Call immediately if collection is already available, if it's an ADD operation.\n //\n immediate = immediate && this.isTriggering === false;\n\n if (operation === OPERATION.ADD && immediate) {\n (collection as Collection<any, any>).forEach((value: any, key: any) => {\n handler(value, key);\n });\n }\n\n return this.addCallback(collection[$refId], operation, handler);\n }\n }\n\n /**\n * Listen to property changes on the root state.\n */\n listen<K extends PublicPropNames<TState>>(\n property: K,\n handler: PropertyChangeCallback<TState[K]>,\n immediate?: boolean\n ): () => void;\n\n /**\n * Listen to property changes on a nested instance.\n */\n listen<TInstance extends Schema, K extends PublicPropNames<TInstance>>(\n instance: TInstance,\n property: K,\n handler: PropertyChangeCallback<TInstance[K]>,\n immediate?: boolean\n ): () => void;\n\n listen(...args: any[]): () => void {\n if (typeof args[0] === 'string') {\n // listen(property, handler, immediate?)\n return this.listenInstance(this.state, args[0], args[1], args[2]);\n } else {\n // listen(instance, property, handler, immediate?)\n return this.listenInstance(args[0], args[1], args[2], args[3]);\n }\n }\n\n protected listenInstance<TInstance extends IRef>(\n instance: TInstance,\n propertyName: string,\n handler: PropertyChangeCallback<any>,\n immediate: boolean = true\n ): () => void {\n immediate = immediate && this.isTriggering === false;\n\n //\n // Call handler immediately if property is already available.\n //\n const currentValue = (instance as any)[propertyName];\n if (immediate && currentValue !== null && currentValue !== undefined) {\n handler(currentValue, undefined as any);\n }\n\n return this.addCallback(instance[$refId], propertyName, handler);\n }\n\n /**\n * Listen to any property change on an instance.\n */\n onChange<TInstance extends Schema>(\n instance: TInstance,\n handler: InstanceChangeCallback\n ): () => void;\n\n /**\n * Listen to item changes in a collection on root state.\n */\n onChange<K extends CollectionPropNames<TState>>(\n property: K,\n handler: KeyValueCallback<CollectionKeyType<TState, K>, CollectionValueType<TState, K>>\n ): () => void;\n\n /**\n * Listen to item changes in a nested collection.\n */\n onChange<TInstance extends Schema, K extends CollectionPropNames<TInstance>>(\n instance: TInstance,\n property: K,\n handler: KeyValueCallback<CollectionKeyType<TInstance, K>, CollectionValueType<TInstance, K>>\n ): () => void;\n\n onChange(...args: any[]): () => void {\n if (args.length === 2 && typeof args[0] !== 'string') {\n // onChange(instance, handler) - instance change\n const instance = args[0] as Schema;\n const handler = args[1] as InstanceChangeCallback;\n return this.addCallback(instance[$refId], OPERATION.REPLACE, handler);\n }\n\n if (typeof args[0] === 'string') {\n // onChange(property, handler) - collection on root state\n return this.addCallbackOrWaitCollectionAvailable(\n this.state,\n args[0],\n OPERATION.REPLACE,\n args[1]\n );\n } else {\n // onChange(instance, property, handler) - nested collection\n return this.addCallbackOrWaitCollectionAvailable(\n args[0],\n args[1],\n OPERATION.REPLACE,\n args[2]\n );\n }\n }\n\n /**\n * Listen to items added to a collection on root state.\n */\n onAdd<K extends CollectionPropNames<TState>>(\n property: K,\n handler: ValueKeyCallback<CollectionValueType<TState, K>, CollectionKeyType<TState, K>>,\n immediate?: boolean\n ): () => void;\n\n /**\n * Listen to items added to a nested collection.\n */\n onAdd<TInstance extends Schema, K extends CollectionPropNames<TInstance>>(\n instance: TInstance,\n property: K,\n handler: ValueKeyCallback<CollectionValueType<TInstance, K>, CollectionKeyType<TInstance, K>>,\n immediate?: boolean\n ): () => void;\n\n onAdd(...args: any[]): () => void {\n if (typeof args[0] === 'string') {\n // onAdd(property, handler, immediate?) - collection on root state\n return this.addCallbackOrWaitCollectionAvailable(\n this.state,\n args[0],\n OPERATION.ADD,\n args[1],\n args[2] !== false\n );\n } else {\n // onAdd(instance, property, handler, immediate?) - nested collection\n return this.addCallbackOrWaitCollectionAvailable(\n args[0],\n args[1],\n OPERATION.ADD,\n args[2],\n args[3] !== false\n );\n }\n }\n\n /**\n * Listen to items removed from a collection on root state.\n */\n onRemove<K extends CollectionPropNames<TState>>(\n property: K,\n handler: ValueKeyCallback<CollectionValueType<TState, K>, CollectionKeyType<TState, K>>\n ): () => void;\n\n /**\n * Listen to items removed from a nested collection.\n */\n onRemove<TInstance extends Schema, K extends CollectionPropNames<TInstance>>(\n instance: TInstance,\n property: K,\n handler: ValueKeyCallback<CollectionValueType<TInstance, K>, CollectionKeyType<TInstance, K>>\n ): () => void;\n\n onRemove(...args: any[]): () => void {\n if (typeof args[0] === 'string') {\n // onRemove(property, handler) - collection on root state\n return this.addCallbackOrWaitCollectionAvailable(\n this.state,\n args[0],\n OPERATION.DELETE,\n args[1]\n );\n } else {\n // onRemove(instance, property, handler) - nested collection\n return this.addCallbackOrWaitCollectionAvailable(\n args[0],\n args[1],\n OPERATION.DELETE,\n args[2]\n );\n }\n }\n\n /**\n * Bind properties from a Schema instance to a target object.\n * Changes will be automatically reflected on the target object.\n */\n bindTo<TInstance extends Schema, TTarget>(\n from: TInstance,\n to: TTarget,\n properties?: string[],\n immediate: boolean = true\n ): () => void {\n const metadata: Metadata = (from.constructor as typeof Schema)[Symbol.metadata];\n\n // If no properties specified, bind all properties\n if (!properties) {\n properties = Object.keys(metadata)\n .filter(key => !isNaN(Number(key)))\n .map((index) => metadata[index as any as number].name);\n }\n\n const action = () => {\n for (const prop of properties!) {\n const fromValue = (from as any)[prop];\n if (fromValue !== undefined) {\n (to as any)[prop] = fromValue;\n }\n }\n };\n\n if (immediate) {\n action();\n }\n\n return this.addCallback(from[$refId], OPERATION.REPLACE, action);\n }\n\n protected triggerChanges(allChanges: DataChange[]): void {\n this.uniqueRefIds.clear();\n\n // Flag stays set for the whole dispatch pass — any `listen()` /\n // `onAdd(...)` registered while a callback is firing needs to\n // suppress its immediate-trigger. One toggle per pass is enough;\n // every callback invocation below is wrapped in try/catch so\n // nothing bubbles out to leave the flag stuck.\n this.isTriggering = true;\n\n for (let i = 0, l = allChanges.length; i < l; i++) {\n const change = allChanges[i];\n const refId = change.refId;\n const ref = change.ref;\n\n const $callbacks = this.callbacks[refId];\n if (!$callbacks) {\n continue;\n }\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n Schema.isSchema(change.previousValue)\n ) {\n const childRefId = (change.previousValue as Ref)[$refId];\n const deleteCallbacks = this.callbacks[childRefId]?.[OPERATION.DELETE];\n if (deleteCallbacks) {\n for (let j = deleteCallbacks.length - 1; j >= 0; j--) {\n try { deleteCallbacks[j](); } catch (e) { console.error(e); }\n }\n }\n }\n\n if (Schema.isSchema(ref)) {\n //\n // Handle Schema instance\n //\n\n if (!this.uniqueRefIds.has(refId)) {\n // trigger onChange\n const replaceCallbacks = $callbacks[OPERATION.REPLACE];\n if (replaceCallbacks) {\n for (let j = replaceCallbacks.length - 1; j >= 0; j--) {\n try { replaceCallbacks[j](); } catch (e) { console.error(e); }\n }\n }\n }\n\n // trigger field callbacks\n const fieldCallbacks = $callbacks[change.field];\n if (fieldCallbacks) {\n for (let j = fieldCallbacks.length - 1; j >= 0; j--) {\n try { fieldCallbacks[j](change.value, change.previousValue); } catch (e) { console.error(e); }\n }\n }\n\n } else {\n //\n // Handle collection of items\n //\n const dynamicIndex = change.dynamicIndex ?? change.field;\n\n if ((change.op & OPERATION.DELETE) === OPERATION.DELETE) {\n // DELETE can arrive with `previousValue === undefined` in two\n // legitimate cases — neither is fixable decoder-side:\n // 1. DELETE_AND_ADD (op byte 192) for an index/refId the\n // decoder never held — e.g. a client whose @view\n // subscription just began sees the replacement op\n // first. `previousValue` is undefined; `value` is the\n // newly-decoded instance. The ADD half still fires below.\n // 2. DELETE_BY_REFID (decodeArray, DecodeOperation.ts) for\n // a filtered ArraySchema ref that was never ADDed on\n // this decoder. That push site is unconditional because\n // `removeRef` has already run; raw-change observers\n // still want the event even with unknown previousValue.\n // The guard prevents `onRemove(undefined, key)` from firing.\n if (change.previousValue !== undefined) {\n // trigger onRemove (value, key)\n const deleteCallbacks = $callbacks[OPERATION.DELETE];\n if (deleteCallbacks) {\n for (let j = deleteCallbacks.length - 1; j >= 0; j--) {\n try { deleteCallbacks[j](change.previousValue, dynamicIndex); } catch (e) { console.error(e); }\n }\n }\n }\n\n // Handle DELETE_AND_ADD operation\n if ((change.op & OPERATION.ADD) === OPERATION.ADD) {\n const addCallbacks = $callbacks[OPERATION.ADD];\n if (addCallbacks) {\n for (let j = addCallbacks.length - 1; j >= 0; j--) {\n try { addCallbacks[j](change.value, dynamicIndex); } catch (e) { console.error(e); }\n }\n }\n }\n\n } else if (\n (change.op & OPERATION.ADD) === OPERATION.ADD &&\n change.previousValue !== change.value\n ) {\n // trigger onAdd (value, key)\n const addCallbacks = $callbacks[OPERATION.ADD];\n if (addCallbacks) {\n for (let j = addCallbacks.length - 1; j >= 0; j--) {\n try { addCallbacks[j](change.value, dynamicIndex); } catch (e) { console.error(e); }\n }\n }\n }\n\n // trigger onChange (key, value)\n if (change.value !== change.previousValue) {\n const replaceCallbacks = $callbacks[OPERATION.REPLACE];\n if (replaceCallbacks) {\n for (let j = replaceCallbacks.length - 1; j >= 0; j--) {\n try { replaceCallbacks[j](dynamicIndex, change.value); } catch (e) { console.error(e); }\n }\n }\n }\n }\n\n this.uniqueRefIds.add(refId);\n }\n\n this.isTriggering = false;\n }\n}\n\n/**\n * Factory class for retrieving the callbacks API.\n */\nexport const Callbacks = {\n /**\n * Get the new callbacks standard API.\n *\n * Usage:\n * ```ts\n * const callbacks = Callbacks.get(roomOrDecoder);\n *\n * // Listen to property changes\n * callbacks.listen(\"currentTurn\", (currentValue, previousValue) => { ... });\n *\n * // Listen to collection additions\n * callbacks.onAdd(\"entities\", (entity, sessionId) => {\n * // Nested property listening\n * callbacks.listen(entity, \"hp\", (currentHp, previousHp) => { ... });\n * });\n *\n * // Listen to collection removals\n * callbacks.onRemove(\"entities\", (entity, sessionId) => { ... });\n *\n * // Listen to any property change on an instance\n * callbacks.onChange(entity, () => { ... });\n *\n * // Bind properties to another object\n * callbacks.bindTo(player, playerVisual);\n * ```\n *\n * @param roomOrDecoder - Room or Decoder instance to get the callbacks for.\n * @returns the new callbacks standard API.\n */\n get<T extends IRef>(\n roomOrDecoder: Decoder<T> | { serializer: { decoder: Decoder<T> } } | { state: T; serializer: object }\n ): StateCallbackStrategy<T> {\n if (roomOrDecoder instanceof Decoder) {\n return new StateCallbackStrategy<T>(roomOrDecoder);\n\n } else if ('decoder' in roomOrDecoder.serializer) {\n return new StateCallbackStrategy<T>(roomOrDecoder.serializer.decoder);\n\n } else {\n throw new Error('Invalid room or decoder');\n }\n },\n\n /**\n * Get the legacy callbacks API.\n *\n * We aim to deprecate this API on 1.0, and iterate on improving Callbacks.get() API.\n *\n * @param roomOrDecoder - Room or Decoder instance to get the legacy callbacks for.\n * @returns the legacy callbacks API.\n */\n getLegacy<T extends Schema>(\n roomOrDecoder: Decoder<T> | { serializer: { decoder: Decoder<T> } } | { state: T; serializer: object }\n ): SchemaCallbackProxy<T> {\n if (roomOrDecoder instanceof Decoder) {\n return getDecoderStateCallbacks(roomOrDecoder);\n\n } else if ('decoder' in roomOrDecoder.serializer) {\n return getDecoderStateCallbacks(roomOrDecoder.serializer.decoder);\n }\n },\n\n getRawChanges(decoder: Decoder, callback: (changes: DataChange[]) => void) {\n return getRawChangesCallback(decoder, callback);\n }\n};\n\n","import { ChangeTree, Ref } from \"./ChangeTree.js\";\nimport { $changes, $fieldIndexesByViewTag, $refId, $viewFieldIndexes } from \"../types/symbols.js\";\nimport { DEFAULT_VIEW_TAG } from \"../annotations.js\";\nimport { OPERATION } from \"../encoding/spec.js\";\nimport { Metadata } from \"../Metadata.js\";\nimport { spliceOne } from \"../types/utils.js\";\nimport { streamDequeueForView, streamEnqueueForView } from \"./streaming.js\";\nimport type { Schema } from \"../Schema.js\";\nimport type { Root, Streamable } from \"./Root.js\";\n\nexport function createView(iterable: boolean = false) {\n return new StateView(iterable);\n}\n\n/**\n * Clear the bit for `(slot, bit)` on every ChangeTree in `root`. Called\n * from `dispose()` and from the FinalizationRegistry callback so a view's\n * leftover visibility bits don't leak to whoever next acquires its ID.\n *\n * Cost: O(N trees) per dispose. dispose is rare (once per view lifecycle,\n * typically once per client disconnect), so the per-tick encode hot path\n * is unaffected.\n */\nfunction _clearViewBitFromAllTrees(root: Root, slot: number, bit: number): void {\n const clearMask = ~bit;\n const trees = root.changeTrees;\n for (const refId in trees) {\n const tree = trees[refId];\n const v = tree.visibleViews;\n if (v !== undefined && slot < v.length) v[slot] &= clearMask;\n const i = tree.invisibleViews;\n if (i !== undefined && slot < i.length) i[slot] &= clearMask;\n const s = tree.subscribedViews;\n if (s !== undefined && slot < s.length) s[slot] &= clearMask;\n const t = tree.tagViews;\n if (t !== undefined) {\n t.forEach((bitmap) => {\n if (slot < bitmap.length) bitmap[slot] &= clearMask;\n });\n }\n }\n}\n\n/**\n * `FinalizationRegistry` returns a view's ID to its Root's freelist AND\n * clears the view's leftover bits from every ChangeTree. Backstop for\n * forgotten `view.dispose()` calls; timing is non-deterministic but bounded.\n */\nconst _disposeRegistry = new FinalizationRegistry<{ root: Root; id: number; slot: number; bit: number }>(\n ({ root, id, slot, bit }) => {\n _clearViewBitFromAllTrees(root, slot, bit);\n root.releaseViewId(id);\n },\n);\n\nexport class StateView {\n /**\n * Iterable list of items that are visible to this view\n * (Available only if constructed with `iterable: true`)\n */\n items: Ref[];\n\n /**\n * Unique ID assigned by the Root that owns this view's encoder. Used\n * to address per-StateView visibility bits stored on each ChangeTree.\n * Lazily allocated on first `add()` because the StateView itself\n * doesn't know its Root until then.\n */\n id: number = -1;\n private _root?: Root;\n\n /** Cached `id >> 5` and `1 << (id & 31)` for the hot encode-loop check. */\n private _slot: number = 0;\n private _bit: number = 0;\n\n /**\n * Per-tree custom-tag membership lives on each ChangeTree's `tagViews`\n * map (keyed by tag, value is a per-view bitmap). The StateView only\n * needs its slot/bit pair to read/write it. Replaces the legacy\n * `tags: WeakMap<ChangeTree, Set<number>>` allocation per (view, tree).\n */\n\n /**\n * Manual \"ADD\" operations for changes per ChangeTree, specific to this view.\n * (Used to force encoding a property even if it was not changed.)\n *\n * Inner storage is a Map so the encode loop in `encodeView` can iterate\n * directly with numeric keys — the legacy `{[index]: OPERATION}` shape\n * forced an `Object.keys(...)` allocation + `Number(key)` parse per ref.\n */\n changes = new Map<number, Map<number, OPERATION>>();\n\n constructor(public iterable: boolean = false) {\n if (iterable) {\n this.items = [];\n }\n }\n\n /**\n * Lazily bind this view to a Root and acquire a view ID. Called on\n * the first add() because StateView is constructed before its target\n * Root is known.\n */\n private _bindRoot(root: Root): void {\n if (this._root !== undefined) return;\n this._root = root;\n this.id = root.acquireViewId();\n this._slot = this.id >> 5;\n this._bit = 1 << (this.id & 31);\n root.registerView(this);\n _disposeRegistry.register(\n this,\n { root, id: this.id, slot: this._slot, bit: this._bit },\n this,\n );\n }\n\n /**\n * Release this view's ID back to the Root for reuse, AND clear all\n * visibility bits this view set on any ChangeTree. The clear is\n * essential — without it, a future view that acquires this same ID\n * would inherit our visibility state and see things it shouldn't\n * (privacy bug). Documented in StateViewInternals.test.ts.\n *\n * Optional API but strongly recommended on client-leave; otherwise\n * the FinalizationRegistry backstop runs at GC (non-deterministic).\n */\n public dispose(): void {\n if (this._root === undefined) return;\n this._root.unregisterView(this);\n _clearViewBitFromAllTrees(this._root, this._slot, this._bit);\n this._root.releaseViewId(this.id);\n _disposeRegistry.unregister(this);\n this._root = undefined;\n this.id = -1;\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Per-tree visibility bitmap helpers. Replace the old WeakSet ops\n // with O(1) bitwise ops on a chunked number[] stored on each tree.\n // ──────────────────────────────────────────────────────────────────\n\n /** True iff this view can see `tree`. */\n public isVisible(tree: ChangeTree): boolean {\n const arr = tree.visibleViews;\n const slot = this._slot;\n return arr !== undefined && slot < arr.length && (arr[slot] & this._bit) !== 0;\n }\n\n /** Mark `tree` as visible to this view. */\n public markVisible(tree: ChangeTree): void {\n const slot = this._slot;\n let arr = tree.visibleViews;\n if (arr === undefined) {\n arr = tree.visibleViews = [];\n }\n while (arr.length <= slot) arr.push(0);\n arr[slot] |= this._bit;\n }\n\n /** Clear visibility bit. */\n public unmarkVisible(tree: ChangeTree): void {\n const arr = tree.visibleViews;\n if (arr === undefined) return;\n const slot = this._slot;\n if (slot < arr.length) arr[slot] &= ~this._bit;\n }\n\n /** True iff this view is subscribed to `tree`. */\n public isSubscribed(tree: ChangeTree): boolean {\n const arr = tree.subscribedViews;\n const slot = this._slot;\n return arr !== undefined && slot < arr.length && (arr[slot] & this._bit) !== 0;\n }\n\n /** Set the subscription bit on `tree`. */\n private _setSubscribed(tree: ChangeTree): void {\n const slot = this._slot;\n let arr = tree.subscribedViews;\n if (arr === undefined) {\n arr = tree.subscribedViews = [];\n }\n while (arr.length <= slot) arr.push(0);\n arr[slot] |= this._bit;\n }\n\n /** Clear the subscription bit on `tree`. */\n private _clearSubscribed(tree: ChangeTree): void {\n const arr = tree.subscribedViews;\n if (arr === undefined) return;\n const slot = this._slot;\n if (slot < arr.length) arr[slot] &= ~this._bit;\n }\n\n /** True iff this view has previously marked `tree` as invisible. */\n public isInvisible(tree: ChangeTree): boolean {\n const arr = tree.invisibleViews;\n const slot = this._slot;\n return arr !== undefined && slot < arr.length && (arr[slot] & this._bit) !== 0;\n }\n\n /** Mark `tree` as invisible to this view (used by encode loop). */\n public markInvisible(tree: ChangeTree): void {\n const slot = this._slot;\n let arr = tree.invisibleViews;\n if (arr === undefined) {\n arr = tree.invisibleViews = [];\n }\n while (arr.length <= slot) arr.push(0);\n arr[slot] |= this._bit;\n }\n\n /** Clear invisible bit. */\n public unmarkInvisible(tree: ChangeTree): void {\n const arr = tree.invisibleViews;\n if (arr === undefined) return;\n const slot = this._slot;\n if (slot < arr.length) arr[slot] &= ~this._bit;\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Per-tag, per-view bitmap. Replaces the legacy\n // `tags: WeakMap<ChangeTree, Set<number>>` storage. Hot read site is\n // `Schema.ts` filter check — `hasTagOnTree` is O(1) bitwise.\n // ──────────────────────────────────────────────────────────────────\n\n /** True iff this view has `tag` associated with `tree`. */\n public hasTagOnTree(tree: ChangeTree, tag: number): boolean {\n const map = tree.tagViews;\n if (map === undefined) return false;\n const arr = map.get(tag);\n const slot = this._slot;\n return arr !== undefined && slot < arr.length && (arr[slot] & this._bit) !== 0;\n }\n\n /** Mark `tree` as carrying `tag` for this view. */\n public addTag(tree: ChangeTree, tag: number): void {\n let map = tree.tagViews;\n if (map === undefined) {\n map = tree.tagViews = new Map();\n }\n let arr = map.get(tag);\n if (arr === undefined) {\n arr = [];\n map.set(tag, arr);\n }\n const slot = this._slot;\n while (arr.length <= slot) arr.push(0);\n arr[slot] |= this._bit;\n }\n\n /** Clear this view's `tag` bit on `tree`. */\n public removeTag(tree: ChangeTree, tag: number): void {\n const map = tree.tagViews;\n if (map === undefined) return;\n const arr = map.get(tag);\n if (arr === undefined) return;\n const slot = this._slot;\n if (slot < arr.length) arr[slot] &= ~this._bit;\n }\n\n /** Clear ALL tag bits this view holds on `tree` (used when the per-tag isn't known). */\n public removeAllTagsOnTree(tree: ChangeTree): void {\n const map = tree.tagViews;\n if (map === undefined) return;\n const slot = this._slot;\n const clearMask = ~this._bit;\n map.forEach((arr) => {\n if (slot < arr.length) arr[slot] &= clearMask;\n });\n }\n\n // TODO: allow to set multiple tags at once\n add(obj: Ref, tag: number = DEFAULT_VIEW_TAG, checkIncludeParent: boolean = true) {\n return this._add(obj, tag, checkIncludeParent, /* _skipStreamRouting */ false);\n }\n\n /**\n * Internal: force-ship an object through `view.changes` without\n * applying stream-element routing. Called by `Encoder._emitStreamPriority`\n * when it's draining `_pendingByView` — the element is already out of\n * pending at that point, so re-routing back into pending would be a\n * loop. User code should always call `add()`.\n */\n _addImmediate(obj: Ref, tag: number = DEFAULT_VIEW_TAG): void {\n this._add(obj, tag, /* checkIncludeParent */ true, /* _skipStreamRouting */ true);\n }\n\n private _add(obj: Ref, tag: number, checkIncludeParent: boolean, _skipStreamRouting: boolean) {\n const changeTree: ChangeTree = obj?.[$changes];\n const parentChangeTree = changeTree.parent;\n\n if (!changeTree) {\n console.warn(\"StateView#add(), invalid object:\", obj);\n return false;\n\n } else if (\n !parentChangeTree &&\n obj[$refId] !== 0 // allow root object\n ) {\n /**\n * Detached adds are refused: addParentOf() walks the parent\n * chain to propagate visibility upward, which requires a real\n * parent reference. A detached instance has neither a parent\n * ChangeTree nor a parentIndex, so we can't decide whether an\n * ancestor carries a @view tag that should bring the subtree\n * along. Users must assign the ref into the state tree before\n * calling view.add().\n */\n throw new Error(\n `Cannot add a detached instance to the StateView. Make sure to assign the \"${changeTree.ref.constructor.name}\" instance to the state before calling view.add()`\n );\n }\n\n // Bind to Root + acquire view ID on first add(). Until then, we have\n // no per-tree bit position to write into.\n if (this._root === undefined && changeTree.root !== undefined) {\n this._bindRoot(changeTree.root);\n }\n\n // Streamable-element routing: when `obj` is a child of a streamable\n // collection (StreamSchema element, or an entry in a .stream()\n // MapSchema), subscribe this element to the stream's per-view\n // pending. The element is NOT marked visible here — visibility is\n // flipped on by the encoder's priority pass (`_addImmediate`) when\n // it actually ships the element. This is load-bearing: if the\n // element were visible before the priority pass, `encodeAllView`\n // would full-sync-emit it on bootstrap and `encodeView`'s normal\n // pass would emit its dirty state — both bypass `maxPerTick`.\n //\n // StateView mode is imperative by design — users call\n // `view.add(entity)` per-entity as the game loop's AOI / interest\n // logic discovers visibility. This matches the rationale that led\n // to StateView in the first place: per-client visibility as a\n // game-loop-cadence operation, not an encode-time predicate.\n const parentStreamTree = parentChangeTree?.[$changes];\n if (!_skipStreamRouting && parentStreamTree?.isStreamCollection) {\n streamEnqueueForView(\n parentChangeTree as unknown as Streamable,\n this.id,\n changeTree.parentIndex!,\n );\n return true;\n }\n\n // Collection types (ArraySchema / MapSchema / etc.) have no\n // `Symbol.metadata` — `metadata` is undefined here and consumers\n // below use `metadata?.[...]` null-safe access. Only Schema\n // subclasses yield a real Metadata object.\n const metadata: Metadata = (obj.constructor as typeof Schema)[Symbol.metadata];\n\n this.markVisible(changeTree);\n\n // add to iterable list (only the explicitly added items)\n if (this.iterable && checkIncludeParent) {\n this.items.push(obj);\n }\n\n // add parent ChangeTree's\n // - if it was invisible to this view\n // - if it were previously filtered out\n if (checkIncludeParent && parentChangeTree) {\n this.addParentOf(changeTree, tag);\n }\n\n // Streamable-collection (the stream itself, not an element): mark\n // visible only. No auto-seed of elements — users must explicitly\n // `view.add(entity)` per element (see rationale above).\n if (!_skipStreamRouting && changeTree.isStreamCollection) {\n return true;\n }\n\n // Fast path: fresh (isNew) subtree added with default tag. The\n // shared encode pass walks the whole subtree and emits ADDs for\n // every field, so the view pass only needs visibility bits — no\n // `view.changes` entries are needed for this subtree itself.\n // `addParentOf` above already emitted the parent collection's\n // ADD. Skipping the full `_add` cascade avoids ~N empty Map\n // allocations per bootstrap where N = descendant count.\n //\n // Safe against the insertion-order invariant below because this\n // path performs no writes — there is no order to preserve.\n if (tag === DEFAULT_VIEW_TAG && changeTree.isNew) {\n this._markSubtreeVisible(changeTree, tag);\n return false;\n }\n\n // Insertion order here is load-bearing: the encoder drains\n // `view.changes` in Map iteration order, and the decoder needs the\n // parent's SWITCH_TO_STRUCTURE to register its refId before any\n // entries for nested refs arrive. `forEachChild` below recurses\n // into `this.add(child, ...)`, which inserts child refIds — if we\n // deferred this insert past that point, children would be emitted\n // first and the decoder would see \"refId not found\".\n let changes = this.changes.get(obj[$refId]);\n if (changes === undefined) {\n changes = new Map<number, OPERATION>();\n this.changes.set(obj[$refId], changes);\n }\n\n let isChildAdded = false;\n\n //\n // Add children of this ChangeTree first.\n // If successful, we must link the current ChangeTree to the child.\n //\n // Read per-field tags from the class's precomputed `tags[]` array\n // rather than chasing `metadata[index].tag` — same source, but a\n // direct array index instead of a per-field-object hop.\n const tags = changeTree.encDescriptor.tags;\n changeTree.forEachChild((change, index) => {\n // Do not ADD children that don't have the same tag\n const fieldTag = tags[index];\n if (fieldTag !== undefined && fieldTag !== tag) {\n return;\n }\n\n if (this.add(change.ref, tag, false)) {\n isChildAdded = true;\n }\n });\n\n // set tag\n if (tag !== DEFAULT_VIEW_TAG) {\n this.addTag(changeTree, tag);\n\n // Ref: add tagged properties\n metadata?.[$fieldIndexesByViewTag]?.[tag]?.forEach((index) => {\n if (changeTree.getChange(index) !== OPERATION.DELETE) {\n changes.set(index, OPERATION.ADD);\n }\n });\n\n } else if (!changeTree.isNew || isChildAdded) {\n // new structures will be added as part of .encode() call, no need to force it to .encodeView()\n const isInvisible = this.isInvisible(changeTree);\n\n // Full-sync snapshot: walk the live ref structurally instead of\n // iterating a cumulative recorder bucket. Every populated index\n // is emitted as ADD (matching the op-coercion previously done\n // at encode time). Per-field tags come from the descriptor's\n // precomputed `tags[]` array — direct index vs a metadata[i].tag\n // object hop.\n const tags = changeTree.encDescriptor.tags;\n changeTree.forEachLive((index) => {\n const tagAtIndex = tags[index];\n if (\n isInvisible || // if \"invisible\", include all\n tagAtIndex === undefined || // \"all change\" with no tag\n tagAtIndex === tag // tagged property\n ) {\n changes.set(index, OPERATION.ADD);\n isChildAdded = true;\n }\n });\n }\n\n return isChildAdded;\n }\n\n /**\n * Walk an isNew subtree marking each descendant visible. Counterpart\n * to the `_add()` fast path: skips `view.changes` allocations because\n * the shared encode pass emits the whole fresh subtree structurally\n * — the view pass just needs visibility bits to let those emissions\n * through the per-tree filter.\n *\n * Preserves the `@view()`-tag filter from `_add`'s forEachChild: a\n * Schema descendant behind a non-matching field tag is skipped so\n * tagged fields don't leak into a default-tag view. Collections have\n * no per-field tags (`encDescriptor.tags` is empty), so the filter\n * is a no-op for collection children.\n *\n * If a descendant has `isNew=false` (rare: a detached sub-collection\n * was re-attached to a fresh parent), fall back to the full `_add`\n * path for that branch so its cumulative state is emitted correctly.\n */\n private _markSubtreeVisible(tree: ChangeTree, tag: number): void {\n const tags = tree.encDescriptor.tags;\n tree.forEachChild((child, index) => {\n const fieldTag = tags[index];\n if (fieldTag !== undefined && fieldTag !== tag) return;\n\n if (child.isNew) {\n this.markVisible(child);\n this._markSubtreeVisible(child, tag);\n } else {\n this._add(child.ref, tag, false, false);\n }\n });\n }\n\n protected addParentOf(childChangeTree: ChangeTree, tag: number) {\n const changeTree = childChangeTree.parent[$changes];\n const parentIndex = childChangeTree.parentIndex;\n\n if (!this.isVisible(changeTree)) {\n // view must have all \"changeTree\" parent tree\n this.markVisible(changeTree);\n\n // add parent's parent\n const parentChangeTree: ChangeTree = changeTree.parent?.[$changes];\n if (parentChangeTree && parentChangeTree.hasFilteredFields) {\n this.addParentOf(changeTree, tag);\n }\n }\n\n // add parent's tag properties\n if (changeTree.getChange(parentIndex) !== OPERATION.DELETE) {\n let changes = this.changes.get(changeTree.ref[$refId]);\n if (changes === undefined) {\n changes = new Map<number, OPERATION>();\n this.changes.set(changeTree.ref[$refId], changes);\n }\n\n this.addTag(changeTree, tag);\n\n changes.set(parentIndex, OPERATION.ADD);\n }\n }\n\n remove(obj: Ref, tag?: number): this; // hide _isClear parameter from public API\n remove(obj: Ref, tag?: number, _isClear?: boolean): this;\n remove(obj: Ref, tag: number = DEFAULT_VIEW_TAG, _isClear: boolean = false): this {\n const changeTree: ChangeTree = obj[$changes];\n if (!changeTree) {\n console.warn(\"StateView#remove(), invalid object:\", obj);\n return this;\n }\n\n // ── Streamable-element unsubscribe ─────────────────────────────\n // Symmetric to the `add(streamElement)` routing: pull the element\n // out of the stream's per-view state. If it never made it to the\n // wire (still in pending), silent drop; if already sent, queue\n // DELETE via `view.changes` for the next encodeView drain.\n const parentStreamTree = changeTree.parent?.[$changes];\n if (parentStreamTree?.isStreamCollection) {\n this.unmarkVisible(changeTree);\n if (this.iterable && !_isClear) {\n spliceOne(this.items, this.items.indexOf(obj));\n }\n streamDequeueForView(\n changeTree.parent as unknown as Streamable,\n this.id,\n (changeTree.parent as any)[$refId],\n changeTree.parentIndex!,\n this.changes,\n );\n this._recursiveDeleteVisibleChangeTree(changeTree);\n return this;\n }\n\n // ── Streamable-collection unsubscribe (the stream itself) ─────\n // Flush DELETE for every sent position and drop pending. After\n // this, the stream is marked invisible to this view — any future\n // `stream.add()` would still seed broadcast pending (if no views)\n // but would NOT re-seed per-view pending (user must re-subscribe).\n if (changeTree.isStreamCollection) {\n this.unmarkVisible(changeTree);\n if (this.iterable && !_isClear) {\n spliceOne(this.items, this.items.indexOf(obj));\n }\n const streamRef: any = changeTree.ref;\n const st = streamRef._stream;\n if (st !== undefined) {\n st.pendingByView.get(this.id)?.clear();\n const sent = st.sentByView.get(this.id);\n if (sent !== undefined && sent.size > 0) {\n const streamRefId = streamRef[$refId];\n let changes = this.changes.get(streamRefId);\n if (changes === undefined) {\n changes = new Map();\n this.changes.set(streamRefId, changes);\n }\n for (const pos of sent) changes.set(pos, OPERATION.DELETE);\n sent.clear();\n }\n }\n return this;\n }\n\n this.unmarkVisible(changeTree);\n\n // remove from iterable list\n if (\n this.iterable &&\n !_isClear // no need to remove during clear(), as it will be cleared entirely\n ) {\n spliceOne(this.items, this.items.indexOf(obj));\n }\n\n const ref = changeTree.ref;\n const metadata: Metadata = ref.constructor[Symbol.metadata]; // ArraySchema/MapSchema do not have metadata\n\n const refId = ref[$refId];\n\n let changes = this.changes.get(refId);\n if (changes === undefined) {\n changes = new Map<number, OPERATION>();\n this.changes.set(refId, changes);\n }\n\n if (tag === DEFAULT_VIEW_TAG) {\n // parent is collection (Map/Array)\n const parent = changeTree.parent;\n if (parent && !Metadata.isValidInstance(parent) && changeTree.isFiltered) {\n const parentRefId = parent[$refId];\n let changes = this.changes.get(parentRefId);\n if (changes === undefined) {\n changes = new Map<number, OPERATION>();\n this.changes.set(parentRefId, changes);\n\n } else if (changes.get(changeTree.parentIndex) === OPERATION.ADD) {\n //\n // SAME PATCH ADD + REMOVE:\n // The 'changes' of deleted structure should be ignored.\n //\n this.changes.delete(refId);\n }\n\n // DELETE / DELETE BY REF ID\n changes.set(changeTree.parentIndex, OPERATION.DELETE);\n\n // Remove child schema from visible set\n this._recursiveDeleteVisibleChangeTree(changeTree);\n\n } else {\n // delete all \"tagged\" properties.\n const names = changeTree.encDescriptor.names;\n metadata?.[$viewFieldIndexes]?.forEach((index) => {\n changes.set(index, OPERATION.DELETE);\n\n // Remove child structures of @view() fields from visible set.\n // (They were added during view.add() via forEachChild)\n const value = changeTree.ref[names[index] as keyof Ref];\n if (value?.[$changes]) {\n this.unmarkVisible(value[$changes]);\n this._recursiveDeleteVisibleChangeTree(value[$changes]);\n }\n });\n }\n\n } else {\n // delete only tagged properties\n const names = changeTree.encDescriptor.names;\n metadata?.[$fieldIndexesByViewTag][tag].forEach((index) => {\n changes.set(index, OPERATION.DELETE);\n\n // Remove child structures from visible set\n const value = changeTree.ref[names[index] as keyof Ref];\n if (value?.[$changes]) {\n this.unmarkVisible(value[$changes]);\n this._recursiveDeleteVisibleChangeTree(value[$changes]);\n }\n });\n }\n\n // remove tag bit for this view\n if (tag === undefined) {\n this.removeAllTagsOnTree(changeTree);\n } else {\n this.removeTag(changeTree, tag);\n }\n\n return this;\n }\n\n has(obj: Ref) {\n return this.isVisible(obj[$changes]);\n }\n\n hasTag(ob: Ref, tag: number = DEFAULT_VIEW_TAG) {\n return this.hasTagOnTree(ob[$changes], tag);\n }\n\n /**\n * Persistent subscription to a collection's contents. Unlike `add()`,\n * which is a one-shot bootstrap, `subscribe()` enrolls this view in\n * future content changes — every subsequent push / set / add to the\n * collection automatically flows to this view, and every removal\n * queues a DELETE op. Works on every collection type:\n *\n * - `ArraySchema` / `MapSchema` / `SetSchema` / `CollectionSchema`:\n * new children are force-shipped immediately (equivalent to\n * `view.add(child)` per item).\n * - `StreamSchema` (or `.stream()` maps/sets): new positions are\n * enqueued into `_pendingByView` so the priority pass drains them\n * respecting `maxPerTick`.\n *\n * Idempotent on re-subscribe. Subscribing to an already-subscribed\n * collection is a no-op.\n */\n subscribe(collection: Ref): this {\n const tree: ChangeTree = collection?.[$changes];\n if (!tree) {\n console.warn(\"StateView#subscribe(), invalid collection:\", collection);\n return this;\n }\n if (this._root === undefined && tree.root !== undefined) {\n this._bindRoot(tree.root);\n }\n if (this.isSubscribed(tree)) return this;\n\n // Mark collection visible so its own ADD/DELETE ops emit in the\n // view pass. Also flip on the subscription bit.\n this.markVisible(tree);\n this._setSubscribed(tree);\n\n // Bootstrap: walk current children and mark them visible to this\n // view. We DO NOT force-seed via `_addImmediate` / view.changes\n // — the encoder's natural emission paths handle it:\n //\n // - `encodeAllView` (first-tick bootstrap): walks the tree\n // structurally and emits every visible child.\n // - Normal `encodeView` pass: walks `root.changes` and emits\n // dirty children + parent collection's ADD ops.\n //\n // Seeding view.changes ourselves would cause duplicate emission,\n // fine for idempotent collections (Array/Map/Set dedup by index\n // or value), but breaks `CollectionSchema` which appends on\n // every decode-side ADD (no dedup).\n //\n // Streams are the exception — they bypass the recorder flow, so\n // subscription must enqueue positions into `_pendingByView`\n // where the priority pass drains them per `maxPerTick`.\n if (tree.isStreamCollection) {\n const streamable = collection as unknown as Streamable;\n tree.forEachChild((_child, index) => {\n streamEnqueueForView(streamable, this.id, index);\n });\n } else {\n tree.forEachChild((child) => {\n this.markVisible(child);\n });\n }\n\n return this;\n }\n\n /**\n * End a persistent subscription. Queues DELETE for every already-sent\n * child and clears any pending. After this call, future content\n * changes on the collection no longer auto-flow to this view (though\n * direct `view.add(element)` calls still work for per-entity use).\n */\n unsubscribe(collection: Ref): this {\n const tree: ChangeTree = collection?.[$changes];\n if (!tree) {\n console.warn(\"StateView#unsubscribe(), invalid collection:\", collection);\n return this;\n }\n if (!this.isSubscribed(tree)) return this;\n this._clearSubscribed(tree);\n\n const collectionRefId = tree.ref[$refId];\n\n if (tree.isStreamCollection) {\n // Streams: clear pending + queue DELETE for everything in sent.\n const st = (collection as any)._stream;\n if (st !== undefined) {\n st.pendingByView.get(this.id)?.clear();\n const sent: Set<number> | undefined = st.sentByView.get(this.id);\n if (sent !== undefined && sent.size > 0) {\n let changes = this.changes.get(collectionRefId);\n if (changes === undefined) {\n changes = new Map();\n this.changes.set(collectionRefId, changes);\n }\n for (const pos of sent) changes.set(pos, OPERATION.DELETE);\n sent.clear();\n }\n }\n } else {\n // Non-streams: queue DELETE for every current child and\n // unmark their visibility so subsequent mutations stop\n // reaching this view.\n let changes = this.changes.get(collectionRefId);\n tree.forEachChild((childTree, index) => {\n if (changes === undefined) {\n changes = new Map();\n this.changes.set(collectionRefId, changes);\n }\n changes.set(index, OPERATION.DELETE);\n this.unmarkVisible(childTree);\n });\n }\n\n // Unmark the collection itself so future ops don't emit to this\n // view (add() / subscribe() again re-marks it).\n this.unmarkVisible(tree);\n\n return this;\n }\n\n clear() {\n if (!this.iterable) {\n throw new Error(\"StateView#clear() is only available for iterable StateView's. Use StateView(iterable: true) constructor.\");\n }\n\n for (let i = 0, l = this.items.length; i < l; i++) {\n this.remove(this.items[i], DEFAULT_VIEW_TAG, true);\n }\n\n // clear items array\n this.items.length = 0;\n }\n\n isChangeTreeVisible(changeTree: ChangeTree) {\n let isVisible = this.isVisible(changeTree);\n\n // The parent-visibility fallback handles child collections without\n // their own @view tag (see StateView.test.ts \"should not be required\n // to manually call view.add() items to child arrays...\"). The\n // `isVisibilitySharedWithParent` flag — precomputed at attach-time in\n // inheritedFlags.ts — short-circuits for the common case, and\n // `markVisible` memoizes so the branch fires at most once per\n // (tree, view) pair.\n if (!isVisible && changeTree.isVisibilitySharedWithParent){\n if (this.isVisible(changeTree.parent[$changes])) {\n this.markVisible(changeTree);\n isVisible = true;\n }\n }\n\n return isVisible;\n }\n\n protected _recursiveDeleteVisibleChangeTree(changeTree: ChangeTree) {\n changeTree.forEachChild((childChangeTree) => {\n this.unmarkVisible(childChangeTree);\n this._recursiveDeleteVisibleChangeTree(childChangeTree);\n });\n }\n}\n","export { Schema } from \"./Schema.js\";\nexport type { DataChange } from \"./decoder/DecodeOperation.js\";\nexport type { ToJSON } from \"./types/HelperTypes.js\";\n\nimport { MapSchema } from \"./types/custom/MapSchema.js\"\nexport { MapSchema };\n\nimport { ArraySchema } from \"./types/custom/ArraySchema.js\";\nexport { ArraySchema };\n\nimport { CollectionSchema } from \"./types/custom/CollectionSchema.js\";\nexport { CollectionSchema };\n\nimport { SetSchema } from \"./types/custom/SetSchema.js\";\nexport { SetSchema };\n\nimport { StreamSchema } from \"./types/custom/StreamSchema.js\";\nexport { StreamSchema };\n\nimport { registerType, defineCustomTypes } from \"./types/registry.js\";\nexport { registerType, defineCustomTypes };\n\nregisterType(\"map\", { constructor: MapSchema });\nregisterType(\"array\", { constructor: ArraySchema });\nregisterType(\"set\", { constructor: SetSchema });\nregisterType(\"collection\", { constructor: CollectionSchema, });\n// \"stream\" is registered inside StreamSchema.ts (same pattern as others\n// that co-locate registerType with the class for side-effect safety).\n\n// Utils\nexport { dumpChanges } from \"./utils.js\";\n\n// Encoder / Decoder\nexport { $track, $encoder, $decoder, $filter, $getByIndex, $deleteByIndex, $changes, $childType, $refId } from \"./types/symbols.js\";\nexport { encode } from \"./encoding/encode.js\";\nexport { decode, type Iterator } from \"./encoding/decode.js\";\n\n// Reflection\nexport {\n Reflection,\n ReflectionType,\n ReflectionField,\n} from \"./Reflection.js\";\n\n// Annotations, Metadata and TypeContext\nexport { Metadata } from \"./Metadata.js\";\n\n// Schema definition types\nexport {\n type,\n deprecated,\n owned,\n unreliable,\n transient,\n view,\n schema,\n entity,\n type DefinitionType,\n type PrimitiveType,\n type Definition,\n type FieldsAndMethods,\n // Raw schema() return types\n type SchemaWithExtendsConstructor,\n type SchemaWithExtends,\n type SchemaType,\n} from \"./annotations.js\";\n\n// zod-style chainable builders\nexport { t, FieldBuilder, isBuilder, type BuilderDefinition, type ChildType } from \"./types/builder.js\";\n\nexport { TypeContext } from \"./types/TypeContext.js\";\n\n// Helper types for type inference\nexport type { InferValueType, InferSchemaInstanceType, AssignableProps, BuilderInitProps } from \"./types/HelperTypes.js\";\n\nexport { getDecoderStateCallbacks, type CallbackProxy, type SchemaCallback, type CollectionCallback, type SchemaCallbackProxy } from \"./decoder/strategy/getDecoderStateCallbacks.js\";\nexport { Callbacks, StateCallbackStrategy } from \"./decoder/strategy/Callbacks.js\";\nexport { getRawChangesCallback } from \"./decoder/strategy/RawChanges.js\";\n\nexport { Encoder } from \"./encoder/Encoder.js\";\nexport { Root } from \"./encoder/Root.js\";\nexport { encodeSchemaOperation, encodeArray, encodeKeyValueOperation, encodeMapEntry, encodeIndexedEntry } from \"./encoder/EncodeOperation.js\";\nexport { ChangeTree, type Ref, type IRef } from \"./encoder/ChangeTree.js\";\nexport { StateView } from \"./encoder/StateView.js\";\n\nexport { Decoder } from \"./decoder/Decoder.js\";\nexport { decodeSchemaOperation, decodeKeyValueOperation } from \"./decoder/DecodeOperation.js\";\n\nexport { OPERATION } from \"./encoding/spec.js\";"],"names":["OPERATION","_convoBuffer","_int32","_float32","_float64","_int64","int8","uint8","int16","uint16","int32","uint32","int64","uint64","bigint64","biguint64","float32","float64","boolean","string","number","_invokeNoCtx","_setRoot","_setParent","_forEachChild","_forEachChildWithCtx","_forEachLive","_forEachLiveWithCtx","_addParent","_removeParent","_findParent","_hasParent","_getAllParents"],"mappings":";;AAAO,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,OAAO,GAAG,GAAG;AAE1B;;AAEG;AACSA;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,KAAA,CAAA,GAAA,GAAA,CAAA,GAAA,KAAS;AACT,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAoB;AACpB,IAAA,SAAA,CAAA,SAAA,CAAA,cAAA,CAAA,GAAA,GAAA,CAAA,GAAA,cAAkB;AAClB,IAAA,SAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,gBAAoB;AAEpB;;AAEG;AACH,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,GAAA,OAAU;AAEV;;AAEG;AACH,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAY;AACZ,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAS;AACT,IAAA,SAAA,CAAA,SAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAoB;AACpB,IAAA,SAAA,CAAA,SAAA,CAAA,cAAA,CAAA,GAAA,GAAA,CAAA,GAAA,cAAkB;AACtB,CAAC,EApBWA,iBAAS,KAATA,iBAAS,GAAA,EAAA,CAAA,CAAA;;ACKpB,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;;ACO1D,MAAM,EAAE,GAAQ,CAAC,YAAA;IACb,IAAI,OAAO,UAAU,KAAK,WAAW;AAAE,QAAA,OAAO,UAAU;IACxD,IAAI,OAAO,MAAM,KAAK,WAAW;AAAE,QAAA,OAAO,MAAM;IAChD,IAAI,OAAO,IAAI,KAAK,WAAW;AAAE,QAAA,OAAO,IAAI;IAC5C,IAAI,OAAO,MAAM,KAAK,WAAW;AAAE,QAAA,OAAO,MAAM;AAChD,IAAA,OAAO,EAAE;AACb,CAAC,GAAG;AAEJ,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,OAAQ,MAAc,CAAC,GAAG,KAAK,UAAU,EAAE;IAC3E,MAAM,YAAY,GAAG,yBAAyB;IAC9C,MAAM,QAAQ,GACV,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/D,IAAA,MAAc,CAAC,GAAG,GAAG,UAAU,GAAW,EAAA;AACvC,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACzD,IAAA,CAAC;AACA,IAAA,MAAc,CAAC,MAAM,GAAG,UAAU,GAAW,EAAA;QAC1C,KAAK,MAAM,CAAC,IAAI,QAAQ;AAAE,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;AAAE,gBAAA,OAAO,CAAC;AAC3D,QAAA,OAAO,SAAS;AACpB,IAAA,CAAC;AACL;AAEO,MAAM,MAAM,GAAkB,MAAM,CAAC,GAAG,CAAC,QAAQ;AACjD,MAAM,MAAM,GAAG;AACf,MAAM,QAAQ,GAAG;AACjB,MAAM,QAAQ,GAAG;AAEjB,MAAM,OAAO,GAAG;AAEhB,MAAM,WAAW,GAAG;AACpB,MAAM,cAAc,GAAG;AAE9B;;;;AAIG;AACI,MAAM,QAAQ,GAAkB,MAAM,CAAC,GAAG,CAAC,UAAU;AAE5D;;;AAGG;AACI,MAAM,UAAU,GAAkB,MAAM,CAAC,GAAG,CAAC,YAAY;AAEhE;;;;;;AAMG;AACI,MAAM,YAAY,GAAkB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;AAErE;;;AAGG;AACI,MAAM,YAAY,GAAG,cAAc;AAE1C;;AAEG;AACI,MAAM,YAAY,GAAG,cAAc;AAE1C;;;;;;;;AAQG;AACI,MAAM,OAAO,GAAkB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAE3D;;AAEG;AACI,MAAM,QAAQ,GAAG,UAAU;AAElC;;AAEG;AACI,MAAM,YAAY,GAAG,cAAc;AAE1C;;;;AAIG;AACI,MAAM,cAAc,GAAG,kBAAkB;AAEhD;;;;;AAKG;AACI,MAAM,iBAAiB,GAAG,qBAAqB;AAC/C,MAAM,SAAS,GAAG,WAAW;AAC7B,MAAM,UAAU,GAAG,cAAc;AACjC,MAAM,oBAAoB,GAAG,wBAAwB;AACrD,MAAM,iBAAiB,GAAG,qBAAqB;AAC/C,MAAM,sBAAsB,GAAG,0BAA0B;AACzD,MAAM,uBAAuB,GAAG,2BAA2B;AAC3D,MAAM,sBAAsB,GAAG,0BAA0B;AACzD,MAAM,mBAAmB,GAAG,uBAAuB;AACnD,MAAM,mBAAmB,GAAG,uBAAuB;AACnD,MAAM,iBAAiB,GAAG,qBAAqB;;AC9HtD;AA8BA;;;AAGG;AAEH,IAAI,WAAwB;AAC5B;AACA,IAAI;AAAE,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE;AAAE;AAAE,OAAO,CAAC,EAAE,EAAE;AAIrD,MAAMC,cAAY,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;AACvC,MAAMC,QAAM,GAAG,IAAI,UAAU,CAACD,cAAY,CAAC;AAC3C,MAAME,UAAQ,GAAG,IAAI,YAAY,CAACF,cAAY,CAAC;AAC/C,MAAMG,UAAQ,GAAG,IAAI,YAAY,CAACH,cAAY,CAAC;AAC/C,MAAMI,QAAM,GAAG,IAAI,aAAa,CAACJ,cAAY,CAAC;AAE9C,MAAM,mBAAmB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;AAEhF,MAAM,UAAU,GAAqC,CAAC,mBAAmB;AACrE,MAAE,MAAM,CAAC,UAAU;AACnB,MAAE,UAAU,GAAW,EAAE,CAAO,EAAA;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC;AACrB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,GAAG,IAAI,EAAE;gBACV,MAAM,IAAI,CAAC;YACf;AACK,iBAAA,IAAI,CAAC,GAAG,KAAK,EAAE;gBAChB,MAAM,IAAI,CAAC;YACf;iBACK,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;gBAChC,MAAM,IAAI,CAAC;YACf;iBACK;AACD,gBAAA,CAAC,EAAE;gBACH,MAAM,IAAI,CAAC;YACf;QACJ;AACA,QAAA,OAAO,MAAM;AACjB,IAAA,CAAC;AAEL,SAAS,SAAS,CAAC,IAAgB,EAAE,GAAW,EAAE,EAAY,EAAA;IAC5D,IAAI,CAAC,GAAG,CAAC;AACT,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,QAAA,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,IAAI,EAAE;YACZ,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;QACvB;AACK,aAAA,IAAI,CAAC,GAAG,KAAK,EAAE;AAClB,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AACvC,YAAA,EAAE,CAAC,MAAM,IAAI,CAAC;QAChB;aACK,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,GAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,GAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AACrC,YAAA,EAAE,CAAC,MAAM,IAAI,CAAC;QAChB;aACK;AACH,YAAA,CAAC,EAAE;YACH,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,GAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;AAC3C,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,GAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,GAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AACrC,YAAA,EAAE,CAAC,MAAM,IAAI,CAAC;QAChB;IACF;AACF;AAEA,SAASK,MAAI,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;IACxD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AACpC;AAEA,SAASC,OAAK,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;IACzD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AACpC;AAEA,SAASC,OAAK,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;IACzD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AAChC,IAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG;AAC3C;AAEA,SAASC,QAAM,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;IAC1D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AAChC,IAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG;AAC3C;AAEA,SAASC,OAAK,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;IAC3D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG;AAChC,IAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG;AACvC,IAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,IAAI,GAAG;AACxC,IAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,IAAI,GAAG;AAC1C;AAEA,SAASC,QAAM,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;AAC5D,IAAA,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;AACtB,IAAA,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;AACtB,IAAA,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACrB,MAAM,EAAE,GAAG,KAAK;IAChB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG;IAC7B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG;IAC7B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG;IAC7B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG;AAC/B;AAEA,SAASC,OAAK,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;AAC3D,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChD,IAAA,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC;AACvB,IAAAD,QAAM,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AACtB,IAAAA,QAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;AACzB;AAEA,SAASE,QAAM,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;AAC5D,IAAA,MAAM,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;AAC3C,IAAA,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC;AACvB,IAAAF,QAAM,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AACtB,IAAAA,QAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;AACzB;AAEA,SAASG,UAAQ,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;AAC5D,IAAAT,QAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;IACpCK,OAAK,CAAC,KAAK,EAAER,QAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3BQ,OAAK,CAAC,KAAK,EAAER,QAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC/B;AAEA,SAASa,WAAS,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;AAC7D,IAAAV,QAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;IACpCK,OAAK,CAAC,KAAK,EAAER,QAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3BQ,OAAK,CAAC,KAAK,EAAER,QAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC/B;AAEA,SAASc,SAAO,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;AAC7D,IAAAb,UAAQ,CAAC,CAAC,CAAC,GAAG,KAAK;IACnBO,OAAK,CAAC,KAAK,EAAER,QAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7B;AAEA,SAASe,SAAO,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;AAC7D,IAAAb,UAAQ,CAAC,CAAC,CAAC,GAAG,KAAK;AACnB,IAAAM,OAAK,CAAC,KAAK,EAAER,QAAM,CAAmB,CAAC,CAAI,CAAC,EAAE,EAAE,CAAC;AACjD,IAAAQ,OAAK,CAAC,KAAK,EAAER,QAAM,CAAmB,CAAC,CAAI,CAAC,EAAE,EAAE,CAAC;AACnD;AAEA,SAASgB,SAAO,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;AAC7D,IAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACrC;AAEA,SAASC,QAAM,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;;IAE5D,IAAI,CAAC,KAAK,EAAE;QAAE,KAAK,GAAG,EAAE;IAAE;IAE1B,IAAI,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;IACtC,IAAI,IAAI,GAAG,CAAC;;AAGZ,IAAA,IAAI,MAAM,GAAG,IAAI,EAAE;QACjB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI;QAClC,IAAI,GAAG,CAAC;IACV;;AAEK,SAAA,IAAI,MAAM,GAAG,KAAK,EAAE;QACvB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;QACzB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM;QAC3B,IAAI,GAAG,CAAC;IACV;;AAEK,SAAA,IAAI,MAAM,GAAG,OAAO,EAAE;QACzB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,QAAAV,QAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC;IACV;;AAEK,SAAA,IAAI,MAAM,GAAG,WAAW,EAAE;QAC7B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,QAAAE,QAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC;IACV;SAAO;AACL,QAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;IACpC;AAEA,IAAA,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;IAE3B,OAAO,IAAI,GAAG,MAAM;AACtB;AAEA,SAASS,QAAM,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAY,EAAA;AAC5D,IAAA,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;QAChB,OAAOA,QAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;IAE7B;AAAO,SAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC3B,OAAOA,QAAM,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,gBAAgB,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC;IAE5F;SAAO,IAAI,KAAK,MAAM,KAAK,GAAC,CAAC,CAAC,EAAE;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,aAAa,EAAE;AAClC,YAAAjB,UAAQ,CAAC,CAAC,CAAC,GAAG,KAAK;YACnB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAACA,UAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE;;gBAE1D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,gBAAAa,SAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACzB,gBAAA,OAAO,CAAC;YACZ;QACJ;QAEA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,QAAAC,SAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACzB,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,IAAI,KAAK,IAAI,CAAC,EAAE;;AAEd,QAAA,IAAI,KAAK,GAAG,IAAI,EAAE;AAChB,YAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;AACjC,YAAA,OAAO,CAAC;QACV;;AAGA,QAAA,IAAI,KAAK,GAAG,KAAK,EAAE;YACjB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,YAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;AACjC,YAAA,OAAO,CAAC;QACV;;AAGA,QAAA,IAAI,KAAK,GAAG,OAAO,EAAE;YACnB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,YAAAR,QAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACxB,YAAA,OAAO,CAAC;QACV;;AAGA,QAAA,IAAI,KAAK,GAAG,WAAW,EAAE;YACvB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,YAAAE,QAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACxB,YAAA,OAAO,CAAC;QACV;;QAGA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,QAAAE,QAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACxB,QAAA,OAAO,CAAC;IAEV;SAAO;;AAGL,QAAA,IAAI,KAAK,IAAI,GAAK,EAAE;AAClB,YAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC;AAC1C,YAAA,OAAO,CAAC;QACV;;AAGA,QAAA,IAAI,KAAK,IAAI,IAAK,EAAE;YAClB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,YAAAP,MAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACtB,YAAA,OAAO,CAAC;QACV;;AAGA,QAAA,IAAI,KAAK,IAAI,MAAO,EAAE;YACpB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,YAAAE,OAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACvB,YAAA,OAAO,CAAC;QACV;;AAGA,QAAA,IAAI,KAAK,IAAI,WAAW,EAAE;YACxB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,YAAAE,OAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACvB,YAAA,OAAO,CAAC;QACV;;QAGA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACzB,QAAAE,OAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AACvB,QAAA,OAAO,CAAC;IACV;AACF;AAEO,MAAM,MAAM,GAAG;UAClBN,MAAI;WACJC,OAAK;WACLC,OAAK;YACLC,QAAM;WACNC,OAAK;YACLC,QAAM;WACNC,OAAK;YACLC,QAAM;cACNC,UAAQ;eACRC,WAAS;aACTC,SAAO;aACPC,SAAO;aACPC,SAAO;YACPC,QAAM;YACNC,QAAM;IACN,SAAS;IACT,UAAU;;;ACtUd;AAkCA;AAEA,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;AAEvC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC;AAC3C,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC;AAC/C,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC;AAC/C,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC;AAChD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC;AAE9C,SAAS,QAAQ,CAAC,KAAiB,EAAE,EAAY,EAAE,MAAc,EAAA;;IAE/D,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM;IAAE;AAE5E,IAAA,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9D,QAAA,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE;AAC1B,YAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;YACnC;QACF;QACA,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE;AAC1B,YAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAC3B,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC;iBAClB,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CACpB;YACD;QACF;QACA,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE;AAC1B,YAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAC3B,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE;iBACnB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AAC1B,iBAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAC3B;YACD;QACF;QACA,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE;YAC1B,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE;iBACvB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;iBAC1B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AAC1B,iBAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AAC5B,YAAA,IAAI,GAAG,IAAI,QAAQ,EAAE;gBACnB,GAAG,IAAI,QAAQ;gBACf,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,MAAM,CAAC;YAC9E;iBAAO;AACL,gBAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;YACpC;YACA;QACF;;;QAKA,OAAO,CAAC,KAAK,CAAC,kCAAkC,GAAG,IAAI,GAAG,aAAa,GAAG,CAAC,GAAG,2BAA2B,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QACjI;IACF;AACA,IAAA,EAAE,CAAC,MAAM,IAAI,MAAM;AACnB,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,IAAI,CAAE,KAAiB,EAAE,EAAY,EAAA;IAC1C,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE;AACvC;AAEA,SAAS,KAAK,CAAE,KAAiB,EAAE,EAAY,EAAA;AAC3C,IAAA,OAAO,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;AAC7B;AAEA,SAAS,KAAK,CAAE,KAAiB,EAAE,EAAY,EAAA;IAC3C,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE;AACxC;AAEA,SAAS,MAAM,CAAE,KAAiB,EAAE,EAAY,EAAA;AAC5C,IAAA,OAAO,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;AACvD;AAEA,SAAS,KAAK,CAAE,KAAiB,EAAE,EAAY,EAAA;AAC3C,IAAA,OAAO,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;AAC7G;AAEA,SAAS,MAAM,CAAE,KAAiB,EAAE,EAAY,EAAA;IAC5C,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;AACjC;AAEA,SAAS,OAAO,CAAE,KAAiB,EAAE,EAAY,EAAA;IAC7C,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5B,IAAA,OAAO,QAAQ,CAAC,CAAC,CAAC;AACtB;AAEA,SAAS,OAAO,CAAE,KAAiB,EAAE,EAAY,EAAA;AAC7C,IAAA,MAAM,CAAmB,CAAC,CAAI,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAClD,IAAA,MAAM,CAAmB,CAAC,CAAI,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAClD,IAAA,OAAO,QAAQ,CAAC,CAAC,CAAC;AACtB;AAEA,SAAS,KAAK,CAAC,KAAiB,EAAE,EAAY,EAAA;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AAC7B,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/C,OAAO,IAAI,GAAG,GAAG;AACnB;AAEA,SAAS,MAAM,CAAC,KAAiB,EAAE,EAAY,EAAA;IAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AAC7B,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IAChD,OAAO,IAAI,GAAG,GAAG;AACrB;AAEA,SAAS,QAAQ,CAAC,KAAiB,EAAE,EAAY,EAAA;IAC7C,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAC5B,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5B,IAAA,OAAO,MAAM,CAAC,CAAC,CAAC;AACpB;AAEA,SAAS,SAAS,CAAC,KAAiB,EAAE,EAAY,EAAA;IAC9C,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAC5B,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5B,IAAA,OAAO,OAAO,CAAC,CAAC,CAAC;AACrB;AAEA,SAAS,OAAO,CAAE,KAAiB,EAAE,EAAY,EAAA;IAC7C,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC;AAC/B;AAEA,SAAS,MAAM,CAAE,KAAiB,EAAE,EAAY,EAAA;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;AACjC,IAAA,IAAI,MAAc;AAElB,IAAA,IAAI,MAAM,GAAG,IAAI,EAAE;;AAEjB,QAAA,MAAM,GAAG,MAAM,GAAG,IAAI;IAExB;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AAC1B,QAAA,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAE3B;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AAC1B,QAAA,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IAE5B;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AAC1B,QAAA,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IAC5B;IAEA,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC;AACpC;AAEA,SAAS,MAAM,CAAE,KAAiB,EAAE,EAAY,EAAA;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;AAEjC,IAAA,IAAI,MAAM,GAAG,IAAI,EAAE;;AAEjB,QAAA,OAAO,MAAM;IAEf;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAE3B;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAE3B;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAEzB;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IAE1B;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IAE1B;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IAE1B;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;IAExB;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAEzB;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAEzB;AAAO,SAAA,IAAI,MAAM,KAAK,IAAI,EAAE;;AAE1B,QAAA,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAEzB;AAAO,SAAA,IAAI,MAAM,GAAG,IAAI,EAAE;;QAExB,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;IACjC;AACF;AAEM,SAAU,WAAW,CAAC,KAAiB,EAAE,EAAY,EAAA;IACzD,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;IAC/B;;AAEE,IAAA,CAAC,MAAM,GAAG,IAAI,IAAI,MAAM,GAAG,IAAI;;AAE/B,QAAA,MAAM,KAAK,IAAI;;AAEf,QAAA,MAAM,KAAK,IAAI;;QAEf,MAAM,KAAK,IAAI;AAEnB;AAEO,MAAM,MAAM,GAAG;IAClB,QAAQ;IACR,IAAI;IACJ,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,MAAM;IACN,MAAM;IACN,WAAW;;;AC5PR,MAAM,eAAe,GAA4C,EAAE;AAE1E,MAAM,WAAW,GAAG,IAAI,GAAG,EAAe;AAEpC,SAAU,YAAY,CAAC,UAAkB,EAAE,UAA0B,EAAA;AACvE,IAAA,IAAI,UAAU,CAAC,WAAW,EAAE;QACxB,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;AACnD,QAAA,eAAe,CAAC,UAAU,CAAC,GAAG,UAAU;IAC5C;AAEA,IAAA,IAAI,UAAU,CAAC,MAAM,EAAE;AAAG,QAAA,MAAc,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM;IAAE;AAC1E,IAAA,IAAI,UAAU,CAAC,MAAM,EAAE;AAAG,QAAA,MAAc,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM;IAAE;AAC9E;AAMM,SAAU,OAAO,CAAC,UAAkB,EAAA;AACtC,IAAA,OAAO,eAAe,CAAC,UAAU,CAAC;AACtC;AAEM,SAAU,iBAAiB,CAA4C,KAAQ,EAAA;AACjF,IAAA,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE;QAC5B,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/C;IAEA,OAAO,CAAC,CAAU,KAAK,IAAI,CAAC,CAAmB,CAAC;AACpD;;ACtCA;;;;;;;;;;;;;;AAcG;AAIH;;;;AAIG;AACI,MAAM,0BAA0B,GACnC,0DAA0D;IAC1D,oEAAoE;IACpE,iEAAiE;IACjE,6DAA6D;AAC7D,IAAA,4CAA4C;SA6BhC,qBAAqB,GAAA;IACjC,OAAO;QACH,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,gBAAgB,EAAE,IAAI,GAAG,EAAE;QAC3B,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,gBAAgB,EAAE,IAAI,GAAG,EAAE;AAC3B,QAAA,UAAU,EAAE,EAAE;KACjB;AACL;AAEA;AACM,SAAU,iBAAiB,CAAC,CAAa,EAAA;IAC3C,QAAQ,CAAC,CAAC,OAAO,KAAK,qBAAqB,EAAE;AACjD;AAEA;;;;;AAKG;SACa,cAAc,CAAC,CAAa,EAAE,IAAU,EAAE,KAAa,EAAA;;;;;;;;;IASnE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE;QAC7B,iBAAiB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;IACpD;AACJ;AAEA;;;;AAIG;AACG,SAAU,iBAAiB,CAC7B,CAAa,EACb,IAAU,EACV,KAAa,EACb,KAAa,EAAA;;;AAIb,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO;IACpB,IAAI,EAAE,KAAK,SAAS;AAAE,QAAA,OAAO,IAAI;IAEjC,IAAI,SAAS,GAAG,KAAK;;IAGrB,IAAI,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACnC,SAAS,GAAG,IAAI;IACpB;SAAO,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACvC,QAAA,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC;;AAGA,IAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,KAAI;AAC5B,QAAA,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7C,QAAA,IAAI,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;AACrB,YAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACrB,SAAS,GAAG,IAAI;YAChB;QACJ;AACA,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACvC,QAAA,IAAI,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAClB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,YAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,GAAG,IAAI,GAAG,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;YACpC;YACA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAEpB,iBAAS,CAAC,MAAM,CAAC;QACxC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,SAAS;AACpB;AAEA;;;;AAIG;SACa,gBAAgB,CAAC,CAAa,EAAE,IAAU,EAAE,KAAa,EAAA;AACrE,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO;IACpB,IAAI,EAAE,KAAK,SAAS;QAAE;;AAGtB,IAAA,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC3B,IAAA,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,aAAa;AAAE,QAAA,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpE,IAAA,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;;;AAIxB,IAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,KAAI;AAC5B,QAAA,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE;AAEtC,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;YACrC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,YAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,GAAG,IAAI,GAAG,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;YACpC;YACA,KAAK,MAAM,KAAK,IAAI,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,MAAM,CAAC;YAC9D,IAAI,CAAC,KAAK,EAAE;QAChB;AACJ,IAAA,CAAC,CAAC;AACN;AAEA;;;;AAIG;SACa,oBAAoB,CAAC,CAAa,EAAE,MAAc,EAAE,KAAa,EAAA;AAC7E,IAAA,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAC/B,IAAI,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1C,IAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,QAAA,OAAO,GAAG,IAAI,GAAG,EAAE;QACnB,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IACzC;AACA,IAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB;AAEA;;;;;AAKG;AACG,SAAU,oBAAoB,CAChC,CAAa,EACb,MAAc,EACd,KAAa,EACb,KAAa,EACb,WAA6C,EAAA;AAE7C,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO;IACpB,IAAI,EAAE,KAAK,SAAS;AAAE,QAAA,OAAO,KAAK;IAClC,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5C,IAAA,IAAI,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;AACrB,QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACrB,QAAA,OAAO,KAAK;IAChB;IACA,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AACtC,IAAA,IAAI,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClB,IAAI,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,YAAA,OAAO,GAAG,IAAI,GAAG,EAAE;AACnB,YAAA,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;QACnC;QACA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,MAAM,CAAC;AACpC,QAAA,OAAO,IAAI;IACf;AACA,IAAA,OAAO,KAAK;AAChB;AAEA;;;AAGG;AACG,SAAU,cAAc,CAAC,CAAa,EAAE,MAAc,EAAA;AACxD,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO;IACpB,IAAI,EAAE,KAAK,SAAS;QAAE;AACtB,IAAA,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/B,IAAA,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AAChC;;MCnOa,WAAW,CAAA;IACpB,KAAK,GAAqC,EAAE;AAC5C,IAAA,OAAO,GAAG,IAAI,GAAG,EAAyB;IAE1C,UAAU,GAAY,KAAK;IAC3B,cAAc,GAA8C,EAAE;AAC9D;;;;;;;AAOG;IACH,wBAAwB,GAAY,KAAK;AAEzC;;;AAGG;AACH,IAAA,OAAO,cAAc,GAAG,IAAI,GAAG,EAAqC;AACpE,IAAA,OAAO,cAAc,GAAG,IAAI,GAAG,EAA8B;IAE7D,OAAO,QAAQ,CAAC,MAAqB,EAAA;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;YACnB,IAAI,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;YACrD,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,QAAQ,GAAG,IAAI,GAAG,EAAiB;gBACnC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;YACpD;AACA,YAAA,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;QACxB;IACJ;IAEA,OAAO,KAAK,CAAE,SAAwB,EAAA;QAClC,IAAI,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,OAAO,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC;YACpC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;QACtD;AACA,QAAA,OAAO,OAAO;IAClB;AAEA,IAAA,WAAA,CAAY,SAAyB,EAAA;QACjC,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QACjC;IACJ;AAEA,IAAA,GAAG,CAAC,MAAqB,EAAA;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;IACnC;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC7B;IAEA,GAAG,CAAC,MAAqB,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAA;;QAEjD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM;;;;QAK3B,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;AACvC,YAAA,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QAC/B;QAEA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;AAChC,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC;AAEQ,IAAA,aAAa,CAAC,KAAoB,EAAE,UAA0B,EAAE,WAAoB,EAAE,gBAA0B,EAAA;QACpH,IAAI,gBAAgB,EAAE;YAClB,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC;QACjE;;QAGA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAAE;QAAQ;;AAGhC,QAAA,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,KAAI;YACrD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,CAAC;AACxE,QAAA,CAAC,CAAC;;QAGF,IAAI,MAAM,GAAQ,KAAK;QACvB,OACI,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;YACvC,MAAM,KAAK,MAAM;AACjB,YAAA,MAAM,KAAK,QAAQ,CAAC,SAAS;UAC/B;AACE,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC9B;AAEA,QAAA,MAAM,QAAQ,IAAc,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAc,CAAC;;;;QAKtE,IAAI,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE;AAC9D,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAC1B;AAEA,QAAA,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE;YAC/B,MAAM,KAAK,GAAG,UAA2B;YAEzC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI;AACtC,YAAA,MAAM,eAAe,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC;AAE3D,YAAA,IAAI,QAAQ,SAAS,CAAC,KAAK,QAAQ,EAAE;gBACjC;YACJ;AAEA,YAAA,IAAI,QAAQ,SAAS,CAAC,KAAK,UAAU,EAAE;AACnC,gBAAA,IAAI,CAAC,aAAa,CAAC,SAA0B,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,IAAI,eAAe,CAAC;YAErG;iBAAO;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;AAGxC,gBAAA,IAAI,QAAQ,IAAI,CAAC,KAAK,QAAQ,EAAE;oBAC5B;gBACJ;AAEA,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,IAAI,eAAe,CAAC;YAChG;QACJ;IACJ;AAEA;;;AAGG;AACK,IAAA,wBAAwB,CAAC,MAAqB,EAAE,UAA0B,EAAE,WAAoB,EAAA;AACpG,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI;AAE5D,QAAA,IAAI,GAAG,GAAG,CAAA,EAAG,MAAM,EAAE;QACrB,IAAI,UAAU,EAAE;YAAE,GAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA,CAAE;QAAE;AAE7D,QAAA,GAAG,IAAI,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;IACxC;IAEA,KAAK,GAAA;QACD,IAAI,cAAc,GAAG,EAAE;AAEvB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE;AACnC,YAAA,MAAM,IAAI,GAAa,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACjD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;YAE7B,cAAc,IAAI,QAAQ;AAC1B,YAAA,cAAc,IAAI,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAa,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AACjD,gBAAA,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI;AACpB,gBAAA,IAAI,CAAC,KAAK,CAAC,EAAE;oBAAE,GAAG,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAA,CAAA,CAAG;gBAAE;gBACxD,OAAO,CAAA,EAAG,GAAG,CAAA,CAAE;AACnB,YAAA,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACrB;AAEA,QAAA,OAAO,CAAA,gBAAA,CAAkB;AACrB,YAAA,CAAA,gBAAA,EAAmB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA,EAAA,CAAI;YACxC,CAAA,cAAA,EAAiB,IAAI,CAAC,UAAU,CAAA,EAAA,CAAI;YACpC,CAAA,iBAAA,EAAoB,cAAc,EAAE;IAC5C;;;AC9IJ;;;;;;AAMG;AACG,SAAU,gBAAgB,CAAC,IAAS,EAAA;AACtC,IAAA,MAAM,gBAAgB,GAAG,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,OAAO;QACH,gBAAgB;AAChB,QAAA,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;KAC9D;AACL;AAEM,SAAU,iBAAiB,CAAC,IAAS,EAAA;AACvC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;IAEhD;SAAO,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,WAAW,EAAE;AAC9C,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC;IAEvB;AAAO,SAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;;QAEvB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ;AAC/D,cAAE;cACA,QAAQ;IAElB;SAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;;QAElD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;QACpF,IAAI,cAAc,EAAE;YAChB,IAAI,CAAC,cAAc,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC9D,YAAA,OAAO,IAAI;QACf;IACJ;AACA,IAAA,OAAO,IAAI;AACf;AAEA,SAAS,QAAQ,CAAC,KAAU,EAAA;AACxB,IAAA,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AACvD,QAAA,OAAO,KAAK;IAChB;IAEA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,IAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAGrD,IAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;AAC9H,QAAA,OAAO,IAAI;IACf;;AAGA,IAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE;AAC5F,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,OAAO,KAAK;AAChB;AAEO,MAAM,QAAQ,GAAG;IAEpB,QAAQ,CAAC,QAAa,EAAE,KAAa,EAAE,IAAY,EAAE,IAAoB,EAAE,UAA+B,EAAA;AACtG,QAAA,IAAI,KAAK,GAAG,EAAE,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAA,mDAAA,CAAqD,CAAC;QACrG;AAEA,QAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAC3B,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;AACrB,QAAA;AACI,YAAA,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;YAC7B,KAAK;YACL,IAAI;AACP,SAAA,CACJ;;AAGD,QAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE;AAC1C,YAAA,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE;AACnC,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,YAAY,EAAE,IAAI;AACrB,SAAA,CAAC;QAEF,IAAI,UAAU,EAAE;;;YAGZ,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU;QAC7C;aAAO;;AAEH,YAAA,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG;AAC3B,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,YAAY,EAAE,IAAI;aACrB;QACL;;AAGA,QAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;AACxC,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,YAAY,EAAE;AACjB,SAAA,CAAC;;AAGF,QAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE;AAClC,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,YAAY,EAAE,IAAI;AACrB,SAAA,CAAC;;AAGF,QAAA,IAAI,QAAQ,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;AAC5C,YAAA,IAAI,QAAQ,CAAC,oBAAoB,CAAC,KAAK,SAAS,EAAE;AAC9C,gBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,oBAAoB,EAAE;AAClD,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,YAAY,EAAE,IAAI;AACrB,iBAAA,CAAC;YACN;YACA,QAAQ,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9C;;;;;QAMA,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI;AAC9B,QAAA,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAK,CAAS,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;;;;AAIlE,YAAA,IAAK,CAAS,CAAC,KAAK,KAAK,SAAS,EAAE;AAChC,gBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;YAC/C;AACA,YAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;AAChC,gBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,mBAAmB,EAAE;AACjD,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,QAAQ,EAAE,IAAI;AACjB,iBAAA,CAAC;YACN;YACA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAChD,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7C;;;AAGA,YAAA,MAAM,UAAU,GAAI,IAAY,EAAE,QAAQ;AAC1C,YAAA,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;gBAClC,QAAQ,CAAC,iBAAiB,CAAC,QAAe,EAAE,IAAI,EAAE,UAAU,CAAC;YACjE;QACJ;IACJ,CAAC;AAED,IAAA,MAAM,CAAC,QAAkB,EAAE,SAAiB,EAAE,GAAW,EAAA;AACrD,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AACjC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAG7B,QAAA,KAAK,CAAC,GAAG,GAAG,GAAG;AAEf,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;;AAE9B,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE;AAC/C,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE;AACjB,aAAA,CAAC;;AAGF,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,sBAAsB,EAAE;AACpD,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE;AACjB,aAAA,CAAC;QACN;QAEA,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAEvC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,EAAE;YACxC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;QAC9C;QAEA,QAAQ,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACrD,CAAC;IAED,aAAa,CAAC,QAAkB,EAAE,SAAiB,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;QACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI;;;;;;;;;;AAUtC,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CACX,CAAA,iDAAA,EAAoD,SAAS,CAAA,GAAA,CAAK;gBAClE,CAAA,6EAAA,CAA+E;AAC/E,gBAAA,CAAA,4CAAA,CAA8C,CACjD;QACL;AACA,QAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,IAAI;AAEjC,QAAA,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;AACpC,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,uBAAuB,EAAE;AACrD,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACjB,aAAA,CAAC;QACN;QACA,QAAQ,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,QAAkB,EAAE,SAAiB,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AACjC,QAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI;AAEhC,QAAA,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;AACnC,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,sBAAsB,EAAE;AACpD,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACjB,aAAA,CAAC;QACN;QACA,QAAQ,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAChD,CAAC;IAED,SAAS,CAAC,QAAkB,EAAE,SAAiB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AACjC,QAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI;AAE7B,QAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;AAChC,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,mBAAmB,EAAE;AACjD,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACjB,aAAA,CAAC;QACN;QACA,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C,CAAC;IAED,SAAS,CAAC,QAAkB,EAAE,SAAiB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AACjC,QAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI;AAE7B,QAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;AAChC,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,mBAAmB,EAAE;AACjD,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACjB,aAAA,CAAC;QACN;QACA,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C,CAAC;AAED;;;;;;;AAOG;AACH,IAAA,iBAAiB,CACb,QAAkB,EAClB,SAAiB,EACjB,EAAuC,EAAA;AAEvC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AAC9B,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE;AAC/C,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACjB,aAAA,CAAC;QACN;QACA,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;IAC3C,CAAC;IAED,iBAAiB,CAAC,QAA8B,EAAE,KAAa,EAAA;QAC3D,OAAO,QAAQ,GAAG,iBAAiB,CAAC,GAAG,KAAK,CAAC;IACjD,CAAC;IAED,SAAS,CAA4D,MAAS,EAAE,MAA6D,EAAA;;AAEzI,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW;AAChD,QAAA,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;QAEjC,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC;QACtD,MAAM,cAAc,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;QAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;;AAGjD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;YAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAAE;AAClE,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;YAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAAE;AACxE,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;YAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAAE;AACxE,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE;YAAE,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM;QAAE;;;;AAK7F,QAAA,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;gBAC7B,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;eAC9C,EAAE,CAAC;AAEV,QAAA,UAAU,EAAE;;AAGZ,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACtB,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE;AACvC,gBAAA,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE;AACxE,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACjB,aAAA,CAAC;QACN;AAEA,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YACxB,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE7C,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC;YAE9D,QAAQ,CAAC,QAAQ,CACb,QAAQ,EACR,UAAU,EACV,KAAK,EACL,IAAI,EACJ,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,CACxE;;YAGD,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE;AAC/B,gBAAA,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;YACjF;;AAGA,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC1B,QAAQ,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,GAAI,MAAc,CAAC,IAAI,CAAC;YAC3D;AAEA,YAAA,UAAU,EAAE;QAChB;AAEA,QAAA,OAAO,MAAM;IACjB,CAAC;IAED,YAAY,CAAC,QAAa,EAAE,KAAa,EAAA;QACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,IAAI;IAC9C,CAAC;AAED,IAAA,UAAU,CAAC,WAAgB,EAAA;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC;QACtD,MAAM,cAAc,GAAa,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE7D,QAAA,IAAI,QAAQ,GAAa,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;QAG5E,IAAI,WAAW,KAAK,MAAM,IAAI,QAAQ,KAAK,cAAc,EAAE;AACvD,YAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAE9B,IAAI,cAAc,EAAE;;;;AAIhB,gBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC;;AAG/C,gBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;AACxC,oBAAA,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC;AACjC,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,QAAQ,EAAE,IAAI;AACjB,iBAAA,CAAC;;AAGF,gBAAA,IAAI,cAAc,CAAC,iBAAiB,CAAC,KAAK,SAAS,EAAE;AACjD,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE;AAC/C,wBAAA,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAC7C,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AAClB,wBAAA,QAAQ,EAAE,IAAI;AACjB,qBAAA,CAAC;AACF,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,sBAAsB,EAAE;AACpD,wBAAA,KAAK,EAAE,EAAE,GAAG,cAAc,CAAC,sBAAsB,CAAC,EAAE;AACpD,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AAClB,wBAAA,QAAQ,EAAE,IAAI;AACjB,qBAAA,CAAC;gBACN;;AAGA,gBAAA,IAAI,cAAc,CAAC,oBAAoB,CAAC,KAAK,SAAS,EAAE;AACpD,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,oBAAoB,EAAE;AAClD,wBAAA,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAChD,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AAClB,wBAAA,QAAQ,EAAE,IAAI;AACjB,qBAAA,CAAC;gBACN;;AAGA,gBAAA,IAAI,cAAc,CAAC,uBAAuB,CAAC,KAAK,SAAS,EAAE;AACvD,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,uBAAuB,EAAE;AACrD,wBAAA,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAAC;AACnD,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AAClB,wBAAA,QAAQ,EAAE,IAAI;AACjB,qBAAA,CAAC;gBACN;;AAGA,gBAAA,IAAI,cAAc,CAAC,sBAAsB,CAAC,KAAK,SAAS,EAAE;AACtD,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,sBAAsB,EAAE;AACpD,wBAAA,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,sBAAsB,CAAC,CAAC;AAClD,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AAClB,wBAAA,QAAQ,EAAE,IAAI;AACjB,qBAAA,CAAC;gBACN;;AAGA,gBAAA,IAAI,cAAc,CAAC,mBAAmB,CAAC,KAAK,SAAS,EAAE;AACnD,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,mBAAmB,EAAE;AACjD,wBAAA,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAC/C,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AAClB,wBAAA,QAAQ,EAAE,IAAI;AACjB,qBAAA,CAAC;gBACN;;AAGA,gBAAA,IAAI,cAAc,CAAC,mBAAmB,CAAC,KAAK,SAAS,EAAE;AACnD,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,mBAAmB,EAAE;AACjD,wBAAA,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAC/C,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AAClB,wBAAA,QAAQ,EAAE,IAAI;AACjB,qBAAA,CAAC;gBACN;;AAGA,gBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE;AAC1C,oBAAA,KAAK,EAAE,EAAE,GAAG,cAAc,CAAC,YAAY,CAAC,EAAE;AAC1C,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,QAAQ,EAAE,IAAI;AACjB,iBAAA,CAAC;;AAGF,gBAAA,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE;AACzC,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE;AACvC,wBAAA,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;AACrC,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AAClB,wBAAA,QAAQ,EAAE,IAAI;AACjB,qBAAA,CAAC;gBACN;YACJ;QACJ;QAEA,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE;AAChD,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,YAAY,EAAE;AACjB,SAAA,CAAC;AAEF,QAAA,OAAO,QAAQ;IACnB,CAAC;AAED,IAAA,eAAe,CAAC,KAAU,EAAA;QACtB,QACI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClC,YAAA,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAY;IAEvG,CAAC;AAED,IAAA,SAAS,CAAC,KAAU,EAAA;QAChB,MAAM,QAAQ,GAAa,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjD,MAAM,MAAM,GAAQ,EAAE;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/C;AACA,QAAA,OAAO,MAAM;IACjB,CAAC;IAED,iBAAiB,CAAC,QAAkB,EAAE,KAAa,EAAA;QAC/C,OAAO,QAAQ,GAAG,iBAAiB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IACzD,CAAC;IAED,oBAAoB,CAAC,QAAkB,EAAE,KAAa,EAAA;QAClD,OAAO,QAAQ,GAAG,uBAAuB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAC/D,CAAC;IAED,mBAAmB,CAAC,QAAkB,EAAE,KAAa,EAAA;QACjD,OAAO,QAAQ,GAAG,sBAAsB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAC9D,CAAC;IAED,gBAAgB,CAAC,QAAkB,EAAE,KAAa,EAAA;QAC9C,OAAO,QAAQ,GAAG,mBAAmB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAC3D,CAAC;IAED,gBAAgB,CAAC,QAAkB,EAAE,KAAa,EAAA;QAC9C,OAAO,QAAQ,GAAG,mBAAmB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAC3D;;;ACleJ;AACA;AACA,MAAMqB,cAAY,GAAG,CACjB,EAA0C,EAC1C,KAAa,EACb,EAAa,KACZ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AAElB;AACA;AACA;AAEA;;;;AAIG;MACU,oBAAoB,CAAA;;IAErB,QAAQ,GAAG,CAAC;IACZ,SAAS,GAAG,CAAC;;AAGJ,IAAA,GAAG;AAEpB,IAAA,WAAA,CAAY,SAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD;IAEA,MAAM,CAAC,KAAa,EAAE,EAAa,EAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B,IAAI,IAAI,KAAK,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;AAC/B,aAAA,IAAI,IAAI,KAAKrB,iBAAS,CAAC,MAAM;YAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAGA,iBAAS,CAAC,cAAc;;;;AAIzE,aAAA,IAAI,IAAI,KAAKA,iBAAS,CAAC,GAAG,IAAI,EAAE,KAAKA,iBAAS,CAAC,cAAc,EAAE;YAChE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAGA,iBAAS,CAAC,cAAc;QAC9C;;QAGA,IAAI,KAAK,GAAG,EAAE;YAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,KAAK,CAAC;;AACxC,YAAA,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC,CAAC;IAC9C;IAEA,YAAY,CAAC,KAAa,EAAE,EAAa,EAAA;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;QACpB,IAAI,KAAK,GAAG,EAAE;YAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,KAAK,CAAC;;AACxC,YAAA,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC,CAAC;IAC9C;IAEA,SAAS,CAAC,KAAa,EAAE,EAAa,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IAC1B;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B,OAAO,EAAE,KAAK,CAAC,GAAG,SAAS,GAAG,EAAE;IACpC;IAEA,cAAc,CAAC,KAAa,EAAE,EAAa,EAAA;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;IACxB;AAEA,IAAA,OAAO,CAAC,EAA0C,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,EAAEqB,cAAY,CAAC;IACzC;IAEA,cAAc,CAAI,GAAM,EAAE,EAAkD,EAAA;AACxE,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ;AACvB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;;AAEpB,QAAA,OAAO,GAAG,KAAK,CAAC,EAAE;AACd,YAAA,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG;YACtB,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACvC,GAAG,IAAI,GAAG;YACV,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC;AACA,QAAA,OAAO,IAAI,KAAK,CAAC,EAAE;AACf,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI;AACxB,YAAA,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAC5C,IAAI,IAAI,GAAG;YACX,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC;IACJ;IAEA,IAAI,GAAA;AACA,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;IACjE;IAEA,GAAG,GAAA;QACC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,MAAM,CAAC;IACjD;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACpB;AACH;AAED;AACA;AACA;AAEA;;;;;;;;;AASG;MACU,wBAAwB,CAAA;AACzB,IAAA,KAAK,GAA2B,IAAI,GAAG,EAAE;IACzC,OAAO,GAA+B,EAAE;IAEhD,MAAM,CAAC,KAAa,EAAE,EAAa,EAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAClC,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5C,aAAA,IAAI,IAAI,KAAKrB,iBAAS,CAAC,MAAM;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,cAAc,CAAC;;;AAG9E,aAAA,IAAI,IAAI,KAAKA,iBAAS,CAAC,GAAG,IAAI,EAAE,KAAKA,iBAAS,CAAC,cAAc,EAAE;YAChE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,cAAc,CAAC;QACnD;;IAEJ;IAEA,YAAY,CAAC,KAAa,EAAE,EAAa,EAAA;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;IAC7B;IAEA,SAAS,CAAC,KAAa,EAAE,EAAa,EAAA;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,EAAa,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5C;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;IAEA,cAAc,CAAC,KAAa,EAAE,EAAa,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;IACxD;AAEA,IAAA,OAAO,CAAC,EAA0C,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,EAAEqB,cAAY,CAAC;IACzC;IAEA,cAAc,CAAI,GAAM,EAAE,EAAkD,EAAA;AACxE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;AACzB,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACjB,YAAA,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;YACtB,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAClC,gBAAA,OAAO,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBACnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;oBACjC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;gBAC5B;AACA,gBAAA,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;AAClB,gBAAA,CAAC,EAAE;YACP;AACA,YAAA,OAAO,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YAC5B;QACJ;aAAO;YACH,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK;AAAE,gBAAA,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;QAC5D;IACJ;IAEA,IAAI,GAAA;QACA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;IAChD;IAEA,GAAG,GAAA;AACC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;IACzD;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;IAC3B;AAEA,IAAA,KAAK,CAAC,UAAkB,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB;QACxC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,EAAE,GAAG,CAAC;AACnE,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;IACpB;AACH;AAED;AACA;AACA;AAEA;AACM,SAAU,UAAU,CAAC,CAAS,EAAA;AAChC,IAAA,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC;AAChC,IAAA,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC;AAC/C,IAAA,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,UAAU,IAAI,UAAU,MAAM,EAAE;AAC/D;;ACnRA;;;;;;;;;;;;;;;;;AAiBG;AAqEH,SAAS,oBAAoB,CAAC,QAAa,EAAA;IACvC,IAAI,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,CAAC;AACpC,IAAA,IAAI,EAAE,GAAuB,QAAQ,CAAC,cAAc,CAAC;IACrD,IAAI,EAAE,KAAK,SAAS;AAAE,QAAA,OAAO,EAAE;IAC/B,EAAE,GAAG,CAAC;AACN,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC;AAC1C,IAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;YAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7E;;;AAGA,IAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE;AAC5C,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,YAAY,EAAE,IAAI;AACrB,KAAA,CAAC;AACF,IAAA,OAAO,EAAE;AACb;AAEA;;;AAGG;AACH,SAAS,gBAAgB,CAAC,OAA6B,EAAA;IACnD,IAAI,OAAO,KAAK,SAAS;AAAE,QAAA,OAAO,CAAC;IACnC,IAAI,EAAE,GAAG,CAAC;AACV,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAChD,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,EAAE;AAAE,YAAA,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC;IAClC;AACA,IAAA,OAAO,EAAE;AACb;AAEA;;;;AAIG;AACH,SAAS,gBAAgB,CAAC,QAAa,EAAA;IAMnC,MAAM,KAAK,GAAa,EAAE;IAC1B,MAAM,KAAK,GAAU,EAAE;IACvB,MAAM,IAAI,GAA2B,EAAE;IACvC,MAAM,QAAQ,GAAuE,EAAE;IAEvF,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;AAEnE,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC;IACtC,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;AAEpE,IAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC;AACvC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;AACjC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;AACzB,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;;;AAGrB,YAAA,KAAK,CAAC,CAAC,CAAC,GAAG,SAAU;AACrB,YAAA,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;AACpB,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS;AACnB,YAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS;YACvB;QACJ;AACA,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI;AACrB,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI;AACrB,QAAA,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG;QACnB,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;IAClC;IACA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC3C;AAEM,SAAU,mBAAmB,CAAC,GAAQ,EAAA;AACxC,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW;;;;;AAM5B,IAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE;AAC/D,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC;IAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC;AAC9C,IAAA,MAAM,UAAU,GAAG,CAAC,QAAQ,GAAG,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACnE,IAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC;;;;;;;;;;;AAWzC,IAAA,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;AACpE,IAAA,MAAM,IAAI,GAAqB;AAC3B,QAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;QACvB,MAAM;QACN,QAAQ;QACR,QAAQ;AACR,QAAA,aAAa,EAAE,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC5D,QAAA,YAAY,EAAE,CAAC,QAAQ,GAAG,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AAChE,QAAA,gBAAgB,EAAE,CAAC,QAAQ,GAAG,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACxE,QAAA,YAAY,EAAE,CAAC,QAAQ,GAAG,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;QAChE,UAAU;QACV,aAAa,EAAE,gBAAgB,CAAC,QAAQ,GAAG,mBAAmB,CAAC,CAAC;QAChE,iBAAiB,EAAE,gBAAgB,CAAC,QAAQ,GAAG,uBAAuB,CAAC,CAAC;QACxE,aAAa,EAAE,gBAAgB,CAAC,QAAQ,GAAG,mBAAmB,CAAC,CAAC;QAChE,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC5B;AACD,IAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,iBAAiB,EAAE;AAC3C,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,YAAY,EAAE,IAAI;AACrB,KAAA,CAAC;AACF,IAAA,OAAO,IAAI;AACf;;ACpNA;;;;;AAKG;AAIH;;;;AAIG;SACa,SAAS,CAAC,IAAgB,EAAE,MAAW,EAAE,KAAa,EAAA;;AAElE,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE;;AAE/C,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YACzB;QACJ;;QAGA,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;;AAE7D,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YACzB;QACJ;IACJ;AAEA,IAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;;AAE9B,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC7B;SAAO;;QAEH,IAAI,CAAC,YAAY,GAAG;YAChB,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,IAAI,EAAE,IAAI,CAAC;SACd;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC7B;AACJ;AAEA;;;AAGG;AACG,SAAU,YAAY,CAAC,IAAgB,EAAE,MAAW,EAAA;;;;;AAKtD,IAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE;;AAEjE,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG;YACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;YAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;QAC9C;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;QACjC;AACA,QAAA,OAAO,IAAI;IACf;;AAGA,IAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY;IAC/B,IAAI,QAAQ,GAAG,IAAI;IACnB,OAAO,OAAO,EAAE;AACZ,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE;YAC5C,IAAI,QAAQ,EAAE;AACV,gBAAA,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;YAChC;iBAAO;AACH,gBAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI;YACpC;AACA,YAAA,OAAO,IAAI;QACf;QACA,QAAQ,GAAG,OAAO;AAClB,QAAA,OAAO,GAAG,OAAO,CAAC,IAAI;IAC1B;AACA,IAAA,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS;AACvC;AAEA;;AAEG;AACG,SAAU,UAAU,CACtB,IAAgB,EAChB,SAAkD,EAAA;;AAGlD,IAAA,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;AAChE,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;IAC5D;AAEA,IAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY;IAC/B,OAAO,OAAO,EAAE;QACZ,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;AACvC,YAAA,OAAO,OAAO;QAClB;AACA,QAAA,OAAO,GAAG,OAAO,CAAC,IAAI;IAC1B;AACA,IAAA,OAAO,SAAS;AACpB;AAEM,SAAU,SAAS,CACrB,IAAgB,EAChB,SAAkD,EAAA;IAElD,OAAO,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,SAAS;AACpD;AAEA;;AAEG;AACG,SAAU,aAAa,CAAC,IAAgB,EAAA;IAC1C,MAAM,OAAO,GAAuC,EAAE;AACtD,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;IACnE;AACA,IAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY;IAC/B,OAAO,OAAO,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AACxD,QAAA,OAAO,GAAG,OAAO,CAAC,IAAI;IAC1B;AACA,IAAA,OAAO,OAAO;AAClB;;AClIA;;;;;;;;AAQG;AAIH;AACA;AACA,MAAMA,cAAY,GAAG,CAAC,EAA2B,EAAE,KAAa,KAAK,EAAE,CAAC,KAAK,CAAC;AAExE,SAAU,WAAW,CAAC,IAAgB,EAAE,QAAiC,EAAA;AAC3E,IAAA,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAEA,cAAY,CAAC;AACpD;SAEgB,kBAAkB,CAC9B,IAAgB,EAChB,GAAM,EACN,EAAmC,EAAA;;;;AAKnC,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAgB;AAEjC,IAAA,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;;QAE/B,IAAI,IAAI,CAAC,WAAW;YAAE;;QAGtB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;AAE1B,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAc;AAChC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9C,gBAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;AAAE,oBAAA,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1C;QACJ;AAAO,aAAA,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE;;AAElC,YAAA,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAA8B,EAAE;AACnE,gBAAA,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,oBAAA,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC;YAC3C;QACJ;AAAO,aAAA,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;;YAEjC,KAAK,MAAM,KAAK,IAAK,GAAG,CAAC,MAA2B,CAAC,IAAI,EAAE,EAAE;AACzD,gBAAA,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC;YAClB;QACJ;IACJ;SAAO;;;;;;;;AAQH,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAW;AACxD,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,sBAAsB,CAAC;AACzD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK;AACtC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;YACrB,IAAI,IAAI,KAAK,SAAS;gBAAE;AACxB,YAAA,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE;AACtD,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;AAAE,gBAAA,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACzD;IACJ;AACJ;;ACzEA;;;;AAIG;AAqBH;;;;AAIG;AACG,SAAU,eAAe,CAC3B,IAAgB,EAChB,MAAW,EACX,WAAmB,EACnB,gBAAyB,EAAA;AAEzB,IAAA,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC;;;IAI9C,IAAI,IAAI,CAAC,QAAQ;QAAE;;;;AAKnB,IAAA,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AACZ,QAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;IACtC;AACA,IAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,EAAE;AAChC,QAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;IACtC;;;;;;;AAOA,IAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAAE;;;;AAI9C,QAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;;IAE1C;AACJ;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;SACa,mBAAmB,CAAC,IAAgB,EAAE,MAAW,EAAE,WAAmB,EAAA;IAClF,IAAI,CAAC,MAAM,EAAE;QAAE;IAAQ;;;;AAKvB,IAAA,IAAI,gBAAgB,GAAe,MAAM,CAAC,QAAQ,CAAC;IACnD,MAAM,kBAAkB,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC;IAC5D,IAAI,kBAAkB,EAAE;AACpB,QAAA,MAAM,GAAG,gBAAgB,CAAC,MAAM;AAChC,QAAA,WAAW,GAAG,gBAAgB,CAAC,WAAW;IAC9C;IAEA,MAAM,cAAc,GAAS,MAAc,EAAE,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;;;;;;;IAQ3E,MAAM,SAAS,GACX,CAAC,cAAc,GAAG,sBAAsB,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,YAAY,GAAG,CAAC;AACjF,WAAC,cAAc,GAAG,mBAAmB,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;IACpF,MAAM,aAAa,GAAG,CAAC,gBAAgB,CAAC,KAAK,GAAG,iBAAiB,IAAI,SAAS;AAC9E,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK;AAC9B,IAAA,IAAI,CAAC,KAAK,GAAG,WAAW,GAAG,aAAa;AACxC,IAAA,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,WAAW;;;;;;AAO/C,IAAA,IAAI,UAAU,GAAG,SAAS,EAAE;QACxB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE;IACpC;;;;;;;;;;;;;;;;;;;;AAqBA,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK;IAC9B,IAAI,CAAC,KAAK,EAAE,UAAU;QAAE;AAExB,IAAA,MAAM,eAAe,GAAG,cAAc,GAAG,iBAAiB,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK;;;;;AAK3F,IAAA,MAAM,cAAc,GAAG,cAAc,GAAG,mBAAmB,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK;;;;;IAM5F,IAAI,cAAc,GAAG,KAAK;AAC1B,IAAA,MAAM,iBAAiB,GAAI,MAAc,EAAE,WAAwC;IACnF,IAAI,KAAK,CAAC,wBAAwB,IAAI,iBAAiB,KAAK,SAAS,EAAE;QACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG;AAC7C,cAAE,IAAI,CAAC,GAAG,CAAC;AACX,cAAG,IAAI,CAAC,GAAW,CAAC,UAAU,CAAC;QACnC,MAAM,GAAG,GAAG,CAAA,EAAG,KAAK,CAAC,SAAS,CAAC,OAAwB,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE;QACjH,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,KAAK;IACvD;IAEA,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,IAAI,cAAc,IAAI,eAAe,IAAI,cAAc;AACtG,IAAA,IAAI,CAAC,UAAU,GAAG,WAAW;;;;;;;AAQ7B,IAAA,IAAI,cAAc,IAAI,CAAC,kBAAkB,EAAE;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;;;;QAK9B,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAA4B,CAAC;;;;;AAKlE,QAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,cAAc,EAAE,WAAW,CAAC;YACxE,IAAI,QAAQ,KAAK,SAAS;AAAE,gBAAA,KAAK,CAAC,QAAQ,GAAG,QAAQ;QACzD;;;;QAIA,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,GAAU,CAAC;IAC9C;IAEA,IAAI,WAAW,EAAE;QACb,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG;AAC7C,cAAE,IAAI,CAAC,GAAG,CAAC;AACX,cAAG,IAAI,CAAC,GAAW,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,CAAC,4BAA4B,IAC7B,gBAAgB,CAAC;eACd,OAAO,OAAO,KAAK;AACnB,eAAA,CAAC;AACD,eAAA,CAAC;AACD,eAAA,kBAAkB,CACxB;IACL;AACJ;;AClMA;;;;AAIG;AACG,SAAU,8BAA8B,CAC1C,UAAsB,EACtB,UAAkB,EAClB,QAAa,EACb,IAAU,EAAA;AAEV,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe;IACvC,IAAI,IAAI,KAAK,SAAS;QAAE;AAExB,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB;AAC9C,IAAA,MAAM,UAAU,GAAG,QAAQ,GAAI,UAAU,CAAC,GAA6B,GAAG,SAAS;AACnF,IAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC;;;AAI3D,IAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE;AAClD,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB,QAAA,OAAO,IAAI,KAAK,CAAC,EAAE;AACf,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI;YACxB,IAAI,IAAI,GAAG;AACX,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AAC5C,YAAA,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,EAAE;AAC7B,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;;AAEpB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBAClB;YACJ;YACA,IAAI,QAAQ,EAAE;;;AAGV,gBAAA,oBAAoB,CAAC,UAAW,EAAE,MAAM,EAAE,UAAU,CAAC;YACzD;AAAO,iBAAA,IAAI,SAAS,KAAK,SAAS,EAAE;;;;;;;AAOhC,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;YAC/B;QACJ;IACJ;AACJ;;ACzDM,SAAU,OAAO,CAAC,IAAgB,EAAE,IAAU,EAAA;AAChD,IAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAEhB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtC,IAAA,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAA4B,CAAC;;IAGrE,IAAI,eAAe,EAAE;AACjB,QAAA,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC;IACpD;AACJ;AAEM,SAAU,SAAS,CACrB,IAAgB,EAChB,MAAW,EACX,IAAW,EACX,WAAoB,EAAA;AAEpB,IAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;;IAGnC,IAAI,CAAC,IAAI,EAAE;QAAE;IAAQ;IAErB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGtC,IAAA,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAA4B,CAAC;IAC/D;;;;;;;AAQA,IAAA,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrC,IACI,UAAU,KAAK,SAAS;QACxB,UAAU,CAAC,eAAe,KAAK,SAAS;;;AAGvC,QAAA,MAAc,CAAC,UAAU,CAAC,KAAK,SAAS,EAC3C;QACE,8BAA8B,CAAC,UAAU,EAAE,WAAY,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;IAC5E;;;;IAKA,IAAI,eAAe,EAAE;AACjB,QAAA,IAAI,GAAG,GAAG,iBAAiB,CAAC,eAAe,CAAC;AAC5C,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,GAAG,GAAG,EAAE,SAAS,EAAE,SAAU,EAAE,IAAI,EAAE,SAAU,EAAE;AACjD,YAAA,iBAAiB,CAAC,eAAe,CAAC,GAAG,GAAG;QAC5C;AACA,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG;AACxB,QAAA,GAAG,CAAC,IAAI,GAAG,IAAI;AACf,QAAA,eAAe,EAAE;AACjB,QAAA,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,iBAAiB,CAAC;AACjD,QAAA,eAAe,EAAE;IACrB;AACJ;AAEM,SAAU,YAAY,CACxB,IAAgB,EAChB,QAA+C,EAAA;;;;AAK/C,IAAA,IAAK,IAAI,CAAC,GAAW,CAAC,UAAU,CAAC,EAAE;AAC/B,QAAA,IAAI,QAAS,IAAI,CAAC,GAAW,CAAC,UAAU,CAAC,CAAC,KAAK,QAAQ,EAAE;;AAErD,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAK,IAAI,CAAC,GAAiB,CAAC,OAAO,EAAE,EAAE;gBAC1D,IAAI,CAAC,KAAK,EAAE;oBAAE;AAAU,gBAAA,CAAC;AACzB,gBAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAG,IAAI,CAAC,GAAW,CAAC,kBAAkB,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC;YACjF;QACJ;IAEJ;SAAO;AACH,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK;AACtC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,EAAE;YAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAc,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE;gBAAE;YAAU;YACxB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;QACpC;IACJ;AACJ;AAEA;;;;;;AAMG;SACa,mBAAmB,CAC/B,IAAgB,EAChB,GAAM,EACN,QAAuD,EAAA;;;;;;;AAQvD,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAgB;AACjC,IAAA,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE;QACjB,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE;AACrC,YAAA,MAAM,iBAAiB,GAAG,GAAG,CAAC,kBAAkB;AAChD,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAK,GAAiB,CAAC,OAAO,EAAE,EAAE;gBACrD,IAAI,CAAC,KAAK,EAAE;oBAAE;gBAAU;AACxB,gBAAA,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC;YACnE;QACJ;IACJ;SAAO;AACH,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,MAAM,OAAO,GAAG,QAAQ,GAAG,oBAAoB,CAAC;AAChD,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK;AACtC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAChD,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE;gBAAE;YAAU;YACxB,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;QACzC;IACJ;AACJ;AAEA;AACA;AAEA,SAAS,eAAe,CAAC,IAAU,EAAE,KAAiB,EAAE,MAAW,EAAA;AAC/D,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;AACrB,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IACvB;SAAO;AACH,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB;AACJ;AAGA;AACA;AACA,MAAM,iBAAiB,GAAmB,EAAE;AAC5C,IAAI,eAAe,GAAG,CAAC;AAEvB,SAAS,iBAAiB,CAAC,GAAiB,EAAE,KAAiB,EAAE,KAAU,EAAA;IACvE,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE;AACzB,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACnB,QAAA,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAChC;IACJ;AACA,IAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AACnD;;AC1KA;;;;;;;;;;;;;;;;AAgBG;AA4CH;AACA;AACA,SAAS,gBAAgB,CAAC,GAAW,EAAE,IAAY,EAAE,KAAa,EAAA;IAC9D,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;AAC9B,IAAA,OAAO,CAAC,KAAK,GAAG,CAAC;AACb,UAAE,CAAC,GAAG,KAAK,KAAK,IAAI;UAClB,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI;AACjC;AAEA;AACA;AACA,MAAM,YAAY,GAAG,CACjB,EAA0C,EAC1C,KAAa,EACb,EAAa,KACZ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AAiClB;SACgB,oBAAoB,GAAA;IAChC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;AAC/C;AAQA;AACA;AACO,MAAM,WAAW,GAAG,CAAC,EAAE,oBAAoB,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC;AAC3D,MAAM,aAAa,GAAG,CAAC,EAAE,YAAY,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE;AACjE;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,GAAG,EAAE;AACtC;;;;;;;;;;;;;AAaG;AACI,MAAM,iBAAiB,GAAG,YAAY,GAAG,SAAS;MAE5C,UAAU,CAAA;AACnB,IAAA,GAAG;AAEH;;;;;;;;;;;;AAYG;AACH,IAAA,SAAS;AAET,IAAA,QAAQ;AAER;;;;;AAKG;AACH,IAAA,aAAa;AAEb,IAAA,IAAI;;AAGJ,IAAA,SAAS;AACT,IAAA,YAAY;IACZ,YAAY,CAAe;;IAG3B,KAAK,GAAW,MAAM;AAEtB;;;;;;;;AAQG;IACH,YAAY,GAAW,CAAC;;;IAIxB,SAAS,GAAY,KAAK;;IAG1B,QAAQ,GAAW,CAAC;IACpB,SAAS,GAAW,CAAC;;;IAIrB,MAAM,GAAW,CAAC;IAClB,OAAO,GAAW,CAAC;AACnB,IAAA,GAAG;;;;AAKH,IAAA,SAAS;AACT,IAAA,WAAW;;AAGX,IAAA,kBAAkB;;IAGlB,MAAM,GAAY,KAAK;IAEvB,WAAW,CAAkB;IAC7B,qBAAqB,CAAkB;;;;;AAMvC,IAAA,YAAY;AACZ,IAAA,cAAc;;;AAId,IAAA,QAAQ;AAER;;;;;;;;AAQG;AACH,IAAA,eAAe;;AAGf,IAAA,IAAI,UAAU,GAAA,EAAK,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,WAAW,MAAM,CAAC,CAAC,CAAC;AAC5D,IAAA,IAAI,UAAU,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AACxG,IAAA,IAAI,4BAA4B,GAAA,EAAK,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,oBAAoB,MAAM,CAAC,CAAC,CAAC;AACvF,IAAA,IAAI,4BAA4B,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,oBAAoB,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC5I,IAAA,IAAI,KAAK,GAAA,EAAK,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC;AAClD,IAAA,IAAI,KAAK,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACzF,IAAA,IAAI,YAAY,GAAA,EAAK,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,aAAa,MAAM,CAAC,CAAC,CAAC;AAChE,IAAA,IAAI,YAAY,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,aAAa,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;AAC9G,IAAA,IAAI,WAAW,GAAA,EAAK,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC;AAC9D,IAAA,IAAI,WAAW,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,YAAY,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3G,IAAA,IAAI,QAAQ,GAAA,EAAK,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC;AACxD,IAAA,IAAI,QAAQ,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAClG,IAAA,IAAI,kBAAkB,GAAA,EAAK,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,oBAAoB,MAAM,CAAC,CAAC,CAAC;AAC7E,IAAA,IAAI,kBAAkB,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,oBAAoB,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;;;;;;AAOlI,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU;IAC3D;IAEA,wBAAwB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;YACnD,IAAI,CAAC,kBAAkB,GAAG;AACtB,kBAAE,IAAI,oBAAoB,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;AAC5D,kBAAE,IAAI,wBAAwB,EAAE;QACxC;QACA,OAAO,IAAI,CAAC,kBAAkB;IAClC;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;;;;;;;;;;;;AAY3B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,KAAK;QACxC,IAAI,KAAK,GAAG,EAAE;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;QACpE,OAAO,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC9D;;;AAIA,IAAA,aAAa,CAAC,KAAa,EAAA;QACvB,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK;QACpC,IAAI,KAAK,GAAG,EAAE;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;QAChE,OAAO,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC1D;;;;AAKA,IAAA,aAAa,CAAC,KAAa,EAAA;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK;QACpC,IAAI,KAAK,GAAG,EAAE;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;QAChE,OAAO,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC1D;AAEA,IAAA,WAAA,CAAY,GAAM,EAAA;AACd,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;;;;QAId,IAAI,CAAC,SAAS,IAAK,GAAW,CAAC,YAAY,CAAC,IAAI,GAAG,CAAM;;;;AAKzD,QAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAE7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;;;;AAKzB,QAAA,IAAI,CAAC,GAAG,GAAG,SAAS;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;QAE5B,IAAI,QAAQ,EAAE;AACV,YAAA,MAAM,SAAS,IAAI,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAW;YAC9D,IAAI,SAAS,GAAG,CAAC;gBAAE,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC;QAC/D;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE;QAC9B;IACJ;;;;;;;AASQ,IAAA,KAAK,CAAC,KAAa,EAAA;AACvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;QACpB,IAAI,GAAG,KAAK,SAAS;AAAE,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC;QACxC,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;AAC9B,QAAA,OAAO,CAAC,KAAK,GAAG,CAAC;cACX,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI;cAC1B,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI;IACzC;IAEQ,MAAM,CAAC,KAAa,EAAE,EAAa,EAAA;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACnB,YAAA,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;YACf;QACJ;QACA,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;QAC9B,MAAM,IAAI,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,EAAE,IAAI,KAAK,CAAC;;AAC5D,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,EAAE,IAAI,KAAK,CAAC;IAC7D;AAEQ,IAAA,UAAU,CAAC,KAAa,EAAA;QAC5B,IAAI,KAAK,GAAG,EAAE;YAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,KAAK,CAAC;;AACxC,YAAA,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC,CAAC;IAC9C;IAEA,MAAM,CAAC,KAAa,EAAE,EAAa,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC9B,IAAI,IAAI,KAAK,CAAC;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC,iBAAA,IAAI,IAAI,KAAKrB,iBAAS,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAEA,iBAAS,CAAC,cAAc,CAAC;;;;;;AAM3E,iBAAA,IAAI,IAAI,KAAKA,iBAAS,CAAC,GAAG,IAAI,EAAE,KAAKA,iBAAS,CAAC,cAAc,EAAE;gBAChE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAEA,iBAAS,CAAC,cAAc,CAAC;YAChD;;AAEA,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAC1B;aAAO;AACH,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAU;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,OAAkB;YACtB,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,GAAG,EAAE;AAC/B,iBAAA,IAAI,IAAI,KAAKA,iBAAS,CAAC,MAAM;AAAE,gBAAA,OAAO,GAAGA,iBAAS,CAAC,cAAc;iBACjE,IAAI,IAAI,KAAKA,iBAAS,CAAC,GAAG,IAAI,EAAE,KAAKA,iBAAS,CAAC,cAAc;AAAE,gBAAA,OAAO,GAAGA,iBAAS,CAAC,cAAc;;gBACjG,OAAO,GAAG,IAAI;AACnB,YAAA,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;QAC7B;IACJ;IAEA,YAAY,CAAC,KAAa,EAAE,EAAa,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAC1B;aAAO;YACH,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;QAClC;IACJ;IAEA,SAAS,CAAC,KAAa,EAAE,EAAa,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAC1B;aAAO;YACH,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;QAClC;IACJ;AAEA,IAAA,UAAU,CAAC,EAAa,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;QAC7E;AACA,QAAA,CAAC,IAAI,CAAC,WAAW,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9D;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5B,OAAO,EAAE,KAAK,CAAC,GAAG,SAAS,GAAG,EAAE;QACpC;QACA,OAAO,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC;IAEA,cAAc,CAAC,KAAa,EAAE,EAAa,EAAA;;AAEvC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QAC1B;aAAO;AACH,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAU;AAC7B,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,gBAAA,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9C;IACJ;;;;;AAMA,IAAA,OAAO,CAAC,EAA0C,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,YAAY,CAAC;IACzC;IAEA,cAAc,CAAI,GAAM,EAAE,EAAkD,EAAA;AACxE,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS;AACzB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACnB,gBAAA,OAAO,GAAG,KAAK,CAAC,EAAE;AACd,oBAAA,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG;oBACtB,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBACvC,GAAG,IAAI,GAAG;oBACV,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxC;AACA,gBAAA,OAAO,IAAI,KAAK,CAAC,EAAE;AACf,oBAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI;AACxB,oBAAA,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;oBAC5C,IAAI,IAAI,GAAG;oBACX,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxC;YACJ;iBAAO;AACH,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM;AACtB,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO;AACvB,gBAAA,OAAO,GAAG,KAAK,CAAC,EAAE;AACd,oBAAA,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG;oBACtB,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBACvC,GAAG,IAAI,GAAG;AACV,oBAAA,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;gBAC7D;YACJ;YACA;QACJ;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAU;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW;QAC7B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,YAAA,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;YACtB,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE;AAC7B,gBAAA,OAAO,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBACnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;oBACjC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;gBAC5B;AACA,gBAAA,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;AAClB,gBAAA,CAAC,EAAE;YACP;AACA,YAAA,OAAO,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YAC5B;QACJ;aAAO;AACH,YAAA,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK;AAAE,gBAAA,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD;IACJ;IAEA,IAAI,GAAA;QACA,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AACjF,QAAA,OAAO,IAAI,CAAC,SAAU,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC;IACjE;IAEA,GAAG,GAAA;QACC,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,MAAM,CAAC;QACjE,OAAO,IAAI,CAAC,SAAU,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACtG;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;iBACvC;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,CAAC;YAAE;YAC1C;QACJ;AACA,QAAA,IAAI,CAAC,SAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;IACnE;AAEA,IAAA,KAAK,CAAC,UAAkB,EAAA;QACpB,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAClF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAU;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB;AACxC,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,UAAU,EAAE,GAAG,CAAC;AAC5D,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG;IACxB;;IAGA,OAAO,CAAC,IAAU,EAAA,EAAUsB,OAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAClD,IAAA,SAAS,CAAC,MAAW,EAAE,IAAW,EAAE,WAAoB,IAAUC,SAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/G,YAAY,CAAC,EAAyC,EAAA,EAAUC,YAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzF,mBAAmB,CAAI,GAAM,EAAE,EAAiD,EAAA;AAC5E,QAAAC,mBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;IACvC;IACA,WAAW,CAAC,EAA2B,EAAA,EAAUC,WAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzE,kBAAkB,CAAI,GAAM,EAAE,EAAmC,EAAA;AAC7D,QAAAC,kBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;IACtC;AAEA,IAAA,SAAS,CAAC,EAAa,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE;;;;;;;;;;;;AAY9B,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;;IAE1C;AAEA;;;;;;;;;;;;;AAaG;AACK,IAAA,eAAe,CAAC,KAAa,EAAE,EAAa,EAAE,GAAY,EAAA;QAC9D,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE;AAC9C,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,wBAAwB,EAAE;AACzC,YAAA,IAAI,GAAG;AAAE,gBAAA,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;;AAC1B,gBAAA,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;YAClC;QACJ;AACA,QAAA,IAAI,GAAG;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;IACtC;AAEA,IAAA,MAAM,CAAC,KAAa,EAAE,SAAA,GAAuB3B,iBAAS,CAAC,GAAG,EAAA;QACtD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;IACjD;IAEA,gBAAgB,CAAC,KAAa,EAAE,SAAoB,EAAA;QAChD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC;IAChD;;;AAIA,IAAA,kBAAkB,CAAC,UAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AACrB,QAAA,IAAI,CAAC,kBAA4D,EAAE,KAAK,CAAC,UAAU,CAAC;IACzF;AAEA,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAClC;;;;IAMA,KAAK,GAAA,EAAW,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpC,MAAM,GAAA,EAAW,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAEtC,IAAA,SAAS,CAAI,EAAW,EAAA;AACpB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI;YAAE,OAAO,EAAE,EAAE;QAAE;gBACX;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS;QAAE;IACvC;;;AAIA,IAAA,SAAS,CAAC,KAAa,EAAE,SAAA,GAAuBA,iBAAS,CAAC,GAAG,EAAA;AACzD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;QAAE;gBAC7B;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS;QAAE;IACvC;;;;AAKA,IAAA,QAAQ,CAAC,KAAa,EAAE,WAAA,GAAuB,KAAK,EAAA;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC;IAC1D;IAEA,MAAM,CAAC,KAAa,EAAE,SAAqB,EAAA;AACvC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI;AACA,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAA,uCAAA,EAA0C,KAAK,CAAA,CAAA,CAAG,CAAC;YACpH;YAAE,OAAO,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACnB;YACA;QACJ;QAEA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEzE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAChD,QAAA,IAAI,UAAU;AAAE,YAAA,IAAI,CAAC,wBAAwB,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,IAAIA,iBAAS,CAAC,MAAM,CAAC;;YAC7F,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,IAAIA,iBAAS,CAAC,MAAM,CAAC;QAE5D,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;;;AAM1C,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAExF,QAAA,IAAI,UAAU;AAAE,YAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;;AAC7C,YAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;AAEvC,QAAA,OAAO,aAAa;IACxB;;IAGA,SAAS,GAAA;QACL,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,GAAW,CAAC,YAAY,CAAC,IAAI;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACtB;;IAGA,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE;AAChC,QAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;AACrC,QAAA,IAAI,CAAC,GAAW,CAAC,YAAY,CAAC,IAAI;IACvC;IAEA,OAAO,GAAA;AACF,QAAA,IAAI,CAAC,GAAW,CAAC,YAAY,CAAC,IAAI;QACnC,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE;IACpC;;IAGA,UAAU,GAAA;AACN,QAAA,MAAM,YAAY,GAAG,CAAC,KAAa,KAAI;YACnC,IAAI,KAAK,GAAG,CAAC;gBAAE;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;AAAE,gBAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE;AAC9D,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAC1B,QAAA,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE;IAClB;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC;IAClE;;;;;IAOA,IAAI,MAAM,KAAsB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,WAAW,KAAyB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;AAElE,IAAA,SAAS,CAAC,MAAW,EAAE,KAAa,IAAU4B,SAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;;AAG/E,IAAA,YAAY,CAAC,MAAA,GAAc,IAAI,CAAC,MAAM,EAAA,EAAa,OAAOC,YAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvF,IAAA,UAAU,CAAC,SAAkD,EAAA;AACzD,QAAA,OAAOC,UAAW,CAAC,IAAI,EAAE,SAAS,CAAC;IACvC;AAEA,IAAA,SAAS,CAAC,SAAkD,EAAA;AACxD,QAAA,OAAOC,SAAU,CAAC,IAAI,EAAE,SAAS,CAAC;IACtC;IAEA,aAAa,GAAA,EAAyC,OAAOC,aAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtF;AAED;;;;;;;;;;;;;AAaG;MACU,mBAAmB,CAAA;AAC5B,IAAA,GAAG;;;;IAKH,IAAI,GAAc,SAAS;IAC3B,SAAS,GAAc,SAAS;IAChC,MAAM,GAAY,KAAK;IACvB,KAAK,GAAY,KAAK;IACtB,KAAK,GAAW,CAAC;AAEjB,IAAA,WAAA,CAAY,GAAQ,EAAA;AAChB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAClB;;AAGA,IAAA,MAAM,KAAU;AAChB,IAAA,MAAM,KAAU;AAChB,IAAA,gBAAgB,KAAU;AAC1B,IAAA,SAAS,KAAU;AACnB,IAAA,SAAS,KAAU;AACnB,IAAA,SAAS,KAAU;AACnB,IAAA,YAAY,GAAA,EAAc,OAAO,KAAK,CAAC,CAAC;AACxC,IAAA,SAAS,GAAA,EAAa,OAAO,CAAC,CAAC,CAAC;AAChC,IAAA,OAAO,KAAU;AACjB,IAAA,UAAU,KAAU;AACpB,IAAA,KAAK,KAAU;AACf,IAAA,MAAM,KAAU;IAChB,SAAS,CAAI,EAAW,EAAA,EAAO,OAAO,EAAE,EAAE,CAAC,CAAC;AAC5C,IAAA,SAAS,KAAU;;;;;AAMnB,IAAA,YAAY,CAAC,QAAwC,EAAA;AACjD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAU;AAC3B,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE;YACjB,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE;AACrC,gBAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE;AACtC,oBAAA,IAAI,CAAC,KAAK;wBAAE;AACZ,oBAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC;gBACnE;YACJ;YACA;QACJ;AACA,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,WAAkB;QACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,MAAM,eAAe,GAAa,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE;AACtE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,CAAC,KAAK;gBAAE;YACZ,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;QACpC;IACJ;IAEA,mBAAmB,CAAI,GAAM,EAAE,QAAgD,EAAA;AAC3E,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAChE;AAEA,IAAA,WAAW,KAAU;AACrB,IAAA,kBAAkB,KAAU;AAC5B,IAAA,OAAO,KAAU;AACpB;AAED;AACA;AACA;AACM,SAAU,yBAAyB,CAAC,GAAQ,EAAA;AAC9C,IAAA,OAAO,IAAI,mBAAmB,CAAC,GAAG,CAA0B;AAChE;AAEA;;;;;;;;;;;AAWG;SACa,0BAA0B,CAAC,MAAc,EAAE,YAAoB,MAAM,EAAA;AACjF,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;AACpC,QAAA,KAAK,EAAE,yBAAyB,CAAC,SAAgB,CAAC;AAClD,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,QAAQ,EAAE,IAAI;AACjB,KAAA,CAAC;AACN;;ACvzBM,SAAU,WAAW,CACvB,OAAgB,EAChB,KAAiB,EACjB,IAAS,EACT,KAAU,EACV,SAAoB,EACpB,EAAY,EACZ,SAAiE,EAAA;AAEjE,IAAA,IAAI,SAAS,KAAK,SAAS,EAAE;;AAEzB,QAAA,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;IAE/B;AAAO,SAAA,IAAI,QAAQ,IAAI,CAAC,KAAK,QAAQ,EAAE;;QAElC,MAAc,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;IAE7C;SAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;;;;;AAK5C,QAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;;AAGvC,QAAA,IAAI,CAAC,SAAS,GAAGhC,iBAAS,CAAC,GAAG,MAAMA,iBAAS,CAAC,GAAG,EAAE;AAC/C,YAAA,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,IAAqB,EAAE,KAAK,CAAC,WAA4B,EAAE,EAAE,CAAC;QACjG;IAEJ;SAAO;;;;;AAKH,QAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;IAC3C;AACJ;AAEA;;;AAGG;AACI,MAAM,qBAAqB,GAAoB,UAClD,OAAgB,EAChB,KAAiB,EACjB,UAAyB,EACzB,KAAa,EACb,SAAoB,EACpB,EAAY,EACZ,CAAM,EACN,EAAO,EAAA;;AAGP,IAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,IAAI,GAAG;;AAG9C,IAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,MAAM,EAAE;QAChC;IACJ;;;;;AAMA,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa;AACrC,IAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAU;;;AAIjC,IAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE3D,WAAW,CACP,OAAO,EACP,KAAK,EACL,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EACjB,KAAK,EACL,SAAS,EACT,EAAE,EACF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CACvB;AACL;AAEA;;;;;;;AAOG;AACI,MAAM,cAAc,GAAoB,UAC3C,OAAgB,EAChB,KAAiB,EACjB,UAAsB,EACtB,KAAa,EACb,SAAoB,EACpB,EAAY,EAAA;IAEZ,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,GAAG;IACpC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AAE/B,IAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,MAAM;QAAE;AAEpC,IAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG;;;;AAK1B,IAAA,IAAI,CAAC,SAAS,GAAGA,iBAAS,CAAC,GAAG,MAAMA,iBAAS,CAAC,GAAG,EAAE;QAC/C,MAAM,YAAY,GAAI,GAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;IAC1C;IAEA,WAAW,CACP,OAAO,EACP,KAAK,EACJ,GAAW,CAAC,UAAU,CAAC,EACxB,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EACvB,SAAS,EACT,EAAE,CACL;AACL;AAEA;;;;;;AAMG;AACI,MAAM,kBAAkB,GAAoB,UAC/C,OAAgB,EAChB,KAAiB,EACjB,UAAsB,EACtB,KAAa,EACb,SAAoB,EACpB,EAAY,EAAA;IAEZ,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,GAAG;IACpC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AAE/B,IAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,MAAM;QAAE;AAEpC,IAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG;IAC1B,WAAW,CACP,OAAO,EACP,KAAK,EACJ,GAAW,CAAC,UAAU,CAAC,EACxB,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EACvB,SAAS,EACT,EAAE,CACL;AACL;AAEA;;;;;;;;;AASG;AACI,MAAM,uBAAuB,GAAoB,UACpD,OAAgB,EAChB,KAAiB,EACjB,UAAsB,EACtB,KAAa,EACb,SAAoB,EACpB,EAAY,EAAA;AAEZ,IAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAU;IACjC,IAAI,CAAC,SAAS,GAAGA,iBAAS,CAAC,GAAG,MAAMA,iBAAS,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,UAAU,EAAE;AACnF,QAAA,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAgB,CAAC;IAClF;SAAO;AACH,QAAA,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAgB,CAAC;IACtF;AACJ;AAEA;;;AAGG;AACI,MAAM,WAAW,GAAoB,UACxC,OAAgB,EAChB,KAAiB,EACjB,UAAmC,EACnC,KAAa,EACb,SAAoB,EACpB,EAAY,EACZ,WAAoB,EACpB,OAAgB,EAAA;;;;AAKhB,IAAA,MAAM,GAAG,GAAG,UAAU,CAAC,SAAgB;;;AAGvC,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC;AAC5B,IAAA,MAAM,mBAAmB,GAAG,OAAO,IAAI,UAAU,CAAC,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ;AAExF,IAAA,IAAI,UAAkB;IAEtB,IAAI,mBAAmB,EAAE;QACrB,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;;QAGhC,IAAI,CAAC,IAAI,EAAE;YAAE;QAAQ;AAErB,QAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;AAEzB,QAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,MAAM,EAAE;AAChC,YAAA,SAAS,GAAGA,iBAAS,CAAC,eAAe;QAEzC;AAAO,aAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,GAAG,EAAE;AACpC,YAAA,SAAS,GAAGA,iBAAS,CAAC,YAAY;QACtC;IAEJ;SAAO;QACH,UAAU,GAAG,KAAK;IACtB;;IAGA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,GAAG;;IAGpC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;;AAGpC,IAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,MAAM,IAAI,SAAS,KAAKA,iBAAS,CAAC,eAAe,EAAE;QAC3E;IACJ;;;IAIA,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC;AAElD,IAAA,WAAW,CACP,OAAO,EACP,KAAK,EACL,IAAI,EACJ,KAAK,EACL,SAAS,EACT,EAAE,CACL;AACL;;ACxPO,MAAM,mBAAmB,GAAG,EAAE;AAiBrC;;;;;;;;;;;;AAYG;AACI,MAAM,cAAc,GAAG;AAC1B,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,MAAM,EAAE,CAAC;CACH;AAYV;;;;;;;;AAQG;SACa,WAAW,CACvB,OAAgB,EAChB,SAAoB,EACpB,GAAM,EACN,KAAa,EACb,aAAkB,EAClB,IAAS,EACT,KAAiB,EACjB,EAAY,EACZ,UAA+B,EAAA;AAE/B,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI;AAE1B,IAAA,IAAI,KAAU;AAEd,IAAA,IAAI,CAAC,SAAS,GAAGA,iBAAS,CAAC,MAAM,MAAMA,iBAAS,CAAC,MAAM,EACvD;;AAEI,QAAA,MAAM,aAAa,GAAG,aAAa,GAAG,MAAM,CAAC;AAC7C,QAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAAE,YAAA,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC;QAAE;;;;AAKnE,QAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,cAAc,EAAE;AACxC,YAAA,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC;QAC9B;QAEA,KAAK,GAAG,SAAS;IACrB;AAEA,IAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,MAAM,EAAE;AAK7B,SAAA,IAAI,QAAQ,IAAI,CAAC,KAAK,QAAQ,EAAE;;;;;;;QAOnC,KAAK,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;IAE5C;AAAO,SAAA,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACtC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAE7B,QAAA,IAAI,CAAC,SAAS,GAAGA,iBAAS,CAAC,GAAG,MAAMA,iBAAS,CAAC,GAAG,EAAE;AAC/C,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC;YAC1D,IAAI,CAAC,KAAK,EAAE;AACR,gBAAA,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC;YACnD;AAEA,YAAA,KAAK,CAAC,MAAM,CACR,KAAK,EACL,KAAK,GAED,KAAK,KAAK,aAAa;iBACtB,SAAS,KAAKA,iBAAS,CAAC,cAAc,IAAI,KAAK,KAAK,aAAa,CAAC;AACtE,cACJ;QACL;IAEJ;SAAO;AACH,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;;;;;QAMtC,MAAM,QAAQ,GAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;cACtC,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;AACvC,cAAG,OAAO,CAAC,WAAmB,CAAC,oBAAoB,EAAE;AAEzD,QAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAC5B,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,aAAa,EAAE;AACf,YAAA,IAAI,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC;YAEzC,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,KAAK,aAAa,EAAE;;;;AAIxD,gBAAA,MAAM,OAAO,GAAkC,aAAqB,CAAC,OAAO,EAAE;AAC9E,gBAAA,IAAI,IAAgC;AACpC,gBAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;oBAC1C,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK;;AAG/B,oBAAA,IAAI,QAAO,KAAK,CAAC,KAAK,QAAQ,EAAE;AAC5B,wBAAA,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;AAC7B,wBAAA,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC;oBAClC;oBAEA,UAAU,EAAE,IAAI,CAAC;AACb,wBAAA,GAAG,EAAE,aAAa;AAClB,wBAAA,KAAK,EAAE,aAAa;wBACpB,EAAE,EAAEA,iBAAS,CAAC,MAAM;AACpB,wBAAA,KAAK,EAAE,GAAG;AACV,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,aAAa,EAAE,KAAK;AACvB,qBAAA,CAAC;gBACN;YAEJ;QACJ;QAEA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,GACrB,QAAQ,KAAK,aAAa;AAC1B,aAAC,SAAS,KAAKA,iBAAS,CAAC,cAAc,IAAI,QAAQ,KAAK,aAAa,CAAC,EACxE;IACN;AAEA,IAAA,OAAO,KAAK;AAChB;AAEO,MAAM,qBAAqB,GAAoB,UAClD,OAAqB,EACrB,KAAiB,EACjB,EAAY,EACZ,GAAM,EACN,UAA+B,EAAA;IAE/B,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAc,GAAG,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;;IAG9E,MAAM,SAAS,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC;IACxC,MAAM,KAAK,GAAG,UAAU,IAAI,SAAS,IAAI,GAAG,CAAC;;AAG7C,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC7B,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,QAAA,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACtG,QAAA,OAAO,mBAAmB;IAC9B;IAEA,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;IAC7C,MAAM,KAAK,GAAG,WAAW,CACrB,OAAO,EACP,SAAS,EACT,GAAG,EACH,KAAK,EACL,aAAa,EACb,KAAK,CAAC,IAAI,EACV,KAAK,EACL,EAAE,EACF,UAAU,CACb;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;;;;;;;;AAQvC,QAAA,GAAG,CAAC,KAAK,CAAC,IAAe,CAAC,GAAG,KAAK;IACtC;;AAGA,IAAA,IAAI,aAAa,KAAK,KAAK,EAAE;QACzB,UAAU,EAAE,IAAI,CAAC;YACb,GAAG;YACH,KAAK,EAAE,OAAO,CAAC,YAAY;AAC3B,YAAA,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,KAAK;YACL,aAAa;AAChB,SAAA,CAAC;IACN;AACJ;AAEO,MAAM,uBAAuB,GAAoB,UACpD,OAAqB,EACrB,KAAiB,EACjB,EAAY,EACZ,GAAQ,EACR,UAA+B,EAAA;;;;;IAM/B,MAAM,GAAG,GAAS,GAAW,CAAC,YAAY,CAAC,IAAI,GAAG;;IAGlD,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;AAEpC,IAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,KAAK,EAAE;;;;;;AAM/B,QAAA,OAAO,CAAC,eAAe,CAAC,GAAiB,EAAE,UAAU,CAAC;QAEtD,GAAG,CAAC,KAAK,EAAE;QACX;IACJ;IAEA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AACtC,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC;;;AAG5B,IAAA,MAAM,IAAI,GAAoB,GAAG,CAAC,WAA8B,CAAC,eAAe;AAEhF,IAAA,IAAI,YAA6B;AAEjC,IAAA,IAAI,CAAC,SAAS,GAAGA,iBAAS,CAAC,GAAG,MAAMA,iBAAS,CAAC,GAAG,EAAE;AAC/C,QAAA,IAAI,IAAI,KAAK,cAAc,CAAC,GAAG,EAAE;YAC7B,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxC,YAAA,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;QACrC;aAAO;YACH,YAAY,GAAG,KAAK;QACxB;IACJ;SAAO;AACH,QAAA,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtC;IAEA,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;IAC7C,MAAM,KAAK,GAAG,WAAW,CACrB,OAAO,EACP,SAAS,EACT,GAAG,EACH,KAAK,EACL,aAAa,EACb,IAAI,EACJ,KAAK,EACL,EAAE,EACF,UAAU,CACb;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QACvC,QAAQ,IAAI;YACR,KAAK,cAAc,CAAC,GAAG;gBACnB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,YAAsB,EAAE,KAAK,CAAC;gBAC7C;YAEJ,KAAK,cAAc,CAAC,KAAK;gBACrB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;gBACnC;;;;;;;;;YAUJ,KAAK,cAAc,CAAC,GAAG;YACvB,KAAK,cAAc,CAAC,UAAU;YAC9B,KAAK,cAAc,CAAC,MAAM;gBACtB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACxB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;;;;;;AAM5B,oBAAA,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE;AACvD,wBAAA,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC;oBAC1B;gBACJ;gBACA;AAEJ,YAAA;;;;;AAKI,gBAAA,OAAO,CAAC,IAAI,CACR,CAAA,6CAAA,EAAgD,GAAG,CAAC,WAAW,EAAE,IAAI,CAAA,iBAAA,EAAoB,KAAK,CAAA,gBAAA,CAAkB,CACnH;gBACD;;IAEZ;;AAGA,IAAA,IAAI,aAAa,KAAK,KAAK,EAAE;QACzB,UAAU,EAAE,IAAI,CAAC;YACb,GAAG;YACH,KAAK,EAAE,OAAO,CAAC,YAAY;AAC3B,YAAA,EAAE,EAAE,SAAS;YACb,YAAY;YACZ,KAAK;YACL,aAAa;AAChB,SAAA,CAAC;IACN;AACJ;AAEO,MAAM,WAAW,GAAoB,UACxC,OAAqB,EACrB,KAAiB,EACjB,EAAY,EACZ,GAAgB,EAChB,UAA+B,EAAA;;IAG/B,MAAM,GAAG,GAAS,GAAW,CAAC,YAAY,CAAC,IAAI,GAAG;;IAGlD,IAAI,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;AAClC,IAAA,IAAI,KAAa;AAEjB,IAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,KAAK,EAAE;;;;;;AAM/B,QAAA,OAAO,CAAC,eAAe,CAAC,GAAiB,EAAE,UAAU,CAAC;QACtD,GAAG,CAAC,KAAK,EAAE;QACX;IAEJ;AAAO,SAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,OAAO,EAAE;QACxC,GAAG,CAAC,OAAO,EAAE;QACb;IAEJ;AAAO,SAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,eAAe,EAAE;;QAEhD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AACtC,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAClD,QAAA,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAU,KAAK,KAAK,KAAK,aAAa,CAAC;AAC9D,QAAA,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC;QAC1B,UAAU,EAAE,IAAI,CAAC;YACb,GAAG;YACH,KAAK,EAAE,OAAO,CAAC,YAAY;YAC3B,EAAE,EAAEA,iBAAS,CAAC,MAAM;AACpB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,KAAK,EAAE,SAAS;YAChB,aAAa;AAChB,SAAA,CAAC;QAEF;IAEJ;AAAO,SAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,YAAY,EAAE;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;QAGhD,IAAI,WAAW,EAAE;AACb,YAAA,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAU,KAAK,KAAK,KAAK,WAAW,CAAC;QAChE;;QAGA,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS,EAAE;AACrC,YAAA,KAAK,GAAG,GAAG,CAAC,MAAM;QACtB;IAEJ;SAAO;QACH,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IACpC;AAEA,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC;IAE5B,IAAI,YAAY,GAAoB,KAAK;;;;IAKzC,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACtC,MAAM,KAAK,GAAG,WAAW,CACrB,OAAO,EACP,SAAS,EACT,GAAG,EACH,KAAK,EACL,aAAa,EACb,IAAI,EACJ,KAAK,EACL,EAAE,EACF,UAAU,CACb;AAED,IAAA,IACI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QACrC,KAAK,KAAK,aAAa;MACzB;QACE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IACvC;;AAGA,IAAA,IAAI,aAAa,KAAK,KAAK,EAAE;QACzB,UAAU,EAAE,IAAI,CAAC;YACb,GAAG;YACH,KAAK,EAAE,OAAO,CAAC,YAAY;AAC3B,YAAA,EAAE,EAAE,SAAS;YACb,YAAY;YACZ,KAAK;YACL,aAAa;AAChB,SAAA,CAAC;IACN;AACJ,CAAC;;ACxdK,MAAO,iBAAkB,SAAQ,KAAK,CAAA;AAAG;AA8CzC,SAAU,kBAAkB,CAC9B,KAAU,EACV,IAIsB,EACtB,QAAa,EACb,KAAsB,EAAA;AAEtB,IAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;QAC1B,MAAM,IAAI,iBAAiB,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,IAAI,CAAA,qBAAA,EAAwB,KAAK,IAAK,KAAa,CAAC,WAAW,CAAC,IAAI,CAAA,kBAAA,EAAqB,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC;IACzK;AACJ;;ACtDA,MAAM,YAAY,GAAG,CAAC,CAAM,EAAE,CAAM,KAAI;AACpC,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;AACtB,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE;SACf,IAAI,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,CAAC;;AACnB,QAAA,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;AAOG;AACH,MAAM,mBAAmB,GAAsB;AAC3C,IAAA,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,KAAI;AACf,QAAA,IACI,QAAQ,IAAI,CAAC,KAAK,QAAQ;;AAE1B,YAAA,CAAC,KAAK,CAAC,IAAW,CAAC;UACrB;AACE,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC,IAAyB,CAAC;QAC/C;QACA,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;IACjC,CAAC;IAED,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,KAAI;AACxB,QAAA,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAU,CAAC,EAAE;YACjD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE;AAC7C,gBAAA,GAAG,CAAC,SAAS,CAAC,GAAwB,CAAC;YAE3C;iBAAO;AACH,gBAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACpB,oBAAA,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAkB,EAAE,GAAG,EAAE,GAAG,CAAC;oBAExE,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,GAAwB,CAAC;AAEzD,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;wBACpB,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;oBAExC;yBAAO;AACH,wBAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC7B,4BAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;AAC1B,gCAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAEA,iBAAS,CAAC,YAAY,CAAC;4BAEvE;iCAAO;gCACH,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAGA,iBAAS,CAAC,MAAM,MAAMA,iBAAS,CAAC,MAAM,EAAE;AAChF,oCAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAEA,iBAAS,CAAC,eAAe,CAAC;gCAE1E;qCAAO;AACH,oCAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAEA,iBAAS,CAAC,IAAI,CAAC;gCAC/D;4BACJ;wBAEJ;AAAO,6BAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;AACjC,4BAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAEA,iBAAS,CAAC,GAAG,CAAC;wBAC9D;AAEA,wBAAA,QAAQ,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;oBAC9D;AAEA,oBAAA,IAAI,aAAa,KAAK,SAAS,EAAE;;AAE7B,wBAAA,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACjE;gBAEJ;qBAAO;oBACH,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;gBACxC;AAEA,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAwB,CAAC,GAAG,QAAQ;AAC9C,gBAAA,GAAG,CAAC,QAAQ,CAAC,GAAwB,CAAC,GAAG,QAAQ;YACrD;AAEA,YAAA,OAAO,IAAI;QACf;QACA,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC;IAC1C,CAAC;AAED,IAAA,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,KAAI;AAC1B,QAAA,IAAI,QAAQ,IAAI,CAAC,KAAK,QAAQ,EAAE;AAC5B,YAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;QACvB;aAAO;AACH,YAAA,OAAO,GAAG,CAAC,IAAyB,CAAC;QACzC;AACA,QAAA,OAAO,IAAI;IACf,CAAC;AAED,IAAA,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAI;AACd,QAAA,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;YAClD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;QACtC;QACA,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAChC,CAAC;CACJ;MAEY,WAAW,CAAA;IAEpB,CAAC,QAAQ;IACT,CAAC,MAAM;IACP,CAAC,YAAY;IAEH,CAAC,UAAU;IAEX,KAAK,GAAQ,EAAE;IACf,QAAQ,GAAQ,EAAE;IAClB,cAAc,GAAc,EAAE;IAC9B,aAAa,GAAG,KAAK;AAE/B,IAAA,QAAQ,QAAQ,IAAI,WAAW;AAC/B,IAAA,QAAQ,QAAQ,IAAI,WAAW;;AAE/B,IAAA,OAAgB,eAAe,GAAG,cAAc,CAAC,KAAK;AAEtD;;;;;;;;AAQG;IACH,QAAQ,OAAO,CAAC,CAAE,GAAgB,EAAE,KAAa,EAAE,IAAe,EAAA;QAC9D,QACI,CAAC,IAAI;AACL,YAAA,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,QAAQ;AACrC,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC;IAEpE;IAEA,OAAO,EAAE,CAAC,IAAS,EAAA;QACf;;AAEI,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;;aAGlB,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;IAErC;IAEA,OAAO,IAAI,CAAI,QAAoC,EAAA;QAC/C,OAAO,IAAI,WAAW,CAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD;AAEA,IAAA,WAAA,CAAa,GAAG,KAAU,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAgB;;;AAGnC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI;QAEzB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC;AAElD,QAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AAClC,YAAA,KAAK,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC;AAC5B,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,QAAQ,EAAE,IAAI;AACjB,SAAA,CAAC;AAEF,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACvB;AAEA,QAAA,OAAO,KAAK;IAChB;AAEA;;;;;;;;AAQG;AACH,IAAA,OAAO,oBAAoB,GAAA;QACvB,MAAM,IAAI,GAAQ,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;AACtD,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;;;AAIf,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI;QAEzB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC;AAClD,QAAA,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC;AACvC,QAAA,OAAO,KAAK;IAChB;IAEA,IAAI,MAAM,CAAE,SAAiB,EAAA;AACzB,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB,IAAI,CAAC,KAAK,EAAE;QAChB;aAAO,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACnD;aAAO;AACH,YAAA,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC;QACrF;IACJ;AAEA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;IAC5B;;IAGA,aAAa,GAAA,EAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,cAAc,GAAA,EAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAClD,IAAA,SAAS,CAAI,EAAW,EAAA,EAAO,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,gBAAgB,GAAA,EAAc,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IAEhE,IAAI,CAAC,GAAG,MAAW,EAAA;;;;AAIf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AAClC,QAAA,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;AACrD,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;YAEvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;;gBAEvC;YAEJ;iBAAO,IAAI,QAAQ,KAAK,CAAC,KAAK,QAAQ,IAAI,SAAS,EAAE;gBACjD,kBAAkB,CAAC,KAAY,EAAE,SAA0B,EAAE,IAAI,EAAE,CAAC,CAAC;;YAEzE;YAEA,UAAU,CAAC,gBAAgB,CAAC,MAAM,EAAEA,iBAAS,CAAC,GAAG,CAAC;AAElD,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;AAQpB,YAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;QAC7D;AAEA,QAAA,OAAO,MAAM;IACjB;AAEA;;AAEG;IACH,GAAG,GAAA;;AAEC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;AAC1C,QAAA,IAAI,KAAK,GAAW,EAAE;;AAGtB,QAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBAC5B,KAAK,GAAG,CAAC;gBACT;YACJ;QACJ;AAEA,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,YAAA,OAAO,SAAS;QACpB;QAEA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI;AAE5B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;IAC3B;AAEA,IAAA,EAAE,CAAC,KAAa,EAAA;;QAEZ,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,KAAK,IAAI,IAAI,CAAC,MAAM;AACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5B;;IAGU,SAAS,CAAC,KAAa,EAAE,KAAQ,EAAA;QACvC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACvC,YAAA,OAAO,CAAC,KAAK,CAAC,gFAAgF,CAAC;YAC/F;QACJ;;QAGA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;YAC7B;QACJ;QAEA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS;AAC9C,cAAE,QAAO,KAAK,CAAC,KAAK;AAChB,kBAAEA,iBAAS,CAAC,cAAc;AAC1B,kBAAEA,iBAAS,CAAC,OAAO;AACvB,cAAEA,iBAAS,CAAC,GAAG;AAEnB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAA,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;;;;;AAMnC,QAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;IAC5D;;IAGU,SAAS,CAAC,KAAa,EAAE,SAAqB,EAAA;QACpD,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;IAC3C;;AAGU,IAAA,MAAM,CAAC,KAAa,EAAE,KAAQ,EAAE,SAAoB,EAAA;QAC1D,IACI,KAAK,KAAK,CAAC;YACX,SAAS,KAAKA,iBAAS,CAAC,GAAG;YAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,EACjC;;AAEE,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAE7B;AAAO,aAAA,IAAI,SAAS,KAAKA,iBAAS,CAAC,eAAe,EAAE;YAChD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK;QAE7B;aAAO;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK;QAC7B;IACJ;IAEA,KAAK,GAAA;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;;QAE/B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB;QACJ;;AAGA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAGjC,UAAU,CAAC,YAAY,CAAC,CAAC,eAAe,EAAE,CAAC,KAAI;AAC3C,YAAA,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC;AAC5C,QAAA,CAAC,CAAC;QAEF,UAAU,CAAC,OAAO,EAAE;AACpB,QAAA,UAAU,CAAC,SAAS,CAACA,iBAAS,CAAC,KAAK,CAAC;AAErC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IAC5B;AAEA;;;AAGG;;IAEH,MAAM,CAAC,GAAG,KAA6B,EAAA;AACnC,QAAA,OAAO,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1D;AAEA;;;AAGG;AACH,IAAA,IAAI,CAAC,SAAkB,EAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IACrC;AAEA;;AAEG;;IAEH,OAAO,GAAA;AACH,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAACA,iBAAS,CAAC,OAAO,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvB,QAAA,OAAO,IAAI;IACf;AAEA;;AAEG;IACH,KAAK,GAAA;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAAE,YAAA,OAAO,SAAS;QAAE;AAE5C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC;QAC7D,UAAU,CAAC,MAAM,CAAC,KAAK,EAAEA,iBAAS,CAAC,MAAM,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI;AAEjC,QAAA,OAAO,KAAK,CAAC,KAAK,EAAE;IACxB;AAEA;;;;AAIG;IACH,KAAK,CAAC,KAAc,EAAE,GAAY,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,WAAW,EAAK;AACnC,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC5C,QAAA,OAAO,MAAwB;IACnC;AAEA;;;;;;;;AAQG;IACH,IAAI,CAAC,YAAoC,YAAY,EAAA;AACjD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;;QAG9C,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC,EAAEA,iBAAS,CAAC,OAAO,CAAC,CAAC;AAEtE,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAE7B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;AACH,IAAA,MAAM,CACF,KAAa,EACb,WAAoB,EACpB,GAAG,WAAgB,EAAA;AAEnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;AAE1C,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM;AAChC,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM;AACtC,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM;;QAGtC,MAAM,OAAO,GAAa,EAAE;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AAC5B,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACnB;QACJ;AAEA,QAAA,IAAI,WAAW,GAAG,KAAK,EAAE;;AAErB,YAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC3B,gBAAA,WAAW,GAAG,WAAW,GAAG,KAAK;YACrC;;;;AAKA,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AAC9C,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;gBACxB,UAAU,CAAC,MAAM,CAAC,KAAK,EAAEA,iBAAS,CAAC,MAAM,CAAC;AAC1C,gBAAA,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI;YAChC;QAEJ;aAAO;;YAEH,WAAW,GAAG,CAAC;QACnB;;AAGA,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACjB,YAAA,IAAI,WAAW,GAAG,WAAW,EAAE;AAC3B,gBAAA,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC;AAClF,gBAAA,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC;YACjG;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AAClC,gBAAA,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,IAAI,CAAC;gBAEpD,UAAU,CAAC,gBAAgB,CACvB,QAAQ,EACR,CAAC,cAAc,CAAC,QAAQ,CAAC;sBACnBA,iBAAS,CAAC;AACZ,sBAAEA,iBAAS,CAAC,GAAG,CACtB;;AAGD,gBAAA,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC;YACxE;QACJ;AAEA,QAAA,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,UAAU,CAAC;QAE9C,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;IAC3D;AAEA;;;AAGG;IACH,OAAO,CAAC,GAAG,KAAU,EAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;;;;AAKjC,QAAA,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;YACvB,UAAU,CAAC,MAAM,CAAC,KAAK,EAAEA,iBAAS,CAAC,GAAG,CAAC;AAC3C,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAE/B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IACvC;AAEA;;;;AAIG;IACH,OAAO,CAAC,aAAgB,EAAE,SAAkB,EAAA;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC;IACvD;AAEA;;;;AAIG;IACH,WAAW,CAAC,aAAgB,EAAE,SAAA,GAAoB,IAAI,CAAC,MAAM,GAAG,CAAC,EAAA;QAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC;IAC3D;IAYA,KAAK,CAAC,UAA4D,EAAE,OAAa,EAAA;QAC7E,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;IAChD;AAEA;;;;;;;AAOG;IACH,IAAI,CAAC,UAA4D,EAAE,OAAa,EAAA;QAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;IAC/C;AAEA;;;;AAIG;IACH,OAAO,CAAC,UAAyD,EAAE,OAAa,EAAA;QAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC;IAClD;AAEA;;;;AAIG;IACH,GAAG,CAAI,UAAsD,EAAE,OAAa,EAAA;QACxE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC;IAC9C;IAQA,MAAM,CAAc,UAA+D,EAAE,OAAa,EAAA;QAC9F,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;IACjD;AAEA;;;;AAIG;IACH,MAAM,CAAM,UAAsF,EAAE,YAAgB,EAAA;QAChH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC;IACtD;AAEA;;;;AAIG;IACH,WAAW,CAAM,UAAsF,EAAE,YAAgB,EAAA;QACrH,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC;IAC3D;AAEA;;;;;;;;AAQG;IACH,IAAI,CAAC,SAAyD,EAAE,OAAa,EAAA;QACzE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAC9C;AAEA;;;;;;;;AAQG;IACH,SAAS,CAAC,SAAyD,EAAE,OAAa,EAAA;QAC9E,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;IACnD;AAEA;;;;;;;AAOG;AACH,IAAA,IAAI,CAAC,KAAQ,EAAE,KAAc,EAAE,GAAY,EAAA;AACvC,QAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;IACzD;AAEA;;;;;;;;AAQG;AACH,IAAA,UAAU,CAAC,MAAc,EAAE,KAAa,EAAE,GAAY,EAAA;AAClD,QAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;IAC/D;AAEA;;AAEG;IACH,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;IAChC;AAEA;;AAEG;IACH,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;IACtC;;;IAGA,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;IACxC;AAEA,IAAA,YAAY,MAAM,CAAC,OAAO,CAAC,GAAA;AACvB,QAAA,OAAO,WAAW;IACtB;;;;AAKA,IAAA,CAAC,MAAM,CAAC,WAAW;AAEnB;;AAEG;IACH,OAAO,GAAA,EAAiC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAErE;;AAEG;IACH,IAAI,GAAA,EAA4B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAE1D;;AAEG;IACH,MAAM,GAAA,EAAuB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAEzD;;;;AAIG;IACH,QAAQ,CAAC,aAAgB,EAAE,SAAkB,EAAA;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;IACxD;;;;AAMA;;;;;;;;;AASG;;IAEH,OAAO,CAAsB,QAAmF,EAAE,OAAc,EAAA;;AAE5H,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;IAC9D;AAEA;;;;;AAKG;;AAEH,IAAA,IAAI,CAAmC,KAAS,EAAA;AAC5C,QAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;IAC3D;IAEA,QAAQ,GAAA;;AAEJ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;IAC3D;IAEA,aAAa,CAAC,GAAG,IAAW,EAAA;;AAExB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;IAChE;;;;IAKA,IAAI,CAAC,KAAa,EAAE,KAAQ,EAAA;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;QAE/B,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,KAAK,IAAI,IAAI,CAAC,MAAM;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK;AACnB,QAAA,OAAO,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC;IACnC;IACA,UAAU,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE;IACvC;AACA,IAAA,QAAQ,CAAC,SAAkC,EAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7C;;AAIA,IAAA,SAAS,CAAC,KAAc,EAAE,WAAqB,EAAE,GAAG,KAAiB,EAAA;;AAEjE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;IACtD;IAEA,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;AACnB,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACpC,YAAA,OAAO,YAAY,IAAI,CAAC,EAAE;AACtB,gBAAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,CAAC;AAC1D,gBAAA,YAAY,EAAE;gBACd,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACrF;AACJ,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;;;;;;;;;AAcG;AACH,IAAA,IAAI,CAAC,EAAuB,EAAA;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QACzB,EAAE,CAAC,IAAI,CAAC;AACR,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;AACH,IAAA,CAAC,WAAW,CAAC,CAAC,KAAa,EAAE,cAAuB,KAAK,EAAA;QACrD,OAAO,CAAC,WAAW;AACf,cAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AAClB,cAAE,IAAI,CAAC,cAAc,CAAC,KAAK;AACvB,kBAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AAClB,kBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACvD;IAEA,CAAC,cAAc,CAAC,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS;IACjC;AAEU,IAAA,CAAC,YAAY,CAAC,GAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;IAClC;AAEU,IAAA,CAAC,YAAY,CAAC,GAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC;IAChE;IAEA,OAAO,GAAA;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9B;IAEA,MAAM,GAAA;QACF,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAU,KAAI;YACrC,OAAO,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,UAAU;AAC3C,kBAAE,KAAK,CAAC,QAAQ,CAAC;kBACf,KAAK;AACf,QAAA,CAAC,CAAC;IACN;;;;AAKA,IAAA,KAAK,CAAC,UAAoB,EAAA;AACtB,QAAA,IAAI,MAAmB;QAEvB,IAAI,UAAU,EAAE;AACZ,YAAA,MAAM,GAAG,IAAI,WAAW,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAE9B;aAAO;AACH,YAAA,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,KACrC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACX,kBAAG,IAAsB,CAAC,KAAK;AAC/B,kBAAE,IAAI,CACb,CAAC,CAAC;QACP;AAEA,QAAA,OAAO,MAAM;IACjB;;;AAIJ,YAAY,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;;ACx4BnD;;;;;;;;;;;;;;;;;AAiBG;MACU,UAAU,CAAA;;AAEnB,IAAA,UAAU,GAAmB,IAAI,GAAG,EAAE;AAEtC;;;;;AAKG;IACH,UAAU,GAA8B,EAAE;;IAGlC,SAAS,GAAW,CAAC;AAE7B;;;;;;AAMG;AACH,IAAA,SAAS;;;;;AAOT,IAAA,OAAO,CAAC,GAAM,EAAA;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAwB,CAAC;QACrD,OAAO,GAAG,KAAK,SAAS,GAAG,SAAS,GAAG,GAAG;IAC9C;;AAGA,IAAA,MAAM,CAAC,GAAM,EAAA;AACT,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAwB,CAAC,GAAG,KAAK;QACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;AAC/B,QAAA,OAAO,KAAK;IAChB;;IAGA,QAAQ,CAAC,KAAa,EAAE,KAAU,EAAA;AAC9B,QAAA,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;IACpD;;AAGA,IAAA,cAAc,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC;IACjC;;AAGA,IAAA,UAAU,CAAC,KAAa,EAAA;QACpB,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC;IACrC;;;;;IAOA,QAAQ,CAAC,KAAa,EAAE,GAAM,EAAA;QAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;;;AAG/B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAwB,CAAC,GAAG,KAAK;IACrD;;;;;AAOA,IAAA,KAAK,CAAC,KAAa,EAAA;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC;;;;AAMA;;;AAGG;IACH,kBAAkB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE;QAClC,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACnB,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAwB,CAAC;AAChD,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;YACjC;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IAC1B;;IAGA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;IACtB;AACH;;MCxGY,SAAS,CAAA;IAClB,CAAC,QAAQ;IACT,CAAC,MAAM;AAEG,IAAA,SAAS;IACT,CAAC,UAAU;AAEX,IAAA,MAAM,GAAc,IAAI,GAAG,EAAQ;AAE7C;;;;;;AAMG;AACO,IAAA,OAAO,GAAkB,IAAI,UAAU,EAAK;AAEtD;;;;;;AAMG;AACH,IAAA,OAAO;;AAGP,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE;IACzC;IACA,IAAI,UAAU,CAAC,CAAS,EAAA;QACpB,CAAC,IAAI,CAAC,OAAO,KAAK,qBAAqB,EAAE,EAAE,UAAU,GAAG,CAAC;IAC7D;AAEA;;;;;AAKG;AACH,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,QAA2D;IACpF;IACA,IAAI,QAAQ,CAAC,EAAmD,EAAA;QAC5D,CAAC,IAAI,CAAC,OAAO,KAAK,qBAAqB,EAAE,EAAE,QAAQ,GAAG,EAAE;IAC5D;;IAGA,IAAI,QAAQ,GAAA,EAAqB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAEjE;;;AAGG;IACH,IAAI,kBAAkB,GAAA,EAAgC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtF,IAAA,QAAQ,QAAQ,IAAI,cAAc;AAClC,IAAA,QAAQ,QAAQ,IAAI,uBAAuB;;AAE3C,IAAA,OAAgB,eAAe,GAAG,cAAc,CAAC,GAAG;AAEpD;;;;;;;;AAQG;IACH,QAAQ,OAAO,CAAC,CAAE,GAAc,EAAE,KAAa,EAAE,IAAe,EAAA;QAC5D,IAAI,CAAC,IAAI,IAAI,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC/D,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QACtE,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpD;IAEA,OAAO,EAAE,CAAC,IAAS,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS;IACpC;AAEA,IAAA,WAAA,CAAa,aAAwC,EAAA;;;;AAIjD,QAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AAClC,YAAA,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;AAC3B,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,QAAQ,EAAE,IAAI;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAgB;QAEnC,IAAI,aAAa,EAAE;YACf,IACI,aAAa,YAAY,GAAG;gBAC5B,aAAa,YAAY,SAAS,EACpC;AACE,gBAAA,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnD;iBAAO;AACH,gBAAA,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE;oBAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjC;YACJ;QACJ;IACJ;AAEA;;;;;AAKG;AACH,IAAA,OAAO,oBAAoB,GAAA;QACvB,MAAM,IAAI,GAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;AACpD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAQ;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,EAAK;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS;QAC5B,0BAA0B,CAAC,IAAI,CAAC;AAChC,QAAA,OAAO,IAAI;IACf;;AAGA,IAAA,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAA,EAA+B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvF,IAAA,KAAK,MAAM,CAAC,WAAW,CAAC,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA,CAAC;IAEpE,YAAY,MAAM,CAAC,OAAO,CAAC,GAAA,EAAK,OAAO,SAAS,CAAC,CAAC;IAElD,GAAG,CAAC,GAAM,EAAE,KAAQ,EAAA;QAChB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,GAAA,EAAM,KAAK,CAAA,iBAAA,EAAoB,KAAK,CAAA,WAAA,EAAc,GAAG,CAAA,EAAA,CAAI,CAAC;QAEnG;AAAO,aAAA,IAAI,QAAO,KAAK,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE;AACvD,YAAA,kBAAkB,CAAC,KAAY,EAAE,IAAI,CAAC,UAAU,CAAkB,EAAE,IAAI,EAAE,GAAG,CAAC;QAClF;;;AAIA,QAAA,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAO;AAEzB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,SAAS;AAC7C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAE5B,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAChC,QAAA,IAAI,SAAoB;AAExB,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;;AAErB,YAAA,SAAS,GAAGA,iBAAS,CAAC,OAAO;YAE7B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,aAAa,KAAK,KAAK,EAAE;;gBAEzB;YAEJ;iBAAO,IAAI,KAAK,EAAE;;AAEd,gBAAA,SAAS,GAAGA,iBAAS,CAAC,cAAc;;AAGpC,gBAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC7B,oBAAA,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACjE;YACJ;;YAGA,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;AACzC,gBAAA,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC;YACjC;QAEJ;aAAO;;AAEH,YAAA,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3B,YAAA,SAAS,GAAGA,iBAAS,CAAC,GAAG;QAC7B;QAEA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;;;;;;QAO3B,IAAI,SAAS,KAAKA,iBAAS,CAAC,GAAG,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC9D,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC/B,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;YAChD;QACJ;aAAO;AACH,YAAA,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;QACvC;;;;;QAMA,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;QAC3D;AAEA,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,GAAG,CAAC,GAAM,EAAA;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B;AAEA,IAAA,MAAM,CAAC,GAAM,EAAA;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvB,YAAA,OAAO,KAAK;QAChB;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAE;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE;AAC3C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;;;;;AAMjC,QAAA,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI;YAC5B,IAAI,SAAS,GAAG,KAAK;AACrB,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,gBAAA,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;YAClE;YACA,IAAK,aAAqB,GAAG,QAAQ,CAAC,KAAK,SAAS,EAAE;gBAClD,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACzC;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;;;;AAIvB,YAAA,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;AAC3D,YAAA,OAAO,IAAI;QACf;;;QAIA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;AAE3C,QAAA,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;QAExB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;IAClC;IAEA,KAAK,GAAA;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAGjC,UAAU,CAAC,OAAO,EAAE;;QAGpB,UAAU,CAAC,YAAY,CAAC,CAAC,eAAe,EAAE,CAAC,KAAI;AAC3C,YAAA,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC;AAC5C,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;;AAGpB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAEnB,QAAA,UAAU,CAAC,SAAS,CAACA,iBAAS,CAAC,KAAK,CAAC;IACzC;AAEA,IAAA,GAAG,CAAE,GAAM,EAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B;AAEA,IAAA,OAAO,CAAC,UAAsD,EAAA;AAC1D,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IACnC;IAEA,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IAChC;IAEA,IAAI,GAAA;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC7B;IAEA,MAAM,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC/B;AAEA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;IAC3B;;IAGA,aAAa,GAAA,EAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,cAAc,GAAA,EAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAClD,IAAA,SAAS,CAAI,EAAW,EAAA,EAAO,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,gBAAgB,GAAA,EAAc,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IAEtD,QAAQ,CAAC,KAAa,EAAE,GAAM,EAAA;QACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IACrC;AAEU,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IACpC;IAEA,CAAC,WAAW,CAAC,CAAC,KAAa,EAAA;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACrC,QAAA,OAAO,GAAG,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS;IAC/D;IAEA,CAAC,cAAc,CAAC,CAAC,KAAa,EAAA;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;QACzC;IACJ;AAEU,IAAA,CAAC,YAAY,CAAC,GAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;IACrC;;AAIA,IAAA,SAAS,CAAC,MAAc,EAAA;AACpB,QAAA,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC;IAEA,WAAW,GAAA;;IAEX;IAEA,MAAM,GAAA;QACF,MAAM,GAAG,GAAQ,EAAE;QAEnB,IAAI,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,GAAG,KAAI;AAC7B,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,UAAU;AAC/C,kBAAE,KAAK,CAAC,QAAQ,CAAC;kBACf,KAAK;AACf,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,GAAG;IACd;;;;;AAMA,IAAA,KAAK,CAAC,UAAoB,EAAA;AACtB,QAAA,IAAI,MAAoB;QAExB,IAAI,UAAU,EAAE;;YAEZ,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC;QAEjD;aAAO;;AAEH,YAAA,MAAM,GAAG,IAAI,SAAS,EAAE;YAExB,IAAI,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,GAAG,KAAI;AAC7B,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACjB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC;qBAAO;AACH,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;gBAC1B;AACJ,YAAA,CAAC,CAAC;QAEN;AAEA,QAAA,OAAO,MAAM;IACjB;;AAIJ,YAAY,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;;MCrXlC,gBAAgB,CAAA;IACzB,CAAC,QAAQ;IACT,CAAC,MAAM;IAEG,CAAC,UAAU;;AAGX,IAAA,MAAM,GAAmB,IAAI,GAAG,EAAa;;IAG7C,YAAY,GAA2B,EAAE;;IAGzC,MAAM,GAAW,CAAC;AAE5B;;;;AAIG;AACH,IAAA,OAAO;AAEP,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE;IACzC;IACA,IAAI,UAAU,CAAC,CAAS,EAAA;QACpB,CAAC,IAAI,CAAC,OAAO,KAAK,qBAAqB,EAAE,EAAE,UAAU,GAAG,CAAC;IAC7D;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,QAA2D;IACpF;IACA,IAAI,QAAQ,CAAC,EAAmD,EAAA;QAC5D,CAAC,IAAI,CAAC,OAAO,KAAK,qBAAqB,EAAE,EAAE,QAAQ,GAAG,EAAE;IAC5D;AAEA,IAAA,QAAQ,QAAQ,IAAI,kBAAkB;AACtC,IAAA,QAAQ,QAAQ,IAAI,uBAAuB;;AAE3C,IAAA,OAAgB,eAAe,GAAG,cAAc,CAAC,UAAU;AAE3D;;;;;;;;AAQG;IACH,QAAQ,OAAO,CAAC,CAAE,GAAqB,EAAE,KAAa,EAAE,IAAe,EAAA;QACnE,QACI,CAAC,IAAI;AACL,YAAA,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,QAAQ;YACrC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEhG;IAEA,OAAO,EAAE,CAAC,IAAS,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS;IAC3C;AAEA,IAAA,WAAA,CAAa,aAAwB,EAAA;;AAEjC,QAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AAClC,YAAA,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;AAC3B,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,QAAQ,EAAE,IAAI;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAgB;QAEnC,IAAI,aAAa,EAAE;AACf,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C;IACJ;AAEA;;;;;AAKG;AACH,IAAA,OAAO,oBAAoB,GAAA;QACvB,MAAM,IAAI,GAAQ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC3D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAa;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS;QAC5B,0BAA0B,CAAC,IAAI,CAAC;AAChC,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,GAAG,CAAC,KAAQ,EAAA;;AAER,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAE3B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,SAAS;QAC7C,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;QAC3D;QAEA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AAE7B,QAAA,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC/B,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC/B,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;YAChD;QACJ;aAAO;AACH,YAAA,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B;AAEA,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,EAAE,CAAC,KAAa,EAAA;AACZ,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B;IAEA,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IAChC;AAEA,IAAA,MAAM,CAAC,IAAO,EAAA;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAErC,QAAA,IAAI,KAAQ;AACZ,QAAA,IAAI,KAAkC;AACtC,QAAA,OAAO,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE;AAC3B,YAAA,IAAI,KAAK,CAAC,IAAI,EAAE;gBAAE;YAAO;YAEzB,IAAI,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACzB,gBAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB;YACJ;QACJ;AAEA,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAA,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI;YAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,gBAAA,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAG,IAAY,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;YAC/D;YACA,IAAK,aAAqB,GAAG,QAAQ,CAAC,KAAK,SAAS,EAAE;gBAClD,IAAI,EAAE,MAAM,CAAE,aAAqB,CAAC,QAAQ,CAAC,CAAC;YAClD;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,aAAkB;YAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;QAEnD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IACpC;IAEA,KAAK,GAAA;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAGjC,UAAU,CAAC,OAAO,EAAE;;QAGpB,UAAU,CAAC,YAAY,CAAC,CAAC,eAAe,EAAE,CAAC,KAAI;AAC3C,YAAA,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC;AAC5C,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAEnB,QAAA,UAAU,CAAC,SAAS,CAACA,iBAAS,CAAC,KAAK,CAAC;IACzC;AAEA,IAAA,GAAG,CAAE,KAAQ,EAAA;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IACpE;AAEA,IAAA,OAAO,CAAC,UAAuE,EAAA;QAC3E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACxE;IAEA,MAAM,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC/B;AAEA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;IAC3B;;IAGA,aAAa,GAAA,EAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,cAAc,GAAA,EAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAClD,IAAA,SAAS,CAAI,EAAW,EAAA,EAAO,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,gBAAgB,GAAA,EAAc,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;;IAGhE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC/B;;;;;;IAQU,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAA;;IAE/C;AAEU,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,KAAK;IAChB;IAEA,CAAC,WAAW,CAAC,CAAC,KAAa,EAAA;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACjC;IAEA,CAAC,cAAc,CAAC,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B;AAEU,IAAA,CAAC,YAAY,CAAC,GAAA;AACpB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;QAAE;IAC1E;;AAIA,IAAA,SAAS,CAAC,MAAc,EAAA;AACpB,QAAA,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC;IAEA,WAAW,GAAA;;IAEX;IAEA,OAAO,GAAA;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3C;IAEA,MAAM,GAAA;QACF,MAAM,MAAM,GAAQ,EAAE;QAEtB,IAAI,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,GAAM,KAAI;AAChC,YAAA,MAAM,CAAC,IAAI,CACP,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,UAAU;AACpC,kBAAE,KAAK,CAAC,QAAQ,CAAC;kBACf,KAAK,CACd;AACL,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACjB;;;;AAKA,IAAA,KAAK,CAAC,UAAoB,EAAA;AACtB,QAAA,IAAI,MAAwB;QAE5B,IAAI,UAAU,EAAE;;YAEZ,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAgB,EAAE,EAAE,IAAI,CAAC;QAExD;aAAO;;AAEH,YAAA,MAAM,GAAG,IAAI,gBAAgB,EAAE;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACxB,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACjB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC;qBAAO;AACH,oBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBACrB;AACJ,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,MAAM;IACjB;;AAIJ,YAAY,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,gBAAgB,GAAG,CAAC;;MChSjD,SAAS,CAAA;IAClB,CAAC,QAAQ;IACT,CAAC,MAAM;IAEG,CAAC,UAAU;;AAGX,IAAA,MAAM,GAAmB,IAAI,GAAG,EAAa;;IAG7C,YAAY,GAA2B,EAAE;;IAGzC,MAAM,GAAW,CAAC;AAE5B;;;;AAIG;AACH,IAAA,OAAO;;AAGP,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE;IACzC;IACA,IAAI,UAAU,CAAC,CAAS,EAAA;QACpB,CAAC,IAAI,CAAC,OAAO,KAAK,qBAAqB,EAAE,EAAE,UAAU,GAAG,CAAC;IAC7D;;AAGA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,QAA2D;IACpF;IACA,IAAI,QAAQ,CAAC,EAAmD,EAAA;QAC5D,CAAC,IAAI,CAAC,OAAO,KAAK,qBAAqB,EAAE,EAAE,QAAQ,GAAG,EAAE;IAC5D;AAEA,IAAA,QAAQ,QAAQ,IAAI,kBAAkB;AACtC,IAAA,QAAQ,QAAQ,IAAI,uBAAuB;;AAE3C,IAAA,OAAgB,eAAe,GAAG,cAAc,CAAC,GAAG;AAEpD;;;;;;;;AAQG;IACH,QAAQ,OAAO,CAAC,CAAE,GAAc,EAAE,KAAa,EAAE,IAAe,EAAA;QAC5D,QACI,CAAC,IAAI;AACL,YAAA,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,QAAQ;YACrC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEtF;IAEA,OAAO,EAAE,CAAC,IAAS,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS;IACpC;AAEA,IAAA,WAAA,CAAa,aAAwB,EAAA;;;AAGjC,QAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AAClC,YAAA,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;AAC3B,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,QAAQ,EAAE,IAAI;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAgB;QAEnC,IAAI,aAAa,EAAE;AACf,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C;IACJ;AAEA;;;;;AAKG;AACH,IAAA,OAAO,oBAAoB,GAAA;QACvB,MAAM,IAAI,GAAQ,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;AACpD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAa;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS;QAC5B,0BAA0B,CAAC,IAAI,CAAC;AAChC,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,GAAG,CAAC,KAAQ,EAAA;;AAER,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAAE,YAAA,OAAO,KAAK;QAAE;;AAGrC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAE3B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,SAAS,EAAE;AACjC,YAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;QAC3D;QAEA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;;;;AAK7B,QAAA,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC/B,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC/B,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;YAChD;QACJ;aAAO;YACH,UAAU,CAAC,MAAM,CAAC,KAAK,EAAEA,iBAAS,CAAC,GAAG,CAAC;QAC3C;AACA,QAAA,OAAO,KAAK;IAChB;IAEA,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IAChC;AAEA,IAAA,MAAM,CAAC,IAAO,EAAA;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAErC,QAAA,IAAI,KAAa;AACjB,QAAA,IAAI,KAAkC;AACtC,QAAA,OAAO,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE;AAC3B,YAAA,IAAI,KAAK,CAAC,IAAI,EAAE;gBAAE;YAAO;YAEzB,IAAI,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACzB,gBAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB;YACJ;QACJ;AAEA,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;;;;;AAMjC,QAAA,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI;YAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,gBAAA,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAG,IAAY,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;YAC/D;YACA,IAAK,aAAqB,GAAG,QAAQ,CAAC,KAAK,SAAS,EAAE;gBAClD,IAAI,EAAE,MAAM,CAAE,aAAqB,CAAC,QAAQ,CAAC,CAAC;YAClD;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,aAAkB;YAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;QAEnD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IACpC;IAEA,KAAK,GAAA;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAGjC,UAAU,CAAC,OAAO,EAAE;;AAGpB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAEnB,QAAA,UAAU,CAAC,SAAS,CAACA,iBAAS,CAAC,KAAK,CAAC;IACzC;AAEA,IAAA,GAAG,CAAE,KAAQ,EAAA;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QAEnC,IAAI,GAAG,GAAG,KAAK;AACf,QAAA,IAAI,KAAwB;AAE5B,QAAA,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE;AAC1B,YAAA,IAAI,KAAK,CAAC,IAAI,EAAE;gBAAE;YAAO;AACzB,YAAA,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE;gBACvB,GAAG,GAAG,IAAI;gBACV;YACJ;QACJ;AAEA,QAAA,OAAO,GAAG;IACd;AAEA,IAAA,OAAO,CAAC,UAAqE,EAAA;QACzE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACxE;IAEA,MAAM,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC/B;AAEA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;IAC3B;;IAGA,aAAa,GAAA,EAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,cAAc,GAAA,EAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAClD,IAAA,SAAS,CAAI,EAAW,EAAA,EAAO,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,gBAAgB,GAAA,EAAc,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;;IAGhE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC/B;;;;;;IAQU,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAA;;IAE/C;AAEU,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,KAAK;IAChB;IAEA,CAAC,WAAW,CAAC,CAAC,KAAa,EAAA;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACjC;IAEA,CAAC,cAAc,CAAC,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B;AAEU,IAAA,CAAC,YAAY,CAAC,GAAA;AACpB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;QAAE;IAC1E;;AAIA,IAAA,SAAS,CAAC,MAAc,EAAA;AACpB,QAAA,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC;IAEA,WAAW,GAAA;;IAEX;IAEA,OAAO,GAAA;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3C;IAEA,MAAM,GAAA;QACF,MAAM,MAAM,GAAQ,EAAE;QAEtB,IAAI,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,GAAW,KAAI;AACrC,YAAA,MAAM,CAAC,IAAI,CACP,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,UAAU;AACpC,kBAAE,KAAK,CAAC,QAAQ,CAAC;kBACf,KAAK,CACd;AACL,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACjB;;;;AAKA,IAAA,KAAK,CAAC,UAAoB,EAAA;AACtB,QAAA,IAAI,MAAiB;QAErB,IAAI,UAAU,EAAE;;YAEZ,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC;QAEjD;aAAO;;AAEH,YAAA,MAAM,GAAG,IAAI,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACxB,gBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACjB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC;qBAAO;AACH,oBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBACrB;AACJ,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,MAAM;IACjB;;AAIJ,YAAY,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;;ACnS/C;;;;;;;;;;AAUG;MACU,YAAY,CAAA;IACrB,CAAC,QAAQ;IACT,CAAC,MAAM;IAEG,CAAC,UAAU;AAErB;;;;;;AAMG;AACO,IAAA,MAAM,GAAmB,IAAI,GAAG,EAAE;;IAGlC,aAAa,GAAW,CAAC;;AAGzB,IAAA,UAAU,GAAmB,IAAI,GAAG,EAAE;AAEhD;;;;;AAKG;AACH,IAAA,OAAO;;AAGP,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE;IACzC;IACA,IAAI,UAAU,CAAC,CAAS,EAAA;QACpB,CAAC,IAAI,CAAC,OAAO,KAAK,qBAAqB,EAAE,EAAE,UAAU,GAAG,CAAC;IAC7D;AAEA;;;;;AAKG;AACH,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,QAA2D;IACpF;IACA,IAAI,QAAQ,CAAC,EAAmD,EAAA;QAC5D,CAAC,IAAI,CAAC,OAAO,KAAK,qBAAqB,EAAE,EAAE,QAAQ,GAAG,EAAE;IAC5D;AAEA;;;;;AAKG;AACH,IAAA,OAAgB,SAAS,GAAS,IAAI;AAEtC,IAAA,QAAQ,QAAQ,IAAI,kBAAkB;AACtC,IAAA,QAAQ,QAAQ,IAAI,uBAAuB;;AAE3C,IAAA,OAAgB,eAAe,GAAG,cAAc,CAAC,MAAM;AAEvD;;;;AAIG;IACH,QAAQ,OAAO,CAAC,CAAC,GAAiB,EAAE,KAAa,EAAE,IAAe,EAAA;AAC9D,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QACtB,MAAM,KAAK,GAAI,GAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;QAC9C,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C;IAEA,OAAO,EAAE,CAAC,IAAS,EAAA;QACf,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS;IAC/C;AAEA,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AAClC,YAAA,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;AAC3B,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,QAAQ,EAAE,IAAI;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS;;;;IAIhC;AAEA;;;;;AAKG;AACH,IAAA,OAAO,oBAAoB,GAAA;QACvB,MAAM,IAAI,GAAQ,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAa;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS;QAC5B,0BAA0B,CAAC,IAAI,CAAC;AAChC,QAAA,OAAO,IAAI;IACf;AAEA;;;AAGG;AACH,IAAA,GAAG,CAAC,KAAQ,EAAA;AACR,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE;AAEzC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;AAEpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;;;AAItB,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;AAC/B,YAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;QACnD;QAEA,IAAI,IAAI,KAAK,SAAS;AAAE,YAAA,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;AAC5D,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,KAAQ,EAAA;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;AAExC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI;AAChC,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,YAAA,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAG,IAAY,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;AAC9D,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;gBAC/B,IAAI,CAAC,MAAM,CAAE,KAAa,CAAC,QAAQ,CAAC,CAAC;YACzC;QACJ;AAEA,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,GAAG,CAAC,KAAQ,EAAA;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC;;IAGA,KAAK,GAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI;AAChC,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAG,IAAY,CAAC,MAAM,CAAC,CAAC;YACnD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACnC,gBAAA,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;oBAC5B,IAAI,CAAC,MAAM,CAAE,EAAU,CAAC,QAAQ,CAAC,CAAC;gBACtC;YACJ;QACJ;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IAC3B;AAEA,IAAA,OAAO,CAAC,QAAwE,EAAA;QAC5E,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IAC1E;IAEA,MAAM,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC/B;AAEA;;;AAGG;IACH,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IAChC;IAEA,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC/B;;AAGA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;IAC3B;;AAGA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;IAC3B;;;;;;;IASU,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAA;;IAE/C;AAEU,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,KAAK;IAChB;IAEA,CAAC,WAAW,CAAC,CAAC,KAAa,EAAA;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAM;IACtC;IAEA,CAAC,cAAc,CAAC,CAAC,KAAa,EAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B;IACJ;AAEU,IAAA,CAAC,YAAY,CAAC,GAAA;;IAExB;IAEA,OAAO,GAAA;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3C;IAEA,MAAM,GAAA;QACF,MAAM,GAAG,GAAU,EAAE;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAM,KAAI;YACpB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC9D,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACd;AAEA,IAAA,KAAK,CAAC,UAAoB,EAAA;QACtB,IAAI,UAAU,EAAE;AACZ,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,EAAK,EAAE,IAAI,CAAC;AACzD,YAAA,OAAO,MAAM;QACjB;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,YAAY,EAAK;AACpC,QAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAM,KAAI;YACpB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,KAAK,UAAU,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC9D,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACjB;;AAIA,IAAA,SAAS,CAAC,MAAc,EAAA;AACpB,QAAA,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC;;IAGA,WAAW,GAAA;;IAEX;;AAGJ,YAAY,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;;AC/QrD;;;;;;;;;;;;;;;;;;;;AAoBG;MACU,YAAY,CAAA;AAKZ,IAAA,CAAC,QAAQ,IAAU,IAAI;;;AAIhC,IAAA,KAAK;IACL,QAAQ,GAAQ,SAAS;IACzB,WAAW,GAAG,KAAK;IACnB,KAAK,GAAuB,SAAS;IACrC,MAAM,GAAG,KAAK;IACd,WAAW,GAAG,KAAK;IACnB,UAAU,GAAG,KAAK;IAClB,WAAW,GAAG,KAAK;IACnB,iBAAiB,GAAG,IAAI;IACxB,OAAO,GAAG,KAAK;IACf,OAAO,GAAG,KAAK;IACf,SAAS,GAAG,KAAK;IACjB,eAAe,GAAsD,SAAS;AAE9E,IAAA,WAAA,CAAY,IAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACrB;;AAGA,IAAA,OAAO,CAAC,KAAQ,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,OAAO,IAAoD;IAC/D;;AAGA,IAAA,IAAI,CAAC,GAAY,EAAA;;AAEb,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,EAAE;AACtB,QAAA,OAAO,IAAI;IACf;;IAGA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,OAAO,IAAI;IACf;AAEA;;;;AAIG;IACH,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;IACH,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;IACH,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;;;;;;;;AAaG;IACH,MAAM,GAAA;AACF,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAY;AAC3B,QAAA,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;AACrD,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;QAC/C;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;;;;;;AAWG;AACH,IAAA,QAAQ,CAAU,EAAqC,EAAA;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,EAAyC;AAChE,QAAA,OAAO,IAAI;IACf;;IAGA,UAAU,CAAC,MAAM,GAAG,IAAI,EAAA;AACpB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;AAC/B,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;IACH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,OAAO,IAAgE;IAC3E;IAEA,YAAY,GAAA;QACR,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;YACxC,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,cAAc,EAAE,IAAI,CAAC,eAAe;SACvC;IACL;AACH;AAEK,SAAU,SAAS,CAAC,KAAU,EAAA;IAChC,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI;AACpD;AAEA;AACA;AACA;AAEA,SAAS,SAAS,CAAI,IAAsB,EAAA;IACxC,OAAO,MAAM,IAAI,YAAY,CAAI,IAAI,CAAC;AAC1C;AAQA,SAAS,YAAY,CAAC,KAAgB,EAAA;AAClC,IAAA,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;QAClB,OAAO,KAAK,CAAC,KAAK;IACtB;AACA,IAAA,OAAO,KAAuB;AAClC;AAqCA,MAAM,YAAY,IAAkB,CAAC,KAAgB,KACjD,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAoB,CAAC,CAAiB;AACvF,MAAM,UAAU,IAAgB,CAAC,KAAgB,KAC7C,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,EAAoB,CAAC,CAAe;AACnF,MAAM,UAAU,IAAgB,CAAC,KAAgB,KAC7C,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,EAAoB,CAAC,CAAe;AACnF,MAAM,iBAAiB,IAAuB,CAAC,KAAgB,KAC3D,IAAI,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,EAAoB,CAAC,CAAsB;AACjG,MAAM,aAAa,IAAmB,CAAC,KAAgB,KAAI;AACvD,IAAA,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,EAAoB,CAAC;AAC7E,IAAA,CAAC,CAAC,OAAO,GAAG,IAAI;AAChB,IAAA,OAAO,CAAC;AACZ,CAAC,CAAkB;AAenB,MAAM,UAAU,IAAgB,CAAgC,IAAO,KACnE,IAAI,YAAY,CAAkB,IAAiC,CAAC,CAAe;AAEhF,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;;AAE3B,IAAA,MAAM,EAAE,SAAS,CAAS,QAAQ,CAAC;AACnC,IAAA,MAAM,EAAE,SAAS,CAAS,QAAQ,CAAC;AACnC,IAAA,OAAO,EAAE,SAAS,CAAU,SAAS,CAAC;AACtC,IAAA,IAAI,EAAE,SAAS,CAAS,MAAM,CAAC;AAC/B,IAAA,KAAK,EAAE,SAAS,CAAS,OAAO,CAAC;AACjC,IAAA,KAAK,EAAE,SAAS,CAAS,OAAO,CAAC;AACjC,IAAA,MAAM,EAAE,SAAS,CAAS,QAAQ,CAAC;AACnC,IAAA,KAAK,EAAE,SAAS,CAAS,OAAO,CAAC;AACjC,IAAA,MAAM,EAAE,SAAS,CAAS,QAAQ,CAAC;AACnC,IAAA,KAAK,EAAE,SAAS,CAAS,OAAO,CAAC;AACjC,IAAA,MAAM,EAAE,SAAS,CAAS,QAAQ,CAAC;AACnC,IAAA,OAAO,EAAE,SAAS,CAAS,SAAS,CAAC;AACrC,IAAA,OAAO,EAAE,SAAS,CAAS,SAAS,CAAC;AACrC,IAAA,QAAQ,EAAE,SAAS,CAAS,UAAU,CAAC;AACvC,IAAA,SAAS,EAAE,SAAS,CAAS,WAAW,CAAC;;AAGzC,IAAA,GAAG,EAAE,UAAU;AACf,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,GAAG,EAAE,UAAU;AACf,IAAA,GAAG,EAAE,UAAU;AACf,IAAA,UAAU,EAAE,iBAAiB;AAC7B,IAAA,MAAM,EAAE,aAAa;AACxB,CAAA;;ACvRM,MAAM,gBAAgB,GAAG,EAAE;AAE5B,SAAU,MAAM,CAAC,WAAgB,EAAA;AACnC,IAAA,WAAW,CAAC,QAAQ,CAAC,WAA4B,CAAC;AAClD,IAAA,OAAO,WAAW;AACtB;AAEA;;;;;;;;;;;;;;;AAeG;AACH;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEM,SAAU,IAAI,CAAK,GAAA,GAAc,gBAAgB,EAAA;IACnD,OAAO,UAAS,MAAS,EAAE,SAAiB,EAAA;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAA4B,CAAC;QACzE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC;AAC7C,IAAA,CAAC;AACL;AAEM,SAAU,KAAK,CAAK,MAAS,EAAE,KAAa,EAAA;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAA4B,CAAC;IACzE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;AAC1C;AAEM,SAAU,UAAU,CAAK,MAAS,EAAE,KAAa,EAAA;IACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAA4B,CAAC;AACzE,IAAA,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC3C;AAEA;;;;;;;AAOG;AACG,SAAU,SAAS,CAAK,MAAS,EAAE,KAAa,EAAA;IAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAA4B,CAAC;AACzE,IAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC1C;AAEM,SAAU,IAAI,CAChB,IAAoB,EACpB,OAAqB,EAAA;IAErB,OAAO,UAAU,MAAqB,EAAE,KAAa,EAAA;AACjD,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAA4B;QAEvD,IAAI,CAAC,IAAI,EAAE;YACP,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,WAAW,CAAC,IAAI,CAAA,kCAAA,EAAqC,KAAK,CAAA,mEAAA,CAAqE,CAAC;QACvJ;;AAGA,QAAA,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC;;AAG9B,QAAA,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;QAEjC,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC;QACtD,MAAM,cAAc,GAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;QACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;AAEjD,QAAA,IAAI,UAAU,GAAW,QAAQ,CAAC,KAAK,CAAC;AAExC;;AAEG;AACH,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;AACpC,YAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE;;gBAEjC;YAEJ;iBAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE;;;AAGhD,gBAAA,IAAI;oBACA,MAAM,IAAI,KAAK,CAAC,CAAA,6BAAA,EAAgC,KAAK,CAAA,iBAAA,EAAoB,WAAW,CAAC,IAAI,CAAA,4BAAA,CAA8B,CAAC;gBAE5H;gBAAE,OAAO,CAAC,EAAE;AACR,oBAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBACtD,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,CAAC,CAAC,OAAO,CAAA,CAAA,EAAI,gBAAgB,CAAA,CAAE,CAAC;gBACvD;YACJ;QAEJ;aAAO;;;;AAIH,YAAA,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;oBACzB,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;mBAC9C,EAAE,CAAC;AACV,YAAA,UAAU,EAAE;QAChB;AAEA,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;YAC3B,QAAQ,CAAC,QAAQ,CACb,QAAQ,EACR,UAAU,EACV,KAAK,EACL,IAAI,EACJ;;AAEI,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACjB,aAAA,CACJ;QAEL;aAAO;YACH,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC;YAE9D,QAAQ,CAAC,QAAQ,CACb,QAAQ,EACR,UAAU,EACV,KAAK,EACL,IAAI,EACJ,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,CACxE;QACL;;QAGA,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;QACvE;;AAGA,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACtB,gBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE;AACvC,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,QAAQ,EAAE,IAAI;AACjB,iBAAA,CAAC;YACN;YACA,QAAQ,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,GAAI,MAAc,CAAC,IAAI,CAAC;QAC3D;AACJ,IAAA,CAAC;AACL;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA,MAAM,gBAAgB,GAA+D;AACjF,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;AAC/B,IAAA,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACjC,IAAA,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACjC,IAAA,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACjC,IAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;AACpC,IAAA,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;AACvC,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,OAAO,EAAE,SAAS;CACrB;AAED,SAAS,mBAAmB,CAAC,SAAiB,EAAE,UAAkB,EAAE,IAAY,EAAA;IAC5E,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC5C,IAAA,MAAM,SAAS,GAAG,IAAI,KAAK,QAAQ;AACnC,IAAA,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS;AACjC,IAAA,OAAO,UAAwB,KAAU,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI,KAAK,KAAK,aAAa;YAAE;QAE7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;;AAEvC,YAAA,IACI,CAAC,MAAM;AACP,gBAAA,YAAY,KAAK,SAAS;gBAC1B,OAAO,KAAK,KAAK,YAAY;gBAC7B,EAAE,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAChC;gBACE,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,CAAA,EAAA,EAAK,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,EAAE;gBACrF,MAAM,IAAI,iBAAiB,CACvB,CAAA,GAAA,EAAM,YAAY,wBAAwB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,UAAU,CAAA,iBAAA,EAAoB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CACxI;YACL;AACC,YAAA,IAAI,CAAC,WAA6B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAEA,iBAAS,CAAC,GAAG,CAAC;QAC1F;aAAO,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE;YAC9D,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACrC;AACA,QAAA,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK;AAC9B,IAAA,CAAC;AACL;AAEA,SAAS,mBAAmB,CAAC,SAAiB,EAAE,UAAkB,EAAE,IAAmB,EAAA;AACnF,IAAA,OAAO,UAAwB,KAAU,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI,KAAK,KAAK,aAAa;YAAE;QAE7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YACvC,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;AAEhD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAA4B;AAE9C,YAAA,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;gBAClF,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,UAAU,EAAEA,iBAAS,CAAC,cAAc,CAAC;YAClE;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,UAAU,EAAEA,iBAAS,CAAC,GAAG,CAAC;YACvD;;AAGA,YAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;QAEjE;aAAO,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE;YAC9D,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACrC;AACA,QAAA,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK;AAC9B,IAAA,CAAC;AACL;AAEA,SAAS,oBAAoB,CACzB,UAAkB,EAClB,UAAkB,EAClB,IAAoB,EACpB,gBAAgC,EAAA;AAEhC,IAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,KAAK,WAAW;AACjE,IAAA,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,KAAK,SAAS;AAC7D,IAAA,OAAO,UAAwB,KAAU,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI,KAAK,KAAK,aAAa;YAAE;QAE7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;;YAEvC,IAAI,YAAY,IAAI,EAAE,KAAK,YAAY,WAAW,CAAC,EAAE;AACjD,gBAAA,KAAK,GAAG,IAAI,WAAW,CAAC,GAAG,KAAK,CAAC;YACrC;iBAAO,IAAI,UAAU,IAAI,EAAE,KAAK,YAAY,SAAS,CAAC,EAAE;AACpD,gBAAA,KAAK,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC;YAChC;AACA,YAAA,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI;AAExB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAA4B;AAE9C,YAAA,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;gBAClF,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,UAAU,EAAEA,iBAAS,CAAC,cAAc,CAAC;YAClE;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,UAAU,EAAEA,iBAAS,CAAC,GAAG,CAAC;YACvD;AAEA,YAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;QAEjE;aAAO,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE;YAC9D,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACrC;AACA,QAAA,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK;AAC9B,IAAA,CAAC;AACL;AAEM,SAAU,qBAAqB,CACjC,SAAiB,EACjB,UAAkB,EAClB,IAAoB,EACpB,gBAAwC,EAAA;AAExC,IAAA,IAAI,MAA0C;IAC9C,IAAI,gBAAgB,EAAE;QAClB,MAAM,GAAG,oBAAoB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,CAAC;IAChF;AAAO,SAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACjC,MAAM,GAAG,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC;IAC7D;SAAO;QACH,MAAM,GAAG,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAqB,CAAC;IAC9E;IACA,OAAO;AACH,QAAA,GAAG,EAAE,YAAA,EAA0B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClE,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,IAAI;KACrB;AACL;AAEA;;;AAGG;AAEG,SAAU,UAAU,CAAC,MAAA,GAAkB,IAAI,EAAA;IAC7C,OAAO,UAAU,KAAoB,EAAE,KAAa,EAAA;QAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,WAA4B,CAAC;AACxE,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC;AAElC,QAAA,QAAQ,CAAC,UAAU,CAAC,CAAC,UAAU,GAAG,IAAI;QAEtC,IAAI,MAAM,EAAE;AACR,YAAA,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE;AAC7B,YAAA,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG;AAC5B,gBAAA,GAAG,EAAE,YAAA,EAAc,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,KAAK,CAAA,eAAA,CAAiB,CAAC,CAAC,CAAC,CAAC;AAChE,gBAAA,GAAG,EAAE,UAAwB,MAAW,EAAA,EAAsD,CAAC;AAC/F,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,YAAY,EAAE;aACjB;;AAED,YAAA,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;QACtE;;AAGA,QAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;AACxC,YAAA,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC;AAC3B,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,YAAY,EAAE;AACjB,SAAA,CAAC;AACN,IAAA,CAAC;AACL;AA4FA;;;;;;;;;;;;;;;AAeG;AACG,SAAU,MAAM,CAIlB,gBAA0D,EAC1D,IAAa,EACb,WAAc,MAAW,EAAA;IAEzB,IAAI,gBAAgB,IAAI,IAAI,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;QAClE,MAAM,IAAI,KAAK,CAAC,CAAA,sDAAA,EAAyD,OAAO,gBAAgB,CAAA,EAAA,CAAI,CAAC;IACzG;IAEA,MAAM,MAAM,GAAQ,EAAE;IACtB,MAAM,OAAO,GAAQ,EAAE;IACvB,MAAM,aAAa,GAAQ,EAAE;IAC7B,MAAM,aAAa,GAAgC,EAAE;IACrD,MAAM,WAAW,GAAa,EAAE;IAChC,MAAM,gBAAgB,GAAa,EAAE;IACrC,MAAM,eAAe,GAAa,EAAE;IACpC,MAAM,gBAAgB,GAAiC,EAAE;IACzD,MAAM,YAAY,GAAa,EAAE;IACjC,MAAM,YAAY,GAAa,EAAE;IACjC,MAAM,oBAAoB,GAA6D,EAAE;IACzF,MAAM,cAAc,GAAa,EAAE;AAEnC,IAAA,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE;AACtC,QAAA,MAAM,KAAK,GAAS,gBAAwB,CAAC,SAAS,CAAC;AAEvD,QAAA,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;AAClB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE;YAChC,MAAM,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAE/C,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;AAAE,gBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,IAAI;YAAE;AACnE,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AAAE,gBAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE;AAC9C,YAAA,IAAI,GAAG,CAAC,UAAU,EAAE;AAAE,gBAAA,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE;AACxD,YAAA,IAAI,GAAG,CAAC,SAAS,EAAE;AAAE,gBAAA,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE;AACtD,YAAA,IAAI,GAAG,CAAC,UAAU,EAAE;AAAE,gBAAA,gBAAgB,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,gBAAgB;YAAE;AAC1E,YAAA,IAAI,GAAG,CAAC,MAAM,EAAE;AAAE,gBAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE;AAChD,YAAA,IAAI,GAAG,CAAC,MAAM,EAAE;AAAE,gBAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE;AAChD,YAAA,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE;AAAE,gBAAA,oBAAoB,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,cAAc;YAAE;AAC9F,YAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAAE,gBAAA,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE;AAEpD,YAAA,IAAI,GAAG,CAAC,UAAU,EAAE;AAChB,gBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,OAAO;YAC1C;AAAO,iBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;;;AAGtB,gBAAA,MAAM,OAAO,GAAQ,GAAG,CAAC,IAAI;AAC7B,gBAAA,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACxC,oBAAA,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;AAC7B,wBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,WAAW,EAAE;oBAChD;AAAO,yBAAA,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE;AAClC,wBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS,EAAE;oBAC9C;AAAO,yBAAA,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE;AAClC,wBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS,EAAE;oBAC9C;AAAO,yBAAA,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE;AACzC,wBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,gBAAgB,EAAE;oBACrD;AAAO,yBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;AACrC,wBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,YAAY,EAAE;oBACjD;gBACJ;AAAO,qBAAA,IAAI,OAAO,OAAO,KAAK,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AAC5D,oBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5E,wBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,OAAO,EAAE;oBAC5C;gBACJ;YACJ;QAEJ;AAAO,aAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AACpC,YAAA,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;;gBAElB,MAAM,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC;AAC5C,gBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACxE,oBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,KAAK,EAAE;gBAC1C;YACJ;iBAAO;AACH,gBAAA,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK;YAC9B;QAEJ;aAAO;AACH,YAAA,MAAM,IAAI,KAAK,CACX,CAAA,OAAA,EAAU,IAAI,GAAG,CAAA,CAAA,EAAI,IAAI,GAAG,GAAG,EAAE,CAAA,UAAA,EAAa,SAAS,CAAA,yBAAA,CAA2B;AAClF,gBAAA,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,EAAA,CAAI,CACtD;QACL;IACJ;IAEA,MAAM,gBAAgB,GAAG,MAAK;QAC1B,MAAM,QAAQ,GAAQ,EAAE;AACxB,QAAA,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE;AACnC,YAAA,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC;YAC7C,IAAI,YAAY,IAAI,OAAO,YAAY,CAAC,KAAK,KAAK,UAAU,EAAE;gBAC1D,QAAQ,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE;YAC9C;iBAAO;AACH,gBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,YAAY;YACtC;QACJ;AACA,QAAA,OAAO,QAAQ;AACnB,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,KAAU,KAAI;QAClC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACtC,MAAM,WAAW,GAAQ,EAAE;AAC3B,QAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC3B,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;YACjC;QACJ;AACA,QAAA,OAAO,WAAW;AACtB,IAAA,CAAC;;IAGD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAM,cAAe,QAAgB,CAAA;AACjE,QAAA,WAAA,CAAY,GAAG,IAAW,EAAA;YACtB,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE;gBAChE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;AAE3E,gBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE;oBACtB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;gBACxC;YACJ;iBAAO;AACH,gBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D;QACJ;KACH,EAAE,MAAM,CAAuE;AAE/E,IAAA,KAAa,CAAC,iBAAiB,GAAG,gBAAgB;IAEnD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;AAEvC,IAAA,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9D;AACA,IAAA,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE;AACjC,QAAA,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;IACrC;AACA,IAAA,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE;AACtC,QAAA,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;IAC1C;AACA,IAAA,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE;AACrC,QAAA,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;IACzC;AACA,IAAA,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE;AACtC,QAAA,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;IACvE;AAEA,IAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;QACpD,MAAM,QAAQ,GAAI,KAAa,CAAC,MAAM,CAAC,QAAQ,CAAa;AAC5D,QAAA,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE;AAClC,YAAA,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;QAC3C;AACA,QAAA,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE;AAClC,YAAA,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;QAC3C;AACA,QAAA,KAAK,MAAM,SAAS,IAAI,oBAAoB,EAAE;AAC1C,YAAA,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACpF;IACJ;AAEA,IAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3B,MAAM,QAAQ,GAAI,KAAa,CAAC,MAAM,CAAC,QAAQ,CAAa;AAC5D,QAAA,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE;YACpC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI;QACjD;IACJ;IAEA,IAAI,IAAI,EAAE;AACN,QAAA,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzD;AAEC,IAAA,KAAa,CAAC,MAAM,GAAG,CACpB,WAAe,EACf,SAAkB,KACjB,MAAM,CAAK,WAAW,EAAE,SAAS,EAAE,KAAY,CAAC;AAErD,IAAA,OAAO,KAAK;AAChB;;AC/xBM,SAAU,SAAS,CAAC,KAAa,EAAA;AACnC,IAAA,OAAO,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KACvC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,IAAI,CAAA,GAAA,CAAK,GAAG,KAAK,CACpC,CAAC,IAAI,CAAC,EAAE,CAAC;AACd;AAEM,SAAU,WAAW,CAAC,MAAc,EAAA;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI;AAEnC,IAAA,MAAM,IAAI,GAAe;AACrB,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,IAAI,EAAE;KACT;;AAGD,IAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI;IAChC,OAAO,OAAO,EAAE;AACZ,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;;AAErC,QAAA,IAAI,UAAU,KAAK,SAAS,EAAG;AAC3B,YAAA,OAAO,GAAG,OAAO,CAAC,IAAI;YACtB;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA,CAAE,CAAC;QACjD,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,KAAI;AAC7B,YAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;gBAAE;AACtB,YAAA,MAAM,MAAM,GAAGA,iBAAS,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAiC,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,GAAG,CAAC,MAAiC,CAAC,GAAG,CAAC;YAAE;AACrG,YAAA,IAAI,CAAC,GAAG,CAAC,MAAiC,CAAC,EAAE;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG,OAAO,CAAC,IAAI;IAC1B;AAEA,IAAA,OAAO,IAAI;AACf;;AChCA;;AAEG;MACU,MAAM,CAAA;AACf,IAAA,QAAQ,MAAM,CAAC,QAAQ;AACvB,IAAA,QAAQ,QAAQ,IAAI,qBAAqB;AACzC,IAAA,QAAQ,QAAQ,IAAI,qBAAqB;IAEzC,CAAC,MAAM;IACP,CAAC,OAAO;AAER;;;;;AAKG;IACH,OAAO,UAAU,CAAC,QAAa,EAAA;;;;;;;;AAQ3B,QAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE;AACtC,YAAA,KAAK,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC;AAC/B,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AACF,QAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;IAC1B;AAEA;;;;;;;;;;;AAWG;AACH,IAAA,OAAO,oBAAoB,GAAA;QACvB,MAAM,IAAI,GAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/C,0BAA0B,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAClB,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;;;AAQG;IACH,OAAO,EAAE,CAAC,IAAoB,EAAA;QAC1B,OAAO,QAAQ,IAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,QAAQ;IACxE;AAEA;;;;;;;;;;;AAWG;IACH,OAAO,QAAQ,CAAC,GAAQ,EAAA;AACpB,QAAA,OAAO,OAAO,GAAG,EAAE,MAAM,KAAK,UAAU;IAC5C;AAEA;;;;;;AAMG;AACH,IAAA,QAAQ,MAAM,CAAC,CAAE,UAAsB,EAAE,KAAa,EAAE,SAAA,GAAuBA,iBAAS,CAAC,GAAG,EAAA;AACxF,QAAA,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;IACvC;AAEA;;;;;;;;AAQG;IACH,QAAQ,OAAO,CAAC,CAAE,GAAW,EAAE,KAAa,EAAE,IAAe,EAAA;QACzD,MAAM,QAAQ,GAAc,GAAG,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG;AAEhC,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;;YAEpB,OAAO,GAAG,KAAK,SAAS;QAE5B;AAAO,aAAA,IAAI,GAAG,KAAK,SAAS,EAAE;;AAE1B,YAAA,OAAO,IAAI;QAEf;AAAO,aAAA,IAAI,GAAG,KAAK,gBAAgB,EAAE;;YAEjC,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElD;aAAO;;YAEH,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;QAChD;IACJ;;AAGA,IAAA,WAAA,CAAY,GAAO,EAAA;AACf,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QACvB,IAAI,GAAG,EAAE;AACL,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;QACjC;IACJ;AAEA;;;;AAIG;AACI,IAAA,MAAM,CAA0B,KAAyB,EAAA;AAC5D,QAAA,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;AAC/B,QAAA,OAAO,IAAI;IACf;AAEA;;;;AAIG;AACO,IAAA,OAAO,WAAW,CAAC,MAAW,EAAE,MAAW,EAAA;QACjD,MAAM,QAAQ,GAAa,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9D,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;AAChD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,KAAK,EAAE;oBAAE;gBAAU;gBACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;gBAC9B;YACJ;QACJ;;QAEA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;YACnB,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;gBAAE;YAAU;YACzD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QAC7B;IACJ;AAEA;;;;AAIG;AACI,IAAA,OAAO,CAAC,QAAsB,EAAA;QACjC,MAAM,QAAQ,GAAc,IAAI,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE/E,QAAA,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE;AAC/B,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,UAA2B,CAAC;AACnD,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAkB;AAC1C,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;AAC5B,YAAA,MAAM,KAAK,GAAI,QAAgB,CAAC,SAAS,CAAC;YAE1C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;gBACvC;YACJ;AAEA,YAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;;AAE/B,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK;YAE3B;AAAO,iBAAA,IAAI,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;;AAE7B,gBAAA,MAAM,QAAQ,GAAG,IAAK,SAA2B,EAAE;AACnD,gBAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,QAAe;YAErC;AAAO,iBAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;;gBAEtC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAW;AAC1D,gBAAA,MAAM,SAAS,GAAI,SAAiB,CAAC,cAAc,CAAC;AAEpD,gBAAA,IAAI,cAAc,KAAK,KAAK,EAAE;AAC1B,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAQ;AACxC,oBAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACrB,wBAAA,IAAI,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;AACtB,4BAAA,MAAM,aAAa,GAAG,IAAK,SAA2B,EAAE;4BACxD,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,4BAAA,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;wBACrC;6BAAO;4BACH,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;wBAClC;oBACJ;gBAEJ;AAAO,qBAAA,IAAI,cAAc,KAAK,OAAO,EAAE;AACnC,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAQ;AAC1C,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,wBAAA,IAAI,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;AACtB,4BAAA,MAAM,aAAa,GAAG,IAAK,SAA2B,EAAE;4BACxD,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,4BAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;wBACnC;6BAAO;4BACH,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC9B;oBACJ;gBACJ;YACJ;QACJ;AAEA,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;IACI,QAAQ,CAAuC,QAAoB,EAAE,SAAqB,EAAA;QAC7F,MAAM,QAAQ,GAAc,IAAI,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/E,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CACjB,QAAQ,CAAC,QAAQ,CAAC,QAAkB,CAAC,CAAC,CAAC,KAAK,EAC5C,SAAS,CACZ;IACL;;;;;;;;;;;;;;;;;;;;;;IAwBO,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;IAC1B;;IAGO,cAAc,GAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;IAC3B;AAEA;;;AAGG;AACI,IAAA,SAAS,CAAI,EAAW,EAAA;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;IACvC;;AAGA,IAAA,IAAW,gBAAgB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;IAChC;IAEA,KAAK,GAAA;;AAED,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AACxD,QAAA,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QAEzB,MAAM,QAAQ,GAAc,IAAI,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;;;;;AAM/E,QAAA,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE;YAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,UAA2B,CAAC,CAAC,IAAkB;YAEtE,IACI,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,QAAQ;gBACjC,QAAS,IAAI,CAAC,KAAK,CAAS,EAAE,KAAK,CAAC,KAAK,UAAU,EACrD;;gBAEE,MAAM,CAAC,KAAK,CAAC,GAAI,IAAI,CAAC,KAAK,CAAS,CAAC,KAAK,EAAE;YAEhD;iBAAO;;gBAEH,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAC/B;QACJ;AAEA,QAAA,OAAO,MAAM;IACjB;IAEA,MAAM,GAAA;QACF,MAAM,GAAG,GAAQ,EAAE;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClD,QAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;AAC1B,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAkB;AAC9C,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;YAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,WAAW,EAAE;AAC3F,gBAAA,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,UAAU;sBAC7D,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;AAC3B,sBAAE,IAAI,CAAC,SAAS,CAAC;YACzB;QACJ;AACA,QAAA,OAAO,GAAG;IACd;AAEA;;;AAGG;IACH,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE;IAC/B;IAEA,CAAC,WAAW,CAAC,CAAC,KAAa,EAAA;QACvB,MAAM,QAAQ,GAAc,IAAI,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC/E,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAkB,CAAC;IACnD;IAEA,CAAC,cAAc,CAAC,CAAC,KAAa,EAAA;QAC1B,MAAM,QAAQ,GAAc,IAAI,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC/E,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAkB,CAAC,GAAG,SAAS;IACxD;AAEA;;;;;;AAMG;AACH,IAAA,OAAO,WAAW,CAAmB,GAAM,EAAE,YAAA,GAAwB,KAAK,EAAE,KAAA,GAAgB,CAAC,EAAE,OAAiB,EAAE,YAAoB,EAAE,EAAA;QACpI,MAAM,QAAQ,GAAG,CAAC,YAAY,IAAI,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE;AAC3E,QAAA,MAAM,UAAU,GAAe,GAAG,CAAC,QAAQ,CAAC;AAE5C,QAAA,MAAM,KAAK,GAAI,GAAY,CAAC,MAAM,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;;AAGvD,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;cACvC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,CAAA;cAC1B,EAAE;QAER,IAAI,MAAM,GAAG,CAAA,EAAG,SAAS,CAAC,KAAK,CAAC,CAAA,EAAG,SAAS,CAAA,EAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAA,SAAA,EAAY,KAAK,IAAI,QAAQ,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI;QAE/G,UAAU,CAAC,YAAY,CAAC,CAAC,eAAe,EAAE,UAAU,KAAI;YACpD,IAAI,GAAG,GAAG,UAAU;YACpB,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAK,GAAW,CAAC,UAAU,CAAC,EAAE;;AAE5D,gBAAA,GAAG,GAAI,GAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU;YAChE;YACA,MAAM,SAAS,GAAG,CAAE,GAAW,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,CAAA,EAAA,EAAK,GAAG,MAAM,GAAG,EAAE;AACpG,YAAA,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC;AAChG,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACjB;AAEA;;;;;;;AAOG;AACH,IAAA,OAAO,uBAAuB,CAC1B,GAAM,EACN,YAA6D,YAAY,EAAA;QAEzE,MAAM,WAAW,GAAa,EAAE;AAChC,QAAA,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC;AAEpC,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YACzB,IAAI,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI;YAC/C,OAAO,OAAO,EAAE;AACZ,gBAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACpB,oBAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACpD;AACA,gBAAA,OAAO,GAAG,OAAO,CAAC,IAAI;YAC1B;AACA,YAAA,OAAO,WAAW;QACtB;;;AAIA,QAAA,MAAM,YAAY,IAAI,SAAS,KAAK,oBAAoB,CAAC;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAc;AACrC,QAAA,MAAM,IAAI,GAAG,CAAC,UAAsB,KAAI;AACpC,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACvB,YAAA,IAAI,UAAU,CAAC,UAAU,KAAK,YAAY,EAAE;gBACxC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5C;AACA,YAAA,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;AACtD,QAAA,CAAC;QACD,IAAI,CAAC,cAAc,CAAC;AACpB,QAAA,OAAO,WAAW;IACtB;IAEA,OAAO,sBAAsB,CAAC,OAAgB,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC;IAC7D;AAEA;;;;;;;AAOG;AACH,IAAA,OAAO,YAAY,CAAgB,QAAW,EAAE,cAAuB,KAAK,EAAA;AACxE,QAAA,MAAM,UAAU,GAAe,QAAQ,CAAC,QAAQ,CAAC;QACjD,MAAM,KAAK,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS;AACpD,QAAA,IAAI,MAAM,GAAG,CAAA,EAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,EAAA,EAAK,QAAQ,CAAC,MAAM,CAAC,CAAA,MAAA,EAAS,KAAK,KAAK;QAEjF,IAAI,WAAW,EAAE;AACb,YAAA,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,KAAI;gBAC7B,MAAM,IAAI,MAAM,KAAK,CAAA,QAAA,EAAW,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA,GAAA,CAAK;AACjG,YAAA,CAAC,CAAC;QACN;aAAO;YACH,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,KAAI;AAC7B,gBAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;oBAAE;gBACtB,MAAM,IAAI,CAAA,GAAA,EAAM,KAAK,CAAA,GAAA,EAAMA,iBAAS,CAAC,EAAE,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA,GAAA,CAAK;AAC/G,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,MAAM;IACjB;;;ACxdJ;;;;;;;;;;;;;AAaG;MACU,cAAc,CAAA;AACb,IAAA,YAAY;IAEd,KAAK,GAAa,EAAE;IACpB,QAAQ,GAAa,EAAE;AACvB,IAAA,OAAO,GAAgB,IAAI,GAAG,EAAE;AAExC,IAAA,WAAA,CAAY,aAAqB,CAAC,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;IAClC;IAEA,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAG;AAC5B,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,YAAA,OAAO,EAAE;QACb;AACA,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC9B;AAEA,IAAA,OAAO,CAAC,KAAa,EAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC;AAEA;;;;AAIG;AACH,IAAA,OAAO,CAAC,KAAa,EAAA;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE;QACjC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE;QAAQ;QACjD,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE;IAChD;AAEA;;;AAGG;IACH,aAAa,GAAA;AACT,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;AAC7B,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9D,QAAA,OAAO,CAAC,MAAM,GAAG,CAAC;IACtB;AACH;;MC1CY,IAAI,CAAA;AA8GM,IAAA,KAAA;AA7GnB;;;AAGG;AACa,IAAA,MAAM;IAEtB,QAAQ,GAA2B,EAAE;IACrC,WAAW,GAAkC,EAAE;AAE/C;;;;AAIG;IACH,OAAO,GAAmB,oBAAoB,EAAE;AAEhD;;;;;AAKG;IACH,iBAAiB,GAAmB,oBAAoB,EAAE;AAE1D;;;;AAIG;IACK,SAAS,GAAqB,EAAE;AAExC;;;;;AAKG;IACK,WAAW,GAAW,CAAC;IACvB,YAAY,GAAa,EAAE;;IAG5B,aAAa,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG;AAC9B,cAAE,IAAI,CAAC,YAAY,CAAC,GAAG;AACvB,cAAE,IAAI,CAAC,WAAW,EAAE;IAC5B;;AAGO,IAAA,aAAa,CAAC,EAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9B;AAEA;;;;;AAKG;AACI,IAAA,WAAW,GAAoC,IAAI,GAAG,EAAE;AAE/D;;;;;AAKG;AACI,IAAA,WAAW,GAAoB,IAAI,GAAG,EAAE;AAExC,IAAA,YAAY,CAAC,IAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD;AAEO,IAAA,cAAc,CAAC,IAAe,EAAA;QACjC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;;;;;AAKhC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAClB,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AACnC,YAAA,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB;IACJ;AAEA;;;;AAIG;AACI,IAAA,iBAAiB,CAAC,EAA6B,EAAA;QAClD,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3B,gBAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW;AAAE,oBAAA,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3D;YACJ;YACA,EAAE,CAAC,IAAI,CAAC;QACZ;IACJ;AAEO,IAAA,cAAc,CAAC,MAAkB,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;IAChC;AAEO,IAAA,gBAAgB,CAAC,MAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACnC;IAEA,WAAA,CAAmB,KAAkB,EAAE,UAAA,GAAqB,CAAC,EAAA;QAA1C,IAAA,CAAA,KAAK,GAAL,KAAK;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC;IAChD;AAEA,IAAA,GAAG,CAAC,UAAsB,EAAA;AACtB,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG;;;;;AAM1B,QAAA,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AAC3B,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE;AAC/B,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAC5B,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,QAAQ,EAAE;AACb,aAAA,CAAC;QACN;AAEA,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;AAEzB,QAAA,MAAM,eAAe,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;QAC/D,IAAI,eAAe,EAAE;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,UAAU;QAAE;;;;QAK7D,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9B;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,gBAAgB,KAAK,CAAC,EAAE;;;;;;;AAOxB,YAAA,UAAU,CAAC,WAAW,CAAC,CAAC,UAAU,KAAI;AAClC,gBAAA,IAAI,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;AAC1C,oBAAA,UAAU,CAAC,wBAAwB,EAAE,CAAC,MAAM,CAAC,UAAU,EAAEA,iBAAS,CAAC,GAAG,CAAC;gBAC3E;qBAAO;oBACH,UAAU,CAAC,MAAM,CAAC,UAAU,EAAEA,iBAAS,CAAC,GAAG,CAAC;gBAChD;AACJ,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC;AAElD,QAAA,OAAO,eAAe;IAC1B;AAEA,IAAA,MAAM,CAAC,UAAsB,EAAA;QACzB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AACpC,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAE3C,QAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;;;;AAIf,YAAA,UAAU,CAAC,IAAI,GAAG,SAAS;AAC3B,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;;;AAK9B,YAAA,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC/B,gBAAA,MAAM,UAAU,GAAG,UAAU,CAAC,GAA4B;AAC1D,gBAAA,UAAU,CAAC,WAAW,IAAI;AAC1B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;YACrC;AAEA,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;AAChC,YAAA,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC;AAE1C,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;;;;;;;AAQxB,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;AAChC,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAC9B;YAEA,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;gBACjC,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACpC,oBAAA,KACI,KAAK,CAAC,SAAS,KAAK,SAAS;AAC7B,yBAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5D,uBAAE;AACC,wBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;oBAEtB;AAAO,yBAAA,IAAI,KAAK,CAAC,SAAS,EAAE;;AAExB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;oBAChC;gBACJ;AACJ,YAAA,CAAC,CAAC;QAEN;aAAO;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ;;;;;;;;;;AAW/B,YAAA,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC;QAChD;AAEA,QAAA,OAAO,QAAQ;IACnB;AAEA,IAAA,2BAA2B,CAAC,UAAsB,EAAA;AAC9C,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACjC,QAAA,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAClF;AAEA,IAAA,gBAAgB,CAAC,UAAsB,EAAA;AACnC,QAAA,IAAI,UAAU,CAAC,WAAW,EAAE;AACxB,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,CAAC;QACjG;AACA,QAAA,IAAI,UAAU,CAAC,qBAAqB,EAAE;AAClC,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;QAC/H;IACJ;AAEQ,IAAA,uBAAuB,CAC3B,SAAyB,EACzB,UAAsB,EACtB,IAAoB,EACpB,SAAkD,EAAA;AAElD,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM;AAChC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE;QAElC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,IAAI;YAAE;;AAGxC,QAAA,IAAI,MAAM,GAAG,UAAU,CAAC,IAAI;QAC5B,OAAO,MAAM,EAAE;YACX,IAAI,MAAM,KAAK,IAAI;AAAE,gBAAA,OAAO;AAC5B,YAAA,MAAM,GAAG,MAAM,CAAC,IAAI;QACxB;;;AAIA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC9B;aAAO;AACH,YAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC9B;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC9B;aAAO;AACH,YAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC9B;;AAGA,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AAE3B,QAAA,IAAI,UAAU,CAAC,IAAI,EAAE;AACjB,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI;QAC/B;aAAO;AACH,YAAA,SAAS,CAAC,IAAI,GAAG,IAAI;QACzB;AAEA,QAAA,UAAU,CAAC,IAAI,GAAG,IAAI;IAC1B;AAEO,IAAA,iBAAiB,CACpB,UAAsB,EACtB,YAAY,GAAG,UAAU,CAAC,WAAW,EAAA;QAErC,IAAI,YAAY,EAAE;YAAE;QAAQ;AAC5B,QAAA,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;IACzE;AAEO,IAAA,iBAAiB,CACpB,UAAsB,EACtB,YAAY,GAAG,UAAU,CAAC,qBAAqB,EAAA;QAE/C,IAAI,YAAY,EAAE;YAAE;QAAQ;AAC5B,QAAA,UAAU,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC;IAC7F;IAEQ,aAAa,CAAC,IAAoB,EAAE,UAAsB,EAAA;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS;AAC3B,QAAA,IAAI,IAAoB;AACxB,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACjB,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,EAAG;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;QACrB;aAAO;AACH,YAAA,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE;QACxE;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACZ,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QACpB;aAAO;AACH,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACrB,YAAA,IAAI,CAAC,IAAK,CAAC,IAAI,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QACpB;AACA,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;AACI,IAAA,WAAW,CAAC,IAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAU;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEO,IAAA,eAAe,CAAC,UAAsB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,CAAC;IAC5F;AAEO,IAAA,yBAAyB,CAAC,UAAsB,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;IAC1H;AAEQ,IAAA,WAAW,CACf,SAAyB,EACzB,UAAsB,EACtB,IAAgC,EAChC,SAAkD,EAAA;AAElD,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU;AAAE,YAAA,OAAO,KAAK;AAEzD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC9B;aAAO;AACH,YAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC9B;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC9B;aAAO;AACH,YAAA,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC9B;AAEA,QAAA,UAAU,CAAC,SAAS,CAAC,GAAG,SAAS;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtB,QAAA,OAAO,IAAI;IACf;AACH;;ACtUD;;;AAGG;AACH,SAAS,kBAAkB,CAAC,GAAc,EAAA;IACtC,IAAI,GAAG,CAAC,mBAAmB;QAAE;AAC7B,IAAA,IAAI,GAAG,CAAC,gBAAgB,EAAE;AACtB,QAAA,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,mBAAmB,GAAG,GAAG;AACvD,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACtD;AACA,IAAA,GAAG,CAAC,mBAAmB,GAAG,IAAI;AAClC;AAEA;;;;AAIG;AACH,SAAS,gBAAgB,CAAC,GAAc,EAAE,UAAkB,EAAA;IACxD,cAAc,CAAC,GAAG,EAAE,UAAU,EAAEA,iBAAS,CAAC,GAAG,CAAC;AAClD;AAEA;;;;;;;;;;;AAWG;AACH,SAAS,aAAa,CAAC,GAAc,EAAE,UAAsB,EAAA;AACzD,IAAA,IAAI,UAAU,CAAC,YAAY,KAAK,GAAG,CAAC,GAAG;QAAE;AACzC,IAAA,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG;;;;IAKjC,IAAI,WAAW,GAAG,IAAI;AACtB,IAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAK;QACtB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;YAC9B,WAAW,GAAG,KAAK;QACvB;aAAO;AACH,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;QACpC;IACJ;IAEA,IAAI,WAAW,EAAE;AACb,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa;AACrC,QAAA,GAAG,CAAC,UAAU,GAAG,UAAU;AAC3B,QAAA,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG;AACxB,QAAA,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACxB,QAAA,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC5B,QAAA,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,UAAU;AAC1C,QAAA,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC5B,QAAA,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;AACtC,QAAA,GAAG,CAAC,mBAAmB,GAAG,KAAK;QAC/B,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,aAAa,IAAI,UAAU,KAAK,GAAG,CAAC,cAAc,CAAC;;;;;;AAO9G,QAAA2B,kBAAmB,CAAC,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC;IAC1D;AAEA,IAAAF,mBAAoB,CAAC,UAAU,EAAE,GAAG,EAAE,oBAAoB,CAAC;AAC/D;AAEA;;;;;AAKG;AACH,SAAS,oBAAoB,CAAC,GAAc,EAAE,KAAiB,EAAE,MAAW,EAAA;AACxE,IAAA,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;AAC7B;AAEA;;;;;AAKG;AACH,SAAS,cAAc,CAAC,GAAc,EAAE,UAAkB,EAAE,EAAa,EAAA;AACrE,IAAA,IAAI,UAAU,GAAG,CAAC,EAAE;;;;AAIhB,QAAA,IAAI,GAAG,CAAC,cAAc,KAAK,GAAG,CAAC,YAAY;YAAE;QAC7C,kBAAkB,CAAC,GAAG,CAAC;AACvB,QAAA,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG;QACxD;IACJ;;;;;AAMA,IAAA,MAAM,aAAa,GAAG,GAAG,CAAC;AACtB,WAAG,GAAG,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC;AACtE,UAAE,GAAG,CAAC,cAAc;AACxB,IAAA,IAAI,aAAa,KAAK,GAAG,CAAC,YAAY;QAAE;AAExC,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,GAAGzB,iBAAS,CAAC,GAAG,GAAG,EAAE;IACtD,IAAI,SAAS,KAAK,SAAS;QAAE;IAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC;QAAE;IAE5E,kBAAkB,CAAC,GAAG,CAAC;AACvB,IAAA,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC;AAChI;AAEA,SAAS,WAAW,CAAC,CAAa,EAAE,CAAa,EAAA;AAC7C,IAAA,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAClD,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AACvB,IAAA,OAAO,MAAM;AACjB;MAEa,OAAO,CAAA;IAChB,OAAO,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC;IAC9B,YAAY,GAAe,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;AAE9D,IAAA,OAAO;AACP,IAAA,KAAK;AAEL,IAAA,IAAI;IAEJ,WAAA,CAAY,KAAQ,EAAE,IAAW,EAAA;;;;;;;QAO7B,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,WAA4B,CAAC;AACpE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAE1C,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxB;AAEU,IAAA,QAAQ,CAAC,KAAQ,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3C;AAEQ,IAAA,UAAU,GAAc;AAC5B,QAAA,IAAI,EAAE,SAAU,EAAE,MAAM,EAAE,SAAU,EAAE,EAAE,EAAE,SAAU,EAAE,UAAU,EAAE,SAAU;AAC5E,QAAA,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;QAC3E,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK;QACnD,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK;AAC3D,QAAA,aAAa,EAAE,CAAC;QAChB,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK;QACtE,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,SAAU;KACvD;AAED;;;;;AAKG;IACK,YAAY,GAAW,CAAC;AAEhC,IAAA,MAAM,CACF,EAAA,GAAe,EAAE,MAAM,EAAE,CAAC,EAAE,EAC5B,IAAgB,EAChB,MAAA,GAAqB,IAAI,CAAC,YAAY,EACtC,aAAa,GAAG,EAAE,CAAC,MAAM,EAAA;AAEzB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,mBAAmB,KAAK,CAAC;IACvF;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CACZ,EAAA,GAAe,EAAE,MAAM,EAAE,CAAC,EAAE,EAC5B,IAAgB,EAChB,MAAA,GAAqB,IAAI,CAAC,YAAY,EACtC,aAAa,GAAG,EAAE,CAAC,MAAM,EAAA;AAEzB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,mBAAmB,IAAI,CAAC;IACtF;IAEQ,cAAc,CAClB,EAAY,EACZ,IAA2B,EAC3B,MAAkB,EAClB,aAAqB,EACrB,UAAmB,EAAA;AAEnB,QAAA,MAAM,OAAO,IAAI,IAAI,KAAK,SAAS,CAAC;QACpC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAE3C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,GAAG,CAAC,IAAI,GAAG,IAAI;AACf,QAAA,GAAG,CAAC,MAAM,GAAG,MAAM;AACnB,QAAA,GAAG,CAAC,EAAE,GAAG,EAAE;AACX,QAAA,GAAG,CAAC,IAAI,GAAG,IAAI;AACf,QAAA,GAAG,CAAC,WAAW,GAAG,KAAK;AACvB,QAAA,GAAG,CAAC,OAAO,GAAG,OAAO;;;;AAIrB,QAAA,GAAG,CAAC,YAAY,GAAG,OAAO;AAE1B,QAAA,MAAM,KAAK,GAAmB,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;QAC1F,IAAI,OAAO,GAAoC,KAAK;AAEpD,QAAA,OAAO,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE;AAC3B,YAAA,MAAM,UAAU,GAAI,OAA0B,CAAC,UAAU;YAEzD,IAAI,OAAO,EAAE;gBACT,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE;AACvC,oBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;oBAC9B;gBACJ;AACA,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;YACpC;AAEA,YAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC,kBAAkB,GAAG,UAAU;YACxE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE;gBAAE;YAAU;AAE9C,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa;AACrC,YAAA,GAAG,CAAC,UAAU,GAAG,UAAU;AAC3B,YAAA,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG;AACxB,YAAA,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC1B,YAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACxB,YAAA,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC5B,YAAA,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,UAAU;AAC1C,YAAA,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC5B,YAAA,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;AACtC,YAAA,GAAG,CAAC,mBAAmB,GAAG,KAAK;YAC/B,GAAG,CAAC,UAAU,IAAI,UAAU,KAAK,cAAc,CAAC;;;;AAIhD,YAAA,GAAG,CAAC,gBAAgB,IAAI,OAAO,IAAI,EAAE,CAAC,MAAM,GAAG,aAAa,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAEhF,YAAA,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC;QAChD;;;;;;QAOA,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE;AAC/F,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC;QAEA,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE;YAC/B,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;AAC9C,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC;QAClG;QAEA,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;IACxC;AAEA;;;;;AAKG;AACK,IAAA,cAAc,CAClB,EAAY,EACZ,MAAkB,EAClB,YAAqB,EACrB,IAAgB,EAChB,aAAA,GAAwB,EAAE,CAAC,MAAM,EAAA;AAEjC,QAAA,MAAM,OAAO,IAAI,IAAI,KAAK,SAAS,CAAC;QACpC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAE3C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,GAAG,CAAC,IAAI,GAAG,IAAI;AACf,QAAA,GAAG,CAAC,MAAM,GAAG,MAAM;AACnB,QAAA,GAAG,CAAC,EAAE,GAAG,EAAE;AACX,QAAA,GAAG,CAAC,IAAI,GAAG,IAAI;AACf,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI;AACtB,QAAA,GAAG,CAAC,OAAO,GAAG,OAAO;AACrB,QAAA,GAAG,CAAC,YAAY,GAAG,YAAY;;;;;;AAO/B,QAAA,GAAG,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,YAAY;AAC7B,QAAA,GAAG,CAAC,aAAa,GAAG,aAAa;AACjC,QAAA,GAAG,CAAC,cAAc,GAAG,cAAc;AACnC,QAAA,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC;QAElC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE;YAC/B,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;AAC9C,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC;QACrF;QAEA,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;IACxC;IAEQ,aAAa,CAAC,MAAkB,EAAE,UAAkB,EAAA;AACxD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW;QAEjF,OAAO,CAAC,IAAI,CAAC,CAAA;;;AAGO,0BAAA,EAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;AAC9F,CAAA,CAAC;AAEM,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;AACzC,QAAA,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAErB,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,YAAY,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;QACjC;AAEA,QAAA,OAAO,SAAS;IACpB;IAEA,SAAS,CACL,EAAA,GAAe,EAAE,MAAM,EAAE,CAAC,EAAE,EAC5B,MAAA,GAAqB,IAAI,CAAC,YAAY,EAAA;AAEtC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,qBAAqB,KAAK,CAAC;IACpE;IAEA,aAAa,CACT,IAAe,EACf,YAAoB,EACpB,EAAY,EACZ,KAAA,GAAoB,IAAI,CAAC,YAAY,EAAA;AAErC,QAAA,MAAM,UAAU,GAAG,EAAE,CAAC,MAAM;AAE5B,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,qBAAqB,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC;QAEzE,OAAO,WAAW,CACd,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,EAC/B,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CACxC;IACL;IAEA,UAAU,CACN,IAAe,EACf,YAAoB,EACpB,EAAY,EACZ,KAAA,GAAoB,IAAI,CAAC,YAAY,EAAA;AAErC,QAAA,MAAM,UAAU,GAAG,EAAE,CAAC,MAAM;;;;;AAM5B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;QAG9B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YACzC,MAAM,UAAU,GAAe,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAE3D,YAAA,IAAI,UAAU,KAAK,SAAS,EAAE;;AAE1B,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC1B;YACJ;AAEA,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;gBACpB;YACJ;AAEA,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa;AACrC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;;;;AAI9B,YAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG;AAC1B,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS;YAEtC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,mBAAmB,GAAG,GAAG;AAC9C,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;;;YAIrC,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,OAAO,EAAE;;;gBAG/B,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;AAC3C,gBAAA,MAAM,SAAS,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAKA,iBAAS,CAAC,MAAM;;AAGjE,gBAAA,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC;YACjF;QACJ;;;;;AAMA,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;;;QAIpB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC;QAExC,OAAO,WAAW,CACd,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,EAC/B,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CACxC;IACL;AAEA;;;;;;AAMG;IACH,oBAAoB,CAChB,IAAe,EACf,YAAoB,EACpB,EAAY,EACZ,KAAA,GAAoB,IAAI,CAAC,YAAY,EAAA;AAErC,QAAA,MAAM,UAAU,GAAG,EAAE,CAAC,MAAM;QAE5B,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC;QAElD,OAAO,WAAW,CACd,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,EAC/B,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CACxC;IACL;AAEA;;;;;;;;;;AAUG;IACK,oBAAoB,CAAC,MAAkB,EAAE,EAAY,EAAA;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;AACrC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC1B,MAAM,CAAC,GAAQ,MAAM;AACrB,YAAA,MAAM,IAAI,GAAe,CAAC,CAAC,QAAQ,CAAC;;;AAGpC,YAAA,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;YAC7B,IAAI,WAAW,KAAK,SAAS;gBAAE;;;;;AAM/B,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,OAAQ;AACrB,YAAA,MAAM,OAAO,GAAgB,EAAE,CAAC,gBAAgB;AAChD,YAAA,MAAM,OAAO,GAAgB,EAAE,CAAC,gBAAgB;AAChD,YAAA,MAAM,IAAI,GAAgB,EAAE,CAAC,aAAa;AAC1C,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC;AACnC,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC;AAEhC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa;AAC/B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO;AAClC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ;;AAGpC,YAAA,IAAI,UAAU,IAAI,OAAO,EAAE;gBACvB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,mBAAmB,GAAG,GAAG;gBAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;;gBAGtC,IAAI,UAAU,EAAE;AACZ,oBAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;wBACvB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAEA,iBAAS,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC;oBAC9F;oBACA,OAAO,CAAC,KAAK,EAAE;gBACnB;;AAGA,gBAAA,MAAM,GAAG,GAAW,EAAE,CAAC,UAAU;gBACjC,MAAM,eAAe,GAAU,EAAE;gBACjC,IAAI,KAAK,GAAG,CAAC;gBACb,MAAM,QAAQ,GAAa,EAAE;AAC7B,gBAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;oBACvB,IAAI,KAAK,IAAI,GAAG;wBAAE;;;;oBAIlB,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC;AACnC,oBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,wBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;wBAClB;oBACJ;oBACA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAEA,iBAAS,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC;AACvF,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,oBAAA,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7B,oBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAClB,oBAAA,KAAK,EAAE;gBACX;gBACA,KAAK,MAAM,GAAG,IAAI,QAAQ;AAAE,oBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;;;;;;;AAQ/C,gBAAA,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE;AACnC,oBAAA,MAAM,MAAM,GAA2B,OAAO,CAAC,QAAQ,CAAC;oBACxD,IAAI,MAAM,KAAK,SAAS;wBAAE;AAC1B,oBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;oBAC/B,IAAI,OAAO,KAAK,SAAS;wBAAE;oBAE3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,mBAAmB,GAAG,GAAG;oBAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAElC,oBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa;AACnC,oBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO;AAChC,oBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ;AAClC,oBAAA,MAAM,CAAC,WAAW,CAAC,CAAC,GAAW,KAAI;;AAE/B,wBAAA,IAAI,QAAQ,CAAC,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC;4BAAE;wBACpD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAEA,iBAAS,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;AACrF,oBAAA,CAAC,CAAC;gBACN;YACJ;;;;;AAMA,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACpB,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC;gBACnC,IAAI,OAAO,KAAK,SAAS;oBAAE;AAC3B,gBAAA,MAAM,MAAM,GAA2B,OAAO,CAAC,QAAQ,CAAC;gBACxD,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;oBAAE;AAE3C,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC/B,IAAI,OAAO,KAAK,SAAS;oBAAE;gBAE3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,mBAAmB,GAAG,GAAG;gBAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAElC,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa;AACnC,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO;AAChC,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ;gBAClC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAa,KAAI;oBAC1C,IAAI,GAAG,GAAG,CAAC;AAAE,wBAAA,OAAO;AACpB,oBAAA,IAAI,QAAQ,CAAC,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC;wBAAE;AACpD,oBAAA,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC;AAC1E,gBAAA,CAAC,CAAC;YACN;QACJ;IACJ;AAEA;;;;;;;;;AASG;AACK,IAAA,mBAAmB,CAAC,IAAe,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;AACrC,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE;AAExB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;AAEtB,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC1B,MAAM,CAAC,GAAQ,MAAM;;;AAGrB,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,OAAQ;YACrB,MAAM,OAAO,GAA4B,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YACrE,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;gBAAE;;;;;AAMjD,YAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ;;;;YAK5B,MAAM,SAAS,GAAa,EAAE;YAC9B,KAAK,MAAM,CAAC,IAAI,OAAO;AAAE,gBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAE1C,YAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;;;AAGxB,gBAAA,SAAS,CAAC,IAAI,CACV,CAAC,CAAS,EAAE,CAAS,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAClG;YACL;AAEA,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;YAE7C,IAAI,IAAI,GAA4B,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7D,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE;gBAChB,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;YACnC;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC5B,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC;gBACxB,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC;AACnC,gBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;;AAEvB,oBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;oBACnB;gBACJ;;;;;;;AAOA,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;;;;;;AAO3B,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;AAChC,gBAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACtB,oBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;oBAC/B,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACzC,oBAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AACzB,wBAAA,SAAS,GAAG,IAAI,GAAG,EAAE;wBACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;oBACxC;AACA,oBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ;AAClC,oBAAA,MAAM,CAAC,WAAW,CAAC,CAAC,KAAa,KAAI;AACjC,wBAAA,IAAI,QAAQ,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC;4BAAE;wBACtD,SAAU,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,GAAG,CAAC;AACxC,oBAAA,CAAC,CAAC;gBACN;AACA,gBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AACnB,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACjB;QACJ;IACJ;IAEA,cAAc,GAAA;AACV,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;AAC9B,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACtB,OAAO,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI;AACzB,YAAA,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YACzB,OAAO,GAAG,IAAI;QAClB;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;;;;AAKrB,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B;IAEA,wBAAwB,GAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB;AACxC,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACtB,OAAO,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI;AACzB,YAAA,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YACzB,OAAO,GAAG,IAAI;QAClB;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;IACzB;AAEA,IAAA,eAAe,CACX,KAAiB,EACjB,QAAuB,EACvB,UAAyB,EACzB,EAAY,EAAA;QAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;AAEvD,QAAA,IAAI,YAAY,KAAK,SAAS,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAA,iCAAA,EAAoC,UAAU,CAAC,IAAI,CAAA,yGAAA,CAA2G,CAAC;YAC5K;QACJ;AAEA,QAAA,IAAI,UAAU,KAAK,YAAY,EAAE;YAC7B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,GAAG,GAAG;YAClC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;QAC1C;IACJ;AAEA,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;IAC/C;AAEA,IAAA,IAAI,oBAAoB,GAAA;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,SAAS;IACzD;;;ACjyBE,SAAU,SAAS,CAAC,GAAU,EAAE,KAAa,EAAA;;IAE/C,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE;AACrC,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;AAE1B,IAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACvB;AAEA,IAAA,GAAG,CAAC,MAAM,GAAG,GAAG;AAEhB,IAAA,OAAO,IAAI;AACf;;ACNA,MAAM,eAAgB,SAAQ,KAAK,CAAA;AAC/B,IAAA,WAAA,CAAY,OAAe,EAAA;QACvB,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,iBAAiB;IACjC;AACH;MAQY,gBAAgB,CAAA;;;;;AAKlB,IAAA,IAAI,GAAG,IAAI,GAAG,EAAgB;IAE9B,QAAQ,GAAiC,EAAE;AAC3C,IAAA,WAAW,GAAG,IAAI,GAAG,EAAU;IAE/B,SAAS,GAAyC,EAAE;IACjD,YAAY,GAAW,CAAC;IAElC,eAAe,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC9B;;AAGA,IAAA,MAAM,CAAC,KAAa,EAAE,GAAS,EAAE,iBAA0B,IAAI,EAAA;QAC3D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;;;;;AAMzB,QAAA,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE;AAC/B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;QAEF,IAAI,cAAc,EAAE;AAChB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1D;QAEA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC;IACJ;;AAGA,IAAA,SAAS,CAAC,KAAa,EAAA;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAErC,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AACxB,YAAA,IAAI;AACA,gBAAA,MAAM,IAAI,eAAe,CAAC,6CAA6C,GAAG,KAAK,CAAC;YACpF;YAAE,OAAO,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACnB;YACA;QACJ;AAEA,QAAA,IAAI,QAAQ,KAAK,CAAC,EAAE;AAChB,YAAA,IAAI;gBACA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAChC,MAAM,IAAI,eAAe,CAAC,CAAA,wBAAA,EAA2B,KAAK,CAAA,mBAAA,EAAsB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;YACpI;YAAE,OAAO,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACnB;YACA;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B;IACJ;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;;IAGA,yBAAyB,GAAA;QACrB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;;;;YAI/B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAAE;YAAQ;YAExC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;;;YAKhC,IAAK,GAAG,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;gBACnE,MAAM,QAAQ,GAAc,GAAG,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9E,gBAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;oBAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAsB,CAAC,CAAC,IAAI;AACnD,oBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAmB,CAAC;oBACtC,IAAI,QAAO,KAAK,CAAC,KAAK,QAAQ,IAAI,KAAK,EAAE;AACrC,wBAAA,MAAM,UAAU,GAAI,KAAa,CAAC,MAAM,CAAC;AACzC,wBAAA,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC/D,4BAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;wBAC9B;oBACJ;gBACJ;YAEJ;iBAAO;gBACH,IAAI,QAAS,GAAW,CAAC,UAAU,CAAC,CAAC,KAAK,UAAU,EAAE;AAClD,oBAAA,KAAK,CAAC,IAAI,CAAE,GAAiB,CAAC,MAAM,EAAE;AACjC,yBAAA,OAAO,CAAC,CAAC,KAAK,KAAI;AACf,wBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;AAChC,wBAAA,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC/D,4BAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;wBAC9B;AACJ,oBAAA,CAAC,CAAC;gBACV;YACJ;YAEA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;IAC5B;AAEA,IAAA,WAAW,CAAC,KAAa,EAAE,gBAAiC,EAAE,QAAkB,EAAA;AAC5E,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,MAAM,IAAI,GAAG,CAAC,QAAO,gBAAgB,CAAC,KAAK,QAAQ;AAC3C,kBAAEA,iBAAS,CAAC,gBAAgB;kBAC1B,gBAAgB;AAC1B,YAAA,MAAM,IAAI,KAAK,CACX,yBAAyB,IAAI,CAAA,sBAAA,CAAwB,CACxD;QACL;QACA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE;QAC9B;QACA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,EAAE;YAC1C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE;QAChD;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtD,QAAA,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC;IACvE;AAEA,IAAA,cAAc,CAAC,KAAa,EAAE,KAAsB,EAAE,QAAkB,EAAA;AACpE,QAAA,MAAM,KAAK,GAAuB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC;QACrF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;AACrC,YAAA,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAClD;IACJ;AAEH;;MC/JY,OAAO,CAAA;AAChB,IAAA,OAAO;AAEP,IAAA,KAAK;AACL,IAAA,IAAI;IAEJ,YAAY,GAAW,CAAC;AAExB,IAAA,cAAc;IAEd,WAAA,CAAY,IAAO,EAAE,OAAqB,EAAA;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEnB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,WAA4B,CAAC;;;;;IAMhF;AAEU,IAAA,QAAQ,CAAC,IAAO,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,EAAE;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;IAC7B;AAEA,IAAA,MAAM,CACF,KAAiB,EACjB,EAAA,GAAe,EAAE,MAAM,EAAE,CAAC,EAAE,EAC5B,GAAA,GAAY,IAAI,CAAC,KAAK,EAAA;;;;;QAMtB,MAAM,UAAU,GAAwB,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS;AACtE,cAAE;cACA,IAAI;AAEV,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;AACvB,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;QAEnC,IAAI,OAAO,GAAoB,GAAG,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC;AAE3D,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AAErB,QAAA,OAAO,EAAE,CAAC,MAAM,GAAG,UAAU,EAAE;;;;YAI3B,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,mBAAmB,EAAE;gBACzC,EAAE,CAAC,MAAM,EAAE;AAEV,gBAAA,GAAW,CAAC,YAAY,CAAC,IAAI;gBAE9B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;;;;gBAKzC,IAAI,CAAC,OAAO,EAAE;;AAEV,oBAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,SAAS,CAAA,CAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACxG,oBAAA,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC;oBAC3D,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC;gBAEpD;qBAAO;oBACH,GAAG,GAAG,OAAO;AACb,oBAAA,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC;AACnC,oBAAA,IAAI,CAAC,YAAY,GAAG,SAAS;gBACjC;gBAEA;YACJ;AAEA,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC;AAExD,YAAA,IAAI,MAAM,KAAK,mBAAmB,EAAE;AAChC,gBAAA,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC;gBACrD,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC;gBAChD;YACJ;QACJ;;;;;;;AAQC,QAAA,GAAW,CAAC,YAAY,CAAC,IAAI;;QAG9B,IAAI,UAAU,KAAK,IAAI;AAAE,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;;QAG1D,KAAK,CAAC,yBAAyB,EAAE;AAEjC,QAAA,OAAO,UAAU;IACrB;AAEA,IAAA,oBAAoB,CAAC,KAAiB,EAAE,EAAY,EAAE,UAAkB,EAAA;;;;;QAKpE,MAAM,YAAY,GAAa,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;AACpD,QAAA,OAAO,EAAE,CAAC,MAAM,GAAG,UAAU,EAAE;YAC3B,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,mBAAmB,EAAE;gBAC1C,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC;AACnC,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE;oBACxD;gBACJ;YACJ;YACA,EAAE,CAAC,MAAM,EAAE;QACf;IACJ;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAE,EAAY,EAAE,WAA0B,EAAA;AACvE,QAAA,IAAI,IAAmB;QAEvB,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE;YAC9B,EAAE,CAAC,MAAM,EAAE;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;YACxC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QACpC;QAEA,OAAO,IAAI,IAAI,WAAW;IAC9B;AAEA,IAAA,oBAAoB,CAAC,IAAmB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;IACtC;IAEA,eAAe,CAAC,GAAe,EAAE,UAA+B,EAAA;QAC5D,MAAM,aAAa,GAAG,QAAS,GAAW,CAAC,UAAU,CAAC,CAAC,KAAK,QAAQ;AACpE,QAAA,MAAM,KAAK,GAAI,GAAW,CAAC,MAAM,CAAC;QAElC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,GAAQ,KAAI;YACjC,UAAU,EAAE,IAAI,CAAC;AACb,gBAAA,GAAG,EAAE,GAAU;gBACf,KAAK;gBACL,EAAE,EAAEA,iBAAS,CAAC,MAAM;AACpB,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,aAAa,EAAE;AAClB,aAAA,CAAC;YAEF,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtC;AACJ,QAAA,CAAC,CAAC;IACN;AAEH;;ACtID;;AAEG;AACI,MAAM,eAAe,GAAG,MAAM,CAAC;AAClC,IAAA,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;AAChB,IAAA,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;AAChB,IAAA,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;CAC7B,EAAE,iBAAiB;AAGb,MAAM,cAAc,GAAG,MAAM,CAAC;AACjC,IAAA,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;AACd,IAAA,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;AACrB,IAAA,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;CACnC,EAAE,gBAAgB;AAGZ,MAAM,UAAU,GAAG,MAAM,CAAC;AAC7B,IAAA,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;AAC9B,IAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,EAAE,YAAY;AAOf,UAAU,CAAC,MAAM,GAAG,UAAU,OAAgB,EAAE,EAAA,GAAe,EAAE,MAAM,EAAE,CAAC,EAAE,EAAA;AACxE,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;AAE/B,IAAA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;AACnC,IAAA,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;;;AAIjD,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AAC/D,IAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;AAAE,QAAA,UAAU,CAAC,QAAQ,GAAG,QAAQ;IAAE;AAEpD,IAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU;IACzC,MAAM,sBAAsB,GAA2C,EAAE;;;AAIzE,IAAA,MAAM,OAAO,GAAG,CAAC,IAAoB,KAAI;AACrC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACrE,YAAA,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAE5B,YAAA,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAE3B,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5C,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,gBAAA,OAAO,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;AACtC,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;YACnD;QACJ;aAAO;YACH,IAAI,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE;AACtD,gBAAA,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;YAC/C;YACA,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACrD;AACJ,IAAA,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE;AACjC,QAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;;QAGxB,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;AAChD,QAAA,IAAI,WAAW,KAAK,MAAM,EAAE;YACxB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACrD;QAEA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;;;;;QAMvC,IAAI,QAAQ,KAAK,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AAC3C,YAAA,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE;AAC/B,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;gBAChC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI;;AAGtC,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE;oBAC5D;gBACJ;AAEA,gBAAA,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;AAC7C,gBAAA,eAAe,CAAC,IAAI,GAAG,SAAS;AAEhC,gBAAA,IAAI,SAAiB;AAErB,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAE7B,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;AAClC,oBAAA,SAAS,GAAG,KAAK,CAAC,IAAI;gBAE1B;qBAAO;AACH,oBAAA,IAAI,eAA8B;;;;oBAKlC,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;wBACvB,SAAS,GAAG,KAAK;AACjB,wBAAA,eAAe,GAAG,KAAK,CAAC,IAAqB;oBAEjD;yBAAO;AACH,wBAAA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEtC,wBAAA,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,SAAoC,CAAC,CAAC,KAAK,QAAQ,EAAE;4BACxE,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,SAAoC,CAAC,CAAC;wBAExE;6BAAO;AACH,4BAAA,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,SAAoC,CAAC;wBACtE;oBACJ;AAEA,oBAAA,eAAe,CAAC,cAAc,GAAG,CAAC,eAAe;AAC7C,0BAAE,OAAO,CAAC,SAAS,CAAC,eAAe;0BACjC,EAAE;gBACZ;AAEA,gBAAA,eAAe,CAAC,IAAI,GAAG,SAAS;AAChC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YACrC;QACJ;QAEA,OAAO,CAAC,IAAI,CAAC;AACjB,IAAA,CAAC,CAAC;;AAGF,IAAA,KAAK,MAAM,MAAM,IAAI,sBAAsB,EAAE;QACzC,sBAAsB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KACxC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC;IAEA,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;AAClC,CAAC;AAED,UAAU,CAAC,MAAM,GAAG,UAAqC,KAAiB,EAAE,EAAa,EAAA;AACrF,IAAA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;AAEnC,IAAA,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;AACjD,IAAA,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;AAEnC,IAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE;;IAGrC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,KAAI;AACxC,QAAA,MAAM,WAAW,GAAkB,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,MAAM;AACtF,QAAA,MAAM,MAAM,GAAkB,MAAM,CAAE,SAAQ,WAAW,CAAA;SAAI;;AAG7D,QAAA,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE5B,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;IAC9C,CAAC,EAAE,EAAE,CAAC;;IAGN,MAAM,SAAS,GAAG,CAAC,QAAkB,EAAE,cAA8B,EAAE,gBAAwB,KAAI;QAC/F,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AACvC,YAAA,MAAM,UAAU,GAAG,gBAAgB,GAAG,CAAC;AAEvC,YAAA,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE;AACpC,gBAAA,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI;gBAC1B,IAAI,OAAO,GAAkB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;;gBAGlE,IAAI,CAAC,OAAO,EAAE;oBACV,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,oBAAA,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;AACvB,oBAAA,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAkB,CAAC;gBAC3C;AAEA,gBAAA,IAAI,SAAS,KAAK,KAAK,EAAE;AACrB,oBAAA,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;gBAEhE;qBAAO;AACH,oBAAA,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC;gBACjF;YAEJ;iBAAO;AACH,gBAAA,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAqB,CAAC;YACpF;AACJ,QAAA,CAAC,CAAC;AACN,IAAA,CAAC;;IAGD,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,KAAI;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;;QAGjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QAE5C,MAAM,cAAc,GAAqB,EAAE;QAE3C,IAAI,UAAU,GAAmB,cAAc;AAC/C,QAAA,GAAG;AACC,YAAA,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;YAC/B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,SAAS,CAAC;QAC5E,CAAC,QAAQ,UAAU;QAEnB,IAAI,gBAAgB,GAAG,CAAC;QAExB,cAAc,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,cAAc,KAAI;;;AAGhD,YAAA,SAAS,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC;AACrD,YAAA,gBAAgB,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM;AACpD,QAAA,CAAC,CAAC;AACN,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,KAAK,GAAM,KAAK,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAoB,GAAE;AAEpF,IAAA,OAAO,IAAI,OAAO,CAAI,KAAK,EAAE,WAAW,CAAC;AAC7C,CAAC;;AC7ID;;;;;AAKG;AACG,SAAU,wBAAwB,CAAmB,OAAmB,EAAA;AAC1E,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI;AAC1B,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;AAEjC,IAAA,MAAM,UAAU,GAA+B,IAAI,OAAO,EAAE;AAC5D,IAAA,IAAI,oBAA0C;AAE9C,IAAA,OAAO,CAAC,cAAc,GAAG,UAAU,UAAwB,EAAA;AACvD,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU;AAEtC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;AAC5B,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAC1B,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;AACtB,YAAA,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC;YAEnC,IAAI,CAAC,UAAU,EAAE;gBAAE;YAAU;;;;AAK7B,YAAA,IACI,CAAC,MAAM,CAAC,EAAE,GAAGA,iBAAS,CAAC,MAAM,MAAMA,iBAAS,CAAC,MAAM;gBACnD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EACvC;AACE,gBAAA,MAAM,eAAe,GAAG,SAAS,CAAE,MAAM,CAAC,aAAqB,CAAC,MAAM,CAAC,CAAC,GAAGA,iBAAS,CAAC,MAAM,CAAC;AAC5F,gBAAA,KAAK,IAAI,CAAC,GAAG,eAAe,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,oBAAA,eAAe,CAAC,CAAC,CAAC,EAAE;gBACxB;YACJ;AAEA,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;;;gBAKtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;oBAE1B,MAAM,gBAAgB,GAAG,UAAU,GAAGA,iBAAS,CAAC,OAAO,CAAC;AACxD,oBAAA,KAAK,IAAI,CAAC,GAAG,gBAAgB,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACpD,wBAAA,gBAAgB,CAAC,CAAC,CAAC,EAAE;oBACzB;gBACJ;gBAEA,IAAI,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACzC,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,oBAAA,KAAK,IAAI,CAAC,GAAG,cAAc,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAClD,wBAAA,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;oBACzD;gBACJ;YAGJ;iBAAO;;;;AAKH,gBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,GAAGA,iBAAS,CAAC,MAAM,MAAMA,iBAAS,CAAC,MAAM,EAAE;;;;;;;;;;;AAWrD,oBAAA,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;;wBAEpC,MAAM,eAAe,GAAG,UAAU,CAACA,iBAAS,CAAC,MAAM,CAAC;AACpD,wBAAA,KAAK,IAAI,CAAC,GAAG,eAAe,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,4BAAA,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC;wBACjF;oBACJ;;AAGA,oBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,GAAGA,iBAAS,CAAC,GAAG,MAAMA,iBAAS,CAAC,GAAG,EAAE;wBAC/C,MAAM,YAAY,GAAG,UAAU,CAACA,iBAAS,CAAC,GAAG,CAAC;AAC9C,wBAAA,KAAK,IAAI,CAAC,GAAG,YAAY,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAChD,4BAAA,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC;wBACtE;oBACJ;gBAEJ;AAAO,qBAAA,IACH,CAAC,MAAM,CAAC,EAAE,GAAGA,iBAAS,CAAC,GAAG,MAAMA,iBAAS,CAAC,GAAG;AAC7C,oBAAA,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,KAAK,EACvC;;oBAEE,MAAM,YAAY,GAAG,UAAU,CAACA,iBAAS,CAAC,GAAG,CAAC;AAC9C,oBAAA,KAAK,IAAI,CAAC,GAAG,YAAY,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAChD,wBAAA,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC;oBACtE;gBACJ;;;;;;;;AASA,gBAAA,IACI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,aAAa;AACrC,qBAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,EACpE;oBACE,MAAM,gBAAgB,GAAG,UAAU,CAACA,iBAAS,CAAC,OAAO,CAAC;AACtD,oBAAA,KAAK,IAAI,CAAC,GAAG,gBAAgB,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACpD,wBAAA,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC;oBAC1E;gBACJ;YACJ;AAEA,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;AACJ,IAAA,CAAC;AAED,IAAA,SAAS,QAAQ,CACb,cAAyC,EACzC,OAAoB,EAAA;AAEpB,QAAA,IAAI,QAAQ,GAAa,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAc;AACzF,QAAA,IAAI,YAAY,IACZ,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,UAAU;AACxE,aAAC,cAAc,IAAI,QAAS,cAAgC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,WAAW,CAAC,CAClG;AAED,QAAA,IAAI,QAAQ,IAAI,CAAC,YAAY,EAAE;YAE3B,MAAM,WAAW,GAAG,UAChB,GAAQ,EACR,IAAY,EACZ,QAAkD,EAAE,SAAkB,EAAA;;AAGtE,gBAAA,IACI,SAAS;AACT,oBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS;AACpC,oBAAA,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,CAAC;kBACvC;oBACE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;gBAC/C;AACA,gBAAA,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC;AACzD,YAAA,CAAC;AAED;;AAEG;YACH,OAAO,IAAI,KAAK,CAAC;gBACb,MAAM,EAAE,SAAS,MAAM,CAAC,IAAY,EAAE,QAAkD,EAAE,SAAA,GAAqB,IAAI,EAAA;AAC/G,oBAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClB,wBAAA,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC;oBAEnE;yBAAO;;AAEH,wBAAA,IAAI,cAAc,GAAG,MAAK,EAAE,CAAC;wBAE7B,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAQ,EAAE,QAAiB,KAAI;4BACxD,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,IAAI,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACrH,wBAAA,CAAC,CAAC;AAEF,wBAAA,OAAO,MAAM,cAAc,EAAE;oBACjC;gBACJ,CAAC;AAED,gBAAA,QAAQ,EAAE,SAAS,QAAQ,CAAC,QAAoB,EAAA;AAC5C,oBAAA,OAAO,KAAK,CAAC,WAAW,CACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EACxBA,iBAAS,CAAC,OAAO,EACjB,QAAQ,CACX;gBACL,CAAC;;;;;AAMD,gBAAA,MAAM,EAAE,SAAS,MAAM,CAAC,YAAiB,EAAE,UAAqB,EAAA;oBAC5D,IAAI,CAAC,UAAU,EAAE;wBACb,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAsB,CAAC,CAAC,IAAI,CAAC;oBAC5F;AACA,oBAAA,OAAO,KAAK,CAAC,WAAW,CACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EACxBA,iBAAS,CAAC,OAAO,EACjB,MAAK;wBACD,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KACpB,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpD,oBAAA,CAAC,CACJ;gBACL;aACH,EAAE;gBACC,GAAG,CAAC,MAAM,EAAE,IAAY,EAAA;oBACpB,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC9C,IAAI,aAAa,EAAE;wBACf,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzC,wBAAA,MAAM,mBAAmB,IACrB,CAAC,QAA+C,KAAI;AAChD,4BAAA,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AACzD,gCAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;;;;;gCAMtB,MAAM,IAAI;4BACd,CAAC,EAAE,KAAK,CAAC;;4BAGT,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,SAAS,EAAE;AAClC,gCAAA,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;4BAC5B;AACJ,wBAAA,CAAC,CACJ;AAED,wBAAA,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE;;4BAEhC,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC;4BACxD,cAAc,EAAE,OAAO,CAAC,QAAQ;4BAChC,mBAAmB;AACtB,yBAAA,CAAC;oBAEN;yBAAO;;AAEH,wBAAA,OAAO,MAAM,CAAC,IAA2B,CAAC;oBAC9C;gBACJ,CAAC;AACD,gBAAA,GAAG,CAAC,MAAM,EAAE,IAAY,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;AAClE,gBAAA,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAA,EAAI,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAClD,gBAAA,cAAc,CAAC,CAAC,EAAE,EAAE,EAAA,EAAI,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5D,aAAA,CAAC;QAEN;aAAO;AACH;;AAEG;AAEH,YAAA,MAAM,KAAK,GAAG,UAAU,GAAQ,EAAE,QAAwC,EAAE,SAAkB,EAAA;;gBAE1F,IAAI,SAAS,EAAE;AACV,oBAAA,GAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/D;AAEA,gBAAA,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAEA,iBAAS,CAAC,GAAG,EAAE,CAAC,KAAU,EAAE,GAAQ,KAAI;AAC1E,oBAAA,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;oBAC9B,oBAAoB,GAAG,QAAQ;AAC/B,oBAAA,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;AACpB,oBAAA,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAC3B,oBAAoB,GAAG,SAAS;AACpC,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC;AAED,YAAA,MAAM,QAAQ,GAAG,UAAU,GAAQ,EAAE,QAAwC,EAAA;AACzE,gBAAA,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAEA,iBAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;AACrE,YAAA,CAAC;AAED,YAAA,MAAM,QAAQ,GAAG,UAAU,GAAQ,EAAE,QAAwC,EAAA;AACzE,gBAAA,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAEA,iBAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;AACtE,YAAA,CAAC;YAED,OAAO,IAAI,KAAK,CAAC;AACb,gBAAA,KAAK,EAAE,UAAS,QAAwC,EAAE,YAAqB,IAAI,EAAA;;;;;AAM/E,oBAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClB,wBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBAEhG;AAAO,yBAAA,IAAI,OAAO,CAAC,mBAAmB,EAAE;;AAEpC,wBAAA,IAAI,cAAc,GAAG,MAAK,EAAE,CAAC;wBAE7B,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAQ,EAAE,QAAiB,KAAI;AACxD,4BAAA,cAAc,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,IAAI,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzG,wBAAA,CAAC,CAAC;AAEF,wBAAA,OAAO,MAAM,cAAc,EAAE;oBACjC;gBACJ,CAAC;gBACD,QAAQ,EAAE,UAAS,QAAwC,EAAA;AACvD,oBAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;wBAClB,OAAO,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBAE/C;AAAO,yBAAA,IAAI,OAAO,CAAC,mBAAmB,EAAE;;AAEpC,wBAAA,IAAI,cAAc,GAAG,MAAK,EAAE,CAAC;AAE7B,wBAAA,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAQ,KAAI;AACrC,4BAAA,cAAc,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC5C,wBAAA,CAAC,CAAC;AAEF,wBAAA,OAAO,MAAM,cAAc,EAAE;oBACjC;gBACJ,CAAC;gBACD,QAAQ,EAAE,UAAS,QAAwC,EAAA;AACvD,oBAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;wBAClB,OAAO,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBAE/C;AAAO,yBAAA,IAAI,OAAO,CAAC,mBAAmB,EAAE;;AAEpC,wBAAA,IAAI,cAAc,GAAG,MAAK,EAAE,CAAC;AAE7B,wBAAA,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAQ,KAAI;AACrC,4BAAA,cAAc,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC5C,wBAAA,CAAC,CAAC;AAEF,wBAAA,OAAO,MAAM,cAAc,EAAE;oBACjC;gBACJ,CAAC;aACJ,EAAE;gBACC,GAAG,CAAC,MAAM,EAAE,IAAY,EAAA;AACpB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAA2B,CAAC,EAAE;AACtC,wBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAA,uDAAA,CAAyD,CAAC;oBACnG;AACA,oBAAA,OAAO,MAAM,CAAC,IAA2B,CAAC;gBAC9C,CAAC;AACD,gBAAA,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,OAAO,MAAM,CAAC,IAA2B,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;AAC/E,gBAAA,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAA,EAAI,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAClD,gBAAA,cAAc,CAAC,CAAC,EAAE,EAAE,EAAA,EAAI,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5D,aAAA,CAAC;QACN;IACJ;IAEA,SAAS,CAAC,CAAI,QAAW,EAAA;QACrB,OAAO,QAAQ,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAgC;IAC3E;AAEA,IAAA,OAAO,CAAC;AACZ;;AC1bM,SAAU,qBAAqB,CACjC,OAAgB,EAChB,QAAyC,EAAA;AAEzC,IAAA,OAAO,CAAC,cAAc,GAAG,QAAQ;AACrC;;MCuCa,qBAAqB,CAAA;AACpB,IAAA,OAAO;AACP,IAAA,YAAY,GAAgB,IAAI,GAAG,EAAE;IACrC,YAAY,GAAY,KAAK;AAEvC,IAAA,WAAA,CAAY,OAAwB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChE;AAEA,IAAA,IAAc,SAAS,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS;IACtC;AAEA,IAAA,IAAc,KAAK,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC7B;AAEU,IAAA,WAAW,CACjB,KAAa,EACb,mBAAuC,EACvC,OAAiB,EAAA;AAEjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;QAC/B,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,CAAC;IACjE;IAEU,oCAAoC,CAC1C,QAAmB,EACnB,YAAoB,EACpB,SAAoB,EACpB,OAAiB,EACjB,SAAA,GAAqB,IAAI,EAAA;AAEzB,QAAA,IAAI,aAAa,GAAe,MAAK,EAAE,CAAC;AACxC,QAAA,MAAM,WAAW,GAAG,MAAM,aAAa,EAAE;AAEzC,QAAA,MAAM,UAAU,GAAI,QAAgB,CAAC,YAAY,CAAY;;QAG7D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AACjD,YAAA,IAAI,sBAAkC;AACtC,YAAA,sBAAsB,GAAG,IAAI,CAAC,WAAW,CACrC,QAAQ,CAAC,MAAM,CAAC,EAChB,YAAY,EACZ,CAAC,KAAc,EAAE,CAAU,KAAI;gBAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;;AAEvC,oBAAA,sBAAsB,EAAE;AACxB,oBAAA,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC;gBACvE;AACJ,YAAA,CAAC,CACJ;YACD,aAAa,GAAG,sBAAsB;AACtC,YAAA,OAAO,WAAW;QAEtB;aAAO;;;;YAIH,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;YAEpD,IAAI,SAAS,KAAKA,iBAAS,CAAC,GAAG,IAAI,SAAS,EAAE;gBACzC,UAAmC,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,GAAQ,KAAI;AAClE,oBAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACvB,gBAAA,CAAC,CAAC;YACN;AAEA,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC;QACnE;IACJ;IAqBA,MAAM,CAAC,GAAG,IAAW,EAAA;QACjB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;;YAE7B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACrE;aAAO;;YAEH,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAClE;IACJ;IAEU,cAAc,CACpB,QAAmB,EACnB,YAAoB,EACpB,OAAoC,EACpC,YAAqB,IAAI,EAAA;QAEzB,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;;;;AAKpD,QAAA,MAAM,YAAY,GAAI,QAAgB,CAAC,YAAY,CAAC;QACpD,IAAI,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE;AAClE,YAAA,OAAO,CAAC,YAAY,EAAE,SAAgB,CAAC;QAC3C;AAEA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC;IACpE;IA2BA,QAAQ,CAAC,GAAG,IAAW,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;;AAElD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAW;AAClC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAA2B;AACjD,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAEA,iBAAS,CAAC,OAAO,EAAE,OAAO,CAAC;QACzE;QAEA,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;;YAE7B,OAAO,IAAI,CAAC,oCAAoC,CAC5C,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,CAAC,CAAC,EACPA,iBAAS,CAAC,OAAO,EACjB,IAAI,CAAC,CAAC,CAAC,CACV;QACL;aAAO;;YAEH,OAAO,IAAI,CAAC,oCAAoC,CAC5C,IAAI,CAAC,CAAC,CAAC,EACP,IAAI,CAAC,CAAC,CAAC,EACPA,iBAAS,CAAC,OAAO,EACjB,IAAI,CAAC,CAAC,CAAC,CACV;QACL;IACJ;IAqBA,KAAK,CAAC,GAAG,IAAW,EAAA;QAChB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;;AAE7B,YAAA,OAAO,IAAI,CAAC,oCAAoC,CAC5C,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,CAAC,CAAC,EACPA,iBAAS,CAAC,GAAG,EACb,IAAI,CAAC,CAAC,CAAC,EACP,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CACpB;QACL;aAAO;;AAEH,YAAA,OAAO,IAAI,CAAC,oCAAoC,CAC5C,IAAI,CAAC,CAAC,CAAC,EACP,IAAI,CAAC,CAAC,CAAC,EACPA,iBAAS,CAAC,GAAG,EACb,IAAI,CAAC,CAAC,CAAC,EACP,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CACpB;QACL;IACJ;IAmBA,QAAQ,CAAC,GAAG,IAAW,EAAA;QACnB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;;YAE7B,OAAO,IAAI,CAAC,oCAAoC,CAC5C,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,CAAC,CAAC,EACPA,iBAAS,CAAC,MAAM,EAChB,IAAI,CAAC,CAAC,CAAC,CACV;QACL;aAAO;;YAEH,OAAO,IAAI,CAAC,oCAAoC,CAC5C,IAAI,CAAC,CAAC,CAAC,EACP,IAAI,CAAC,CAAC,CAAC,EACPA,iBAAS,CAAC,MAAM,EAChB,IAAI,CAAC,CAAC,CAAC,CACV;QACL;IACJ;AAEA;;;AAGG;IACH,MAAM,CACF,IAAe,EACf,EAAW,EACX,UAAqB,EACrB,YAAqB,IAAI,EAAA;QAEzB,MAAM,QAAQ,GAAc,IAAI,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;;QAG/E,IAAI,CAAC,UAAU,EAAE;AACb,YAAA,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ;AAC5B,iBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC,iBAAA,GAAG,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAsB,CAAC,CAAC,IAAI,CAAC;QAC9D;QAEA,MAAM,MAAM,GAAG,MAAK;AAChB,YAAA,KAAK,MAAM,IAAI,IAAI,UAAW,EAAE;AAC5B,gBAAA,MAAM,SAAS,GAAI,IAAY,CAAC,IAAI,CAAC;AACrC,gBAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AACxB,oBAAA,EAAU,CAAC,IAAI,CAAC,GAAG,SAAS;gBACjC;YACJ;AACJ,QAAA,CAAC;QAED,IAAI,SAAS,EAAE;AACX,YAAA,MAAM,EAAE;QACZ;AAEA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAEA,iBAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IACpE;AAEU,IAAA,cAAc,CAAC,UAAwB,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;;;;;;AAOzB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAExB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;AAC5B,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAC1B,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;YAEtB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,UAAU,EAAE;gBACb;YACJ;;;;AAKA,YAAA,IACI,CAAC,MAAM,CAAC,EAAE,GAAGA,iBAAS,CAAC,MAAM,MAAMA,iBAAS,CAAC,MAAM;gBACnD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EACvC;gBACE,MAAM,UAAU,GAAI,MAAM,CAAC,aAAqB,CAAC,MAAM,CAAC;AACxD,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAGA,iBAAS,CAAC,MAAM,CAAC;gBACtE,IAAI,eAAe,EAAE;AACjB,oBAAA,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAClD,wBAAA,IAAI;AAAE,4BAAA,eAAe,CAAC,CAAC,CAAC,EAAE;wBAAE;wBAAE,OAAO,CAAC,EAAE;AAAE,4BAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;wBAAE;oBAChE;gBACJ;YACJ;AAEA,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;;;gBAKtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;oBAE/B,MAAM,gBAAgB,GAAG,UAAU,CAACA,iBAAS,CAAC,OAAO,CAAC;oBACtD,IAAI,gBAAgB,EAAE;AAClB,wBAAA,KAAK,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,4BAAA,IAAI;AAAE,gCAAA,gBAAgB,CAAC,CAAC,CAAC,EAAE;4BAAE;4BAAE,OAAO,CAAC,EAAE;AAAE,gCAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;4BAAE;wBACjE;oBACJ;gBACJ;;gBAGA,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/C,IAAI,cAAc,EAAE;AAChB,oBAAA,KAAK,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACjD,wBAAA,IAAI;AAAE,4BAAA,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC;wBAAE;wBAAE,OAAO,CAAC,EAAE;AAAE,4BAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;wBAAE;oBACjG;gBACJ;YAEJ;iBAAO;;;;gBAIH,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK;AAExD,gBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,GAAGA,iBAAS,CAAC,MAAM,MAAMA,iBAAS,CAAC,MAAM,EAAE;;;;;;;;;;;;;;AAcrD,oBAAA,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;;wBAEpC,MAAM,eAAe,GAAG,UAAU,CAACA,iBAAS,CAAC,MAAM,CAAC;wBACpD,IAAI,eAAe,EAAE;AACjB,4BAAA,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAClD,gCAAA,IAAI;oCAAE,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC;gCAAE;gCAAE,OAAO,CAAC,EAAE;AAAE,oCAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gCAAE;4BAClG;wBACJ;oBACJ;;AAGA,oBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,GAAGA,iBAAS,CAAC,GAAG,MAAMA,iBAAS,CAAC,GAAG,EAAE;wBAC/C,MAAM,YAAY,GAAG,UAAU,CAACA,iBAAS,CAAC,GAAG,CAAC;wBAC9C,IAAI,YAAY,EAAE;AACd,4BAAA,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,gCAAA,IAAI;oCAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC;gCAAE;gCAAE,OAAO,CAAC,EAAE;AAAE,oCAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gCAAE;4BACvF;wBACJ;oBACJ;gBAEJ;AAAO,qBAAA,IACH,CAAC,MAAM,CAAC,EAAE,GAAGA,iBAAS,CAAC,GAAG,MAAMA,iBAAS,CAAC,GAAG;AAC7C,oBAAA,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,KAAK,EACvC;;oBAEE,MAAM,YAAY,GAAG,UAAU,CAACA,iBAAS,CAAC,GAAG,CAAC;oBAC9C,IAAI,YAAY,EAAE;AACd,wBAAA,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,4BAAA,IAAI;gCAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC;4BAAE;4BAAE,OAAO,CAAC,EAAE;AAAE,gCAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;4BAAE;wBACvF;oBACJ;gBACJ;;gBAGA,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,aAAa,EAAE;oBACvC,MAAM,gBAAgB,GAAG,UAAU,CAACA,iBAAS,CAAC,OAAO,CAAC;oBACtD,IAAI,gBAAgB,EAAE;AAClB,wBAAA,KAAK,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,4BAAA,IAAI;gCAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;4BAAE;4BAAE,OAAO,CAAC,EAAE;AAAE,gCAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;4BAAE;wBAC3F;oBACJ;gBACJ;YACJ;AAEA,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC7B;AACH;AAED;;AAEG;AACI,MAAM,SAAS,GAAG;AACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACH,IAAA,GAAG,CACC,aAAsG,EAAA;AAEtG,QAAA,IAAI,aAAa,YAAY,OAAO,EAAE;AAClC,YAAA,OAAO,IAAI,qBAAqB,CAAI,aAAa,CAAC;QAEtD;AAAO,aAAA,IAAI,SAAS,IAAI,aAAa,CAAC,UAAU,EAAE;YAC9C,OAAO,IAAI,qBAAqB,CAAI,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;QAEzE;aAAO;AACH,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC9C;IACJ,CAAC;AAED;;;;;;;AAOG;AACH,IAAA,SAAS,CACL,aAAsG,EAAA;AAEtG,QAAA,IAAI,aAAa,YAAY,OAAO,EAAE;AAClC,YAAA,OAAO,wBAAwB,CAAC,aAAa,CAAC;QAElD;AAAO,aAAA,IAAI,SAAS,IAAI,aAAa,CAAC,UAAU,EAAE;YAC9C,OAAO,wBAAwB,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;QACrE;IACJ,CAAC;IAED,aAAa,CAAC,OAAgB,EAAE,QAAyC,EAAA;AACrE,QAAA,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnD;;;ACpgBJ;;;;;;;;AAQG;AACH,SAAS,yBAAyB,CAAC,IAAU,EAAE,IAAY,EAAE,GAAW,EAAA;AACpE,IAAA,MAAM,SAAS,GAAG,CAAC,GAAG;AACtB,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW;AAC9B,IAAA,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACvB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY;QAC3B,IAAI,CAAC,KAAK,SAAS,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM;AAAE,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS;AAC5D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc;QAC7B,IAAI,CAAC,KAAK,SAAS,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM;AAAE,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS;AAC5D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe;QAC9B,IAAI,CAAC,KAAK,SAAS,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM;AAAE,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS;AAC5D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ;AACvB,QAAA,IAAI,CAAC,KAAK,SAAS,EAAE;AACjB,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACjB,gBAAA,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS;AACvD,YAAA,CAAC,CAAC;QACN;IACJ;AACJ;AAEA;;;;AAIG;AACH,MAAM,gBAAgB,GAAG,IAAI,oBAAoB,CAC7C,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAI;AACxB,IAAA,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;AAC1C,IAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AAC1B,CAAC,CACJ;MAEY,SAAS,CAAA;AAqCC,IAAA,QAAA;AApCnB;;;AAGG;AACH,IAAA,KAAK;AAEL;;;;;AAKG;IACH,EAAE,GAAW,EAAE;AACP,IAAA,KAAK;;IAGL,KAAK,GAAW,CAAC;IACjB,IAAI,GAAW,CAAC;AAExB;;;;;AAKG;AAEH;;;;;;;AAOG;AACH,IAAA,OAAO,GAAG,IAAI,GAAG,EAAkC;AAEnD,IAAA,WAAA,CAAmB,WAAoB,KAAK,EAAA;QAAzB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACvB,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACnB;IACJ;AAEA;;;;AAIG;AACK,IAAA,SAAS,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,QAAA,gBAAgB,CAAC,QAAQ,CACrB,IAAI,EACJ,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EACvD,IAAI,CACP;IACL;AAEA;;;;;;;;;AASG;IACI,OAAO,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;AAC/B,QAAA,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AACjC,QAAA,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;IAChB;;;;;;AAQO,IAAA,SAAS,CAAC,IAAgB,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;QACvB,OAAO,GAAG,KAAK,SAAS,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC;IAClF;;AAGO,IAAA,WAAW,CAAC,IAAgB,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY;AAC3B,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACnB,YAAA,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE;QAChC;AACA,QAAA,OAAO,GAAG,CAAC,MAAM,IAAI,IAAI;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;IAC1B;;AAGO,IAAA,aAAa,CAAC,IAAgB,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY;QAC7B,IAAI,GAAG,KAAK,SAAS;YAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;IAClD;;AAGO,IAAA,YAAY,CAAC,IAAgB,EAAA;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;QACvB,OAAO,GAAG,KAAK,SAAS,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC;IAClF;;AAGQ,IAAA,cAAc,CAAC,IAAgB,EAAA;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe;AAC9B,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACnB,YAAA,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,EAAE;QACnC;AACA,QAAA,OAAO,GAAG,CAAC,MAAM,IAAI,IAAI;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;IAC1B;;AAGQ,IAAA,gBAAgB,CAAC,IAAgB,EAAA;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe;QAChC,IAAI,GAAG,KAAK,SAAS;YAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;IAClD;;AAGO,IAAA,WAAW,CAAC,IAAgB,EAAA;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc;AAC/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;QACvB,OAAO,GAAG,KAAK,SAAS,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC;IAClF;;AAGO,IAAA,aAAa,CAAC,IAAgB,EAAA;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc;AAC7B,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACnB,YAAA,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE;QAClC;AACA,QAAA,OAAO,GAAG,CAAC,MAAM,IAAI,IAAI;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;IAC1B;;AAGO,IAAA,eAAe,CAAC,IAAgB,EAAA;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc;QAC/B,IAAI,GAAG,KAAK,SAAS;YAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;IAClD;;;;;;;IASO,YAAY,CAAC,IAAgB,EAAE,GAAW,EAAA;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ;QACzB,IAAI,GAAG,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;QACnC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;QACvB,OAAO,GAAG,KAAK,SAAS,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC;IAClF;;IAGO,MAAM,CAAC,IAAgB,EAAE,GAAW,EAAA;AACvC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ;AACvB,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE;QACnC;QACA,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,GAAG,GAAG,EAAE;AACR,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,OAAO,GAAG,CAAC,MAAM,IAAI,IAAI;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;IAC1B;;IAGO,SAAS,CAAC,IAAgB,EAAE,GAAW,EAAA;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ;QACzB,IAAI,GAAG,KAAK,SAAS;YAAE;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QACxB,IAAI,GAAG,KAAK,SAAS;YAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;IAClD;;AAGO,IAAA,mBAAmB,CAAC,IAAgB,EAAA;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ;QACzB,IAAI,GAAG,KAAK,SAAS;YAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI;AAC5B,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAChB,YAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS;AACjD,QAAA,CAAC,CAAC;IACN;;AAGA,IAAA,GAAG,CAAC,GAAQ,EAAE,MAAc,gBAAgB,EAAE,qBAA8B,IAAI,EAAA;AAC5E,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,kBAAkB,2BAA2B,KAAK,CAAC;IAClF;AAEA;;;;;;AAMG;AACH,IAAA,aAAa,CAAC,GAAQ,EAAE,GAAA,GAAc,gBAAgB,EAAA;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,2BAA2B,IAAI,2BAA2B,IAAI,CAAC;IACrF;AAEQ,IAAA,IAAI,CAAC,GAAQ,EAAE,GAAW,EAAE,kBAA2B,EAAE,kBAA2B,EAAA;AACxF,QAAA,MAAM,UAAU,GAAe,GAAG,GAAG,QAAQ,CAAC;AAC9C,QAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM;QAE1C,IAAI,CAAC,UAAU,EAAE;AACb,YAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC;AACrD,YAAA,OAAO,KAAK;QAEhB;AAAO,aAAA,IACH,CAAC,gBAAgB;AACjB,YAAA,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;UACnB;AACE;;;;;;;;AAQG;AACH,YAAA,MAAM,IAAI,KAAK,CACX,CAAA,0EAAA,EAA6E,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAA,iDAAA,CAAmD,CAClK;QACL;;;AAIA,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3D,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;QACnC;;;;;;;;;;;;;;;;AAiBA,QAAA,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,QAAQ,CAAC;AACrD,QAAA,IAAI,CAAC,kBAAkB,IAAI,gBAAgB,EAAE,kBAAkB,EAAE;YAC7D,oBAAoB,CAChB,gBAAyC,EACzC,IAAI,CAAC,EAAE,EACP,UAAU,CAAC,WAAY,CAC1B;AACD,YAAA,OAAO,IAAI;QACf;;;;;QAMA,MAAM,QAAQ,GAAc,GAAG,CAAC,WAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE9E,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;;AAG5B,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,kBAAkB,EAAE;AACrC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACxB;;;;AAKA,QAAA,IAAI,kBAAkB,IAAI,gBAAgB,EAAE;AACxC,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC;QACrC;;;;AAKA,QAAA,IAAI,CAAC,kBAAkB,IAAI,UAAU,CAAC,kBAAkB,EAAE;AACtD,YAAA,OAAO,IAAI;QACf;;;;;;;;;;;QAYA,IAAI,GAAG,KAAK,gBAAgB,IAAI,UAAU,CAAC,KAAK,EAAE;AAC9C,YAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,GAAG,CAAC;AACzC,YAAA,OAAO,KAAK;QAChB;;;;;;;;AASA,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3C,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,YAAA,OAAO,GAAG,IAAI,GAAG,EAAqB;AACtC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAC1C;QAEA,IAAI,YAAY,GAAG,KAAK;;;;;;;;AASxB,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI;QAC1C,UAAU,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;;AAEtC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAC5C;YACJ;AAEA,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE;gBAClC,YAAY,GAAG,IAAI;YACvB;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,GAAG,KAAK,gBAAgB,EAAE;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;;AAG5B,YAAA,QAAQ,GAAG,sBAAsB,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,KAAI;gBACzD,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,KAAKA,iBAAS,CAAC,MAAM,EAAE;oBAClD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,GAAG,CAAC;gBACrC;AACJ,YAAA,CAAC,CAAC;QAEN;AAAO,aAAA,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,YAAY,EAAE;;YAE1C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;;;;;;;AAQhD,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI;AAC1C,YAAA,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,KAAI;AAC7B,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC9B,IACI,WAAW;oBACX,UAAU,KAAK,SAAS;oBACxB,UAAU,KAAK,GAAG;kBACpB;oBACE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,GAAG,CAAC;oBACjC,YAAY,GAAG,IAAI;gBACvB;AACJ,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,YAAY;IACvB;AAEA;;;;;;;;;;;;;;;;AAgBG;IACK,mBAAmB,CAAC,IAAgB,EAAE,GAAW,EAAA;AACrD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI;QACpC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC/B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,GAAG;gBAAE;AAEhD,YAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC;YACxC;iBAAO;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC;YAC3C;AACJ,QAAA,CAAC,CAAC;IACN;IAEU,WAAW,CAAC,eAA2B,EAAE,GAAW,EAAA;QAC1D,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;AACnD,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW;QAE/C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;;AAE7B,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;;YAG5B,MAAM,gBAAgB,GAAe,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC;AAClE,YAAA,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,iBAAiB,EAAE;AACxD,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC;YACrC;QACJ;;QAGA,IAAI,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,KAAKA,iBAAS,CAAC,MAAM,EAAE;AACxD,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtD,YAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,GAAG,IAAI,GAAG,EAAqB;AACtC,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;YACrD;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;YAE5B,OAAO,CAAC,GAAG,CAAC,WAAW,EAAEA,iBAAS,CAAC,GAAG,CAAC;QAC3C;IACJ;AAIA,IAAA,MAAM,CAAC,GAAQ,EAAE,MAAc,gBAAgB,EAAE,WAAoB,KAAK,EAAA;AACtE,QAAA,MAAM,UAAU,GAAe,GAAG,CAAC,QAAQ,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE;AACb,YAAA,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,GAAG,CAAC;AACxD,YAAA,OAAO,IAAI;QACf;;;;;;QAOA,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC;AACtD,QAAA,IAAI,gBAAgB,EAAE,kBAAkB,EAAE;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;AAC5B,gBAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClD;YACA,oBAAoB,CAChB,UAAU,CAAC,MAA+B,EAC1C,IAAI,CAAC,EAAE,EACN,UAAU,CAAC,MAAc,CAAC,MAAM,CAAC,EAClC,UAAU,CAAC,WAAY,EACvB,IAAI,CAAC,OAAO,CACf;AACD,YAAA,IAAI,CAAC,iCAAiC,CAAC,UAAU,CAAC;AAClD,YAAA,OAAO,IAAI;QACf;;;;;;AAOA,QAAA,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC/B,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;AAC5B,gBAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClD;AACA,YAAA,MAAM,SAAS,GAAQ,UAAU,CAAC,GAAG;AACrC,YAAA,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO;AAC5B,YAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AAClB,gBAAA,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE;AACtC,gBAAA,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACrC,oBAAA,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;oBACrC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC3C,oBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,wBAAA,OAAO,GAAG,IAAI,GAAG,EAAE;wBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;oBAC1C;oBACA,KAAK,MAAM,GAAG,IAAI,IAAI;wBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAEA,iBAAS,CAAC,MAAM,CAAC;oBAC1D,IAAI,CAAC,KAAK,EAAE;gBAChB;YACJ;AACA,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;;QAG9B,IACI,IAAI,CAAC,QAAQ;YACb,CAAC,QAAQ;UACX;AACE,YAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClD;AAEA,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG;AAC1B,QAAA,MAAM,QAAQ,GAAa,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE5D,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;QAEzB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,YAAA,OAAO,GAAG,IAAI,GAAG,EAAqB;YACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;QACpC;AAEA,QAAA,IAAI,GAAG,KAAK,gBAAgB,EAAE;;AAE1B,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM;AAChC,YAAA,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE;AACtE,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;gBAClC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC3C,gBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,oBAAA,OAAO,GAAG,IAAI,GAAG,EAAqB;oBACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;gBAE1C;AAAO,qBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,KAAKA,iBAAS,CAAC,GAAG,EAAE;;;;;AAK9D,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC9B;;gBAGA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAEA,iBAAS,CAAC,MAAM,CAAC;;AAGrD,gBAAA,IAAI,CAAC,iCAAiC,CAAC,UAAU,CAAC;YAEtD;iBAAO;;AAEH,gBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK;gBAC5C,QAAQ,GAAG,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,KAAI;oBAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,MAAM,CAAC;;;oBAIpC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAc,CAAC;AACvD,oBAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE;wBACnB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBACnC,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC3D;AACJ,gBAAA,CAAC,CAAC;YACN;QAEJ;aAAO;;AAEH,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK;AAC5C,YAAA,QAAQ,GAAG,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACtD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,MAAM,CAAC;;gBAGpC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAc,CAAC;AACvD,gBAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE;oBACnB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACnC,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC3D;AACJ,YAAA,CAAC,CAAC;QACN;;AAGA,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;QACxC;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC;QACnC;AAEA,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,GAAG,CAAC,GAAQ,EAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC;AAEA,IAAA,MAAM,CAAC,EAAO,EAAE,GAAA,GAAc,gBAAgB,EAAA;QAC1C,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;IAC/C;AAEA;;;;;;;;;;;;;;;;AAgBG;AACH,IAAA,SAAS,CAAC,UAAe,EAAA;AACrB,QAAA,MAAM,IAAI,GAAe,UAAU,GAAG,QAAQ,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,UAAU,CAAC;AACtE,YAAA,OAAO,IAAI;QACf;AACA,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AACrD,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;;;AAIxC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;AAmBzB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,MAAM,UAAU,GAAG,UAAmC;YACtD,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;gBAChC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;AACpD,YAAA,CAAC,CAAC;QACN;aAAO;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,KAAI;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;AACH,IAAA,WAAW,CAAC,UAAe,EAAA;AACvB,QAAA,MAAM,IAAI,GAAe,UAAU,GAAG,QAAQ,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,EAAE,UAAU,CAAC;AACxE,YAAA,OAAO,IAAI;QACf;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AACzC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAE3B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;;AAEzB,YAAA,MAAM,EAAE,GAAI,UAAkB,CAAC,OAAO;AACtC,YAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AAClB,gBAAA,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE;AACtC,gBAAA,MAAM,IAAI,GAA4B,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;oBACrC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAC/C,oBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,wBAAA,OAAO,GAAG,IAAI,GAAG,EAAE;wBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC;oBAC9C;oBACA,KAAK,MAAM,GAAG,IAAI,IAAI;wBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAEA,iBAAS,CAAC,MAAM,CAAC;oBAC1D,IAAI,CAAC,KAAK,EAAE;gBAChB;YACJ;QACJ;aAAO;;;;YAIH,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE,KAAK,KAAI;AACnC,gBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,oBAAA,OAAO,GAAG,IAAI,GAAG,EAAE;oBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC;gBAC9C;gBACA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAEA,iBAAS,CAAC,MAAM,CAAC;AACpC,gBAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;AACjC,YAAA,CAAC,CAAC;QACN;;;AAIA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAExB,QAAA,OAAO,IAAI;IACf;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,0GAA0G,CAAC;QAC/H;QAEA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC;QACtD;;AAGA,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IACzB;AAEA,IAAA,mBAAmB,CAAC,UAAsB,EAAA;QACtC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;;;;;;;;AAS1C,QAAA,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,4BAA4B,EAAC;AACtD,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;AAC7C,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;gBAC5B,SAAS,GAAG,IAAI;YACpB;QACJ;AAEA,QAAA,OAAO,SAAS;IACpB;AAEU,IAAA,iCAAiC,CAAC,UAAsB,EAAA;AAC9D,QAAA,UAAU,CAAC,YAAY,CAAC,CAAC,eAAe,KAAI;AACxC,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;AACnC,YAAA,IAAI,CAAC,iCAAiC,CAAC,eAAe,CAAC;AAC3D,QAAA,CAAC,CAAC;IACN;AACH;;AC3yBD,YAAY,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC/C,YAAY,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACnD,YAAY,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC/C,YAAY,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,gBAAgB,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/encoding/spec.ts","../src/symbol.shim.ts","../src/types/symbols.ts","../src/encoding/encode.ts","../src/encoding/decode.ts","../src/types/registry.ts","../src/encoder/streaming.ts","../src/types/TypeContext.ts","../src/Metadata.ts","../src/encoder/ChangeRecorder.ts","../src/encoder/EncodeDescriptor.ts","../src/encoder/changeTree/parentChain.ts","../src/encoder/changeTree/liveIteration.ts","../src/encoder/changeTree/inheritedFlags.ts","../src/encoder/subscriptions.ts","../src/encoder/changeTree/treeAttachment.ts","../src/encoder/ChangeTree.ts","../src/encoder/EncodeOperation.ts","../src/decoder/DecodeOperation.ts","../src/encoding/assert.ts","../src/types/custom/ArraySchema.ts","../src/encoder/MapJournal.ts","../src/types/custom/MapSchema.ts","../src/types/custom/CollectionSchema.ts","../src/types/custom/SetSchema.ts","../src/types/custom/StreamSchema.ts","../src/types/builder.ts","../src/annotations.ts","../src/utils.ts","../src/Schema.ts","../src/encoder/RefIdAllocator.ts","../src/encoder/Root.ts","../src/encoder/Encoder.ts","../src/types/utils.ts","../src/decoder/ReferenceTracker.ts","../src/decoder/Decoder.ts","../src/Reflection.ts","../src/decoder/strategy/getDecoderStateCallbacks.ts","../src/decoder/strategy/RawChanges.ts","../src/decoder/strategy/Callbacks.ts","../src/encoder/StateView.ts","../src/index.ts"],"sourcesContent":["export const SWITCH_TO_STRUCTURE = 255; // (decoding collides with DELETE_AND_ADD + fieldIndex = 63)\nexport const TYPE_ID = 213;\n\n/**\n * Encoding Schema field operations.\n */\nexport enum OPERATION {\n ADD = 128, // (10000000) add new structure/primitive\n REPLACE = 0, // (00000001) replace structure/primitive\n DELETE = 64, // (01000000) delete field\n DELETE_AND_MOVE = 96, // () ArraySchema only\n MOVE_AND_ADD = 160, // () ArraySchema only\n DELETE_AND_ADD = 192, // (11000000) DELETE field, followed by an ADD\n\n /**\n * Collection operations\n */\n CLEAR = 10,\n\n /**\n * ArraySchema operations\n */\n REVERSE = 15,\n MOVE = 32,\n DELETE_BY_REFID = 33, // This operation is only used at ENCODING time. During DECODING, DELETE_BY_REFID is converted to DELETE\n ADD_BY_REFID = 129,\n}\n","\n//\n// Must have Symbol.metadata defined for metadata support on decorators:\n// https://github.com/microsoft/TypeScript/issues/55453#issuecomment-1687496648\n//\nexport {};\ndeclare global {\n interface SymbolConstructor {\n readonly metadata: unique symbol;\n }\n}\n(Symbol as any).metadata ??= Symbol.for(\"Symbol.metadata\");","//\n// Cross-bundle symbol sharing.\n//\n// When @colyseus/schema is loaded more than once into the same JS realm\n// (e.g. main bundle + ./input subpath bundle), plain `Symbol(\"$x\")` calls\n// in each copy produce distinct values — breaking identity checks like\n// `instance[$values]` when the reader and the writer come from different\n// copies.\n//\n// `Symbol.for(key)` resolves to the engine's process-wide Symbol Registry,\n// so every copy gets the same symbol regardless of which one created it.\n//\n// Fallback: runtimes that lack `Symbol.for` get a polyfill anchored on\n// globalThis (also shared across module copies).\n//\ndeclare const self: any;\ndeclare const window: any;\n\nconst _g: any = (function () {\n if (typeof globalThis !== \"undefined\") return globalThis;\n if (typeof global !== \"undefined\") return global;\n if (typeof self !== \"undefined\") return self;\n if (typeof window !== \"undefined\") return window;\n return {};\n})();\n\nif (typeof Symbol === \"function\" && typeof (Symbol as any).for !== \"function\") {\n const REGISTRY_KEY = \"colyseus.symbolRegistry\";\n const registry: { [k: string]: symbol } =\n _g[REGISTRY_KEY] || (_g[REGISTRY_KEY] = Object.create(null));\n (Symbol as any).for = function (key: string): symbol {\n return registry[key] || (registry[key] = Symbol(key));\n };\n (Symbol as any).keyFor = function (sym: symbol): string | undefined {\n for (const k in registry) if (registry[k] === sym) return k;\n return undefined;\n };\n}\n\nexport const $refId: unique symbol = Symbol.for(\"$refId\");\nexport const $track = \"~track\";\nexport const $encoder = \"~encoder\";\nexport const $decoder = \"~decoder\";\n\nexport const $filter = \"~filter\";\n\nexport const $getByIndex = \"~getByIndex\";\nexport const $deleteByIndex = \"~deleteByIndex\";\n\n/**\n * Used to hold ChangeTree instances whitin the structures.\n *\n * Real JS Symbol — see the `$values` comment for rationale.\n */\nexport const $changes: unique symbol = Symbol.for(\"$changes\");\n\n/**\n * Used to keep track of the type of the child elements of a collection\n * (MapSchema, ArraySchema, etc.). Real Symbol — same rationale as $values.\n */\nexport const $childType: unique symbol = Symbol.for(\"$childType\");\n\n/**\n * Self-reference an instance sets on `this` so its own methods can recover\n * the underlying object even when `this` is a Proxy wrapper. Used by\n * ArraySchema (whose public API is a Proxy) to grab the underlying instance\n * once at the top of hot methods and then access fields directly without\n * paying the Proxy.get cost on every read.\n */\nexport const $proxyTarget: unique symbol = Symbol.for(\"$proxyTarget\");\n\n/**\n * Optional \"discard\" method for custom types (ArraySchema)\n * (Discards changes for next serialization)\n */\nexport const $onEncodeEnd = '~onEncodeEnd';\n\n/**\n * When decoding, this method is called after the instance is fully decoded\n */\nexport const $onDecodeEnd = \"~onDecodeEnd\";\n\n/**\n * Per-instance dense array holding field values by index.\n * Replaces per-field _fieldName shadow properties.\n *\n * Real JS Symbol (not \"~\"-prefixed string) so plain assignment is safe —\n * symbols are non-enumerable to Object.keys / JSON.stringify / for-in,\n * which means we can drop Object.defineProperty(...{ enumerable: false })\n * and avoid the slow-path / dictionary-mode hazards that come with it.\n */\nexport const $values: unique symbol = Symbol.for(\"$values\");\n\n/**\n * Brand for FieldBuilder instances so schema() can detect them.\n */\nexport const $builder = \"~builder\";\n\n/**\n * Metadata\n */\nexport const $descriptors = \"~descriptors\";\n\n/**\n * Per-class bitmask: bit i set iff field i carries a @view tag.\n * Lazily computed from $viewFieldIndexes on first encode pass.\n * Skips the per-field metadata[i].tag property chase in the hot encode loop.\n */\nexport const $filterBitmask = \"~__filterBitmask\";\n\n/**\n * Cached per-class encode descriptor: bundles encoder fn, filter fn,\n * metadata, isSchema flag, and filterBitmask into one object stashed on\n * the constructor. Replaces 5 separate per-tree property chases /\n * function calls in the encode loop with a single property load.\n */\nexport const $encodeDescriptor = \"~__encodeDescriptor\";\nexport const $encoders = \"~encoders\";\nexport const $numFields = \"~__numFields\";\nexport const $refTypeFieldIndexes = \"~__refTypeFieldIndexes\";\nexport const $viewFieldIndexes = \"~__viewFieldIndexes\";\nexport const $fieldIndexesByViewTag = \"$__fieldIndexesByViewTag\";\nexport const $unreliableFieldIndexes = \"~__unreliableFieldIndexes\";\nexport const $transientFieldIndexes = \"~__transientFieldIndexes\";\nexport const $staticFieldIndexes = \"~__staticFieldIndexes\";\nexport const $streamFieldIndexes = \"~__streamFieldIndexes\";\nexport const $streamPriorities = \"~__streamPriorities\";\n","// @ts-nocheck\n\n/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\nimport type { TextEncoder } from \"util\";\nimport type { Iterator } from \"./decode.js\";\n\nexport type BufferLike = ArrayLike<number> & { [index: number]: number };\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\nlet textEncoder: TextEncoder;\n// @ts-ignore\ntry { textEncoder = new TextEncoder(); } catch (e) { }\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _convoBuffer = new ArrayBuffer(8);\nconst _int32 = new Int32Array(_convoBuffer);\nconst _float32 = new Float32Array(_convoBuffer);\nconst _float64 = new Float64Array(_convoBuffer);\nconst _int64 = new BigInt64Array(_convoBuffer);\n\nconst hasBufferByteLength = (typeof Buffer !== 'undefined' && Buffer.byteLength);\n\nconst utf8Length: (str: string, _?: any) => number = (hasBufferByteLength)\n ? Buffer.byteLength // node\n : function (str: string, _?: any) {\n var c = 0, length = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n }\n\nfunction utf8Write(view: BufferLike, str: string, it: Iterator) {\n var c = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n view[it.offset++] = c;\n }\n else if (c < 0x800) {\n view[it.offset] = 0xc0 | (c >> 6);\n view[it.offset + 1] = 0x80 | (c & 0x3f);\n it.offset += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n view[it.offset] = 0xe0 | (c >> 12);\n view[it.offset+1] = 0x80 | (c >> 6 & 0x3f);\n view[it.offset+2] = 0x80 | (c & 0x3f);\n it.offset += 3;\n }\n else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n view[it.offset] = 0xf0 | (c >> 18);\n view[it.offset+1] = 0x80 | (c >> 12 & 0x3f);\n view[it.offset+2] = 0x80 | (c >> 6 & 0x3f);\n view[it.offset+3] = 0x80 | (c & 0x3f);\n it.offset += 4;\n }\n }\n}\n\nfunction int8(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n};\n\nfunction uint8(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n};\n\nfunction int16(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n bytes[it.offset++] = (value >> 8) & 255;\n};\n\nfunction uint16(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n bytes[it.offset++] = (value >> 8) & 255;\n};\n\nfunction int32(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value & 255;\n bytes[it.offset++] = (value >> 8) & 255;\n bytes[it.offset++] = (value >> 16) & 255;\n bytes[it.offset++] = (value >> 24) & 255;\n};\n\nfunction uint32(bytes: BufferLike, value: number, it: Iterator) {\n const b4 = value >> 24;\n const b3 = value >> 16;\n const b2 = value >> 8;\n const b1 = value;\n bytes[it.offset++] = b1 & 255;\n bytes[it.offset++] = b2 & 255;\n bytes[it.offset++] = b3 & 255;\n bytes[it.offset++] = b4 & 255;\n};\n\nfunction int64(bytes: BufferLike, value: number, it: Iterator) {\n const high = Math.floor(value / Math.pow(2, 32));\n const low = value >>> 0;\n uint32(bytes, low, it);\n uint32(bytes, high, it);\n};\n\nfunction uint64(bytes: BufferLike, value: number, it: Iterator) {\n const high = (value / Math.pow(2, 32)) >> 0;\n const low = value >>> 0;\n uint32(bytes, low, it);\n uint32(bytes, high, it);\n};\n\nfunction bigint64(bytes: BufferLike, value: bigint, it: Iterator) {\n _int64[0] = BigInt.asIntN(64, value);\n int32(bytes, _int32[0], it);\n int32(bytes, _int32[1], it);\n}\n\nfunction biguint64(bytes: BufferLike, value: bigint, it: Iterator) {\n _int64[0] = BigInt.asIntN(64, value);\n int32(bytes, _int32[0], it);\n int32(bytes, _int32[1], it);\n}\n\nfunction float32(bytes: BufferLike, value: number, it: Iterator) {\n _float32[0] = value;\n int32(bytes, _int32[0], it);\n}\n\nfunction float64(bytes: BufferLike, value: number, it: Iterator) {\n _float64[0] = value;\n int32(bytes, _int32[_isLittleEndian ? 0 : 1], it);\n int32(bytes, _int32[_isLittleEndian ? 1 : 0], it);\n}\n\nfunction boolean(bytes: BufferLike, value: number, it: Iterator) {\n bytes[it.offset++] = value ? 1 : 0; // uint8\n};\n\nfunction string(bytes: BufferLike, value: string, it: Iterator) {\n // encode `null` strings as empty.\n if (!value) { value = \"\"; }\n\n let length = utf8Length(value, \"utf8\");\n let size = 0;\n\n // fixstr\n if (length < 0x20) {\n bytes[it.offset++] = length | 0xa0;\n size = 1;\n }\n // str 8\n else if (length < 0x100) {\n bytes[it.offset++] = 0xd9;\n bytes[it.offset++] = length;\n size = 2;\n }\n // str 16\n else if (length < 0x10000) {\n bytes[it.offset++] = 0xda;\n uint16(bytes, length, it);\n size = 3;\n }\n // str 32\n else if (length < 0x100000000) {\n bytes[it.offset++] = 0xdb;\n uint32(bytes, length, it);\n size = 5;\n } else {\n throw new Error('String too long');\n }\n\n utf8Write(bytes, value, it);\n\n return size + length;\n}\n\nfunction number(bytes: BufferLike, value: number, it: Iterator) {\n if (isNaN(value)) {\n return number(bytes, 0, it);\n\n } else if (!isFinite(value)) {\n return number(bytes, (value > 0) ? Number.MAX_SAFE_INTEGER : -Number.MAX_SAFE_INTEGER, it);\n\n } else if (value !== (value|0)) {\n if (Math.abs(value) <= 3.4028235e+38) { // range check\n _float32[0] = value;\n if (Math.abs(Math.abs(_float32[0]) - Math.abs(value)) < 1e-4) { // precision check; adjust 1e-n (n = precision) to in-/decrease acceptable precision loss\n // now we know value is in range for f32 and has acceptable precision for f32\n bytes[it.offset++] = 0xca;\n float32(bytes, value, it);\n return 5;\n }\n }\n\n bytes[it.offset++] = 0xcb;\n float64(bytes, value, it);\n return 9;\n }\n\n if (value >= 0) {\n // positive fixnum\n if (value < 0x80) {\n bytes[it.offset++] = value & 255; // uint8\n return 1;\n }\n\n // uint 8\n if (value < 0x100) {\n bytes[it.offset++] = 0xcc;\n bytes[it.offset++] = value & 255; // uint8\n return 2;\n }\n\n // uint 16\n if (value < 0x10000) {\n bytes[it.offset++] = 0xcd;\n uint16(bytes, value, it);\n return 3;\n }\n\n // uint 32\n if (value < 0x100000000) {\n bytes[it.offset++] = 0xce;\n uint32(bytes, value, it);\n return 5;\n }\n\n // uint 64\n bytes[it.offset++] = 0xcf;\n uint64(bytes, value, it);\n return 9;\n\n } else {\n\n // negative fixnum\n if (value >= -0x20) {\n bytes[it.offset++] = 0xe0 | (value + 0x20);\n return 1;\n }\n\n // int 8\n if (value >= -0x80) {\n bytes[it.offset++] = 0xd0;\n int8(bytes, value, it);\n return 2;\n }\n\n // int 16\n if (value >= -0x8000) {\n bytes[it.offset++] = 0xd1;\n int16(bytes, value, it);\n return 3;\n }\n\n // int 32\n if (value >= -0x80000000) {\n bytes[it.offset++] = 0xd2;\n int32(bytes, value, it);\n return 5;\n }\n\n // int 64\n bytes[it.offset++] = 0xd3;\n int64(bytes, value, it);\n return 9;\n }\n}\n\nexport const encode = {\n int8,\n uint8,\n int16,\n uint16,\n int32,\n uint32,\n int64,\n uint64,\n bigint64,\n biguint64,\n float32,\n float64,\n boolean,\n string,\n number,\n utf8Write,\n utf8Length,\n}","// @ts-nocheck\n\n/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\nimport type { BufferLike } from \"./encode.js\";\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\nexport interface Iterator { offset: number; }\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _convoBuffer = new ArrayBuffer(8);\n\nconst _int32 = new Int32Array(_convoBuffer);\nconst _float32 = new Float32Array(_convoBuffer);\nconst _float64 = new Float64Array(_convoBuffer);\nconst _uint64 = new BigUint64Array(_convoBuffer);\nconst _int64 = new BigInt64Array(_convoBuffer);\n\nfunction utf8Read(bytes: BufferLike, it: Iterator, length: number) {\n // boundary check\n if (length > bytes.length - it.offset) { length = bytes.length - it.offset; }\n\n var string = '', chr = 0;\n for (var i = it.offset, end = it.offset + length; i < end; i++) {\n var byte = bytes[i];\n if ((byte & 0x80) === 0x00) {\n string += String.fromCharCode(byte);\n continue;\n }\n if ((byte & 0xe0) === 0xc0) {\n string += String.fromCharCode(\n ((byte & 0x1f) << 6) |\n (bytes[++i] & 0x3f)\n );\n continue;\n }\n if ((byte & 0xf0) === 0xe0) {\n string += String.fromCharCode(\n ((byte & 0x0f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0)\n );\n continue;\n }\n if ((byte & 0xf8) === 0xf0) {\n chr = ((byte & 0x07) << 18) |\n ((bytes[++i] & 0x3f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0);\n if (chr >= 0x010000) { // surrogate pair\n chr -= 0x010000;\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n continue;\n }\n\n // (do not throw error to avoid server/client from crashing due to hack attemps)\n // throw new Error('Invalid byte ' + byte.toString(16));\n\n console.error('decode.utf8Read(): Invalid byte ' + byte + ' at offset ' + i + '. Skip to end of string: ' + (it.offset + length));\n break;\n }\n it.offset += length;\n return string;\n}\n\nfunction int8 (bytes: BufferLike, it: Iterator) {\n return uint8(bytes, it) << 24 >> 24;\n};\n\nfunction uint8 (bytes: BufferLike, it: Iterator) {\n return bytes[it.offset++];\n};\n\nfunction int16 (bytes: BufferLike, it: Iterator) {\n return uint16(bytes, it) << 16 >> 16;\n};\n\nfunction uint16 (bytes: BufferLike, it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8;\n};\n\nfunction int32 (bytes: BufferLike, it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8 | bytes[it.offset++] << 16 | bytes[it.offset++] << 24;\n};\n\nfunction uint32 (bytes: BufferLike, it: Iterator) {\n return int32(bytes, it) >>> 0;\n};\n\nfunction float32 (bytes: BufferLike, it: Iterator) {\n _int32[0] = int32(bytes, it);\n return _float32[0];\n};\n\nfunction float64 (bytes: BufferLike, it: Iterator) {\n _int32[_isLittleEndian ? 0 : 1] = int32(bytes, it);\n _int32[_isLittleEndian ? 1 : 0] = int32(bytes, it);\n return _float64[0];\n};\n\nfunction int64(bytes: BufferLike, it: Iterator) {\n const low = uint32(bytes, it);\n const high = int32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nfunction uint64(bytes: BufferLike, it: Iterator) {\n const low = uint32(bytes, it);\n const high = uint32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nfunction bigint64(bytes: BufferLike, it: Iterator) {\n _int32[0] = int32(bytes, it);\n _int32[1] = int32(bytes, it);\n return _int64[0];\n}\n\nfunction biguint64(bytes: BufferLike, it: Iterator) {\n _int32[0] = int32(bytes, it);\n _int32[1] = int32(bytes, it);\n return _uint64[0];\n}\n\nfunction boolean (bytes: BufferLike, it: Iterator) {\n return uint8(bytes, it) > 0;\n};\n\nfunction string (bytes: BufferLike, it: Iterator) {\n const prefix = bytes[it.offset++];\n let length: number;\n\n if (prefix < 0xc0) {\n // fixstr\n length = prefix & 0x1f;\n\n } else if (prefix === 0xd9) {\n length = uint8(bytes, it);\n\n } else if (prefix === 0xda) {\n length = uint16(bytes, it);\n\n } else if (prefix === 0xdb) {\n length = uint32(bytes, it);\n }\n\n return utf8Read(bytes, it, length);\n}\n\nfunction number (bytes: BufferLike, it: Iterator) {\n const prefix = bytes[it.offset++];\n\n if (prefix < 0x80) {\n // positive fixint\n return prefix;\n\n } else if (prefix === 0xca) {\n // float 32\n return float32(bytes, it);\n\n } else if (prefix === 0xcb) {\n // float 64\n return float64(bytes, it);\n\n } else if (prefix === 0xcc) {\n // uint 8\n return uint8(bytes, it);\n\n } else if (prefix === 0xcd) {\n // uint 16\n return uint16(bytes, it);\n\n } else if (prefix === 0xce) {\n // uint 32\n return uint32(bytes, it);\n\n } else if (prefix === 0xcf) {\n // uint 64\n return uint64(bytes, it);\n\n } else if (prefix === 0xd0) {\n // int 8\n return int8(bytes, it);\n\n } else if (prefix === 0xd1) {\n // int 16\n return int16(bytes, it);\n\n } else if (prefix === 0xd2) {\n // int 32\n return int32(bytes, it);\n\n } else if (prefix === 0xd3) {\n // int 64\n return int64(bytes, it);\n\n } else if (prefix > 0xdf) {\n // negative fixint\n return (0xff - prefix + 1) * -1\n }\n};\n\nexport function stringCheck(bytes: BufferLike, it: Iterator) {\n const prefix = bytes[it.offset];\n return (\n // fixstr\n (prefix < 0xc0 && prefix > 0xa0) ||\n // str 8\n prefix === 0xd9 ||\n // str 16\n prefix === 0xda ||\n // str 32\n prefix === 0xdb\n );\n}\n\nexport const decode = {\n utf8Read,\n int8,\n uint8,\n int16,\n uint16,\n int32,\n uint32,\n float32,\n float64,\n int64,\n uint64,\n bigint64,\n biguint64,\n boolean,\n string,\n number,\n stringCheck,\n};","import { DefinitionType, type } from \"../annotations.js\";\nimport { BufferLike, encode } from \"../encoding/encode.js\";\nimport { decode, Iterator } from \"../encoding/decode.js\";\n\nexport interface TypeDefinition {\n constructor?: any,\n encode?: (bytes: BufferLike, value: any, it: Iterator) => any;\n decode?: (bytes: BufferLike, it: Iterator) => any;\n}\n\nexport const registeredTypes: {[identifier: string] : TypeDefinition} = {};\n\nconst identifiers = new Map<any, string>();\n\nexport function registerType(identifier: string, definition: TypeDefinition) {\n if (definition.constructor) {\n identifiers.set(definition.constructor, identifier);\n registeredTypes[identifier] = definition;\n }\n\n if (definition.encode) { (encode as any)[identifier] = definition.encode; }\n if (definition.decode) { (decode as any)[identifier] = definition.decode; }\n}\n\nexport function getIdentifier(klass: any): string {\n return identifiers.get(klass);\n}\n\nexport function getType(identifier: string): TypeDefinition {\n return registeredTypes[identifier];\n}\n\nexport function defineCustomTypes<T extends {[key: string]: TypeDefinition}>(types: T) {\n for (const identifier in types) {\n registerType(identifier, types[identifier]);\n }\n\n return (t: keyof T) => type(t as DefinitionType);\n}","/**\n * Shared routing helpers for streamable collections (`StreamSchema`,\n * `MapSchema.stream()`, etc.).\n *\n * Each streamable class carries exactly one lazy slot (`_stream`) that\n * holds the 6 per-view / broadcast bookkeeping structures. Keeping the\n * slot undefined until streaming actually activates means non-streaming\n * `MapSchema` / `SetSchema` instances pay zero Map/Set allocations. One\n * declared slot → hidden-class shape stays stable across streaming and\n * non-streaming instances, so V8's ICs on `$items` / `journal` / etc.\n * stay monomorphic.\n *\n * Lives alongside `changeTree/*.ts` — another directory of module-level\n * free functions that operate on ChangeTree instances.\n */\nimport { OPERATION } from \"../encoding/spec.js\";\nimport type { Root, Streamable } from \"./Root.js\";\n\n/**\n * Thrown (from both the `FieldBuilder` chainable and the decorator's\n * `addField` auto-flag) when a user attempts to stream an ArraySchema.\n * Centralized so the two callsites emit the same diagnostic.\n */\nexport const ARRAY_STREAM_NOT_SUPPORTED =\n \"ArraySchema does not support streaming — positional ops \" +\n \"(splice / unshift / reverse) shift subsequent indexes, so holding \" +\n \"ADDs back for a later tick under `maxPerTick` would desync the \" +\n \"decoder. Use `t.stream(X)` (stable monotonic positions) or \" +\n \"`t.map(X).stream()` (stable keys) instead.\";\n\n/**\n * Per-instance bookkeeping for a streamable collection. Lazily allocated\n * by `ensureStreamState` when the collection's ChangeTree picks up the\n * `isStreamCollection` flag (or when the user touches `maxPerTick`).\n */\nexport interface StreamableState {\n /** Per-view ADD backlog: wire-indexes not yet sent to that view. */\n pendingByView: Map<number, Set<number>>;\n /** Per-view SENT set — decides whether `remove()` emits a DELETE. */\n sentByView: Map<number, Set<number>>;\n /** Broadcast-mode ADD backlog (no active views). */\n broadcastPending: Set<number>;\n /** Broadcast-mode SENT set. */\n sentBroadcast: Set<number>;\n /** Broadcast-mode DELETE queue — flushes next shared tick. */\n broadcastDeletes: Set<number>;\n /** Max ADD ops emitted per tick per view (or per shared tick). */\n maxPerTick: number;\n /**\n * Priority callback seeded from the schema declaration. Receives the\n * client's StateView and the candidate element; higher return values\n * emit first. Broadcast `encode()` ignores this and drains FIFO.\n * Instance-level override: assign to `stream.priority`.\n */\n priority?: (view: any, element: any) => number;\n}\n\nexport function createStreamableState(): StreamableState {\n return {\n pendingByView: new Map(),\n sentByView: new Map(),\n broadcastPending: new Set(),\n sentBroadcast: new Set(),\n broadcastDeletes: new Set(),\n maxPerTick: 32,\n };\n}\n\n/** Allocate `_stream` on first use (idempotent). Returns the state. */\nexport function ensureStreamState(s: Streamable): StreamableState {\n return (s._stream ??= createStreamableState());\n}\n\n/**\n * Route an ADD into the pending backlogs.\n * - No active views: push into broadcast pending (shared encode drains up\n * to `maxPerTick` per tick).\n * - With views: push into per-view pending for every currently-bound view.\n */\nexport function streamRouteAdd(s: Streamable, root: Root, index: number): void {\n // Broadcast mode (no views registered): seed broadcast pending so\n // the shared `encode()` pass drains it up to `maxPerTick` per tick.\n // View mode: do nothing — users must call `view.add(element)` per\n // entity to subscribe it for that view. This matches the StateView\n // design philosophy: per-client visibility is imperative, not\n // declarative. An encode-time predicate would be O(views × entities)\n // each tick — the whole reason StateView exists is to push that\n // bookkeeping to game-loop cadence.\n if (root.activeViews.size === 0) {\n ensureStreamState(s).broadcastPending.add(index);\n }\n}\n\n/**\n * Route a REMOVE: silent-drop if never sent, force DELETE if already sent.\n * Returns `true` iff no wire op reached any channel (caller can skip\n * follow-on work like snapshotting the deleted value).\n */\nexport function streamRouteRemove(\n s: Streamable,\n root: Root,\n refId: number,\n index: number,\n): boolean {\n // If `_stream` is still undefined, streaming never saw any add/remove —\n // nothing to unwind, and nothing was ever emitted.\n const st = s._stream;\n if (st === undefined) return true;\n\n let neverSent = false;\n\n // Broadcast side.\n if (st.broadcastPending.delete(index)) {\n neverSent = true;\n } else if (st.sentBroadcast.delete(index)) {\n st.broadcastDeletes.add(index);\n }\n\n // Per-view side.\n root.forEachActiveView((view) => {\n const pending = st.pendingByView.get(view.id);\n if (pending?.has(index)) {\n pending.delete(index);\n neverSent = true;\n return;\n }\n const sent = st.sentByView.get(view.id);\n if (sent?.has(index)) {\n sent.delete(index);\n let changes = view.changes.get(refId);\n if (changes === undefined) {\n changes = new Map();\n view.changes.set(refId, changes);\n }\n changes.set(index, OPERATION.DELETE);\n }\n });\n\n return neverSent;\n}\n\n/**\n * Queue DELETE ops for every already-sent entry on all channels and\n * reset pending. Caller is responsible for actually clearing its own\n * storage and releasing any element refs it owns.\n */\nexport function streamRouteClear(s: Streamable, root: Root, refId: number): void {\n const st = s._stream;\n if (st === undefined) return;\n\n // Broadcast: drop never-sent pending; force DELETE for sent entries.\n st.broadcastPending.clear();\n for (const index of st.sentBroadcast) st.broadcastDeletes.add(index);\n st.sentBroadcast.clear();\n\n // Per-view: clear pending; force DELETE for sent entries via\n // `view.changes` (drained first in encodeView).\n root.forEachActiveView((view) => {\n st.pendingByView.get(view.id)?.clear();\n\n const sent = st.sentByView.get(view.id);\n if (sent !== undefined && sent.size > 0) {\n let changes = view.changes.get(refId);\n if (changes === undefined) {\n changes = new Map();\n view.changes.set(refId, changes);\n }\n for (const index of sent) changes.set(index, OPERATION.DELETE);\n sent.clear();\n }\n });\n}\n\n/**\n * Push a single position into `_pendingByView[viewId]` — the building\n * block for `StateView.add(element)` when the element lives under a\n * streamable collection. Idempotent for already-pending positions.\n */\nexport function streamEnqueueForView(s: Streamable, viewId: number, index: number): void {\n const st = ensureStreamState(s);\n let pending = st.pendingByView.get(viewId);\n if (pending === undefined) {\n pending = new Set();\n st.pendingByView.set(viewId, pending);\n }\n pending.add(index);\n}\n\n/**\n * Unsubscribe a single position from a view. Returns true iff the\n * element had already been sent and a DELETE op was queued on\n * `view.changes`; false if it was only pending (silent drop) or not\n * present at all.\n */\nexport function streamDequeueForView(\n s: Streamable,\n viewId: number,\n refId: number,\n index: number,\n viewChanges: Map<number, Map<number, number>>,\n): boolean {\n const st = s._stream;\n if (st === undefined) return false;\n const pending = st.pendingByView.get(viewId);\n if (pending?.has(index)) {\n pending.delete(index);\n return false;\n }\n const sent = st.sentByView.get(viewId);\n if (sent?.has(index)) {\n sent.delete(index);\n let changes = viewChanges.get(refId);\n if (changes === undefined) {\n changes = new Map();\n viewChanges.set(refId, changes);\n }\n changes.set(index, OPERATION.DELETE);\n return true;\n }\n return false;\n}\n\n/**\n * Drop all per-view state for a disposing/GC'd StateView. Keeps memory\n * bounded in long-running rooms with client churn.\n */\nexport function streamDropView(s: Streamable, viewId: number): void {\n const st = s._stream;\n if (st === undefined) return;\n st.pendingByView.delete(viewId);\n st.sentByView.delete(viewId);\n}\n","import { Metadata } from \"../Metadata.js\";\nimport { Schema } from \"../Schema.js\";\nimport { $streamFieldIndexes, $viewFieldIndexes } from \"./symbols.js\";\n\nexport class TypeContext {\n types: { [id: number]: typeof Schema; } = {};\n schemas = new Map<typeof Schema, number>();\n\n hasFilters: boolean = false;\n parentFiltered: {[typeIdAndParentIndex: string]: boolean} = {};\n /**\n * True iff `parentFiltered` has at least one entry. Flipped on by\n * `registerFilteredByParent` and read in `checkInheritedFlags` as a\n * cheap gate to skip the string-keyed `parentFiltered[key]` lookup\n * when no class has registered filter inheritance via ancestry — the\n * common case when @view tags exist only on sibling fields, not\n * along any attachment chain.\n */\n hasParentFilteredEntries: boolean = false;\n\n /**\n * For inheritance support\n * Keeps track of which classes extends which. (parent -> children)\n */\n static inheritedTypes = new Map<typeof Schema, Set<typeof Schema>>();\n static cachedContexts = new Map<typeof Schema, TypeContext>();\n\n static register(target: typeof Schema) {\n const parent = Object.getPrototypeOf(target);\n if (parent !== Schema) {\n let inherits = TypeContext.inheritedTypes.get(parent);\n if (!inherits) {\n inherits = new Set<typeof Schema>();\n TypeContext.inheritedTypes.set(parent, inherits);\n }\n inherits.add(target);\n }\n }\n\n static cache (rootClass: typeof Schema) {\n let context = TypeContext.cachedContexts.get(rootClass);\n if (!context) {\n context = new TypeContext(rootClass);\n TypeContext.cachedContexts.set(rootClass, context);\n }\n return context;\n }\n\n constructor(rootClass?: typeof Schema) {\n if (rootClass) {\n this.discoverTypes(rootClass);\n }\n }\n\n has(schema: typeof Schema) {\n return this.schemas.has(schema);\n }\n\n get(typeid: number) {\n return this.types[typeid];\n }\n\n add(schema: typeof Schema, typeid = this.schemas.size) {\n // skip if already registered\n if (this.schemas.has(schema)) {\n return false;\n }\n\n this.types[typeid] = schema;\n\n //\n // Workaround to allow using an empty Schema (with no `@type()` fields)\n //\n if (schema[Symbol.metadata] === undefined) {\n Metadata.initialize(schema);\n }\n\n this.schemas.set(schema, typeid);\n return true;\n }\n\n getTypeId(klass: typeof Schema) {\n return this.schemas.get(klass);\n }\n\n private discoverTypes(klass: typeof Schema, parentType?: typeof Schema, parentIndex?: number, parentHasViewTag?: boolean) {\n if (parentHasViewTag) {\n this.registerFilteredByParent(klass, parentType, parentIndex);\n }\n\n // skip if already registered\n if (!this.add(klass)) { return; }\n\n // add classes inherited from this base class\n TypeContext.inheritedTypes.get(klass)?.forEach((child) => {\n this.discoverTypes(child, parentType, parentIndex, parentHasViewTag);\n });\n\n // add parent classes\n let parent: any = klass;\n while (\n (parent = Object.getPrototypeOf(parent)) &&\n parent !== Schema && // stop at root (Schema)\n parent !== Function.prototype // stop at root (non-Schema)\n ) {\n this.discoverTypes(parent);\n }\n\n const metadata: Metadata = (klass[Symbol.metadata] ??= {} as Metadata);\n\n // if any schema/field has filters, mark \"context\" as having filters.\n // Stream fields are always view-scoped — treat like @view tags for\n // filter inheritance.\n if (metadata[$viewFieldIndexes] || metadata[$streamFieldIndexes]) {\n this.hasFilters = true;\n }\n\n for (const fieldIndex in metadata) {\n const index = fieldIndex as any as number;\n\n const fieldType = metadata[index].type;\n const fieldHasViewTag = (metadata[index].tag !== undefined);\n\n if (typeof (fieldType) === \"string\") {\n continue;\n }\n\n if (typeof (fieldType) === \"function\") {\n this.discoverTypes(fieldType as typeof Schema, klass, index, parentHasViewTag || fieldHasViewTag);\n\n } else {\n const type = Object.values(fieldType)[0];\n\n // skip primitive types\n if (typeof (type) === \"string\") {\n continue;\n }\n\n this.discoverTypes(type as typeof Schema, klass, index, parentHasViewTag || fieldHasViewTag);\n }\n }\n }\n\n /**\n * Keep track of which classes have filters applied.\n * Format: `${typeid}-${parentTypeid}-${parentIndex}`\n */\n private registerFilteredByParent(schema: typeof Schema, parentType?: typeof Schema, parentIndex?: number) {\n const typeid = this.schemas.get(schema) ?? this.schemas.size;\n\n let key = `${typeid}`;\n if (parentType) { key += `-${this.schemas.get(parentType)}`; }\n\n key += `-${parentIndex}`;\n this.parentFiltered[key] = true;\n this.hasParentFilteredEntries = true;\n }\n\n debug() {\n let parentFiltered = \"\";\n\n for (const key in this.parentFiltered) {\n const keys: number[] = key.split(\"-\").map(Number);\n const fieldIndex = keys.pop();\n\n parentFiltered += `\\n\\t\\t`;\n parentFiltered += `${key}: ${keys.reverse().map((id, i) => {\n const klass = this.types[id];\n const metadata: Metadata = klass[Symbol.metadata];\n let txt = klass.name;\n if (i === 0) { txt += `[${metadata[fieldIndex].name}]`; }\n return `${txt}`;\n }).join(\" -> \")}`;\n }\n\n return `TypeContext ->\\n` +\n `\\tSchema types: ${this.schemas.size}\\n` +\n `\\thasFilters: ${this.hasFilters}\\n` +\n `\\tparentFiltered:${parentFiltered}`;\n }\n\n}\n","import { DefinitionType, getPropertyDescriptor } from \"./annotations.js\";\nimport { Schema } from \"./Schema.js\";\nimport { getType, registeredTypes, TypeDefinition } from \"./types/registry.js\";\nimport { $decoder, $descriptors, $encoder, $encoders, $fieldIndexesByViewTag, $numFields, $refTypeFieldIndexes, $staticFieldIndexes, $streamFieldIndexes, $streamPriorities, $track, $transientFieldIndexes, $unreliableFieldIndexes, $viewFieldIndexes } from \"./types/symbols.js\";\nimport { ARRAY_STREAM_NOT_SUPPORTED } from \"./encoder/streaming.js\";\nimport { encode } from \"./encoding/encode.js\";\nimport { TypeContext } from \"./types/TypeContext.js\";\n\nexport type MetadataField = {\n type: DefinitionType,\n name: string,\n index: number,\n tag?: number,\n unreliable?: boolean,\n transient?: boolean,\n deprecated?: boolean,\n owned?: boolean,\n static?: boolean,\n stream?: boolean,\n optional?: boolean,\n};\n\nexport type Metadata =\n { [$numFields]: number; } & // number of fields\n { [$viewFieldIndexes]: number[]; } & // all field indexes with \"view\" tag\n { [$fieldIndexesByViewTag]: {[tag: number]: number[]}; } & // field indexes by \"view\" tag\n { [$refTypeFieldIndexes]: number[]; } & // all field indexes containing Ref types (Schema, ArraySchema, MapSchema, etc)\n { [$unreliableFieldIndexes]: number[]; } & // all field indexes tagged with @unreliable\n { [$transientFieldIndexes]: number[]; } & // all field indexes tagged with @transient (not persisted to snapshots)\n { [$staticFieldIndexes]: number[]; } & // all field indexes tagged with @static (not tracked after assignment)\n { [$streamFieldIndexes]: number[]; } & // all field indexes holding a t.stream(...) collection\n { [$streamPriorities]: { [field: number]: (view: any, element: any) => number }; } & // per-stream-field priority callback declared at schema definition time\n { [$encoders]: Array<(bytes: Uint8Array, value: any, it: any) => void>; } & // pre-computed encoder fn per primitive field\n { [field: number]: MetadataField; } & // index => field name\n { [field: string]: number; } & // field name => field metadata\n { [$descriptors]: { [field: string]: PropertyDescriptor } } // property descriptors\n\n/**\n * Given a normalized field type (`\"number\"`, `{ map: Foo }`, `Player`,\n * etc.), split into the collection-type descriptor (`{ constructor:\n * MapSchema, ... }`) if applicable and the inner child type. Shared by\n * `@type()` decoration and `Metadata.setFields` — both need to build a\n * property accessor that knows whether the slot holds a collection.\n */\nexport function resolveFieldType(type: any): { complexTypeKlass: TypeDefinition | false, childType: any } {\n const complexTypeKlass = typeof (Object.keys(type)[0]) === \"string\" && getType(Object.keys(type)[0]);\n return {\n complexTypeKlass,\n childType: complexTypeKlass ? Object.values(type)[0] : type,\n };\n}\n\nexport function getNormalizedType(type: any): DefinitionType {\n if (Array.isArray(type)) {\n return { array: getNormalizedType(type[0]) };\n\n } else if (typeof (type['type']) !== \"undefined\") {\n return type['type'];\n\n } else if (isTSEnum(type)) {\n // Detect TS Enum type (either string or number)\n return Object.keys(type).every(key => typeof type[key] === \"string\")\n ? \"string\"\n : \"number\";\n\n } else if (typeof type === \"object\" && type !== null) {\n // Handle collection types\n const collectionType = Object.keys(type).find(k => registeredTypes[k] !== undefined);\n if (collectionType) {\n type[collectionType] = getNormalizedType(type[collectionType]);\n return type;\n }\n }\n return type;\n}\n\nfunction isTSEnum(_enum: any) {\n if (typeof _enum === 'function' && _enum[Symbol.metadata]) {\n return false;\n }\n\n const keys = Object.keys(_enum);\n const numericFields = keys.filter(k => /\\d+/.test(k));\n\n // Check for number enum (has numeric keys and reverse mapping)\n if (numericFields.length > 0 && numericFields.length === (keys.length / 2) && _enum[_enum[numericFields[0]]] == numericFields[0]) {\n return true;\n }\n\n // Check for string enum (all values are strings and keys match values)\n if (keys.length > 0 && keys.every(key => typeof _enum[key] === 'string' && _enum[key] === key)) {\n return true;\n }\n\n return false;\n}\n\nexport const Metadata = {\n\n addField(metadata: any, index: number, name: string, type: DefinitionType, descriptor?: PropertyDescriptor) {\n if (index > 64) {\n throw new Error(`Can't define field '${name}'.\\nSchema instances may only have up to 64 fields.`);\n }\n\n metadata[index] = Object.assign(\n metadata[index] || {}, // avoid overwriting previous field metadata (@owned / @deprecated)\n {\n type: getNormalizedType(type),\n index,\n name,\n }\n );\n\n // create \"descriptors\" map\n Object.defineProperty(metadata, $descriptors, {\n value: metadata[$descriptors] || {},\n enumerable: false,\n configurable: true,\n });\n\n if (descriptor) {\n // Accessor descriptor for the public field name.\n // Installed on the prototype at class-definition time.\n metadata[$descriptors][name] = descriptor;\n } else {\n // For decoder: simple writable slot, also on prototype.\n metadata[$descriptors][name] = {\n value: undefined,\n writable: true,\n enumerable: true,\n configurable: true,\n };\n }\n\n // map -1 as last field index\n Object.defineProperty(metadata, $numFields, {\n value: index,\n enumerable: false,\n configurable: true\n });\n\n // map field name => index (non enumerable)\n Object.defineProperty(metadata, name, {\n value: index,\n enumerable: false,\n configurable: true,\n });\n\n // if child Ref/complex type, add to -4\n if (typeof (metadata[index].type) !== \"string\") {\n if (metadata[$refTypeFieldIndexes] === undefined) {\n Object.defineProperty(metadata, $refTypeFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n });\n }\n metadata[$refTypeFieldIndexes].push(index);\n }\n\n // `{ stream: ... }` collections are always view-scoped (priority-\n // batched emit). Auto-flag here so both `@type({stream: ...})` and\n // the `t.stream(...)` builder route into the same filter / encoder\n // dispatch without the caller needing an extra setStream() call.\n const t = metadata[index].type;\n if (t && typeof t === \"object\" && (t as any)[\"stream\"] !== undefined) {\n // Reject the combined shorthand `@type({ array: X, stream:\n // true })` at decoration time — same diagnostic as the\n // builder chainable throws for `t.array(X).stream()`.\n if ((t as any).array !== undefined) {\n throw new Error(ARRAY_STREAM_NOT_SUPPORTED);\n }\n metadata[index].stream = true;\n if (!metadata[$streamFieldIndexes]) {\n Object.defineProperty(metadata, $streamFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n if (!metadata[$streamFieldIndexes].includes(index)) {\n metadata[$streamFieldIndexes].push(index);\n }\n // Pick up the declaration-scope priority callback if present in\n // the `@type({ stream: X, priority: fn })` shorthand.\n const priorityFn = (type as any)?.priority;\n if (typeof priorityFn === \"function\") {\n Metadata.setStreamPriority(metadata as any, name, priorityFn);\n }\n }\n },\n\n setTag(metadata: Metadata, fieldName: string, tag: number) {\n const index = metadata[fieldName];\n const field = metadata[index];\n\n // add 'tag' to the field\n field.tag = tag;\n\n if (!metadata[$viewFieldIndexes]) {\n // -2: all field indexes with \"view\" tag\n Object.defineProperty(metadata, $viewFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true\n });\n\n // -3: field indexes by \"view\" tag\n Object.defineProperty(metadata, $fieldIndexesByViewTag, {\n value: {},\n enumerable: false,\n configurable: true\n });\n }\n\n metadata[$viewFieldIndexes].push(index);\n\n if (!metadata[$fieldIndexesByViewTag][tag]) {\n metadata[$fieldIndexesByViewTag][tag] = [];\n }\n\n metadata[$fieldIndexesByViewTag][tag].push(index);\n },\n\n setUnreliable(metadata: Metadata, fieldName: string) {\n const index = metadata[fieldName];\n const fieldType = metadata[index].type;\n // `@unreliable` is only valid on primitive fields. Ref-type fields\n // (Schema sub-classes, MapSchema, ArraySchema, SetSchema,\n // CollectionSchema) carry refIds whose ADD/DELETE must arrive\n // on the reliable channel — otherwise a dropped unreliable packet\n // would leave the decoder unable to interpret subsequent packets\n // referencing the orphan refId. Primitive types are encoded as\n // strings (\"number\", \"string\", \"int32\", ...); anything else is a\n // ref. Reject at decoration time so the bug surfaces in dev, not\n // under packet loss in prod.\n if (typeof fieldType !== \"string\") {\n throw new Error(\n `@unreliable cannot be applied to ref-type field \"${fieldName}\". ` +\n `For ref-type fields, mark each primitive sub-field with @unreliable instead. ` +\n `See README \"Limitations and best practices\".`\n );\n }\n metadata[index].unreliable = true;\n\n if (!metadata[$unreliableFieldIndexes]) {\n Object.defineProperty(metadata, $unreliableFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$unreliableFieldIndexes].push(index);\n },\n\n setTransient(metadata: Metadata, fieldName: string) {\n const index = metadata[fieldName];\n metadata[index].transient = true;\n\n if (!metadata[$transientFieldIndexes]) {\n Object.defineProperty(metadata, $transientFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$transientFieldIndexes].push(index);\n },\n\n setStatic(metadata: Metadata, fieldName: string) {\n const index = metadata[fieldName];\n metadata[index].static = true;\n\n if (!metadata[$staticFieldIndexes]) {\n Object.defineProperty(metadata, $staticFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$staticFieldIndexes].push(index);\n },\n\n setStream(metadata: Metadata, fieldName: string) {\n const index = metadata[fieldName];\n metadata[index].stream = true;\n\n if (!metadata[$streamFieldIndexes]) {\n Object.defineProperty(metadata, $streamFieldIndexes, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$streamFieldIndexes].push(index);\n },\n\n /**\n * Attach a declaration-scope priority callback to a stream field.\n * Called at schema definition time (via `t.stream(X).priority(fn)` or\n * `@type({ stream: X, priority: fn })`), looked up at stream-attach\n * time to seed the instance's `_stream.priority` slot. The callback\n * signature is `(view: StateView, element: V) => number` — only fires\n * during `encodeView`, broadcast mode emits FIFO regardless.\n */\n setStreamPriority(\n metadata: Metadata,\n fieldName: string,\n fn: (view: any, element: any) => number,\n ) {\n const index = metadata[fieldName];\n if (!metadata[$streamPriorities]) {\n Object.defineProperty(metadata, $streamPriorities, {\n value: {},\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$streamPriorities][index] = fn;\n },\n\n getStreamPriority(metadata: Metadata | undefined, index: number) {\n return metadata?.[$streamPriorities]?.[index];\n },\n\n /**\n * Install a single field with full encoder wiring: accessor descriptor\n * on the prototype + `metadata[$encoders]` slot for primitives. Shared\n * between `Metadata.setFields` (build path) and\n * `Reflection.makeEncodable` (Reflection upgrade path).\n */\n defineField(\n target: any,\n metadata: any,\n fieldIndex: number,\n fieldName: string,\n type: DefinitionType,\n ) {\n const normalized = getNormalizedType(type);\n const { complexTypeKlass, childType } = resolveFieldType(normalized);\n\n Metadata.addField(\n metadata,\n fieldIndex,\n fieldName,\n normalized,\n getPropertyDescriptor(fieldName, fieldIndex, childType, complexTypeKlass),\n );\n\n // Install accessor descriptor on the prototype (once per class field).\n if (metadata[$descriptors][fieldName]) {\n Object.defineProperty(target.prototype, fieldName, metadata[$descriptors][fieldName]);\n }\n\n // Pre-compute encoder function for primitive types.\n if (typeof normalized === \"string\") {\n if (!metadata[$encoders]) {\n Object.defineProperty(metadata, $encoders, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$encoders][fieldIndex] = (encode as any)[normalized];\n }\n },\n\n setFields<T extends { new (...args: any[]): InstanceType<T> } = any>(target: T, fields: { [field in keyof InstanceType<T>]?: DefinitionType }) {\n // for inheritance support\n const constructor = target.prototype.constructor;\n TypeContext.register(constructor);\n\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata = parentClass && parentClass[Symbol.metadata];\n const metadata = Metadata.initialize(constructor);\n\n // Use Schema's methods if not defined in the class\n if (!constructor[$track]) { constructor[$track] = Schema[$track]; }\n if (!constructor[$encoder]) { constructor[$encoder] = Schema[$encoder]; }\n if (!constructor[$decoder]) { constructor[$decoder] = Schema[$decoder]; }\n if (!constructor.prototype.toJSON) { constructor.prototype.toJSON = Schema.prototype.toJSON; }\n\n //\n // detect index for this field, considering inheritance\n //\n let fieldIndex = metadata[$numFields] // current structure already has fields defined\n ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined\n ?? -1; // no fields defined\n\n fieldIndex++;\n\n // Pre-computed encoder function table: metadata[$encoders][fieldIndex] = encode.uint8 etc.\n if (!metadata[$encoders]) {\n Object.defineProperty(metadata, $encoders, {\n value: parentMetadata?.[$encoders] ? [...parentMetadata[$encoders]] : [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n for (const field in fields) {\n Metadata.defineField(constructor, metadata, fieldIndex, field, fields[field] as DefinitionType);\n fieldIndex++;\n }\n\n return target;\n },\n\n isDeprecated(metadata: any, field: string) {\n return metadata[field].deprecated === true;\n },\n\n initialize(constructor: any) {\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata: Metadata = parentClass[Symbol.metadata];\n\n let metadata: Metadata = constructor[Symbol.metadata] ?? Object.create(null);\n\n // make sure inherited classes have their own metadata object.\n if (parentClass !== Schema && metadata === parentMetadata) {\n metadata = Object.create(null);\n\n if (parentMetadata) {\n //\n // assign parent metadata to current\n //\n Object.setPrototypeOf(metadata, parentMetadata);\n\n // $numFields\n Object.defineProperty(metadata, $numFields, {\n value: parentMetadata[$numFields],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n\n // $viewFieldIndexes / $fieldIndexesByViewTag\n if (parentMetadata[$viewFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $viewFieldIndexes, {\n value: [...parentMetadata[$viewFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n Object.defineProperty(metadata, $fieldIndexesByViewTag, {\n value: { ...parentMetadata[$fieldIndexesByViewTag] },\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $refTypeFieldIndexes\n if (parentMetadata[$refTypeFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $refTypeFieldIndexes, {\n value: [...parentMetadata[$refTypeFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $unreliableFieldIndexes\n if (parentMetadata[$unreliableFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $unreliableFieldIndexes, {\n value: [...parentMetadata[$unreliableFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $transientFieldIndexes\n if (parentMetadata[$transientFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $transientFieldIndexes, {\n value: [...parentMetadata[$transientFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $staticFieldIndexes\n if (parentMetadata[$staticFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $staticFieldIndexes, {\n value: [...parentMetadata[$staticFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $streamFieldIndexes\n if (parentMetadata[$streamFieldIndexes] !== undefined) {\n Object.defineProperty(metadata, $streamFieldIndexes, {\n value: [...parentMetadata[$streamFieldIndexes]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n // $descriptors\n Object.defineProperty(metadata, $descriptors, {\n value: { ...parentMetadata[$descriptors] },\n enumerable: false,\n configurable: true,\n writable: true,\n });\n\n // $encoders\n if (parentMetadata[$encoders] !== undefined) {\n Object.defineProperty(metadata, $encoders, {\n value: [...parentMetadata[$encoders]],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n }\n }\n\n Object.defineProperty(constructor, Symbol.metadata, {\n value: metadata,\n writable: false,\n configurable: true\n });\n\n return metadata;\n },\n\n isValidInstance(klass: any) {\n return (\n klass.constructor[Symbol.metadata] &&\n Object.prototype.hasOwnProperty.call(klass.constructor[Symbol.metadata], $numFields) as boolean\n );\n },\n\n getFields(klass: any) {\n const metadata: Metadata = klass[Symbol.metadata];\n const fields: any = {};\n for (let i = 0; i <= metadata[$numFields]; i++) {\n fields[metadata[i].name] = metadata[i].type;\n }\n return fields;\n },\n\n hasViewTagAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$viewFieldIndexes]?.includes(index);\n },\n\n hasUnreliableAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$unreliableFieldIndexes]?.includes(index);\n },\n\n hasTransientAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$transientFieldIndexes]?.includes(index);\n },\n\n hasStaticAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$staticFieldIndexes]?.includes(index);\n },\n\n hasStreamAtIndex(metadata: Metadata, index: number) {\n return metadata?.[$streamFieldIndexes]?.includes(index);\n }\n}","import { OPERATION } from \"../encoding/spec.js\";\n\n/**\n * ChangeRecorder — \"what changed this tick\" for a single ref.\n *\n * This file holds the two standalone recorder classes used for the\n * unreliable channel (lazy, opt-in). The reliable channel is inlined on\n * `ChangeTree` for perf; see `ChangeTree._isSchema` dispatch.\n *\n * Interface design (ISP):\n * - {@link ChangeRecorder}: common ops, implemented by both Schema and\n * Collection recorders.\n * - {@link ICollectionChangeRecorder}: extends with `recordPure` +\n * `shift` — collection-only. Schema recorders do NOT carry these.\n *\n * Per-field filter/visibility is decided at encode time, not record time.\n * Full-sync output is derived structurally via `ChangeTree.forEachLive`.\n */\nexport interface ChangeRecorder {\n /**\n * Record a change at the given index. Handles op merge\n * (DELETE followed by ADD becomes DELETE_AND_ADD).\n */\n record(index: number, op: OPERATION): void;\n\n /** Record a DELETE at the given index. */\n recordDelete(index: number, op: OPERATION): void;\n\n /**\n * Record an operation without op-merge semantics. Used by ArraySchema\n * positional writes where DELETE→ADD merge is undesirable.\n */\n recordRaw(index: number, op: OPERATION): void;\n\n /** Current operation at index, or undefined if none. */\n operationAt(index: number): OPERATION | undefined;\n\n /** Overwrite the operation at index. */\n setOperationAt(index: number, op: OPERATION): void;\n\n /**\n * Iterate (index, op) pairs in record order.\n * Pure operations emit with index = -op (wire convention).\n */\n forEach(cb: (index: number, op: OPERATION) => void): void;\n\n /** Closure-free forEach variant for the hot encode path. */\n forEachWithCtx<T>(ctx: T, cb: (ctx: T, index: number, op: OPERATION) => void): void;\n\n size(): number;\n has(): boolean;\n reset(): void;\n}\n\n/**\n * Extended recorder for collection types — adds `recordPure` (CLEAR /\n * REVERSE) and `shift` (ArraySchema.unshift support).\n */\nexport interface ICollectionChangeRecorder extends ChangeRecorder {\n /**\n * Record a pure operation (CLEAR / REVERSE) with no index.\n * Interleaves with indexed ops at record order.\n */\n recordPure(op: OPERATION): void;\n\n /** Shift current-tick dirty indexes by `shiftIndex`. */\n shift(shiftIndex: number): void;\n}\n\n// Module-scope adapter: lets `forEach(cb)` delegate to `forEachWithCtx`\n// by passing the user's callback as ctx. No per-call allocation.\nconst _invokeNoCtx = (\n cb: (index: number, op: OPERATION) => void,\n index: number,\n op: OPERATION,\n) => cb(index, op);\n\n// ──────────────────────────────────────────────────────────────────────────\n// SchemaChangeRecorder — bitmask + Uint8Array, for Schema types (≤64 fields)\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Schema field operations are limited to ADD(128), DELETE(64), and\n * DELETE_AND_ADD(192). REPLACE(0) is collection-only, so `ops[i] === 0`\n * is a safe \"no operation\" sentinel.\n */\nexport class SchemaChangeRecorder implements ChangeRecorder {\n // Bitmask storage for fields 0-31 (low) and 32-63 (high).\n private dirtyLow = 0;\n private dirtyHigh = 0;\n\n // ops[fieldIndex] = OPERATION value. Pre-sized to numFields+1.\n private readonly ops: Uint8Array;\n\n constructor(numFields: number) {\n this.ops = new Uint8Array(Math.max(numFields + 1, 1));\n }\n\n record(index: number, op: OPERATION): void {\n const prev = this.ops[index];\n if (prev === 0) this.ops[index] = op;\n else if (prev === OPERATION.DELETE) this.ops[index] = OPERATION.DELETE_AND_ADD;\n // Promote ADD → DELETE_AND_ADD when a ref is replaced in the same\n // tick. See `ChangeTree.record` for rationale — same logic, this\n // interface implementation is kept in sync.\n else if (prev === OPERATION.ADD && op === OPERATION.DELETE_AND_ADD) {\n this.ops[index] = OPERATION.DELETE_AND_ADD;\n }\n // else preserve existing ADD / DELETE_AND_ADD.\n\n if (index < 32) this.dirtyLow |= (1 << index);\n else this.dirtyHigh |= (1 << (index - 32));\n }\n\n recordDelete(index: number, op: OPERATION): void {\n this.ops[index] = op;\n if (index < 32) this.dirtyLow |= (1 << index);\n else this.dirtyHigh |= (1 << (index - 32));\n }\n\n recordRaw(index: number, op: OPERATION): void {\n this.record(index, op);\n }\n\n operationAt(index: number): OPERATION | undefined {\n const op = this.ops[index];\n return op === 0 ? undefined : op;\n }\n\n setOperationAt(index: number, op: OPERATION): void {\n this.ops[index] = op;\n }\n\n forEach(cb: (index: number, op: OPERATION) => void): void {\n this.forEachWithCtx(cb, _invokeNoCtx);\n }\n\n forEachWithCtx<T>(ctx: T, cb: (ctx: T, index: number, op: OPERATION) => void): void {\n let low = this.dirtyLow;\n let high = this.dirtyHigh;\n const ops = this.ops;\n // Iterate set bits via clz32 (CPU-level bit scan).\n while (low !== 0) {\n const bit = low & -low;\n const fieldIndex = 31 - Math.clz32(bit);\n low ^= bit;\n cb(ctx, fieldIndex, ops[fieldIndex]);\n }\n while (high !== 0) {\n const bit = high & -high;\n const fieldIndex = 31 - Math.clz32(bit) + 32;\n high ^= bit;\n cb(ctx, fieldIndex, ops[fieldIndex]);\n }\n }\n\n size(): number {\n return popcount32(this.dirtyLow) + popcount32(this.dirtyHigh);\n }\n\n has(): boolean {\n return (this.dirtyLow | this.dirtyHigh) !== 0;\n }\n\n reset(): void {\n this.dirtyLow = 0;\n this.dirtyHigh = 0;\n this.ops.fill(0);\n }\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// CollectionChangeRecorder — Map-based, for collections with sparse indexes\n// ──────────────────────────────────────────────────────────────────────────\n\n/**\n * Collection items have sparse indexes (e.g. 0, 7, 1024) exceeding the\n * 64-field cap Schema imposes. Map-based storage handles arbitrary\n * indexes; the value at each entry is the OPERATION.\n *\n * Pure operations (CLEAR, REVERSE) live in `pureOps` as `[position, op]`\n * entries where `position` is `dirty.size` at record time — preserves\n * insertion-order interleaving with indexed ops (e.g. CLEAR must emit\n * BEFORE subsequent ADDs).\n */\nexport class CollectionChangeRecorder implements ICollectionChangeRecorder {\n private dirty: Map<number, OPERATION> = new Map();\n private pureOps: Array<[number, OPERATION]> = [];\n\n record(index: number, op: OPERATION): void {\n const prev = this.dirty.get(index);\n if (prev === undefined) this.dirty.set(index, op);\n else if (prev === OPERATION.DELETE) this.dirty.set(index, OPERATION.DELETE_AND_ADD);\n // Promote ADD → DELETE_AND_ADD for same-tick replacement of a ref\n // (see `SchemaChangeRecorder.record` for rationale).\n else if (prev === OPERATION.ADD && op === OPERATION.DELETE_AND_ADD) {\n this.dirty.set(index, OPERATION.DELETE_AND_ADD);\n }\n // else preserve existing op.\n }\n\n recordDelete(index: number, op: OPERATION): void {\n this.dirty.set(index, op);\n }\n\n recordRaw(index: number, op: OPERATION): void {\n this.dirty.set(index, op);\n }\n\n recordPure(op: OPERATION): void {\n this.pureOps.push([this.dirty.size, op]);\n }\n\n operationAt(index: number): OPERATION | undefined {\n return this.dirty.get(index);\n }\n\n setOperationAt(index: number, op: OPERATION): void {\n if (this.dirty.has(index)) this.dirty.set(index, op);\n }\n\n forEach(cb: (index: number, op: OPERATION) => void): void {\n this.forEachWithCtx(cb, _invokeNoCtx);\n }\n\n forEachWithCtx<T>(ctx: T, cb: (ctx: T, index: number, op: OPERATION) => void): void {\n const pure = this.pureOps;\n if (pure.length > 0) {\n let pureIdx = 0, i = 0;\n for (const [index, op] of this.dirty) {\n while (pureIdx < pure.length && pure[pureIdx][0] <= i) {\n const pureOp = pure[pureIdx++][1];\n cb(ctx, -pureOp, pureOp);\n }\n cb(ctx, index, op);\n i++;\n }\n while (pureIdx < pure.length) {\n const pureOp = pure[pureIdx++][1];\n cb(ctx, -pureOp, pureOp);\n }\n } else {\n for (const [index, op] of this.dirty) cb(ctx, index, op);\n }\n }\n\n size(): number {\n return this.dirty.size + this.pureOps.length;\n }\n\n has(): boolean {\n return this.dirty.size > 0 || this.pureOps.length > 0;\n }\n\n reset(): void {\n this.dirty.clear();\n this.pureOps.length = 0;\n }\n\n shift(shiftIndex: number): void {\n const dst = new Map<number, OPERATION>();\n for (const [idx, val] of this.dirty) dst.set(idx + shiftIndex, val);\n this.dirty = dst;\n }\n}\n\n// ──────────────────────────────────────────────────────────────────────────\n// Helpers\n// ──────────────────────────────────────────────────────────────────────────\n\n/** 32-bit Hamming weight (popcount). */\nexport function popcount32(n: number): number {\n n = n - ((n >>> 1) & 0x55555555);\n n = (n & 0x33333333) + ((n >>> 2) & 0x33333333);\n return (((n + (n >>> 4)) & 0x0f0f0f0f) * 0x01010101) >>> 24;\n}\n","/**\n * EncodeDescriptor — per-class snapshot of the values the encode loop needs\n * from a Ref's constructor. Lazily computed once per class (the first time\n * a tree of that class is constructed) and stashed on the constructor via\n * `$encodeDescriptor`. Each ChangeTree caches a reference to its class's\n * descriptor at construction time, so the encode loop reads a single\n * property from the tree instead of chasing 5 separate per-tree lookups:\n *\n * ctor[$encoder]\n * ctor[$filter]\n * ctor[Symbol.metadata]\n * Metadata.isValidInstance(ref)\n * getFilterBitmask(metadata)\n *\n * Lives in its own file to break the Encoder.ts ↔ ChangeTree.ts import\n * cycle (ChangeTree caches descriptors at construction; Encoder reads them\n * during encode).\n */\nimport { Metadata } from \"../Metadata.js\";\nimport { $encodeDescriptor, $encoder, $encoders, $filter, $filterBitmask, $numFields, $staticFieldIndexes, $streamFieldIndexes, $unreliableFieldIndexes, $viewFieldIndexes } from \"../types/symbols.js\";\nimport type { StateView } from \"./StateView.js\";\nimport type { EncodeOperation } from \"./EncodeOperation.js\";\n\nexport interface EncodeDescriptor {\n encoder: EncodeOperation;\n filter: ((ref: any, index: number, view?: StateView) => boolean) | undefined;\n metadata: any;\n isSchema: boolean;\n /**\n * Bit i set iff field i has a @view tag. 0 for collection trees.\n * Lets `encodeChangeCb` do a single bitwise op instead of a\n * per-field metadata[i]?.tag chase.\n */\n filterBitmask: number;\n\n /**\n * Class-level \"any field has the flag\" booleans + per-field bitmasks.\n * Hot path: per-mutation `_routeAndRecord` calls `isFieldStatic` and\n * `isFieldUnreliable`. The common case is \"no static/unreliable fields\n * anywhere on this class\" (booleans short-circuit before the symbol-keyed\n * metadata lookup); the secondary common case is \"this class has some\n * such fields and we need to know if THIS field is one\" — the bitmask\n * answers in one bitwise op instead of an `Array.includes` linear scan.\n *\n * Bitmasks cover fields 0–31 only (matches the `filterBitmask` limitation).\n * Fields ≥32 fall back to `Metadata.hasXAtIndex` — same handling as the\n * filter-bitmask path.\n */\n hasAnyStatic: boolean;\n hasAnyUnreliable: boolean;\n hasAnyStream: boolean;\n /**\n * Class-level \"any field carries a `@view` tag\" — covers fields both\n * within and beyond index 31 (unlike `filterBitmask`, which only\n * captures the low 32). Read by `ChangeTree.hasFilteredFields` to\n * decide whether a parent tree must be included in a view's bootstrap.\n */\n hasAnyView: boolean;\n staticBitmask: number;\n unreliableBitmask: number;\n /**\n * Bit i set iff field i holds a `t.stream(...)` collection. Hot encode\n * path reads this to dispatch stream fields into the priority/budget\n * gate instead of the normal recorder iteration.\n */\n streamBitmask: number;\n\n /**\n * Per-field parallel arrays — Schemas only (empty arrays for\n * collections). Replaces hot-path `metadata[i].name` / `metadata[i].type`\n * / `metadata[i].tag` chains with direct array indexing on a small\n * fixed-shape object.\n *\n * Sparse where natural: `tags[i]` is undefined unless field i carries\n * a @view tag; readers should null-check before comparing.\n *\n * `encoders[i]` mirrors `metadata[$encoders]` — the pre-computed\n * encoder fn for primitive-typed fields. Cached here so encode loops\n * skip a `metadata[$encoders]?.[i]` symbol-chain per emission.\n */\n names: string[];\n types: any[];\n tags: (number | undefined)[];\n encoders: (((bytes: Uint8Array, value: any, it: any) => void) | undefined)[];\n}\n\nfunction computeFilterBitmask(metadata: any): number {\n if (metadata === undefined) return 0;\n let bm: number | undefined = metadata[$filterBitmask];\n if (bm !== undefined) return bm;\n bm = 0;\n const tagged = metadata[$viewFieldIndexes];\n if (tagged !== undefined) {\n for (let i = 0, len = tagged.length; i < len; i++) bm |= (1 << tagged[i]);\n }\n // Non-enumerable so `for (const k in metadata)` iteration in TypeContext\n // and elsewhere doesn't mistake this cache for a real field index.\n Object.defineProperty(metadata, $filterBitmask, {\n value: bm,\n enumerable: false,\n writable: true,\n configurable: true,\n });\n return bm;\n}\n\n/**\n * Bitmask of field indexes 0–31 in `indexes`. For fields ≥32 callers must\n * fall back to the array lookup (same as `filterBitmask`).\n */\nfunction indexesToBitmask(indexes: number[] | undefined): number {\n if (indexes === undefined) return 0;\n let bm = 0;\n for (let i = 0, len = indexes.length; i < len; i++) {\n const idx = indexes[i];\n if (idx < 32) bm |= (1 << idx);\n }\n return bm;\n}\n\n/**\n * Build the per-field parallel arrays once at descriptor construction.\n * For collection trees (no metadata or no $numFields) this returns empty\n * arrays — readers branch on `isSchema` before touching them anyway.\n */\nfunction buildFieldArrays(metadata: any): {\n names: string[];\n types: any[];\n tags: (number | undefined)[];\n encoders: (((bytes: Uint8Array, value: any, it: any) => void) | undefined)[];\n} {\n const names: string[] = [];\n const types: any[] = [];\n const tags: (number | undefined)[] = [];\n const encoders: (((bytes: Uint8Array, value: any, it: any) => void) | undefined)[] = [];\n\n if (metadata === undefined) return { names, types, tags, encoders };\n\n const numFields = metadata[$numFields];\n if (numFields === undefined) return { names, types, tags, encoders };\n\n const srcEncoders = metadata[$encoders];\n for (let i = 0; i <= numFields; i++) {\n const field = metadata[i];\n if (field === undefined) {\n // Holes are normal — inheritance can leave gaps. Fill with\n // undefined so indexing is valid.\n names[i] = undefined!;\n types[i] = undefined;\n tags[i] = undefined;\n encoders[i] = undefined;\n continue;\n }\n names[i] = field.name;\n types[i] = field.type;\n tags[i] = field.tag;\n encoders[i] = srcEncoders?.[i];\n }\n return { names, types, tags, encoders };\n}\n\nexport function getEncodeDescriptor(ref: any): EncodeDescriptor {\n const ctor = ref.constructor;\n\n // Use hasOwn — Object.defineProperty on a parent class would otherwise\n // be inherited by every subclass via the prototype chain, and a\n // subclass's instance would read the parent's metadata/encoder. See\n // \"should encode the correct class inside an array\" for the regression.\n if (Object.prototype.hasOwnProperty.call(ctor, $encodeDescriptor)) {\n return ctor[$encodeDescriptor];\n }\n\n const metadata = ctor[Symbol.metadata];\n const isSchema = Metadata.isValidInstance(ref);\n const hasAnyView = (metadata?.[$viewFieldIndexes]?.length ?? 0) > 0;\n const arrays = buildFieldArrays(metadata);\n // For Schema classes with no `@view`-tagged fields, the per-field\n // `ctx.filter(ref, index, view)` call on the encode hot path is a\n // provable no-op: `Schema[$filter]` does `metadata[index]?.tag === undefined`\n // which is always true when no field carries a tag. Setting filter to\n // `undefined` here lets the `ctx.filter !== undefined && …` short-circuit\n // in `encodeChangeCb` skip the call entirely — the metadata lookup +\n // comparison adds up across 10k+ field encodes/tick.\n // Collection classes keep their filter — their `[$filter]` does\n // instance-level `ref[$childType]` / view-visibility checks that can't\n // be decided class-wide.\n const filter = (isSchema && !hasAnyView) ? undefined : ctor[$filter];\n const desc: EncodeDescriptor = {\n encoder: ctor[$encoder],\n filter,\n metadata,\n isSchema,\n filterBitmask: isSchema ? computeFilterBitmask(metadata) : 0,\n hasAnyStatic: (metadata?.[$staticFieldIndexes]?.length ?? 0) > 0,\n hasAnyUnreliable: (metadata?.[$unreliableFieldIndexes]?.length ?? 0) > 0,\n hasAnyStream: (metadata?.[$streamFieldIndexes]?.length ?? 0) > 0,\n hasAnyView,\n staticBitmask: indexesToBitmask(metadata?.[$staticFieldIndexes]),\n unreliableBitmask: indexesToBitmask(metadata?.[$unreliableFieldIndexes]),\n streamBitmask: indexesToBitmask(metadata?.[$streamFieldIndexes]),\n names: arrays.names,\n types: arrays.types,\n tags: arrays.tags,\n encoders: arrays.encoders,\n };\n Object.defineProperty(ctor, $encodeDescriptor, {\n value: desc,\n enumerable: false,\n writable: true,\n configurable: true,\n });\n return desc;\n}\n","/**\n * Parent-chain helpers for ChangeTree. A tree can have multiple parents\n * (rare — instance sharing between Schema/Collection containers). The\n * primary parent is stored inline on the tree (`parentRef` / `_parentIndex`);\n * additional parents live in the `extraParents` linked list.\n */\nimport { $changes } from \"../../types/symbols.js\";\nimport type { ChangeTree, ParentChain, Ref } from \"../ChangeTree.js\";\n\n/**\n * Add a parent to the chain. If `parent` already exists anywhere in the\n * chain, update the primary parent's index instead (matches legacy\n * behavior).\n */\nexport function addParent(tree: ChangeTree, parent: Ref, index: number): void {\n // Check if this parent already exists anywhere in the chain\n if (tree.parentRef) {\n if (tree.parentRef[$changes] === parent[$changes]) {\n // Primary parent matches — update index\n tree._parentIndex = index;\n return;\n }\n\n // Check extra parents for duplicate\n if (hasParent(tree, (p, _) => p[$changes] === parent[$changes])) {\n // Match old behavior: update primary parent's index\n tree._parentIndex = index;\n return;\n }\n }\n\n if (tree.parentRef === undefined) {\n // First parent — store inline\n tree.parentRef = parent;\n tree._parentIndex = index;\n } else {\n // Push current inline parent to extraParents, set new as primary\n tree.extraParents = {\n ref: tree.parentRef,\n index: tree._parentIndex,\n next: tree.extraParents\n };\n tree.parentRef = parent;\n tree._parentIndex = index;\n }\n}\n\n/**\n * Remove a parent from the chain.\n * @returns true if parent was found and removed (Root.remove relies on this).\n */\nexport function removeParent(tree: ChangeTree, parent: Ref): boolean {\n //\n // FIXME: it is required to check against `$changes` here because\n // ArraySchema is instance of Proxy\n //\n if (tree.parentRef && tree.parentRef[$changes] === parent[$changes]) {\n // Removing inline parent — promote first extra parent if exists\n if (tree.extraParents) {\n tree.parentRef = tree.extraParents.ref;\n tree._parentIndex = tree.extraParents.index;\n tree.extraParents = tree.extraParents.next;\n } else {\n tree.parentRef = undefined;\n tree._parentIndex = undefined;\n }\n return true;\n }\n\n // Search extra parents\n let current = tree.extraParents;\n let previous = null;\n while (current) {\n if (current.ref[$changes] === parent[$changes]) {\n if (previous) {\n previous.next = current.next;\n } else {\n tree.extraParents = current.next;\n }\n return true;\n }\n previous = current;\n current = current.next;\n }\n return tree.parentRef === undefined;\n}\n\n/**\n * Find the first parent in the chain matching `predicate`.\n */\nexport function findParent(\n tree: ChangeTree,\n predicate: (parent: Ref, index: number) => boolean,\n): ParentChain | undefined {\n // Check inline parent first\n if (tree.parentRef && predicate(tree.parentRef, tree._parentIndex)) {\n return { ref: tree.parentRef, index: tree._parentIndex };\n }\n\n let current = tree.extraParents;\n while (current) {\n if (predicate(current.ref, current.index)) {\n return current;\n }\n current = current.next;\n }\n return undefined;\n}\n\nexport function hasParent(\n tree: ChangeTree,\n predicate: (parent: Ref, index: number) => boolean,\n): boolean {\n return findParent(tree, predicate) !== undefined;\n}\n\n/**\n * Return all parents as an array (debug/test helper).\n */\nexport function getAllParents(tree: ChangeTree): Array<{ ref: Ref, index: number }> {\n const parents: Array<{ ref: Ref, index: number }> = [];\n if (tree.parentRef) {\n parents.push({ ref: tree.parentRef, index: tree._parentIndex });\n }\n let current = tree.extraParents;\n while (current) {\n parents.push({ ref: current.ref, index: current.index });\n current = current.next;\n }\n return parents;\n}\n","/**\n * Walk all currently-populated non-transient indexes on a tree, emitting\n * each index once. Used by Root.add (re-stage), Encoder.encodeAll, and\n * StateView.add to derive full-sync output from the live structure.\n *\n * Transient fields (`@transient`) are skipped — they're delivered only on\n * tick patches and not persisted to snapshots. Collections whose parent\n * field is @transient inherit the skip (`tree.isTransient`).\n */\nimport { $childType, $numFields, $transientFieldIndexes } from \"../../types/symbols.js\";\nimport type { ChangeTree } from \"../ChangeTree.js\";\n\n// Adapter that lets `forEachLive(cb)` delegate to `forEachLiveWithCtx(cb, _invokeNoCtx)` —\n// keeps the no-ctx path closure-free and shares one walker implementation.\nconst _invokeNoCtx = (cb: (index: number) => void, index: number) => cb(index);\n\nexport function forEachLive(tree: ChangeTree, callback: (index: number) => void): void {\n forEachLiveWithCtx(tree, callback, _invokeNoCtx);\n}\n\nexport function forEachLiveWithCtx<C>(\n tree: ChangeTree,\n ctx: C,\n cb: (ctx: C, index: number) => void,\n): void {\n // `refTarget` skips the ArraySchema Proxy on every `.items` / `.$items`\n // / `[$childType]` read below. Same reference as `ref` for non-proxied\n // types. See `ChangeTree.refTarget` doc.\n const ref = tree.refTarget as any;\n\n if (ref[$childType] !== undefined) {\n // Collection inheriting @transient from parent field: skip entirely.\n if (tree.isTransient) return;\n\n // Collection types: dispatch by shape.\n if (Array.isArray(ref.items)) {\n // ArraySchema\n const items = ref.items as any[];\n for (let i = 0, len = items.length; i < len; i++) {\n if (items[i] !== undefined) cb(ctx, i);\n }\n } else if (ref.journal !== undefined) {\n // MapSchema\n for (const [index, key] of ref.journal.keyByIndex as Map<number, any>) {\n if (ref.$items.has(key)) cb(ctx, index);\n }\n } else if (ref.$items !== undefined) {\n // SetSchema / CollectionSchema (key === wire index)\n for (const index of (ref.$items as Map<number, any>).keys()) {\n cb(ctx, index);\n }\n }\n } else {\n // Schema: walk declared fields. `null` is treated as absent —\n // the setter records a DELETE when a field is set to null or\n // undefined, so it should not appear in full-sync output.\n //\n // Read names from the per-class descriptor's parallel array —\n // saves the `metadata[i]` (per-field obj) + `.name` chain on\n // every iteration of the full-sync DFS.\n const metadata = tree.metadata;\n if (!metadata) return;\n const numFields = (metadata[$numFields] ?? -1) as number;\n const transientIndexes = metadata[$transientFieldIndexes];\n const names = tree.encDescriptor.names;\n for (let i = 0; i <= numFields; i++) {\n const name = names[i];\n if (name === undefined) continue;\n if (transientIndexes && transientIndexes.includes(i)) continue;\n const value = ref[name];\n if (value !== undefined && value !== null) cb(ctx, i);\n }\n }\n}\n","/**\n * Filter / unreliable / transient / static inheritance helpers for\n * ChangeTree. Called by setRoot / setParent to derive child flags from\n * the parent field's annotation + the parent tree's own state.\n */\nimport { Metadata } from \"../../Metadata.js\";\nimport {\n $changes, $childType,\n $staticFieldIndexes, $streamFieldIndexes,\n $transientFieldIndexes, $viewFieldIndexes,\n // $unreliableFieldIndexes — tree-level unreliable currently disabled\n // (see INHERITABLE_FLAGS comment in ChangeTree.ts). Per-field unreliable\n // routing on primitive fields still uses it via `isFieldUnreliable()`.\n} from \"../../types/symbols.js\";\nimport type { Schema } from \"../../Schema.js\";\nimport {\n INHERITABLE_FLAGS, IS_STATIC, IS_TRANSIENT,\n // IS_UNRELIABLE — tree-level unreliable currently disabled; see\n // INHERITABLE_FLAGS comment in ChangeTree.ts.\n type ChangeTree, type Ref,\n} from \"../ChangeTree.js\";\nimport type { ICollectionChangeRecorder } from \"../ChangeRecorder.js\";\nimport type { Streamable } from \"../Root.js\";\nimport { ensureStreamState } from \"../streaming.js\";\n\n/**\n * Reconcile queue membership + inherited flags for a tree that just had\n * its root/parent assigned. See `_checkInheritedFlags` for the flag\n * inheritance logic.\n */\nexport function checkIsFiltered(\n tree: ChangeTree,\n parent: Ref,\n parentIndex: number,\n _isNewChangeTree: boolean,\n): void {\n checkInheritedFlags(tree, parent, parentIndex);\n\n // Static trees never track per-tick changes — skip the queue entirely.\n // Full-sync reaches them via structural walk (forEachChild).\n if (tree.isStatic) return;\n\n // Mutations that happened before setRoot (e.g. class-field initializers)\n // recorded into the appropriate recorder but couldn't enqueue yet.\n // Reconcile both queues now.\n if (tree.has()) {\n tree.root?.enqueueChangeTree(tree);\n }\n if (tree.unreliableRecorder?.has()) {\n tree.root?.enqueueUnreliable(tree);\n }\n // Fresh tree with nothing recorded: still enqueue into its primary\n // queue so the tree is reachable for its first mutation cycle.\n //\n // Tree-level unreliable is disabled (see INHERITABLE_FLAGS) so the\n // unreliable branch is unreachable today. Kept as a comment for\n // re-enablement.\n if (!tree.has() && !(tree.unreliableRecorder?.has())) {\n // if (tree.isUnreliable) {\n // tree.root?.enqueueUnreliable(tree);\n // } else {\n tree.root?.enqueueChangeTree(tree);\n // }\n }\n}\n\n/**\n * Inherit filter / unreliable / transient / static classification from\n * the parent field's annotation. Collections (MapSchema / ArraySchema /\n * etc.) inherit these from the Schema field that holds them.\n *\n * The common case — fresh tree attached to a parent field that carries\n * none of the inheritable annotations — produces no flag change, no\n * queue update, and no `parentFiltered` hit. Two small structural\n * choices keep that case cheap without any precomputed descriptor\n * bitmask:\n *\n * 1) Flag inheritance is a single bitwise OR onto `tree.flags`. The\n * three per-annotation reads pack into `fieldBits`, the parent's\n * inherited bits come from `parentChangeTree.flags` directly; one\n * read-modify-write replaces three getter/setter cycles, and the\n * bit diff against `beforeFlags` gives us the \"just became static /\n * unreliable\" signal for the side-effect branches.\n *\n * 2) The `parentFiltered` string-key lookup is gated on\n * `types.hasParentFilteredEntries`, which is only flipped true when\n * `registerFilteredByParent` actually records an entry — i.e. when\n * some @view-tagged field reaches this (child, parent, index)\n * triple through the ancestry walk. Schemas with @view tags only on\n * sibling fields (not along any attachment chain) skip the string\n * concat + hash lookup entirely.\n */\nexport function checkInheritedFlags(tree: ChangeTree, parent: Ref, parentIndex: number): void {\n if (!parent) { return; }\n\n // Walk up a collection level so `parent` lands on the Schema that\n // owns the field at `parentIndex`. Field annotations live on Schema\n // metadata; collections have none.\n let parentChangeTree: ChangeTree = parent[$changes];\n const parentIsCollection = !Metadata.isValidInstance(parent);\n if (parentIsCollection) {\n parent = parentChangeTree.parent;\n parentIndex = parentChangeTree.parentIndex;\n }\n\n const parentMetadata: any = (parent as any)?.constructor?.[Symbol.metadata];\n\n // Flag inheritance — pack the transient/static annotation checks into\n // flag bits alongside the parent's own transitive flags, then OR onto\n // `tree.flags` in one write. The bit diff tells us which flag just\n // went from 0→1, cheaper than the prior `becameX = !tree.isX && (...)`\n // pairs. IS_UNRELIABLE is omitted from both sides — tree-level\n // unreliable is disabled (see INHERITABLE_FLAGS in ChangeTree.ts).\n const fieldBits =\n (parentMetadata?.[$transientFieldIndexes]?.includes(parentIndex) ? IS_TRANSIENT : 0)\n | (parentMetadata?.[$staticFieldIndexes]?.includes(parentIndex) ? IS_STATIC : 0);\n const inheritedBits = (parentChangeTree.flags & INHERITABLE_FLAGS) | fieldBits;\n const beforeFlags = tree.flags;\n tree.flags = beforeFlags | inheritedBits;\n const gainedBits = inheritedBits & ~beforeFlags;\n\n // If this tree just became static via inheritance, discard any entries\n // that may have been recorded before the parent was assigned (e.g.\n // `new Config().assign({...})` populates the recorder before the\n // Config instance is attached). Static trees ship state via structural\n // walk only; per-tick dirty entries would leak post-first-sync.\n if (gainedBits & IS_STATIC) {\n tree.reset();\n tree.unreliableRecorder?.reset();\n }\n // Tree-level unreliable promotion is disabled — no tree can gain\n // IS_UNRELIABLE via inheritance under the current decoration-time\n // rejection (`Metadata.setUnreliable` on ref-type fields throws). The\n // promotion block used to migrate reliable-recorder entries populated\n // before attach (`new Item().assign({...})` then push into an\n // unreliable collection) over to the unreliable recorder. Kept here\n // as a comment for re-enablement if a safe tree-level unreliable\n // semantics is designed later.\n //\n // else if ((gainedBits & IS_UNRELIABLE) && tree.has()) {\n // const dst = tree.ensureUnreliableRecorder() as ICollectionChangeRecorder;\n // tree.forEach((index, op) => {\n // if (index < 0) dst.recordPure(op);\n // else dst.record(index, op);\n // });\n // tree.reset();\n // }\n\n // Filter inheritance — only when the type context has any @view or\n // @stream fields registered anywhere.\n const types = tree.root?.types;\n if (!types?.hasFilters) return;\n\n const fieldHasViewTag = parentMetadata?.[$viewFieldIndexes]?.includes(parentIndex) ?? false;\n // Stream fields are always view-scoped: the stream itself and its\n // child elements must behave as filtered trees. Elements must NOT\n // share visibility with the parent stream — `encodeView`'s priority\n // pass is the only way elements become visible to a view.\n const fieldHasStream = parentMetadata?.[$streamFieldIndexes]?.includes(parentIndex) ?? false;\n\n // Skip the `parentFiltered` string-key lookup when no class has\n // actually registered filter inheritance via ancestry. The lookup\n // cannot hit in that state, so the string concat + hash lookup would\n // be wasted work every attach.\n let parentFiltered = false;\n const parentConstructor = (parent as any)?.constructor as typeof Schema | undefined;\n if (types.hasParentFilteredEntries && parentConstructor !== undefined) {\n const refType = Metadata.isValidInstance(tree.ref)\n ? tree.ref.constructor\n : (tree.ref as any)[$childType];\n const key = `${types.getTypeId(refType as typeof Schema)}-${types.schemas.get(parentConstructor)}-${parentIndex}`;\n parentFiltered = types.parentFiltered[key] ?? false;\n }\n\n const newFiltered = parentChangeTree.isFiltered || parentFiltered || fieldHasViewTag || fieldHasStream;\n tree.isFiltered = newFiltered;\n\n // Flag collection trees attached to a `.stream()` field so the encoder\n // routes their emission through the priority/broadcast pass. Applies\n // when the tree IS the collection (not the collection's parent\n // structure walk above). `parentIsCollection` was true at entry iff\n // `tree.ref` is a child-of-collection (e.g. stream element) — we only\n // set the flag on the collection itself, not its elements.\n if (fieldHasStream && !parentIsCollection) {\n tree.isStreamCollection = true;\n // Allocate the lazy `_stream` slot once, here — so downstream\n // helpers (`streamRouteAdd`, `_emitStreamPriority`, …) never need\n // a null-check. `_stream` was always declared on the class at\n // `undefined`, so this is a value write, not a shape transition.\n const state = ensureStreamState(tree.ref as unknown as Streamable);\n // Seed the priority callback from the schema declaration (builder's\n // `.priority(fn)` or decorator's `{ stream: X, priority: fn }`).\n // Instance-level overrides via `stream.priority = ...` win — only\n // assign if the instance slot hasn't already been set.\n if (state.priority === undefined) {\n const declared = Metadata.getStreamPriority(parentMetadata, parentIndex);\n if (declared !== undefined) state.priority = declared;\n }\n // Auto-register with `root.streamTrees` so the encoder's priority /\n // broadcast pass picks it up. Covers both `StreamSchema` and any\n // `.stream()`-opted collection (e.g. `MapSchema.stream()`).\n tree.root?.registerStream(tree.ref as any);\n }\n\n if (newFiltered) {\n const refType = Metadata.isValidInstance(tree.ref)\n ? tree.ref.constructor\n : (tree.ref as any)[$childType];\n tree.isVisibilitySharedWithParent = (\n parentChangeTree.isFiltered\n && typeof refType !== \"string\"\n && !fieldHasViewTag\n && !fieldHasStream\n && parentIsCollection\n );\n }\n}\n","/**\n * Per-view collection subscriptions — `view.subscribe(collection)` opts\n * a view into ALL future content changes of a collection, not just a\n * one-shot snapshot. Covers every collection type:\n *\n * - `ArraySchema` / `MapSchema` / `SetSchema` / `CollectionSchema`: new\n * children are force-shipped immediately via `view._addImmediate(child)`.\n * Subsequent field mutations on those children emit via the normal\n * view pass (the children are now visible).\n * - `StreamSchema` (or a `.stream()` map/set): new positions are\n * enqueued into `_pendingByView` so the encoder's priority pass\n * drains them respecting `maxPerTick`.\n *\n * The propagation hook is in `changeTree/treeAttachment.ts setParent`\n * — every new child attachment to a collection checks the parent tree's\n * `subscribedViews` bitmap and fans out to subscribed views.\n */\nimport type { ChangeTree, Ref } from \"./ChangeTree.js\";\nimport type { Root, Streamable } from \"./Root.js\";\nimport { streamEnqueueForView } from \"./streaming.js\";\nimport { $changes } from \"../types/symbols.js\";\n\n/**\n * Walk the `subscribedViews` bitmap of `parentTree` and propagate a new\n * child attachment to every subscribed view. Streams route through the\n * priority/pending queue; all other collections force-ship immediately.\n */\nexport function propagateNewChildToSubscribers(\n parentTree: ChangeTree,\n childIndex: number,\n childRef: Ref,\n root: Root,\n): void {\n const subs = parentTree.subscribedViews;\n if (subs === undefined) return;\n\n const isStream = parentTree.isStreamCollection;\n const streamable = isStream ? (parentTree.ref as unknown as Streamable) : undefined;\n const childTree = isStream ? undefined : childRef[$changes];\n\n // Walk set bits via clz32 — same pattern as the inline recorder\n // iteration elsewhere in the encoder.\n for (let slot = 0, n = subs.length; slot < n; slot++) {\n let bits = subs[slot];\n while (bits !== 0) {\n const bit = bits & -bits;\n bits ^= bit;\n const viewId = slot * 32 + (31 - Math.clz32(bit));\n const weakRef = root.activeViews.get(viewId);\n const view = weakRef?.deref();\n if (view === undefined) {\n // View was disposed / GC'd; clear the stale subscription bit.\n subs[slot] &= ~bit;\n continue;\n }\n if (isStream) {\n // Streams bypass the recorder — enqueue for the priority\n // pass to drain under `maxPerTick`.\n streamEnqueueForView(streamable!, viewId, childIndex);\n } else if (childTree !== undefined) {\n // Non-stream collections: just markVisible. The parent's\n // recorder already carries the ADD op (triggered by the\n // push/set/add that led to this setParent), and the\n // child's tree carries its construction-time dirty state\n // — the encoder's normal view pass picks both up on the\n // next encode, no view.changes seeding needed.\n view.markVisible(childTree);\n }\n }\n }\n}\n","/**\n * Tree-attachment helpers: setRoot / setParent + child-iteration recursion.\n * Hot path: every new Schema/Collection instance attached to the root\n * goes through here, which is why the recursive walk uses a hoisted\n * callback + ctx-pool instead of per-call closures.\n */\nimport type { MapSchema } from \"../../types/custom/MapSchema.js\";\nimport { $changes, $childType, $refTypeFieldIndexes } from \"../../types/symbols.js\";\nimport { Root } from \"../Root.js\";\nimport type { ChangeTree, Ref } from \"../ChangeTree.js\";\nimport { checkIsFiltered } from \"./inheritedFlags.js\";\nimport { propagateNewChildToSubscribers } from \"../subscriptions.js\";\n\nexport function setRoot(tree: ChangeTree, root: Root): void {\n tree.root = root;\n\n const isNewChangeTree = root.add(tree);\n\n checkIsFiltered(tree, tree.parent, tree.parentIndex, isNewChangeTree);\n\n // Recursively set root on child structures (closure-free hot path).\n if (isNewChangeTree) {\n forEachChildWithCtx(tree, root, _setRootChildCb);\n }\n}\n\nexport function setParent(\n tree: ChangeTree,\n parent: Ref,\n root?: Root,\n parentIndex?: number,\n): void {\n tree.addParent(parent, parentIndex);\n\n // avoid setting parents with empty `root`\n if (!root) { return; }\n\n const isNewChangeTree = root.add(tree);\n\n // skip if parent is already set\n if (root !== tree.root) {\n tree.root = root;\n checkIsFiltered(tree, parent, parentIndex, isNewChangeTree);\n }\n\n // Persistent-subscription propagation — when this new child is being\n // attached to a collection that has one or more subscribed views,\n // force-ship (or enqueue, for streams) the new child to each of them.\n // Gated by `parent` being a collection (not a Schema) and the parent\n // tree having a non-empty `subscribedViews` bitmap; both common-case\n // short circuits are cheap.\n const parentTree = parent?.[$changes];\n if (\n parentTree !== undefined &&\n parentTree.subscribedViews !== undefined &&\n // Collection check: `$childType` on the ref identifies Array/Map/\n // Set/Collection/Stream. Schema-field parents don't have it.\n (parent as any)[$childType] !== undefined\n ) {\n propagateNewChildToSubscribers(parentTree, parentIndex!, tree.ref, root);\n }\n\n // assign same parent on child structures (closure-free hot path).\n // setParent recurses, so each depth gets its own ctx from a pool\n // that grows to the recursion depth (typically tree height = 3-5).\n if (isNewChangeTree) {\n let ctx = _setParentCtxPool[_setParentDepth];\n if (ctx === undefined) {\n ctx = { parentRef: undefined!, root: undefined! };\n _setParentCtxPool[_setParentDepth] = ctx;\n }\n ctx.parentRef = tree.ref;\n ctx.root = root;\n _setParentDepth++;\n forEachChildWithCtx(tree, ctx, _setParentChildCb);\n _setParentDepth--;\n }\n}\n\nexport function forEachChild(\n tree: ChangeTree,\n callback: (change: ChangeTree, at: any) => void,\n): void {\n //\n // assign same parent on child structures\n //\n if ((tree.ref as any)[$childType]) {\n if (typeof ((tree.ref as any)[$childType]) !== \"string\") {\n // MapSchema / ArraySchema, etc.\n for (const [key, value] of (tree.ref as MapSchema).entries()) {\n if (!value) { continue; } // sparse arrays can have undefined values\n callback(value[$changes], (tree.ref as any)._collectionIndexes?.[key] ?? key);\n };\n }\n\n } else {\n const names = tree.encDescriptor.names;\n for (const index of tree.metadata?.[$refTypeFieldIndexes] ?? []) {\n const value = tree.ref[names[index] as keyof Ref];\n if (!value) { continue; }\n callback(value[$changes], index);\n }\n }\n}\n\n/**\n * Closure-free variant of {@link forEachChild}. Hot setRoot / setParent\n * recursion calls this once per new Schema instance attached to the\n * tree — the per-call closure was the #1 JS hotspot in profile-baseline.\n * Pass an explicit `ctx` so callers can hoist the callback to module\n * scope and avoid the allocation.\n */\nexport function forEachChildWithCtx<C>(\n tree: ChangeTree,\n ctx: C,\n callback: (ctx: C, change: ChangeTree, at: any) => void,\n): void {\n // `refTarget` is the raw backing instance — identical to `ref` for all\n // non-Proxy types (Schema / Map / Set / Collection / Stream), and the\n // un-wrapped `$proxyTarget` for ArraySchema. Reading through it here\n // skips the ArraySchema Proxy `get` trap on every `$childType`,\n // `_collectionIndexes`, `.entries()`, `.items` lookup below — hot during\n // the encodeAll DFS walk which touches every ArraySchema in the tree.\n const ref = tree.refTarget as any;\n if (ref[$childType]) {\n if (typeof ref[$childType] !== \"string\") {\n const collectionIndexes = ref._collectionIndexes;\n for (const [key, value] of (ref as MapSchema).entries()) {\n if (!value) { continue; }\n callback(ctx, value[$changes], collectionIndexes?.[key] ?? key);\n }\n }\n } else {\n const metadata = tree.metadata;\n const indexes = metadata?.[$refTypeFieldIndexes];\n if (!indexes) return;\n const names = tree.encDescriptor.names;\n for (let i = 0, len = indexes.length; i < len; i++) {\n const index = indexes[i];\n const value = ref[names[index]];\n if (!value) { continue; }\n callback(ctx, value[$changes], index);\n }\n }\n}\n\n// Hoisted callbacks used by setRoot / setParent to avoid per-call\n// closure allocation in the recursive attach path.\n\nfunction _setRootChildCb(root: Root, child: ChangeTree, _index: any): void {\n if (child.root !== root) {\n child.setRoot(root);\n } else {\n root.add(child); // increment refCount\n }\n}\n\ninterface SetParentCtx { parentRef: Ref; root: Root; }\n// Pool of ctx objects, indexed by setParent recursion depth. Grows to\n// max depth seen (typically tree height = 3-5 in bench), then stays put.\nconst _setParentCtxPool: SetParentCtx[] = [];\nlet _setParentDepth = 0;\n\nfunction _setParentChildCb(ctx: SetParentCtx, child: ChangeTree, index: any): void {\n if (child.root === ctx.root) {\n ctx.root.add(child);\n ctx.root.moveNextToParent(child);\n return;\n }\n child.setParent(ctx.parentRef, ctx.root, index);\n}\n","/**\n * ChangeTree — the per-`Ref` mutation tracker attached via `$changes`.\n *\n * This file owns: class shape (fields, flags, ctor), inline\n * ChangeRecorder implementation (record / forEach / …), mutation API\n * (change / delete / operation / …), and encode lifecycle (endEncode /\n * discard / …). Helpers split out into ./changeTree/:\n *\n * - parentChain.ts addParent / removeParent / find / has / getAll\n * - liveIteration.ts forEachLive\n * - inheritedFlags.ts filter / unreliable / transient / static inheritance\n * - treeAttachment.ts setRoot / setParent / forEachChild(+WithCtx)\n *\n * Public surface on ChangeTree is unchanged — methods are thin pass-throughs\n * into the helpers. V8 inlines the pass-throughs; the runtime shape stays\n * a single class to preserve hidden-class + IC behavior.\n */\nimport { OPERATION } from \"../encoding/spec.js\";\nimport { Schema } from \"../Schema.js\";\nimport { $changes, $childType, $decoder, $onEncodeEnd, $encoder, $getByIndex, $proxyTarget, $refId, $refTypeFieldIndexes, $numFields, type $deleteByIndex } from \"../types/symbols.js\";\n\nimport type { MapSchema } from \"../types/custom/MapSchema.js\";\nimport type { ArraySchema } from \"../types/custom/ArraySchema.js\";\nimport type { CollectionSchema } from \"../types/custom/CollectionSchema.js\";\nimport type { SetSchema } from \"../types/custom/SetSchema.js\";\nimport type { StreamSchema } from \"../types/custom/StreamSchema.js\";\n\nimport { Root } from \"./Root.js\";\nimport { Metadata } from \"../Metadata.js\";\nimport { type ChangeRecorder, type ICollectionChangeRecorder, SchemaChangeRecorder, CollectionChangeRecorder, popcount32 } from \"./ChangeRecorder.js\";\nimport type { EncodeOperation } from \"./EncodeOperation.js\";\nimport { type EncodeDescriptor, getEncodeDescriptor } from \"./EncodeDescriptor.js\";\nimport type { DecodeOperation } from \"../decoder/DecodeOperation.js\";\n\nimport {\n addParent as _addParent, removeParent as _removeParent,\n findParent as _findParent, hasParent as _hasParent,\n getAllParents as _getAllParents,\n} from \"./changeTree/parentChain.js\";\nimport { forEachLive as _forEachLive, forEachLiveWithCtx as _forEachLiveWithCtx } from \"./changeTree/liveIteration.js\";\nimport {\n setRoot as _setRoot, setParent as _setParent,\n forEachChild as _forEachChild, forEachChildWithCtx as _forEachChildWithCtx,\n} from \"./changeTree/treeAttachment.js\";\n\n// Augmenting the global `Object` interface is a deliberate trade-off:\n// any Schema / collection instance — regardless of which bundled\n// `@colyseus/schema` version created it — can be duck-typed against\n// these Symbol-keyed slots. Narrower shapes (e.g. on `IRef`) would break\n// cross-version interop where server-bundled types coexist with client-\n// bundled ones in the same process.\ndeclare global {\n interface Object {\n [$changes]?: ChangeTree;\n // [$refId]?: number;\n [$encoder]?: EncodeOperation,\n [$decoder]?: DecodeOperation,\n }\n}\n\n// Pure arithmetic, no `this` — V8 inlines into encode-loop forEach.\n// Mirror of `ChangeTree._opAt` for the inline-ops-only branch.\nfunction readInlineOpByte(low: number, high: number, index: number): number {\n const shift = (index & 3) << 3;\n return (index < 4)\n ? (low >>> shift) & 0xFF\n : (high >>> shift) & 0xFF;\n}\n\n// Adapter that lets `forEach(cb)` delegate to `forEachWithCtx(cb, _invokeNoCtx)` —\n// no per-call closure allocation. See ChangeRecorder.ts for the same pattern.\nconst _invokeNoCtx = (\n cb: (index: number, op: OPERATION) => void,\n index: number,\n op: OPERATION,\n) => cb(index, op);\n\nexport interface IRef {\n // `[$changes]?: ChangeTree;` is intentionally omitted here — see the\n // `declare global` augmentation above. Narrowing to IRef would break\n // cross-version interop (Cocos Creator bundles server- and client-\n // side schema types together; a strict declaration here would reject\n // one side's instances at compile time).\n [$refId]?: number;\n // `$getByIndex` / `$deleteByIndex` are required on every actual ref\n // the decoder / encoder ever touches (Schema + every collection\n // implements both). Keeping them non-optional lets hot-path call\n // sites skip the `(ref as any)` cast.\n [$getByIndex](index: number, isEncodeAll?: boolean): any;\n [$deleteByIndex](index: number): void;\n}\n\nexport type Ref = Schema | ArraySchema | MapSchema | CollectionSchema | SetSchema | StreamSchema;\n\n// Linked list node for change trees\nexport interface ChangeTreeNode {\n changeTree: ChangeTree;\n next?: ChangeTreeNode;\n prev?: ChangeTreeNode;\n position: number; // Cached position in the linked list for O(1) lookup\n}\n\n// Linked list for change trees\nexport interface ChangeTreeList {\n next?: ChangeTreeNode;\n tail?: ChangeTreeNode;\n}\n\n// Linked list helper functions\nexport function createChangeTreeList(): ChangeTreeList {\n return { next: undefined, tail: undefined };\n}\n\nexport interface ParentChain {\n ref: Ref;\n index: number;\n next?: ParentChain;\n}\n\n// Flags bitfield. *_UNRELIABLE / _TRANSIENT / _STATIC mirror the parent\n// field's annotation — inherited at setParent/setRoot time.\nexport const IS_FILTERED = 1, IS_VISIBILITY_SHARED = 2, IS_NEW = 4;\nexport const IS_UNRELIABLE = 8, IS_TRANSIENT = 16, IS_STATIC = 32;\n// Collection tree attached to a parent field annotated `.stream()` —\n// drives the encoder's priority/broadcast pass. Set in inheritedFlags\n// so both `t.stream(X)` (via StreamSchema's `$isStream` brand) and\n// `t.map(X).stream()` / `t.set(X).stream()` route through the same\n// emission machinery.\nexport const IS_STREAM_COLLECTION = 64;\n/**\n * Flags a child inherits from its parent's own transitive state via\n * `checkInheritedFlags`. Read as a bitwise mask so the inheritance step\n * is a single OR instead of three getter/setter pairs.\n *\n * `IS_UNRELIABLE` is intentionally excluded: `@unreliable` is rejected\n * at decoration time for ref-type fields (see `Metadata.setUnreliable`)\n * because an unreliable ADD/DELETE could leave the decoder unable to\n * interpret later packets referencing an orphan refId. Tree-level\n * unreliable is therefore dead on every Schema/Collection tree today;\n * the bit and its machinery are kept in place so this can be\n * reconsidered if a safe semantics (e.g. reliable ADD + unreliable\n * field mutations only) is designed later.\n */\nexport const INHERITABLE_FLAGS = IS_TRANSIENT | IS_STATIC;\n\nexport class ChangeTree<T extends Ref = any> implements ChangeRecorder {\n ref: T;\n\n /**\n * Non-Proxy target of `ref` for encoder hot-path reads. For\n * `ArraySchema`, `ref` is the Proxy users interact with; every property\n * access on it runs through the `get` trap (even for symbol keys, which\n * fall through to `Reflect.get` — one extra hop per lookup). The encoder\n * loop reads `[$getByIndex]`, `[$childType]`, `.items`, `.tmpItems` at\n * high frequency during `encode()` / `encodeAll()`; going through\n * `refTarget` skips all of those traps.\n *\n * For non-proxied types (Schema, MapSchema, SetSchema, CollectionSchema,\n * StreamSchema), `refTarget === ref`. Consumers that need the user-\n * facing identity (debug output, callback parents) keep using `ref`.\n */\n refTarget: T;\n\n metadata: Metadata;\n\n /**\n * Per-class cache of encoder fn / filter fn / isSchema / filterBitmask /\n * metadata, looked up once at construction. The encode loop reads\n * `tree.encDescriptor` and never touches `ref.constructor` again. See\n * EncodeDescriptor.ts.\n */\n encDescriptor: EncodeDescriptor;\n\n root?: Root;\n\n // Inline single parent (the common case)\n parentRef?: Ref;\n _parentIndex?: number;\n extraParents?: ParentChain; // linked list for 2nd+ parents (rare: instance sharing)\n\n // Packed boolean flags. See IS_* constants above for bit layout.\n flags: number = IS_NEW;\n\n /**\n * Per-walk visit stamp written by `Encoder.encodeFullSync`'s DFS. A\n * tree is considered \"already visited by the current walk\" iff\n * `tree._fullSyncGen === ctx.gen` — the encoder bumps its generation\n * counter once per walk, then stamps each tree with that value on\n * first visit; any later encounter of the same tree (shared refs\n * reachable through multiple parents) short-circuits on the equality\n * check instead of recursing again.\n */\n _fullSyncGen: number = 0;\n\n // Schema vs Collection discriminator. Set once in ctor, never changes —\n // per-tree-stable branch for inline ChangeRecorder dispatch.\n _isSchema: boolean = false;\n\n // Inline reliable SchemaChangeRecorder state (valid only if _isSchema).\n dirtyLow: number = 0;\n dirtyHigh: number = 0;\n\n // Inline ops for Schemas with ≤8 fields (4 op-bytes per number).\n // When `ops` is set (>8 fields), reads/writes go through the Uint8Array.\n opsLow: number = 0;\n opsHigh: number = 0;\n ops?: Uint8Array;\n\n // Inline reliable CollectionChangeRecorder state (valid only if !_isSchema).\n // `collDirty` is allocated in the ctor. `collPureOps` stays undefined\n // until the first CLEAR/REVERSE (most workloads never hit this).\n collDirty?: Map<number, OPERATION>;\n collPureOps?: Array<[number, OPERATION]>;\n\n // Lazy-allocated unreliable-channel recorder (rare — opt-in via @unreliable).\n unreliableRecorder?: ChangeRecorder;\n\n // When true, mutations on the ref are NOT tracked. See pause/resume/untracked.\n paused: boolean = false;\n\n changesNode?: ChangeTreeNode; // Root.changes linked-list node\n unreliableChangesNode?: ChangeTreeNode; // Root.unreliableChanges linked-list node\n\n // Per-StateView visibility bitmaps. Bit `(viewId & 31)` in slot\n // `(viewId >> 5)` is set iff the view can see this tree. Replaces\n // per-view WeakSet lookups with direct bitwise ops.\n // Lazy: undefined until the tree participates in any view.\n visibleViews?: number[];\n invisibleViews?: number[];\n\n // Per-(view, tag) bitmap, indexed by tag. Custom tags only —\n // DEFAULT_VIEW_TAG visibility lives in `visibleViews`.\n tagViews?: Map<number, number[]>;\n\n /**\n * Per-view subscription bitmap — same layout as `visibleViews`. Set by\n * `StateView.subscribe(collection)` to mark the view as persistently\n * interested in this collection's contents. When a new child is\n * attached to a subscribed collection (setParent hook), it's\n * auto-propagated to every subscribed view (force-shipped for\n * Array/Map/Set/Collection; enqueued into per-view pending for\n * streams). Undefined until the first subscribe.\n */\n subscribedViews?: number[];\n\n // Accessor properties for flags\n get isFiltered() { return (this.flags & IS_FILTERED) !== 0; }\n set isFiltered(v: boolean) { this.flags = v ? (this.flags | IS_FILTERED) : (this.flags & ~IS_FILTERED); }\n get isVisibilitySharedWithParent() { return (this.flags & IS_VISIBILITY_SHARED) !== 0; }\n set isVisibilitySharedWithParent(v: boolean) { this.flags = v ? (this.flags | IS_VISIBILITY_SHARED) : (this.flags & ~IS_VISIBILITY_SHARED); }\n get isNew() { return (this.flags & IS_NEW) !== 0; }\n set isNew(v: boolean) { this.flags = v ? (this.flags | IS_NEW) : (this.flags & ~IS_NEW); }\n get isUnreliable() { return (this.flags & IS_UNRELIABLE) !== 0; }\n set isUnreliable(v: boolean) { this.flags = v ? (this.flags | IS_UNRELIABLE) : (this.flags & ~IS_UNRELIABLE); }\n get isTransient() { return (this.flags & IS_TRANSIENT) !== 0; }\n set isTransient(v: boolean) { this.flags = v ? (this.flags | IS_TRANSIENT) : (this.flags & ~IS_TRANSIENT); }\n get isStatic() { return (this.flags & IS_STATIC) !== 0; }\n set isStatic(v: boolean) { this.flags = v ? (this.flags | IS_STATIC) : (this.flags & ~IS_STATIC); }\n get isStreamCollection() { return (this.flags & IS_STREAM_COLLECTION) !== 0; }\n set isStreamCollection(v: boolean) { this.flags = v ? (this.flags | IS_STREAM_COLLECTION) : (this.flags & ~IS_STREAM_COLLECTION); }\n\n // True iff tree inherits `isFiltered` OR its Schema class declares any\n // @view-tagged fields. StateView.addParentOf uses this to decide whether\n // a parent must be included in a view's bootstrap. Reads the class-level\n // \"any viewed field\" flag that `EncodeDescriptor` precomputes — same\n // pattern as `hasAnyStatic` / `hasAnyUnreliable` / `hasAnyStream`.\n get hasFilteredFields(): boolean {\n return this.isFiltered || this.encDescriptor.hasAnyView;\n }\n\n ensureUnreliableRecorder(): ChangeRecorder {\n if (this.unreliableRecorder === undefined) {\n const isSchema = Metadata.isValidInstance(this.ref);\n this.unreliableRecorder = isSchema\n ? new SchemaChangeRecorder((this.metadata?.[$numFields] ?? 0) as number)\n : new CollectionChangeRecorder();\n }\n return this.unreliableRecorder;\n }\n\n isFieldUnreliable(index: number): boolean {\n // Tree-level `isUnreliable` is disabled — @unreliable is rejected\n // on ref-type fields at decoration time, so no tree ever carries\n // the flag. Kept as a comment in case a safe semantics is added\n // later (see INHERITABLE_FLAGS rationale).\n // if (this.isUnreliable) return true;\n // Class-level fast path: most schemas have zero unreliable fields,\n // so the per-mutation check resolves without the symbol-keyed\n // metadata lookup. For schemas that DO have unreliable fields, the\n // bitmask answers fields 0-31 in one bitwise op (no Array.includes\n // linear scan). Fields ≥32 always fall back to the metadata lookup\n // (same limitation as filterBitmask — bitmask only covers low 32).\n const desc = this.encDescriptor;\n if (!desc.hasAnyUnreliable) return false;\n if (index < 32) return (desc.unreliableBitmask & (1 << index)) !== 0;\n return Metadata.hasUnreliableAtIndex(this.metadata, index);\n }\n\n // @static fields sync once via full-sync; post-init mutations are ignored\n // by the tracker (the value still lives on the instance).\n isFieldStatic(index: number): boolean {\n if (this.isStatic) return true;\n const desc = this.encDescriptor;\n if (!desc.hasAnyStatic) return false;\n if (index < 32) return (desc.staticBitmask & (1 << index)) !== 0;\n return Metadata.hasStaticAtIndex(this.metadata, index);\n }\n\n // `t.stream(...)` collection fields — encoded via per-view priority/budget\n // gate instead of emitting all dirty ADDs in one tick. Class-level short\n // circuit avoids the metadata chase on schemas that carry no stream fields.\n isFieldStream(index: number): boolean {\n const desc = this.encDescriptor;\n if (!desc.hasAnyStream) return false;\n if (index < 32) return (desc.streamBitmask & (1 << index)) !== 0;\n return Metadata.hasStreamAtIndex(this.metadata, index);\n }\n\n constructor(ref: T) {\n this.ref = ref;\n // `$proxyTarget` is a self-reference set by ArraySchema on the raw\n // target; for non-proxied refs it's undefined and we fall back to\n // `ref`. Cached here so hot-path reads skip the Proxy `get` trap.\n this.refTarget = ((ref as any)[$proxyTarget] ?? ref) as T;\n\n // Single per-class lookup that subsumes Symbol.metadata,\n // isValidInstance, $encoder, $filter, and the filter bitmask.\n // After this, the encode loop never touches `ref.constructor`.\n const desc = getEncodeDescriptor(ref);\n this.encDescriptor = desc;\n this.metadata = desc.metadata;\n\n const isSchema = desc.isSchema;\n this._isSchema = isSchema;\n\n // Assign every optional slot so Schema and Collection trees share\n // one hidden-class transition path (tsconfig useDefineForClassFields=false\n // otherwise leaves uninitialized class fields absent from the shape).\n this.ops = undefined;\n this.collDirty = undefined;\n this.collPureOps = undefined;\n\n if (isSchema) {\n const numFields = (this.metadata?.[$numFields] ?? 0) as number;\n if (numFields > 7) this.ops = new Uint8Array(numFields + 1);\n } else {\n this.collDirty = new Map();\n }\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Inline ChangeRecorder implementation. Each method branches once on\n // `_isSchema` (per-tree-stable → predictable branch). Kills one\n // CollectionChangeRecorder+Map allocation per Collection tree.\n // ────────────────────────────────────────────────────────────────────\n\n // Schema-only helpers that own all inline-vs-array dispatch.\n private _opAt(index: number): number {\n const ops = this.ops;\n if (ops !== undefined) return ops[index];\n const shift = (index & 3) << 3;\n return (index < 4)\n ? (this.opsLow >>> shift) & 0xFF\n : (this.opsHigh >>> shift) & 0xFF;\n }\n\n private _opPut(index: number, op: OPERATION): void {\n const ops = this.ops;\n if (ops !== undefined) {\n ops[index] = op;\n return;\n }\n const shift = (index & 3) << 3;\n const mask = ~(0xFF << shift);\n if (index < 4) this.opsLow = (this.opsLow & mask) | (op << shift);\n else this.opsHigh = (this.opsHigh & mask) | (op << shift);\n }\n\n private _markDirty(index: number): void {\n if (index < 32) this.dirtyLow |= (1 << index);\n else this.dirtyHigh |= (1 << (index - 32));\n }\n\n record(index: number, op: OPERATION): void {\n if (this._isSchema) {\n const prev = this._opAt(index);\n if (prev === 0) this._opPut(index, op);\n else if (prev === OPERATION.DELETE) this._opPut(index, OPERATION.DELETE_AND_ADD);\n // Promote ADD → DELETE_AND_ADD when a ref is replaced in the\n // same tick. Otherwise the on-wire op collapses to plain ADD\n // and the decoder's `refs` map leaks the displaced refId —\n // harmless on its own, but refId pooling turns that leak into\n // a catastrophic rebinding when the refId is later reused.\n else if (prev === OPERATION.ADD && op === OPERATION.DELETE_AND_ADD) {\n this._opPut(index, OPERATION.DELETE_AND_ADD);\n }\n // else: existing ADD / DELETE_AND_ADD — preserve op-byte.\n this._markDirty(index);\n } else {\n const dirty = this.collDirty!;\n const prev = dirty.get(index);\n let finalOp: OPERATION;\n if (prev === undefined) finalOp = op;\n else if (prev === OPERATION.DELETE) finalOp = OPERATION.DELETE_AND_ADD;\n else if (prev === OPERATION.ADD && op === OPERATION.DELETE_AND_ADD) finalOp = OPERATION.DELETE_AND_ADD;\n else finalOp = prev;\n dirty.set(index, finalOp);\n }\n }\n\n recordDelete(index: number, op: OPERATION): void {\n if (this._isSchema) {\n this._opPut(index, op);\n this._markDirty(index);\n } else {\n this.collDirty!.set(index, op);\n }\n }\n\n recordRaw(index: number, op: OPERATION): void {\n if (this._isSchema) {\n this._opPut(index, op);\n this._markDirty(index);\n } else {\n this.collDirty!.set(index, op);\n }\n }\n\n recordPure(op: OPERATION): void {\n if (this._isSchema) {\n throw new Error(\"ChangeTree (Schema): pure operations are not supported\");\n }\n (this.collPureOps ??= []).push([this.collDirty!.size, op]);\n }\n\n operationAt(index: number): OPERATION | undefined {\n if (this._isSchema) {\n const op = this._opAt(index);\n return op === 0 ? undefined : op;\n }\n return this.collDirty!.get(index);\n }\n\n setOperationAt(index: number, op: OPERATION): void {\n // Schema: overwrite only (no dirty-mark). Collection: overwrite iff key exists (legacy).\n if (this._isSchema) {\n this._opPut(index, op);\n } else {\n const dirty = this.collDirty!;\n if (dirty.has(index)) dirty.set(index, op);\n }\n }\n\n // Cold-path delegate: all `forEach` callers are debug/dump utilities\n // (Schema.ts debug output, utils.ts change dump, discardAll in tests).\n // The hot encode loop uses `forEachWithCtx` directly. See ChangeRecorder.ts\n // for the same adapter pattern.\n forEach(cb: (index: number, op: OPERATION) => void): void {\n this.forEachWithCtx(cb, _invokeNoCtx);\n }\n\n forEachWithCtx<C>(ctx: C, cb: (ctx: C, index: number, op: OPERATION) => void): void {\n if (this._isSchema) {\n let low = this.dirtyLow;\n let high = this.dirtyHigh;\n const ops = this.ops;\n if (ops !== undefined) {\n while (low !== 0) {\n const bit = low & -low;\n const fieldIndex = 31 - Math.clz32(bit);\n low ^= bit;\n cb(ctx, fieldIndex, ops[fieldIndex]);\n }\n while (high !== 0) {\n const bit = high & -high;\n const fieldIndex = 31 - Math.clz32(bit) + 32;\n high ^= bit;\n cb(ctx, fieldIndex, ops[fieldIndex]);\n }\n } else {\n const ol = this.opsLow;\n const oh = this.opsHigh;\n while (low !== 0) {\n const bit = low & -low;\n const fieldIndex = 31 - Math.clz32(bit);\n low ^= bit;\n cb(ctx, fieldIndex, readInlineOpByte(ol, oh, fieldIndex));\n }\n }\n return;\n }\n const dirty = this.collDirty!;\n const pure = this.collPureOps;\n if (pure !== undefined && pure.length > 0) {\n let pureIdx = 0, i = 0;\n for (const [index, op] of dirty) {\n while (pureIdx < pure.length && pure[pureIdx][0] <= i) {\n const pureOp = pure[pureIdx++][1];\n cb(ctx, -pureOp, pureOp);\n }\n cb(ctx, index, op);\n i++;\n }\n while (pureIdx < pure.length) {\n const pureOp = pure[pureIdx++][1];\n cb(ctx, -pureOp, pureOp);\n }\n } else {\n for (const [index, op] of dirty) cb(ctx, index, op);\n }\n }\n\n size(): number {\n if (this._isSchema) return popcount32(this.dirtyLow) + popcount32(this.dirtyHigh);\n return this.collDirty!.size + (this.collPureOps?.length ?? 0);\n }\n\n has(): boolean {\n if (this._isSchema) return (this.dirtyLow | this.dirtyHigh) !== 0;\n return this.collDirty!.size > 0 || (this.collPureOps !== undefined && this.collPureOps.length > 0);\n }\n\n reset(): void {\n if (this._isSchema) {\n this.dirtyLow = 0;\n this.dirtyHigh = 0;\n if (this.ops !== undefined) this.ops.fill(0);\n else { this.opsLow = 0; this.opsHigh = 0; }\n return;\n }\n this.collDirty!.clear();\n if (this.collPureOps !== undefined) this.collPureOps.length = 0;\n }\n\n shift(shiftIndex: number): void {\n if (this._isSchema) throw new Error(\"ChangeTree (Schema): shift is not supported\");\n const src = this.collDirty!;\n const dst = new Map<number, OPERATION>();\n for (const [idx, val] of src) dst.set(idx + shiftIndex, val);\n this.collDirty = dst;\n }\n\n // Tree attachment + child iteration — see ./changeTree/treeAttachment.ts.\n setRoot(root: Root): void { _setRoot(this, root); }\n setParent(parent: Ref, root?: Root, parentIndex?: number): void { _setParent(this, parent, root, parentIndex); }\n forEachChild(cb: (change: ChangeTree, at: any) => void): void { _forEachChild(this, cb); }\n forEachChildWithCtx<C>(ctx: C, cb: (ctx: C, change: ChangeTree, at: any) => void): void {\n _forEachChildWithCtx(this, ctx, cb);\n }\n forEachLive(cb: (index: number) => void): void { _forEachLive(this, cb); }\n forEachLiveWithCtx<C>(ctx: C, cb: (ctx: C, index: number) => void): void {\n _forEachLiveWithCtx(this, ctx, cb);\n }\n\n operation(op: OPERATION) {\n if (this.paused || this.isStatic) return;\n // Pure ops (CLEAR/REVERSE) only emit from collection trees — the\n // recorder here is always a CollectionChangeRecorder by construction.\n //\n // Tree-level `isUnreliable` is disabled (see INHERITABLE_FLAGS):\n // no collection tree can be marked unreliable as a whole under the\n // ref-field rejection rule in `Metadata.setUnreliable`. The branch\n // is kept as a comment for re-enablement.\n // if (this.isUnreliable) {\n // (this.ensureUnreliableRecorder() as ICollectionChangeRecorder).recordPure(op);\n // this.root?.enqueueUnreliable(this);\n // } else {\n this.recordPure(op);\n this.root?.enqueueChangeTree(this);\n // }\n }\n\n /**\n * Route a field-level mutation to the reliable or unreliable channel\n * and enqueue into the matching queue. Shared by `change` and\n * `indexedOperation`; `raw=true` bypasses DELETE→ADD merge\n * (ArraySchema positional writes), `raw=false` merges inside `record`.\n *\n * Note: record() on both channels handles DELETE→ADD merge internally,\n * so callers do not need to pre-compute the merged op.\n *\n * `@unreliable` is decoration-time-validated to apply only to primitive\n * fields (see annotations.ts), so the per-field unreliable flag here\n * always means \"primitive value updates\" — the structural-ADD-routes-\n * reliable footgun for ref-type fields can't reach this code path.\n */\n private _routeAndRecord(index: number, op: OPERATION, raw: boolean): void {\n if (this.paused || this.isFieldStatic(index)) return;\n if (this.isFieldUnreliable(index)) {\n const r = this.ensureUnreliableRecorder();\n if (raw) r.recordRaw(index, op);\n else r.record(index, op);\n this.root?.enqueueUnreliable(this);\n return;\n }\n if (raw) this.recordRaw(index, op);\n else this.record(index, op);\n this.root?.enqueueChangeTree(this);\n }\n\n change(index: number, operation: OPERATION = OPERATION.ADD) {\n this._routeAndRecord(index, operation, false);\n }\n\n indexedOperation(index: number, operation: OPERATION) {\n this._routeAndRecord(index, operation, true);\n }\n\n // ArraySchema#unshift(): apply shift to both channels.\n // Unreliable recorder on an array is always a CollectionChangeRecorder.\n shiftChangeIndexes(shiftIndex: number) {\n this.shift(shiftIndex);\n (this.unreliableRecorder as ICollectionChangeRecorder | undefined)?.shift(shiftIndex);\n }\n\n getChange(index: number) {\n return this.operationAt(index);\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Change-tracking control API\n // ────────────────────────────────────────────────────────────────────\n\n pause(): void { this.paused = true; }\n resume(): void { this.paused = false; }\n\n untracked<T>(fn: () => T): T {\n const wasPaused = this.paused;\n this.paused = true;\n try { return fn(); }\n finally { this.paused = wasPaused; }\n }\n\n // Manually mark a field dirty for the next encode(). Useful after a\n // paused mutation or a nested mutation that bypassed the setter.\n markDirty(index: number, operation: OPERATION = OPERATION.ADD): void {\n const wasPaused = this.paused;\n this.paused = false;\n try { this.change(index, operation); }\n finally { this.paused = wasPaused; }\n }\n\n // used during `.encode()` — `isEncodeAll` is only consumed by ArraySchema.\n // Reads via `refTarget` so ArraySchema's Proxy trap is bypassed on the\n // hot per-field encode path.\n getValue(index: number, isEncodeAll: boolean = false) {\n return this.refTarget[$getByIndex](index, isEncodeAll);\n }\n\n delete(index: number, operation?: OPERATION) {\n if (index === undefined) {\n try {\n throw new Error(`@colyseus/schema ${this.ref.constructor.name}: trying to delete non-existing index '${index}'`);\n } catch (e) {\n console.warn(e);\n }\n return;\n }\n\n if (this.paused || this.isFieldStatic(index)) return this.getValue(index);\n\n const unreliable = this.isFieldUnreliable(index);\n if (unreliable) this.ensureUnreliableRecorder().recordDelete(index, operation ?? OPERATION.DELETE);\n else this.recordDelete(index, operation ?? OPERATION.DELETE);\n\n const previousValue = this.getValue(index);\n\n // `this.root` is always undefined on decoder-side instances\n // (they're built via `initializeForDecoder`, which skips Root\n // attachment). The optional chain handles both sides; this is\n // an intentional invariant, not a bug.\n if (previousValue && previousValue[$changes]) this.root?.remove(previousValue[$changes]);\n\n if (unreliable) this.root?.enqueueUnreliable(this);\n else this.root?.enqueueChangeTree(this);\n\n return previousValue;\n }\n\n // Clear the reliable dirty bucket after a reliable encode pass.\n endEncode() {\n this.reset();\n this.changesNode = undefined;\n (this.ref as any)[$onEncodeEnd]?.();\n this.isNew = false;\n }\n\n // Clear the unreliable dirty bucket after an unreliable encode pass.\n endEncodeUnreliable() {\n this.unreliableRecorder?.reset();\n this.unreliableChangesNode = undefined;\n (this.ref as any)[$onEncodeEnd]?.();\n }\n\n discard() {\n (this.ref as any)[$onEncodeEnd]?.();\n this.reset();\n this.unreliableRecorder?.reset();\n }\n\n // Recursively discard all changes on this + child structures. Tests only.\n discardAll() {\n const discardChild = (index: number) => {\n if (index < 0) return;\n const value = this.getValue(index);\n if (value && value[$changes]) value[$changes].discardAll();\n };\n this.forEach(discardChild);\n this.unreliableRecorder?.forEach(discardChild);\n this.discard();\n }\n\n get changed() {\n return this.has() || (this.unreliableRecorder?.has() ?? false);\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Parent chain — implementations in ./changeTree/parentChain.ts.\n // ────────────────────────────────────────────────────────────────────\n\n /** Immediate parent (primary). See `extraParents` for the 2nd+ chain. */\n get parent(): Ref | undefined { return this.parentRef; }\n get parentIndex(): number | undefined { return this._parentIndex; }\n\n addParent(parent: Ref, index: number): void { _addParent(this, parent, index); }\n\n /** @returns true if parent was found and removed */\n removeParent(parent: Ref = this.parent): boolean { return _removeParent(this, parent); }\n\n findParent(predicate: (parent: Ref, index: number) => boolean): ParentChain | undefined {\n return _findParent(this, predicate);\n }\n\n hasParent(predicate: (parent: Ref, index: number) => boolean): boolean {\n return _hasParent(this, predicate);\n }\n\n getAllParents(): Array<{ ref: Ref, index: number }> { return _getAllParents(this); }\n\n}\n\n/**\n * Lightweight per-instance no-op ChangeTree used for instances the decoder\n * builds. Those instances never feed back into an Encoder, so the full\n * `ChangeTree` machinery (EncodeDescriptor lookup, recorder state, Maps /\n * Uint8Arrays for change slots) is pure overhead — this stub carries only a\n * `ref` back-pointer and no-op methods, so tree walkers and debug tooling\n * continue to work.\n *\n * Plug-in contract: each collection class and the `Decoder` pick between\n * `new ChangeTree(ref)` and `createUntrackedChangeTree(ref)` explicitly via\n * dedicated factories (`initializeForDecoder` on collections,\n * `createInstanceOfType` on the `Decoder`). There is no global state — every\n * decision is local to the call site.\n */\nexport class UntrackedChangeTree {\n ref: Ref;\n\n // Mirror the subset of ChangeTree state that decoder-path readers touch.\n // Everything else is deliberately undefined (matches the shape of a\n // freshly-constructed tree that never participated in a Root).\n root: undefined = undefined;\n parentRef: undefined = undefined;\n paused: boolean = false;\n isNew: boolean = false;\n flags: number = 0;\n\n constructor(ref: Ref) {\n this.ref = ref;\n }\n\n // Mutation surface — all no-ops.\n change(): void {}\n delete(): void {}\n indexedOperation(): void {}\n operation(): void {}\n setParent(): void {}\n addParent(): void {}\n removeParent(): boolean { return false; }\n getChange(): number { return 0; }\n discard(): void {}\n discardAll(): void {}\n pause(): void {}\n resume(): void {}\n untracked<T>(fn: () => T): T { return fn(); }\n markDirty(): void {}\n\n // Tree-walk surface. Mirrors `treeAttachment.forEachChild` so debug tools\n // and `ArraySchema.clear()` can still descend from a tracked root into\n // decoder-built subtrees and read each child's `$changes` (which is\n // itself an UntrackedChangeTree carrying the right `ref`).\n forEachChild(callback: (change: any, at: any) => void): void {\n const ref = this.ref as any;\n if (ref[$childType]) {\n if (typeof ref[$childType] !== \"string\") {\n for (const [key, value] of ref.entries()) {\n if (!value) continue;\n callback(value[$changes], ref._collectionIndexes?.[key] ?? key);\n }\n }\n return;\n }\n const ctor = ref.constructor as any;\n const metadata = ctor?.[Symbol.metadata];\n if (!metadata) return;\n const refFieldIndexes: number[] = metadata[$refTypeFieldIndexes] ?? [];\n for (let i = 0; i < refFieldIndexes.length; i++) {\n const index = refFieldIndexes[i];\n const value = ref[metadata[index].name];\n if (!value) continue;\n callback(value[$changes], index);\n }\n }\n\n forEachChildWithCtx<C>(ctx: C, callback: (ctx: C, change: any, at: any) => void): void {\n this.forEachChild((change, at) => callback(ctx, change, at));\n }\n\n forEachLive(): void {}\n forEachLiveWithCtx(): void {}\n forEach(): void {}\n}\n\n// Factory, cast to ChangeTree so call sites that type `$changes` as\n// `ChangeTree` accept it. The surface overlap above covers every read/write\n// the decoder path reaches.\nexport function createUntrackedChangeTree(ref: Ref): ChangeTree {\n return new UntrackedChangeTree(ref) as unknown as ChangeTree;\n}\n\n/**\n * Install a non-enumerable `$changes: UntrackedChangeTree` on `target`.\n * Shared by `Schema.initializeForDecoder` and every collection's\n * `initializeForDecoder`. `publicRef` defaults to `target` — pass a Proxy\n * instead (ArraySchema) so children attached to this tree see the Proxy\n * as their parent, not the raw target.\n *\n * `enumerable: false` is load-bearing — tests use `deepStrictEqual` on\n * decoded instances and walking into `$changes` would recurse through\n * circular refs. Same descriptor shape as the tracked `Schema.initialize`\n * + collection ctors.\n */\nexport function installUntrackedChangeTree(target: object, publicRef: object = target): void {\n Object.defineProperty(target, $changes, {\n value: createUntrackedChangeTree(publicRef as Ref),\n enumerable: false,\n writable: true,\n });\n}\n","import { OPERATION } from \"../encoding/spec.js\";\nimport { $changes, $childType, $encoders, $getByIndex, $refId, $values } from \"../types/symbols.js\";\n\nimport { encode } from \"../encoding/encode.js\";\n\nimport type { ChangeTree, Ref } from \"./ChangeTree.js\";\nimport type { Encoder } from \"./Encoder.js\";\nimport type { Schema } from \"../Schema.js\";\n\nimport type { Iterator } from \"../encoding/decode.js\";\nimport type { ArraySchema } from \"../types/custom/ArraySchema.js\";\nimport type { Metadata } from \"../Metadata.js\";\n\nexport type EncodeOperation<T extends Ref = any> = (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree<T>,\n index: number,\n operation: OPERATION,\n it: Iterator,\n isEncodeAll: boolean,\n hasView: boolean,\n metadata?: Metadata,\n) => void;\n\nexport function encodeValue(\n encoder: Encoder,\n bytes: Uint8Array,\n type: any,\n value: any,\n operation: OPERATION,\n it: Iterator,\n encoderFn?: (bytes: Uint8Array, value: any, it: Iterator) => void,\n) {\n if (encoderFn !== undefined) {\n // Fast path: pre-computed encoder for primitive types.\n encoderFn(bytes, value, it);\n\n } else if (typeof (type) === \"string\") {\n // Fallback for types not pre-computed (e.g. runtime-constructed).\n (encode as any)[type]?.(bytes, value, it);\n\n } else if (type[Symbol.metadata] !== undefined) {\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value[$refId], it);\n\n // Try to encode inherited TYPE_ID if it's an ADD operation.\n if ((operation & OPERATION.ADD) === OPERATION.ADD) {\n encoder.tryEncodeTypeId(bytes, type as typeof Schema, value.constructor as typeof Schema, it);\n }\n\n } else {\n //\n // Encode refId for this instance.\n // The actual instance is going to be encoded on next `changeTree` iteration.\n //\n encode.number(bytes, value[$refId], it);\n }\n}\n\n/**\n * Used for Schema instances.\n * @private\n */\nexport const encodeSchemaOperation: EncodeOperation = function <T extends Schema> (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree<T>,\n index: number,\n operation: OPERATION,\n it: Iterator,\n _: any,\n __: any,\n) {\n // \"compress\" field index + operation\n bytes[it.offset++] = (index | operation) & 255;\n\n // Do not encode value for DELETE operations\n if (operation === OPERATION.DELETE) {\n return;\n }\n\n // Read field info from the per-class descriptor's parallel arrays —\n // replaces `metadata[index]` (returns a per-field obj) + `.name` /\n // `.type` chains. The `encoders` array is also pre-baked here so we\n // skip a `metadata[$encoders]?.[index]` symbol-keyed lookup per call.\n const desc = changeTree.encDescriptor;\n const ref = changeTree.ref as any;\n\n // Direct $values[index] read — bypasses prototype getter + metadata name lookup.\n // Falls back to named property for manual fields (which don't use $values).\n const value = ref[$values][index] ?? ref[desc.names[index]];\n\n encodeValue(\n encoder,\n bytes,\n desc.types[index],\n value,\n operation,\n it,\n desc.encoders[index],\n );\n}\n\n/**\n * Encode a single MapSchema entry. Splits the legacy\n * `encodeKeyValueOperation` so the per-emission `typeof ref['set']` check\n * is gone — MapSchema instances are routed here via their `[$encoder]`\n * static, the dynamic-key string emission is unconditional on ADD.\n *\n * @private\n */\nexport const encodeMapEntry: EncodeOperation = function (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree,\n index: number,\n operation: OPERATION,\n it: Iterator,\n) {\n bytes[it.offset++] = operation & 255;\n encode.number(bytes, index, it);\n\n if (operation === OPERATION.DELETE) return;\n\n const ref = changeTree.ref;\n\n // ADD or DELETE_AND_ADD: emit the user-facing string key for dynamic\n // map fields. SetSchema/CollectionSchema use a different encoder and\n // skip this entirely (no dynamic key).\n if ((operation & OPERATION.ADD) === OPERATION.ADD) {\n const dynamicIndex = (ref as any)['$indexes'].get(index);\n encode.string(bytes, dynamicIndex, it);\n }\n\n encodeValue(\n encoder,\n bytes,\n (ref as any)[$childType],\n ref[$getByIndex](index),\n operation,\n it,\n );\n}\n\n/**\n * Encode a single SetSchema / CollectionSchema entry. Wire format is the\n * same as MapSchema minus the dynamic-key string, so this path skips the\n * legacy `typeof ref['set']` check entirely.\n *\n * @private\n */\nexport const encodeIndexedEntry: EncodeOperation = function (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree,\n index: number,\n operation: OPERATION,\n it: Iterator,\n) {\n bytes[it.offset++] = operation & 255;\n encode.number(bytes, index, it);\n\n if (operation === OPERATION.DELETE) return;\n\n const ref = changeTree.ref;\n encodeValue(\n encoder,\n bytes,\n (ref as any)[$childType],\n ref[$getByIndex](index),\n operation,\n it,\n );\n}\n\n/**\n * Unified encoder kept for back-compat with external consumers that may\n * have registered it directly via `static [$encoder] =\n * encodeKeyValueOperation`. New code (and all internal collections)\n * should use the split variants — `encodeMapEntry` for MapSchema and\n * `encodeIndexedEntry` for SetSchema / CollectionSchema.\n *\n * The runtime `typeof ref['set']` check below is the per-emission cost\n * the split is designed to remove.\n */\nexport const encodeKeyValueOperation: EncodeOperation = function (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree,\n index: number,\n operation: OPERATION,\n it: Iterator,\n) {\n const ref = changeTree.ref as any;\n if ((operation & OPERATION.ADD) === OPERATION.ADD && typeof ref['set'] === \"function\") {\n encodeMapEntry(encoder, bytes, changeTree, index, operation, it, false, false);\n } else {\n encodeIndexedEntry(encoder, bytes, changeTree, index, operation, it, false, false);\n }\n}\n\n/**\n * Used for collections (MapSchema, ArraySchema, etc.)\n * @private\n */\nexport const encodeArray: EncodeOperation = function (\n encoder: Encoder,\n bytes: Uint8Array,\n changeTree: ChangeTree<ArraySchema>,\n field: number,\n operation: OPERATION,\n it: Iterator,\n isEncodeAll: boolean,\n hasView: boolean,\n) {\n // Read through `refTarget` so every property access below skips the\n // ArraySchema Proxy `get` trap. `refTarget` points at the raw backing\n // instance; `ref` (the Proxy) stays the user-facing identity.\n const ref = changeTree.refTarget as any;\n // ArraySchema stores its per-instance child type at `$childType`.\n // This encoder is array-only — there's no Schema fallback to consider.\n const type = ref[$childType];\n const useOperationByRefId = hasView && changeTree.isFiltered && typeof type !== \"string\";\n\n let refOrIndex: number;\n\n if (useOperationByRefId) {\n const item = ref.tmpItems[field];\n\n // Skip encoding if item is undefined (e.g. when clear() is called)\n if (!item) { return; }\n\n refOrIndex = item[$refId];\n\n if (operation === OPERATION.DELETE) {\n operation = OPERATION.DELETE_BY_REFID;\n\n } else if (operation === OPERATION.ADD) {\n operation = OPERATION.ADD_BY_REFID;\n }\n\n } else {\n refOrIndex = field;\n }\n\n // encode operation\n bytes[it.offset++] = operation & 255;\n\n // encode index\n encode.number(bytes, refOrIndex, it);\n\n // Do not encode value for DELETE operations\n if (operation === OPERATION.DELETE || operation === OPERATION.DELETE_BY_REFID) {\n return;\n }\n\n // `type` was already read above. Direct $getByIndex call — skips\n // ChangeTree.getValue's pass-through wrapper.\n const value = ref[$getByIndex](field, isEncodeAll);\n\n encodeValue(\n encoder,\n bytes,\n type,\n value,\n operation,\n it\n );\n}","import { OPERATION } from \"../encoding/spec.js\";\nimport { Metadata } from \"../Metadata.js\";\nimport { Schema } from \"../Schema.js\";\nimport type { IRef, Ref } from \"../encoder/ChangeTree.js\";\nimport type { Decoder } from \"./Decoder.js\";\nimport { Iterator, decode } from \"../encoding/decode.js\";\nimport { $childType, $deleteByIndex, $getByIndex, $proxyTarget, $refId } from \"../types/symbols.js\";\n\nimport type { ArraySchema } from \"../types/custom/ArraySchema.js\";\n\nimport { getType } from \"../types/registry.js\";\nimport { Collection } from \"../types/HelperTypes.js\";\n\nexport interface DataChange<T = any, F = string> {\n ref: IRef,\n refId: number,\n op: OPERATION,\n /** Set for Schema field changes; omitted for collection item changes (which carry a `dynamicIndex` instead). */\n field?: F;\n dynamicIndex?: number | string;\n value: T;\n previousValue: T;\n}\n\nexport const DEFINITION_MISMATCH = -1;\n\n/**\n * When no `triggerChanges` subscriber is attached, `Decoder.decode` passes\n * `null` so the per-field change objects are never allocated. Every push\n * site uses `allChanges?.push(...)` — optional chaining also short-circuits\n * the object literal, so there's nothing to collect and nothing to throw\n * away.\n */\nexport type DecodeOperation<T extends Schema = any> = (\n decoder: Decoder<T>,\n bytes: Uint8Array,\n it: Iterator,\n ref: IRef,\n allChanges: DataChange[] | null,\n) => number | void;\n\n/**\n * Collection-kind discriminator declared on each collection class as\n * `static COLLECTION_KIND = CollectionKind.X`. The decoder's key/value\n * dispatch used to make three back-to-back `typeof(ref.method) ===\n * \"function\"` checks per entry; those collapse into one switch on the\n * target's class tag. Missing / `undefined` on a ref hits the switch's\n * `default` branch and logs a warning — a guard for future collection\n * types that land without a tag.\n *\n * Declared as a `const` object (not a TS `enum`) so the codegen parser —\n * which picks up every `EnumDeclaration` in the lib source via transitive\n * imports — doesn't emit a generated .cs file for it.\n */\nexport const CollectionKind = {\n Map: 1,\n Array: 2,\n Set: 3,\n Collection: 4,\n Stream: 5,\n} as const;\nexport type CollectionKind = typeof CollectionKind[keyof typeof CollectionKind];\n\n/**\n * Structural type for any class that participates in the `decodeKeyValue-\n * Operation` dispatch. Lets the hot-path read `tgt.constructor.COLLECTION_KIND`\n * without an `any` cast.\n */\nexport interface CollectionCtor {\n readonly COLLECTION_KIND: CollectionKind;\n}\n\n/**\n * Decode the next wire value for `ref[index]`. Returns the decoded value.\n *\n * Callers pass `previousValue` explicitly — it's the current value at the\n * slot before decoding and is needed for ref-count bookkeeping (on DELETE)\n * and for the DELETE_AND_ADD self-reassign case. Keeping it as a parameter\n * lets this function return a single primitive instead of a pair, so the\n * hot call path allocates nothing.\n */\nexport function decodeValue<T extends Ref>(\n decoder: Decoder,\n operation: OPERATION,\n ref: T,\n index: number,\n previousValue: any,\n type: any,\n bytes: Uint8Array,\n it: Iterator,\n allChanges: DataChange[] | null,\n): any {\n const $root = decoder.root;\n\n let value: any;\n\n if ((operation & OPERATION.DELETE) === OPERATION.DELETE)\n {\n // Flag `refId` for garbage collection.\n const previousRefId = previousValue?.[$refId];\n if (previousRefId !== undefined) { $root.removeRef(previousRefId); }\n\n //\n // Delete operations\n //\n if (operation !== OPERATION.DELETE_AND_ADD) {\n ref[$deleteByIndex](index);\n }\n\n value = undefined;\n }\n\n if (operation === OPERATION.DELETE) {\n //\n // Don't do anything\n //\n\n } else if (typeof (type) === \"string\") {\n //\n // Primitive value (number, string, boolean, …). Hot-path first\n // because steady-state ticks are dominated by primitive field\n // updates — moves us past a cheap typeof check instead of a\n // Symbol-metadata lookup via `Schema.is`.\n //\n value = (decode as any)[type](bytes, it);\n\n } else if (Schema.is(type)) {\n const refId = decode.number(bytes, it);\n value = $root.refs.get(refId);\n\n if ((operation & OPERATION.ADD) === OPERATION.ADD) {\n const childType = decoder.getInstanceType(bytes, it, type);\n if (!value) {\n value = decoder.createInstanceOfType(childType);\n }\n\n $root.addRef(\n refId,\n value,\n (\n value !== previousValue || // increment ref count if value has changed\n (operation === OPERATION.DELETE_AND_ADD && value === previousValue) // increment ref count if the same instance is being added again\n )\n );\n }\n\n } else {\n const typeDef = getType(Object.keys(type)[0]);\n const refId = decode.number(bytes, it);\n\n // `initializeForDecoder` is a static on every registered collection\n // class — it does `Object.create(Class.prototype)` + the class-\n // field init + assigns an untracked `$changes` directly. Keeps\n // the decoder free of collection-type internals.\n const valueRef: Ref = ($root.refs.has(refId))\n ? previousValue || $root.refs.get(refId)\n : (typeDef.constructor as any).initializeForDecoder();\n\n value = valueRef.clone(true);\n value[$childType] = Object.values(type)[0]; // cache childType for ArraySchema and MapSchema\n\n if (previousValue) {\n let previousRefId = previousValue[$refId];\n\n if (previousRefId !== undefined && refId !== previousRefId) {\n //\n // enqueue onRemove if structure has been replaced.\n //\n const entries: IterableIterator<[any, any]> = (previousValue as any).entries();\n let iter: IteratorResult<[any, any]>;\n while ((iter = entries.next()) && !iter.done) {\n const [key, value] = iter.value;\n\n // if value is a schema, remove its reference\n if (typeof(value) === \"object\") {\n previousRefId = value[$refId];\n $root.removeRef(previousRefId);\n }\n\n allChanges?.push({\n ref: previousValue,\n refId: previousRefId,\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value,\n });\n }\n\n }\n }\n\n $root.addRef(refId, value, (\n valueRef !== previousValue ||\n (operation === OPERATION.DELETE_AND_ADD && valueRef === previousValue)\n ));\n }\n\n return value;\n}\n\nexport const decodeSchemaOperation: DecodeOperation = function <T extends Schema>(\n decoder: Decoder<any>,\n bytes: Uint8Array,\n it: Iterator,\n ref: T,\n allChanges: DataChange[] | null,\n) {\n const first_byte = bytes[it.offset++];\n const metadata: Metadata = (ref.constructor as typeof Schema)[Symbol.metadata];\n\n // \"compressed\" index + operation\n const operation = (first_byte >> 6) << 6\n const index = first_byte % (operation || 255);\n\n // skip early if field is not defined\n const field = metadata[index];\n if (field === undefined) {\n console.warn(\"@colyseus/schema: field not defined at\", { index, ref: ref.constructor.name, metadata });\n return DEFINITION_MISMATCH;\n }\n\n const previousValue = ref[$getByIndex](index);\n const value = decodeValue(\n decoder,\n operation,\n ref,\n index,\n previousValue,\n field.type,\n bytes,\n it,\n allChanges,\n );\n\n if (value !== null && value !== undefined) {\n // Write via the generated setter. Bypass to `(ref as any)[$values][index]`\n // was attempted but only works for @type-decorated classes (which\n // install accessor descriptors reading from `$values`). Reflection-\n // decoded classes install a plain data-property descriptor instead,\n // so their value lives as an own property on the instance — direct\n // `$values[index]` writes are invisible to the getter on that path.\n // Two-mode dispatch would cost more than the ~3% it'd save.\n ref[field.name as keyof T] = value;\n }\n\n // add change\n if (previousValue !== value) {\n allChanges?.push({\n ref,\n refId: decoder.currentRefId,\n op: operation,\n field: field.name,\n value,\n previousValue,\n });\n }\n}\n\nexport const decodeKeyValueOperation: DecodeOperation = function (\n decoder: Decoder<any>,\n bytes: Uint8Array,\n it: Iterator,\n ref: Ref,\n allChanges: DataChange[] | null,\n) {\n // Unwrap ArraySchema Proxy once so subsequent property reads skip the\n // `get` trap. `$proxyTarget` is a self-reference on the target; on\n // non-proxied collections (Map/Set/Collection/Stream) the lookup is\n // undefined and we fall back to `ref`.\n const tgt: any = (ref as any)[$proxyTarget] ?? ref;\n\n // \"uncompressed\" index + operation (array/map items)\n const operation = bytes[it.offset++];\n\n if (operation === OPERATION.CLEAR) {\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n decoder.removeChildRefs(tgt as Collection, allChanges);\n\n tgt.clear();\n return;\n }\n\n const index = decode.number(bytes, it);\n const type = tgt[$childType];\n // One constructor lookup, one integer read → switch. Replaces three\n // `typeof(ref.method) === \"function\"` dispatches per entry.\n const kind: CollectionKind = (tgt.constructor as CollectionCtor).COLLECTION_KIND;\n\n let dynamicIndex: number | string;\n\n if ((operation & OPERATION.ADD) === OPERATION.ADD) { // ADD or DELETE_AND_ADD\n if (kind === CollectionKind.Map) {\n dynamicIndex = decode.string(bytes, it); // MapSchema uses a wire-delivered string key\n tgt.setIndex(index, dynamicIndex);\n } else {\n dynamicIndex = index;\n }\n } else {\n dynamicIndex = tgt.getIndex(index);\n }\n\n const previousValue = tgt[$getByIndex](index);\n const value = decodeValue(\n decoder,\n operation,\n ref,\n index,\n previousValue,\n type,\n bytes,\n it,\n allChanges,\n );\n\n if (value !== null && value !== undefined) {\n switch (kind) {\n case CollectionKind.Map:\n tgt.$items.set(dynamicIndex as string, value);\n break;\n\n case CollectionKind.Array:\n tgt.$setAt(index, value, operation);\n break;\n\n // SetSchema / CollectionSchema / StreamSchema — use the wire-\n // index we decoded above so server/client `$items` stay in sync\n // regardless of duplicate emission (e.g. a bootstrap that walks\n // both `encodeAll` and the shared recorder emits the same ADD\n // op twice). Previous implementation called `ref.add(value)`\n // and let the decoder-side `$refId++` allocate a new index per\n // call — which for CollectionSchema (no value-dedup) turned\n // duplicate wire ADDs into duplicate client-side entries.\n case CollectionKind.Set:\n case CollectionKind.Collection:\n case CollectionKind.Stream:\n if (!tgt.$items.has(index)) {\n tgt.$items.set(index, value);\n // Keep the decoder's monotonic counter ahead of any\n // wire-index we've seen so future server-side `.add()`\n // allocations don't collide with ones already decoded.\n // (StreamSchema has no `$refId` counter — `typeof`\n // guards the Set/Collection path.)\n if (typeof tgt.$refId === \"number\" && index >= tgt.$refId) {\n tgt.$refId = index + 1;\n }\n }\n break;\n\n default:\n // A future collection type landed without a COLLECTION_KIND\n // tag. Surface it loudly instead of silently dropping the\n // value — the missing entry here is the only place the new\n // type's item-storage semantics need to be wired up.\n console.warn(\n `@colyseus/schema: missing COLLECTION_KIND on ${tgt.constructor?.name} — item at index ${index} was not stored.`\n );\n break;\n }\n }\n\n // add change\n if (previousValue !== value) {\n allChanges?.push({\n ref,\n refId: decoder.currentRefId,\n op: operation,\n dynamicIndex,\n value,\n previousValue,\n });\n }\n}\n\nexport const decodeArray: DecodeOperation = function (\n decoder: Decoder<any>,\n bytes: Uint8Array,\n it: Iterator,\n ref: ArraySchema,\n allChanges: DataChange[] | null,\n) {\n // Unwrap the Proxy once — ref is always an ArraySchema here.\n const tgt: any = (ref as any)[$proxyTarget] ?? ref;\n\n // \"uncompressed\" index + operation (array/map items)\n let operation = bytes[it.offset++];\n let index: number;\n\n if (operation === OPERATION.CLEAR) {\n //\n // When decoding:\n // - enqueue items for DELETE callback.\n // - flag child items for garbage collection.\n //\n decoder.removeChildRefs(tgt as Collection, allChanges);\n tgt.clear();\n return;\n\n } else if (operation === OPERATION.REVERSE) {\n tgt.reverse();\n return;\n\n } else if (operation === OPERATION.DELETE_BY_REFID) {\n // TODO: refactor here, try to follow same flow as below\n const refId = decode.number(bytes, it);\n const previousValue = decoder.root.refs.get(refId);\n index = tgt.findIndex((value: any) => value === previousValue);\n tgt[$deleteByIndex](index);\n allChanges?.push({\n ref,\n refId: decoder.currentRefId,\n op: OPERATION.DELETE,\n dynamicIndex: index,\n value: undefined,\n previousValue,\n });\n\n return;\n\n } else if (operation === OPERATION.ADD_BY_REFID) {\n const refId = decode.number(bytes, it);\n const itemByRefId = decoder.root.refs.get(refId);\n\n // if item already exists, use existing index\n if (itemByRefId) {\n index = tgt.findIndex((value: any) => value === itemByRefId);\n }\n\n // fallback to use last index\n if (index === -1 || index === undefined) {\n index = tgt.length;\n }\n\n } else {\n index = decode.number(bytes, it);\n }\n\n const type = tgt[$childType];\n\n let dynamicIndex: number | string = index;\n\n // Direct `items[index]` read — ArraySchema's `$getByIndex` is encoder-only\n // (it consults `tmpItems`/`deletedIndexes`, which the decoder doesn't\n // maintain). The decoder's authoritative state is `items`.\n const previousValue = tgt.items[index];\n const value = decodeValue(\n decoder,\n operation,\n ref,\n index,\n previousValue,\n type,\n bytes,\n it,\n allChanges,\n );\n\n if (\n value !== null && value !== undefined &&\n value !== previousValue // avoid setting same value twice (if index === 0 it will result in a \"unshift\" for ArraySchema)\n ) {\n tgt.$setAt(index, value, operation);\n }\n\n // add change\n if (previousValue !== value) {\n allChanges?.push({\n ref,\n refId: decoder.currentRefId,\n op: operation,\n dynamicIndex,\n value,\n previousValue,\n });\n }\n}","import type { Schema } from \"../Schema.js\";\nimport type { CollectionSchema } from \"../types/custom/CollectionSchema.js\";\nimport type { MapSchema } from \"../types/custom/MapSchema.js\";\nimport type { SetSchema } from \"../types/custom/SetSchema.js\";\nimport type { ArraySchema } from \"../types/custom/ArraySchema.js\";\nimport type { Ref } from \"../encoder/ChangeTree.js\";\n\nexport class EncodeSchemaError extends Error {}\n\nexport function assertType(value: any, type: string, klass: Schema, field: string | number) {\n let typeofTarget: string;\n let allowNull: boolean = false;\n\n switch (type) {\n case \"number\":\n case \"int8\":\n case \"uint8\":\n case \"int16\":\n case \"uint16\":\n case \"int32\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"float32\":\n case \"float64\":\n typeofTarget = \"number\";\n if (isNaN(value)) {\n console.log(`trying to encode \"NaN\" in ${klass.constructor.name}#${field}`);\n }\n break;\n case \"bigint64\":\n case \"biguint64\":\n typeofTarget = \"bigint\";\n break;\n case \"string\":\n typeofTarget = \"string\";\n allowNull = true;\n break;\n case \"boolean\":\n // boolean is always encoded as true/false based on truthiness\n return;\n default:\n // skip assertion for custom types\n // TODO: allow custom types to define their own assertions\n return;\n }\n\n if (typeof (value) !== typeofTarget && (!allowNull || (allowNull && value !== null))) {\n let foundValue = `'${JSON.stringify(value)}'${(value && value.constructor && ` (${value.constructor.name})`) || ''}`;\n throw new EncodeSchemaError(`a '${typeofTarget}' was expected, but ${foundValue} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nexport function assertInstanceType(\n value: Ref,\n type: typeof Schema\n | typeof ArraySchema\n | typeof MapSchema\n | typeof CollectionSchema\n | typeof SetSchema,\n instance: Ref,\n field: string | number,\n) {\n if (!(value instanceof type)) {\n throw new EncodeSchemaError(`a '${type.name}' was expected, but '${value && (value as any).constructor.name}' was provided in ${instance.constructor.name}#${field}`);\n }\n}","import { $changes, $childType, $decoder, $deleteByIndex, $onEncodeEnd, $encoder, $filter, $getByIndex, $onDecodeEnd, $proxyTarget, $refId } from \"../symbols.js\";\nimport type { Schema } from \"../../Schema.js\";\nimport { type IRef, ChangeTree, installUntrackedChangeTree } from \"../../encoder/ChangeTree.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport { Collection } from \"../HelperTypes.js\";\n\nimport { encodeArray } from \"../../encoder/EncodeOperation.js\";\nimport { CollectionKind, decodeArray } from \"../../decoder/DecodeOperation.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport { assertInstanceType } from \"../../encoding/assert.js\";\n\nconst DEFAULT_SORT = (a: any, b: any) => {\n const A = a.toString();\n const B = b.toString();\n if (A < B) return -1;\n else if (A > B) return 1;\n else return 0\n}\n\n/**\n * Module-level Proxy handler shared by every `ArraySchema` instance. Hoisted\n * out of the ctor so per-instance Proxy setup stops allocating ~6 arrow\n * closures (the `__name` wrappers around those closures dominated one slice\n * of the decoder profile). The handlers reference the target via the trap's\n * `obj` arg — they don't need a captured `this`. Both `new ArraySchema()`\n * and `ArraySchema.initializeForDecoder()` plug into it.\n */\nconst ARRAY_PROXY_HANDLER: ProxyHandler<any> = {\n get: (obj, prop) => {\n if (\n typeof (prop) !== \"symbol\" &&\n // FIXME: d8 accuses this as low performance\n !isNaN(prop as any) // https://stackoverflow.com/a/175787/892698\n ) {\n return obj.items[prop as unknown as number];\n }\n return Reflect.get(obj, prop);\n },\n\n set: (obj, key, setValue) => {\n if (typeof (key) !== \"symbol\" && !isNaN(key as any)) {\n if (setValue === undefined || setValue === null) {\n obj.$deleteAt(key as unknown as number);\n\n } else {\n if (setValue[$changes]) {\n assertInstanceType(setValue, obj[$childType] as typeof Schema, obj, key);\n\n const previousValue = obj.items[key as unknown as number];\n\n if (!obj.isMovingItems) {\n obj.$changeAt(Number(key), setValue);\n\n } else {\n if (previousValue !== undefined) {\n if (setValue[$changes].isNew) {\n obj[$changes].indexedOperation(Number(key), OPERATION.MOVE_AND_ADD);\n\n } else {\n if ((obj[$changes].getChange(Number(key)) & OPERATION.DELETE) === OPERATION.DELETE) {\n obj[$changes].indexedOperation(Number(key), OPERATION.DELETE_AND_MOVE);\n\n } else {\n obj[$changes].indexedOperation(Number(key), OPERATION.MOVE);\n }\n }\n\n } else if (setValue[$changes].isNew) {\n obj[$changes].indexedOperation(Number(key), OPERATION.ADD);\n }\n\n setValue[$changes].setParent(obj, obj[$changes].root, key);\n }\n\n if (previousValue !== undefined) {\n // remove root reference from previous value\n previousValue[$changes].root?.remove(previousValue[$changes]);\n }\n\n } else {\n obj.$changeAt(Number(key), setValue);\n }\n\n obj.items[key as unknown as number] = setValue;\n obj.tmpItems[key as unknown as number] = setValue;\n }\n\n return true;\n }\n return Reflect.set(obj, key, setValue);\n },\n\n deleteProperty: (obj, prop) => {\n if (typeof (prop) === \"number\") {\n obj.$deleteAt(prop);\n } else {\n delete obj[prop as unknown as number];\n }\n return true;\n },\n\n has: (obj, key) => {\n if (typeof (key) !== \"symbol\" && !isNaN(Number(key))) {\n return Reflect.has(obj.items, key);\n }\n return Reflect.has(obj, key);\n },\n};\n\nexport class ArraySchema<V = any> implements Array<V>, Collection<number, V>, IRef {\n [n: number]: V;\n [$changes]: ChangeTree;\n [$refId]?: number;\n [$proxyTarget]: this;\n\n protected [$childType]: string | typeof Schema;\n\n protected items: V[] = [];\n protected tmpItems: V[] = [];\n protected deletedIndexes: boolean[] = [];\n protected isMovingItems = false;\n\n static [$encoder] = encodeArray;\n static [$decoder] = decodeArray;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Array;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: ArraySchema, index: number, view: StateView) {\n return (\n !view ||\n typeof (ref[$childType]) === \"string\" ||\n view.isChangeTreeVisible(ref['tmpItems'][index]?.[$changes])\n );\n }\n\n static is(type: any) {\n return (\n // type format: [\"string\"]\n Array.isArray(type) ||\n\n // type format: { array: \"string\" }\n (type['array'] !== undefined)\n );\n }\n\n static from<T>(iterable: Iterable<T> | ArrayLike<T>) {\n return new ArraySchema<T>(...Array.from(iterable));\n }\n\n constructor (...items: V[]) {\n this[$childType] = undefined as any;\n // Self-reference so methods called via the Proxy can recover the\n // underlying instance and access fields directly. See $proxyTarget.\n this[$proxyTarget] = this;\n\n const proxy = new Proxy(this, ARRAY_PROXY_HANDLER);\n\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(proxy),\n enumerable: false,\n writable: true,\n });\n\n if (items.length > 0) {\n this.push(...items);\n }\n\n return proxy;\n }\n\n /**\n * Decoder-side factory. Skips the `ChangeTree` allocation and\n * replicates the class-field initializers by hand (since `Object.create`\n * bypasses them). Must stay in sync with the class-field declarations\n * and the constructor body above.\n *\n * Pass the Proxy to `installUntrackedChangeTree` as the public identity\n * so children set their parent to the Proxy, not the raw target.\n */\n static initializeForDecoder<V = any>(): ArraySchema<V> {\n const self: any = Object.create(ArraySchema.prototype);\n self.items = [];\n // `tmpItems` / `deletedIndexes` are encoder-only (consulted by the\n // staged-snapshot path in `$getByIndex`, `$onEncodeEnd`, etc.). The\n // decoder reads from `items` directly and never maintains them.\n self.isMovingItems = false;\n self[$childType] = undefined;\n self[$proxyTarget] = self;\n\n const proxy = new Proxy(self, ARRAY_PROXY_HANDLER);\n installUntrackedChangeTree(self, proxy);\n return proxy;\n }\n\n set length (newLength: number) {\n if (newLength === 0) {\n this.clear();\n } else if (newLength < this.items.length) {\n this.splice(newLength, this.length - newLength);\n } else {\n console.warn(\"ArraySchema: can't set .length to a higher value than its length.\");\n }\n }\n\n get length() {\n return this.items.length;\n }\n\n // ────── Change tracking control (same API as Schema) ──────\n pauseTracking(): void { this[$changes].pause(); }\n resumeTracking(): void { this[$changes].resume(); }\n untracked<T>(fn: () => T): T { return this[$changes].untracked(fn); }\n get isTrackingPaused(): boolean { return this[$changes].paused; }\n\n push(...values: V[]) {\n // `this` is the Proxy when called from user code. Grab the underlying\n // instance once so the body's field reads (items, tmpItems, $changes,\n // $childType) skip the Proxy.get trap on every iteration.\n const self = this[$proxyTarget];\n const items = self.items;\n const tmpItems = self.tmpItems;\n const changeTree = self[$changes];\n const childType = self[$childType];\n let length = tmpItems.length;\n\n for (let i = 0, l = values.length; i < l; i++, length++) {\n const value = values[i];\n\n if (value === undefined || value === null) {\n // skip null values\n return;\n\n } else if (typeof (value) === \"object\" && childType) {\n assertInstanceType(value as any, childType as typeof Schema, self, i);\n // TODO: move value[$changes]?.setParent() to this block.\n }\n\n changeTree.indexedOperation(length, OPERATION.ADD);\n\n items.push(value);\n tmpItems.push(value);\n\n //\n // set value's parent after the value is set\n // (to avoid encoding \"refId\" operations before parent's \"ADD\" operation)\n // Pass `this` (the Proxy) as parent — the Proxy is the public\n // identity of the array; ChangeTree.parentRef compares by identity.\n //\n value[$changes]?.setParent(this, changeTree.root, length);\n }\n\n return length;\n }\n\n /**\n * Removes the last element from an array and returns it.\n */\n pop(): V | undefined {\n // Unwrap Proxy once — see push() for rationale.\n const self = this[$proxyTarget];\n const tmpItems = self.tmpItems;\n const deletedIndexes = self.deletedIndexes;\n let index: number = -1;\n\n // find last non-undefined index\n for (let i = tmpItems.length - 1; i >= 0; i--) {\n if (deletedIndexes[i] !== true) {\n index = i;\n break;\n }\n }\n\n if (index < 0) {\n return undefined;\n }\n\n self[$changes].delete(index);\n deletedIndexes[index] = true;\n\n return self.items.pop();\n }\n\n at(index: number) {\n // Allow negative indexing from the end\n if (index < 0) index += this.length;\n return this.items[index];\n }\n\n // encoding only\n protected $changeAt(index: number, value: V) {\n if (value === undefined || value === null) {\n console.error(\"ArraySchema items cannot be null nor undefined; Use `deleteAt(index)` instead.\");\n return;\n }\n\n // skip if the value is the same as cached.\n if (this.items[index] === value) {\n return;\n }\n\n const operation = (this.items[index] !== undefined)\n ? typeof(value) === \"object\"\n ? OPERATION.DELETE_AND_ADD // schema child\n : OPERATION.REPLACE // primitive\n : OPERATION.ADD;\n\n const changeTree = this[$changes];\n changeTree.change(index, operation);\n\n //\n // set value's parent after the value is set\n // (to avoid encoding \"refId\" operations before parent's \"ADD\" operation)\n //\n value[$changes]?.setParent(this, changeTree.root, index);\n }\n\n // encoding only\n protected $deleteAt(index: number, operation?: OPERATION) {\n this[$changes].delete(index, operation);\n }\n\n // decoding only\n protected $setAt(index: number, value: V, operation: OPERATION) {\n if (\n index === 0 &&\n operation === OPERATION.ADD &&\n this.items[index] !== undefined\n ) {\n // handle decoding unshift\n this.items.unshift(value);\n\n } else if (operation === OPERATION.DELETE_AND_MOVE) {\n this.items.splice(index, 1);\n this.items[index] = value;\n\n } else {\n this.items[index] = value;\n }\n }\n\n clear() {\n const self = this[$proxyTarget];\n // skip if already clear\n if (self.items.length === 0) {\n return;\n }\n\n // discard previous operations.\n const changeTree = self[$changes];\n\n // remove children references\n changeTree.forEachChild((childChangeTree, _) => {\n changeTree.root?.remove(childChangeTree);\n });\n\n changeTree.discard();\n changeTree.operation(OPERATION.CLEAR);\n\n self.items.length = 0;\n self.tmpItems.length = 0;\n }\n\n /**\n * Combines two or more arrays.\n * @param items Additional items to add to the end of array1.\n */\n // @ts-ignore\n concat(...items: (V | ConcatArray<V>)[]): ArraySchema<V> {\n return new ArraySchema(...this.items.concat(...items));\n }\n\n /**\n * Adds all the elements of an array separated by the specified separator string.\n * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\n */\n join(separator?: string): string {\n return this.items.join(separator);\n }\n\n /**\n * Reverses the elements in an Array.\n */\n // @ts-ignore\n reverse(): ArraySchema<V> {\n const self = this[$proxyTarget];\n self[$changes].operation(OPERATION.REVERSE);\n self.items.reverse();\n self.tmpItems.reverse();\n return this;\n }\n\n /**\n * Removes the first element from an array and returns it.\n */\n shift(): V | undefined {\n const self = this[$proxyTarget];\n const items = self.items;\n if (items.length === 0) { return undefined; }\n\n const changeTree = self[$changes];\n const first = items[0];\n const index = self.tmpItems.findIndex(item => item === first);\n changeTree.delete(index, OPERATION.DELETE);\n self.deletedIndexes[index] = true;\n\n return items.shift();\n }\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array.\n * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n */\n slice(start?: number, end?: number): V[] {\n const sliced = new ArraySchema<V>();\n sliced.push(...this.items.slice(start, end));\n return sliced as unknown as V[];\n }\n\n /**\n * Sorts an array.\n * @param compareFn Function used to determine the order of the elements. It is expected to return\n * a negative value if first argument is less than second argument, zero if they're equal and a positive\n * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\n * ```ts\n * [11,2,22,1].sort((a, b) => a - b)\n * ```\n */\n sort(compareFn: (a: V, b: V) => number = DEFAULT_SORT): this {\n const self = this[$proxyTarget];\n self.isMovingItems = true;\n\n const changeTree = self[$changes];\n const sortedItems = self.items.sort(compareFn);\n\n // wouldn't OPERATION.MOVE make more sense here?\n sortedItems.forEach((_, i) => changeTree.change(i, OPERATION.REPLACE));\n\n self.tmpItems.sort(compareFn);\n\n self.isMovingItems = false;\n return this;\n }\n\n /**\n * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @param insertItems Elements to insert into the array in place of the deleted elements.\n */\n splice(\n start: number,\n deleteCount?: number,\n ...insertItems: V[]\n ): V[] {\n const self = this[$proxyTarget];\n const changeTree = self[$changes];\n const items = self.items;\n const tmpItems = self.tmpItems;\n const deletedIndexes = self.deletedIndexes;\n\n const itemsLength = items.length;\n const tmpItemsLength = tmpItems.length;\n const insertCount = insertItems.length;\n\n // build up-to-date list of indexes, excluding removed values.\n const indexes: number[] = [];\n for (let i = 0; i < tmpItemsLength; i++) {\n if (deletedIndexes[i] !== true) {\n indexes.push(i);\n }\n }\n\n if (itemsLength > start) {\n // if deleteCount is not provided, delete all items from start to end\n if (deleteCount === undefined) {\n deleteCount = itemsLength - start;\n }\n\n //\n // delete operations at correct index\n //\n for (let i = start; i < start + deleteCount; i++) {\n const index = indexes[i];\n changeTree.delete(index, OPERATION.DELETE);\n deletedIndexes[index] = true;\n }\n\n } else {\n // not enough items to delete\n deleteCount = 0;\n }\n\n // insert operations\n if (insertCount > 0) {\n if (insertCount > deleteCount) {\n console.error(\"Inserting more elements than deleting during ArraySchema#splice()\");\n throw new Error(\"ArraySchema#splice(): insertCount must be equal or lower than deleteCount.\");\n }\n\n for (let i = 0; i < insertCount; i++) {\n const addIndex = (indexes[start] ?? itemsLength) + i;\n\n changeTree.indexedOperation(\n addIndex,\n (deletedIndexes[addIndex])\n ? OPERATION.DELETE_AND_ADD\n : OPERATION.ADD\n );\n\n // set value's parent/root — use `this` (Proxy) as parent.\n insertItems[i][$changes]?.setParent(this, changeTree.root, addIndex);\n }\n }\n\n changeTree.root?.enqueueChangeTree(changeTree);\n\n return items.splice(start, deleteCount, ...insertItems);\n }\n\n /**\n * Inserts new elements at the start of an array.\n * @param items Elements to insert at the start of the Array.\n */\n unshift(...items: V[]): number {\n const self = this[$proxyTarget];\n const changeTree = self[$changes];\n\n // Existing items shift up — `shiftChangeIndexes` handles their\n // relocation bookkeeping. The prepended `items` are genuinely new\n // (no prior existence to MOVE), so each records an ADD.\n changeTree.shiftChangeIndexes(items.length);\n items.forEach((_, index) => {\n changeTree.change(index, OPERATION.ADD)\n });\n\n self.tmpItems.unshift(...items);\n\n return self.items.unshift(...items);\n }\n\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n indexOf(searchElement: V, fromIndex?: number): number {\n return this.items.indexOf(searchElement, fromIndex);\n }\n\n /**\n * Returns the index of the last occurrence of a specified value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\n */\n lastIndexOf(searchElement: V, fromIndex: number = this.length - 1): number {\n return this.items.lastIndexOf(searchElement, fromIndex);\n }\n\n /**\n * Determines whether all the members of an array satisfy the specified test.\n * @param callbackfn A function that accepts up to three arguments. The every method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value false, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n every<S extends V>(predicate: (value: V, index: number, array: V[]) => value is S, thisArg?: any): this is S[];\n every(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean;\n every(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return this.items.every(callbackfn, thisArg);\n }\n\n /**\n * Determines whether the specified callback function returns true for any element of an array.\n * @param callbackfn A function that accepts up to three arguments. The some method calls\n * the callbackfn function for each element in the array until the callbackfn returns a value\n * which is coercible to the Boolean value true, or until the end of the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n * If thisArg is omitted, undefined is used as the this value.\n */\n some(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): boolean {\n return this.items.some(callbackfn, thisArg);\n }\n\n /**\n * Performs the specified action for each element in an array.\n * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n forEach(callbackfn: (value: V, index: number, array: V[]) => void, thisArg?: any): void {\n return this.items.forEach(callbackfn, thisArg);\n }\n\n /**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n map<U>(callbackfn: (value: V, index: number, array: V[]) => U, thisArg?: any): U[] {\n return this.items.map(callbackfn, thisArg);\n }\n\n /**\n * Returns the elements of an array that meet the condition specified in a callback function.\n * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n */\n filter(callbackfn: (value: V, index: number, array: V[]) => unknown, thisArg?: any): V[]\n filter<S extends V>(callbackfn: (value: V, index: number, array: V[]) => value is S, thisArg?: any): V[] {\n return this.items.filter(callbackfn, thisArg);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduce<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return this.items.reduce(callbackfn, initialValue);\n }\n\n /**\n * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n */\n reduceRight<U=V>(callbackfn: (previousValue: U, currentValue: V, currentIndex: number, array: V[]) => U, initialValue?: U): U {\n return this.items.reduceRight(callbackfn, initialValue);\n }\n\n /**\n * Returns the value of the first element in the array where predicate is true, and undefined\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found, find\n * immediately returns that element value. Otherwise, find returns undefined.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n find(predicate: (value: V, index: number, obj: V[]) => boolean, thisArg?: any): V | undefined {\n return this.items.find(predicate, thisArg);\n }\n\n /**\n * Returns the index of the first element in the array where predicate is true, and -1\n * otherwise.\n * @param predicate find calls predicate once for each element of the array, in ascending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n * @param thisArg If provided, it will be used as the this value for each invocation of\n * predicate. If it is not provided, undefined is used instead.\n */\n findIndex(predicate: (value: V, index: number, obj: V[]) => unknown, thisArg?: any): number {\n return this.items.findIndex(predicate, thisArg);\n }\n\n /**\n * Returns the this object after filling the section identified by start and end with value\n * @param value value to fill array section with\n * @param start index to start filling the array at. If start is negative, it is treated as\n * length+start where length is the length of the array.\n * @param end index to stop filling the array at. If end is negative, it is treated as\n * length+end.\n */\n fill(value: V, start?: number, end?: number): this {\n throw new Error(\"ArraySchema#fill() not implemented\");\n }\n\n /**\n * Returns the this object after copying a section of the array identified by start and end\n * to the same array starting at position target\n * @param target If target is negative, it is treated as length+target where length is the\n * length of the array.\n * @param start If start is negative, it is treated as length+start. If end is negative, it\n * is treated as length+end.\n * @param end If not specified, length of the this object is used as its default value.\n */\n copyWithin(target: number, start: number, end?: number): this {\n throw new Error(\"ArraySchema#copyWithin() not implemented\");\n }\n\n /**\n * Returns a string representation of an array.\n */\n toString(): string {\n return this.items.toString();\n }\n\n /**\n * Returns a string representation of an array. The elements are converted to string using their toLocalString methods.\n */\n toLocaleString(): string {\n return this.items.toLocaleString()\n };\n\n /** Iterator */\n [Symbol.iterator](): ArrayIterator<V> {\n return this.items[Symbol.iterator]();\n }\n\n static get [Symbol.species]() {\n return ArraySchema;\n }\n\n // WORKAROUND for compatibility\n // - TypeScript 4 defines @@unscopables as a function\n // - TypeScript 5 defines @@unscopables as an object\n [Symbol.unscopables]: any;\n\n /**\n * Returns an iterable of key, value pairs for every entry in the array\n */\n entries(): ArrayIterator<[number, V]> { return this.items.entries(); }\n\n /**\n * Returns an iterable of keys in the array\n */\n keys(): ArrayIterator<number> { return this.items.keys(); }\n\n /**\n * Returns an iterable of values in the array\n */\n values(): ArrayIterator<V> { return this.items.values(); }\n\n /**\n * Determines whether an array includes a certain element, returning true or false as appropriate.\n * @param searchElement The element to search for.\n * @param fromIndex The position in this array at which to begin searching for searchElement.\n */\n includes(searchElement: V, fromIndex?: number): boolean {\n return this.items.includes(searchElement, fromIndex);\n }\n\n //\n // ES2022\n //\n\n /**\n * Calls a defined callback function on each element of an array. Then, flattens the result into\n * a new array.\n * This is identical to a map followed by flat with depth 1.\n *\n * @param callback A function that accepts up to three arguments. The flatMap method calls the\n * callback function one time for each element in the array.\n * @param thisArg An object to which the this keyword can refer in the callback function. If\n * thisArg is omitted, undefined is used as the this value.\n */\n // @ts-ignore\n flatMap<U, This = undefined>(callback: (this: This, value: V, index: number, array: V[]) => U | ReadonlyArray<U>, thisArg?: This): U[] {\n // @ts-ignore\n throw new Error(\"ArraySchema#flatMap() is not supported.\");\n }\n\n /**\n * Returns a new array with all sub-array elements concatenated into it recursively up to the\n * specified depth.\n *\n * @param depth The maximum recursion depth\n */\n // @ts-ignore\n flat<A, D extends number = 1>(this: A, depth?: D): any {\n throw new Error(\"ArraySchema#flat() is not supported.\");\n }\n\n findLast() {\n // @ts-ignore\n return this.items.findLast.apply(this.items, arguments);\n }\n\n findLastIndex(...args: any[]) {\n // @ts-ignore\n return this.items.findLastIndex.apply(this.items, arguments);\n }\n\n //\n // ES2023\n //\n with(index: number, value: V): ArraySchema<V> {\n const copy = this.items.slice();\n // Allow negative indexing from the end\n if (index < 0) index += this.length;\n copy[index] = value;\n return new ArraySchema(...copy);\n }\n toReversed(): V[] {\n return this.items.slice().reverse();\n }\n toSorted(compareFn?: (a: V, b: V) => number): V[] {\n return this.items.slice().sort(compareFn);\n }\n toSpliced(start: number, deleteCount: number, ...items: V[]): V[];\n toSpliced(start: number, deleteCount?: number): V[];\n // @ts-ignore\n toSpliced(start: unknown, deleteCount?: unknown, ...items?: unknown[]): V[] {\n // @ts-ignore\n return this.items.toSpliced.apply(copy, arguments);\n }\n\n shuffle() {\n return this.move((_) => {\n let currentIndex = this.items.length;\n while (currentIndex != 0) {\n let randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n [this[currentIndex], this[randomIndex]] = [this[randomIndex], this[currentIndex]];\n }\n });\n }\n\n /**\n * Allows to move items around in the array.\n *\n * Example:\n * state.cards.move((cards) => {\n * [cards[4], cards[3]] = [cards[3], cards[4]];\n * [cards[3], cards[2]] = [cards[2], cards[3]];\n * [cards[2], cards[0]] = [cards[0], cards[2]];\n * [cards[1], cards[1]] = [cards[1], cards[1]];\n * [cards[0], cards[0]] = [cards[0], cards[0]];\n * })\n *\n * @param cb\n * @returns\n */\n move(cb: (arr: this) => void) {\n this.isMovingItems = true;\n cb(this);\n this.isMovingItems = false;\n return this;\n }\n\n /**\n * Encoder-only. Reads the staged-snapshot (`tmpItems`) so the encoder can\n * resolve a wire-index even after the user has mutated `items` mid-tick.\n * The decoder reads `items[index]` directly — see `decodeArray` and\n * `$deleteByIndex` below.\n */\n [$getByIndex](index: number, isEncodeAll: boolean = false): any {\n return (isEncodeAll)\n ? this.items[index]\n : this.deletedIndexes[index]\n ? this.items[index]\n : this.tmpItems[index] || this.items[index];\n }\n\n [$deleteByIndex](index: number): void {\n this.items[index] = undefined;\n }\n\n protected [$onEncodeEnd]() {\n this.tmpItems = this.items.slice();\n this.deletedIndexes.length = 0;\n }\n\n protected [$onDecodeEnd]() {\n this.items = this.items.filter((item) => item !== undefined);\n }\n\n toArray() {\n return this.items.slice(0);\n }\n\n toJSON() {\n return this.toArray().map((value: any) => {\n return (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): ArraySchema<V> {\n let cloned: ArraySchema;\n\n if (isDecoding) {\n cloned = new ArraySchema();\n cloned.push(...this.items);\n\n } else {\n cloned = new ArraySchema(...this.map(item => (\n (item[$changes])\n ? (item as any as Schema).clone()\n : item\n )));\n }\n\n return cloned;\n };\n\n}\n\nregisterType(\"array\", { constructor: ArraySchema });\n","/**\n * MapJournal — owns the change-tracking and wire-protocol identity for a MapSchema.\n *\n * Replaces three parallel structures that previously lived on MapSchema:\n * - `$indexes: Map<number, K>` → `keyByIndex`\n * - `_collectionIndexes: { [key]: number }` (+ counter) → `indexByKey` + `nextIndex`\n * - `deletedItems: { [index]: V }` → `snapshots`\n *\n * The journal is the single source of truth for:\n * - assigning wire-protocol indexes to keys (server side)\n * - looking up keys from wire indexes (server + client)\n * - holding snapshots of removed values (for view-filter visibility checks)\n *\n * The journal does NOT track per-index operation types or maintain enqueue\n * order — those remain on `ChangeTree` for now. A future iteration may pull\n * them in too, but this version is intentionally scoped to the data-model\n * cleanup so we can validate the abstraction before going deeper.\n */\nexport class MapJournal<K = any> {\n /** index → key (was MapSchema.$indexes). Used by encoder and decoder. */\n keyByIndex: Map<number, K> = new Map();\n\n /**\n * key → index (was MapSchema._collectionIndexes — forward direction).\n * Server-only. Plain object so MapSchema can expose it via a getter\n * for backwards-compatible `_collectionIndexes?.[key]` access from\n * ChangeTree.forEachChild and similar polymorphic call sites.\n */\n indexByKey: { [key: string]: number } = {};\n\n /** Monotonic counter for assigning new indexes. Server-only. */\n private nextIndex: number = 0;\n\n /**\n * Snapshot of values at the moment they were deleted. Lazy — only\n * allocated on first delete, since most maps are pure-grow and never\n * touch this. Used by `MapSchema[$filter]` to check view visibility\n * of a value that's already been removed from `$items` but whose\n * DELETE op is still in the encode queue.\n */\n snapshots?: Map<number, any>;\n\n // ──────────────────────────────────────────────────────────────────\n // Server-side: recording mutations\n // ──────────────────────────────────────────────────────────────────\n\n /** Get the index assigned to a key, or undefined if never assigned. */\n indexOf(key: K): number | undefined {\n const idx = this.indexByKey[key as unknown as string];\n return idx === undefined ? undefined : idx;\n }\n\n /** Assign and return a new wire index for an unseen key. */\n assign(key: K): number {\n const index = this.nextIndex++;\n this.indexByKey[key as unknown as string] = index;\n this.keyByIndex.set(index, key);\n return index;\n }\n\n /** Stash a value at the moment it's deleted (for filter visibility checks). */\n snapshot(index: number, value: any): void {\n (this.snapshots ??= new Map()).set(index, value);\n }\n\n /** Discard a snapshot — called when a deleted slot is being re-set. */\n forgetSnapshot(index: number): void {\n this.snapshots?.delete(index);\n }\n\n /** Look up a snapshot. Returns undefined if no DELETE is pending for this index. */\n snapshotAt(index: number): any {\n return this.snapshots?.get(index);\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Client-side (decoder): index↔key sync from the wire\n // ──────────────────────────────────────────────────────────────────\n\n /** Decoder calls this when it sees an ADD/DELETE_AND_ADD on the wire. */\n setIndex(index: number, key: K): void {\n this.keyByIndex.set(index, key);\n // Forward direction maintained for symmetry, even though decoder\n // rarely needs it. Cheap insert; keeps invariants aligned.\n this.indexByKey[key as unknown as string] = index;\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Lookups (both sides)\n // ──────────────────────────────────────────────────────────────────\n\n /** Reverse lookup: wire index → key. */\n keyOf(index: number): K | undefined {\n return this.keyByIndex.get(index);\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Lifecycle\n // ──────────────────────────────────────────────────────────────────\n\n /**\n * Called from MapSchema's $onEncodeEnd hook.\n * Cleans up index/key mappings for entries that were deleted in this tick.\n */\n cleanupAfterEncode(): void {\n if (this.snapshots === undefined) return;\n for (const [index] of this.snapshots) {\n const key = this.keyByIndex.get(index);\n if (key !== undefined) {\n delete this.indexByKey[key as unknown as string];\n this.keyByIndex.delete(index);\n }\n }\n this.snapshots.clear();\n }\n\n /** Reset everything (called on .clear()). */\n reset(): void {\n this.indexByKey = {};\n this.keyByIndex.clear();\n this.snapshots?.clear();\n this.nextIndex = 0;\n }\n}\n","import { $changes, $childType, $decoder, $deleteByIndex, $onEncodeEnd, $encoder, $filter, $getByIndex, $refId } from \"../symbols.js\";\nimport { ChangeTree, installUntrackedChangeTree, IRef } from \"../../encoder/ChangeTree.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport { Collection } from \"../HelperTypes.js\";\nimport { CollectionKind, decodeKeyValueOperation } from \"../../decoder/DecodeOperation.js\";\nimport { encodeMapEntry } from \"../../encoder/EncodeOperation.js\";\nimport { MapJournal } from \"../../encoder/MapJournal.js\";\nimport {\n createStreamableState,\n streamDropView,\n streamRouteAdd,\n streamRouteRemove,\n type StreamableState,\n} from \"../../encoder/streaming.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport type { Schema } from \"../../Schema.js\";\nimport { assertInstanceType } from \"../../encoding/assert.js\";\n\nexport class MapSchema<V=any, K extends string = string> implements Map<K, V>, Collection<K, V, [K, V]>, IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected childType: new () => V;\n protected [$childType]: string | typeof Schema;\n\n protected $items: Map<K, V> = new Map<K, V>();\n\n /**\n * Wire-protocol identity + change-tracking metadata for this map.\n *\n * Owns: index↔key mapping, monotonic index counter, snapshots of removed\n * values for filter visibility checks. Replaces what used to live as three\n * separate fields on this class ($indexes, _collectionIndexes, deletedItems).\n */\n protected journal: MapJournal<K> = new MapJournal<K>();\n\n /**\n * Streamable state — lazily allocated by `inheritedFlags` (or the\n * `maxPerTick` setter) when streaming actually activates. `undefined`\n * on every non-streaming MapSchema so the common case pays zero\n * Map/Set allocation. Single slot → hidden-class shape stays stable\n * across streaming and non-streaming instances.\n */\n _stream?: StreamableState;\n\n /** Max ADD ops emitted per tick per view. Ignored outside streaming mode. */\n get maxPerTick(): number {\n return this._stream?.maxPerTick ?? 32;\n }\n set maxPerTick(n: number) {\n (this._stream ??= createStreamableState()).maxPerTick = n;\n }\n\n /**\n * Per-view priority callback for `.stream()` maps. Initialized from the\n * schema declaration (`t.map(X).stream().priority(fn)` or `@type({ map,\n * priority })`); assigning here overrides for this instance. Only fires\n * during `encodeView` — broadcast mode drains FIFO.\n */\n get priority(): ((view: any, element: V) => number) | undefined {\n return this._stream?.priority as ((view: any, element: V) => number) | undefined;\n }\n set priority(fn: ((view: any, element: V) => number) | undefined) {\n (this._stream ??= createStreamableState()).priority = fn;\n }\n\n /** Backwards-compat alias for `journal.keyByIndex`. */\n get $indexes(): Map<number, K> { return this.journal.keyByIndex; }\n\n /**\n * Backwards-compat alias for `journal.indexByKey`. Plain object so\n * polymorphic call sites like `ref._collectionIndexes?.[key]` keep working.\n */\n get _collectionIndexes(): { [key: string]: number } { return this.journal.indexByKey; }\n\n static [$encoder] = encodeMapEntry;\n static [$decoder] = decodeKeyValueOperation;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Map;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: MapSchema, index: number, view: StateView) {\n if (!view || typeof (ref[$childType]) === \"string\") return true;\n const value = ref[$getByIndex](index) ?? ref.journal.snapshotAt(index);\n return view.isChangeTreeVisible(value[$changes]);\n }\n\n static is(type: any) {\n return type['map'] !== undefined;\n }\n\n constructor (initialValues?: Map<K, V> | Record<K, V>) {\n // $changes MUST be non-enumerable — see Schema.initialize comment.\n // ChangeTree has circular refs (root→changeTrees→…) and would send\n // `assert.deepStrictEqual` into exponential recursion.\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(this),\n enumerable: false,\n writable: true,\n });\n this[$childType] = undefined as any;\n\n if (initialValues) {\n if (\n initialValues instanceof Map ||\n initialValues instanceof MapSchema\n ) {\n initialValues.forEach((v, k) => this.set(k, v));\n\n } else {\n for (const k in initialValues) {\n this.set(k, initialValues[k]);\n }\n }\n }\n }\n\n /**\n * Decoder-side factory. Skips the tracking `ChangeTree` allocation;\n * `Object.create` also bypasses the class-field initializers, so we\n * replicate the minimum slot init here. Must stay in sync with the\n * class-field declarations above and with the constructor body.\n */\n static initializeForDecoder<V = any, K extends string = string>(): MapSchema<V, K> {\n const self: any = Object.create(MapSchema.prototype);\n self.$items = new Map<K, V>();\n self.journal = new MapJournal<K>();\n self[$childType] = undefined;\n installUntrackedChangeTree(self);\n return self;\n }\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<[K, V]> { return this.$items[Symbol.iterator](); }\n get [Symbol.toStringTag]() { return this.$items[Symbol.toStringTag] }\n\n static get [Symbol.species]() { return MapSchema; }\n\n set(key: K, value: V) {\n if (value === undefined || value === null) {\n throw new Error(`MapSchema#set('${key}', ${value}): trying to set ${value} value on '${key}'.`);\n\n } else if (typeof(value) === \"object\" && this[$childType]) {\n assertInstanceType(value as any, this[$childType] as typeof Schema, this, key);\n }\n\n // Force \"key\" as string\n // See: https://github.com/colyseus/colyseus/issues/561#issuecomment-1646733468\n key = key.toString() as K;\n\n const changeTree = this[$changes];\n const isRef = (value[$changes]) !== undefined;\n const journal = this.journal;\n\n let index = journal.indexOf(key);\n let operation: OPERATION;\n\n if (index !== undefined) {\n // REPLACE branch\n operation = OPERATION.REPLACE;\n\n const previousValue = this.$items.get(key);\n if (previousValue === value) {\n // if value is the same, avoid re-encoding it.\n return;\n\n } else if (isRef) {\n // if is schema, force ADD operation if value differ from previous one.\n operation = OPERATION.DELETE_AND_ADD;\n\n // remove reference from previous value\n if (previousValue !== undefined) {\n previousValue[$changes].root?.remove(previousValue[$changes]);\n }\n }\n\n // Re-setting after a delete: discard the snapshot.\n if (journal.snapshotAt(index) !== undefined) {\n journal.forgetSnapshot(index);\n }\n\n } else {\n // ADD branch\n index = journal.assign(key);\n operation = OPERATION.ADD;\n }\n\n this.$items.set(key, value);\n\n // Streaming-mode ADD: route the new entry into per-view or broadcast\n // pending instead of recording on the tree. The encoder's priority /\n // broadcast pass will drain up to `maxPerTick` per tick. REPLACE\n // and DELETE_AND_ADD fall through to the normal recorder path — the\n // old value is already being emitted, so the swap just mutates.\n if (operation === OPERATION.ADD && changeTree.isStreamCollection) {\n if (changeTree.root !== undefined) {\n streamRouteAdd(this, changeTree.root, index);\n }\n } else {\n changeTree.change(index, operation);\n }\n\n //\n // set value's parent after the value is set\n // (to avoid encoding \"refId\" operations before parent's \"ADD\" operation)\n //\n if (isRef) {\n value[$changes].setParent(this, changeTree.root, index);\n }\n\n return this;\n }\n\n get(key: K): V | undefined {\n return this.$items.get(key);\n }\n\n delete(key: K) {\n if (!this.$items.has(key)) {\n return false;\n }\n\n const index = this.journal.indexOf(key)!;\n const previousValue = this.$items.get(key)!;\n const changeTree = this[$changes];\n\n // Streaming-mode: silent-drop if the entry never made it out to any\n // client (still in pending). Otherwise force DELETE on the channels\n // where it was already sent — bypasses the normal recorder so the\n // emission path stays symmetric with StreamSchema.\n if (changeTree.isStreamCollection) {\n const root = changeTree.root;\n let neverSent = false;\n if (root !== undefined) {\n neverSent = streamRouteRemove(this, root, this[$refId], index);\n }\n if ((previousValue as any)?.[$changes] !== undefined) {\n root?.remove(previousValue[$changes]);\n }\n this.$items.delete(key);\n // Only snapshot if we actually need a DELETE op (already-sent):\n // filter visibility checks look up the snapshot until the next\n // encode end. Never-sent entries can skip the snapshot work.\n if (!neverSent) this.journal.snapshot(index, previousValue);\n return true;\n }\n\n // Snapshot the deleted value (used by [$filter] for visibility checks\n // until $onEncodeEnd cleans it up).\n this.journal.snapshot(index, previousValue);\n\n changeTree.delete(index);\n\n return this.$items.delete(key);\n }\n\n clear() {\n const changeTree = this[$changes];\n\n // discard previous operations.\n changeTree.discard();\n\n // remove children references\n changeTree.forEachChild((childChangeTree, _) => {\n changeTree.root?.remove(childChangeTree);\n });\n\n // reset journal (clears all index/key state and snapshots)\n this.journal.reset();\n\n // clear items\n this.$items.clear();\n\n changeTree.operation(OPERATION.CLEAR);\n }\n\n has (key: K) {\n return this.$items.has(key);\n }\n\n forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void) {\n this.$items.forEach(callbackfn);\n }\n\n entries () {\n return this.$items.entries();\n }\n\n keys () {\n return this.$items.keys();\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n // ────── Change tracking control (same API as Schema) ──────\n pauseTracking(): void { this[$changes].pause(); }\n resumeTracking(): void { this[$changes].resume(); }\n untracked<T>(fn: () => T): T { return this[$changes].untracked(fn); }\n get isTrackingPaused(): boolean { return this[$changes].paused; }\n\n protected setIndex(index: number, key: K) {\n this.journal.setIndex(index, key);\n }\n\n protected getIndex(index: number) {\n return this.journal.keyOf(index);\n }\n\n [$getByIndex](index: number): V | undefined {\n const key = this.journal.keyOf(index);\n return key !== undefined ? this.$items.get(key) : undefined;\n }\n\n [$deleteByIndex](index: number): void {\n const key = this.journal.keyOf(index);\n if (key !== undefined) {\n this.$items.delete(key);\n this.journal.keyByIndex.delete(index);\n }\n }\n\n protected [$onEncodeEnd]() {\n this.journal.cleanupAfterEncode();\n }\n\n // ─── Streamable interface (Encoder priority / broadcast pass) ──────\n\n _dropView(viewId: number): void {\n streamDropView(this, viewId);\n }\n\n _unregister(): void {\n // no-op — `Root.unregisterStream` handles the Set removal.\n }\n\n toJSON() {\n const map: any = {};\n\n this.forEach((value: any, key) => {\n map[key] = (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value;\n });\n\n return map;\n }\n\n //\n // Decoding utilities\n //\n // @ts-ignore\n clone(isDecoding?: boolean): MapSchema<V> {\n let cloned: MapSchema<V>;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new MapSchema(), this);\n\n } else {\n // server-side\n cloned = new MapSchema();\n\n this.forEach((value: any, key) => {\n if (value[$changes]) {\n cloned.set(key, value['clone']());\n } else {\n cloned.set(key, value);\n }\n })\n\n }\n\n return cloned;\n }\n\n}\n\nregisterType(\"map\", { constructor: MapSchema });\n","import { $changes, $childType, $decoder, $deleteByIndex, $encoder, $filter, $getByIndex, $onEncodeEnd, $refId } from \"../symbols.js\";\nimport { ChangeTree, installUntrackedChangeTree, type IRef } from \"../../encoder/ChangeTree.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport { Collection } from \"../HelperTypes.js\";\nimport { CollectionKind, decodeKeyValueOperation } from \"../../decoder/DecodeOperation.js\";\nimport { encodeIndexedEntry } from \"../../encoder/EncodeOperation.js\";\nimport {\n createStreamableState,\n streamDropView,\n streamRouteAdd,\n streamRouteRemove,\n type StreamableState,\n} from \"../../encoder/streaming.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport type { Schema } from \"../../Schema.js\";\n\ntype K = number; // TODO: allow to specify K generic on MapSchema.\n\nexport class CollectionSchema<V=any> implements Collection<K, V>, IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected [$childType]: string | typeof Schema;\n\n /** The user-visible data, keyed directly by the wire-protocol index. */\n protected $items: Map<number, V> = new Map<number, V>();\n\n /** Snapshots of values that were deleted this tick (for filter visibility). */\n protected deletedItems: { [field: string]: V } = {};\n\n /** Monotonic counter for assigning indexes to newly-added items. */\n protected $refId: number = 0;\n\n /**\n * Streamable state — lazily allocated when the field is opted into\n * streaming via `t.collection(X).stream()`. See MapSchema for the\n * same pattern / rationale.\n */\n _stream?: StreamableState;\n\n get maxPerTick(): number {\n return this._stream?.maxPerTick ?? 32;\n }\n set maxPerTick(n: number) {\n (this._stream ??= createStreamableState()).maxPerTick = n;\n }\n\n get priority(): ((view: any, element: V) => number) | undefined {\n return this._stream?.priority as ((view: any, element: V) => number) | undefined;\n }\n set priority(fn: ((view: any, element: V) => number) | undefined) {\n (this._stream ??= createStreamableState()).priority = fn;\n }\n\n static [$encoder] = encodeIndexedEntry;\n static [$decoder] = decodeKeyValueOperation;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Collection;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: CollectionSchema, index: number, view: StateView) {\n return (\n !view ||\n typeof (ref[$childType]) === \"string\" ||\n view.isChangeTreeVisible((ref[$getByIndex](index) ?? ref.deletedItems[index])[$changes])\n );\n }\n\n static is(type: any) {\n return type['collection'] !== undefined;\n }\n\n constructor (initialValues?: Array<V>) {\n // $changes must be non-enumerable — see Schema.initialize.\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(this),\n enumerable: false,\n writable: true,\n });\n this[$childType] = undefined as any;\n\n if (initialValues) {\n initialValues.forEach((v) => this.add(v));\n }\n }\n\n /**\n * Decoder-side factory. Skips the tracking `ChangeTree` allocation;\n * `Object.create` also bypasses the class-field initializers, so we\n * replicate the minimum slot init here. Must stay in sync with the\n * class-field declarations above.\n */\n static initializeForDecoder<V = any>(): CollectionSchema<V> {\n const self: any = Object.create(CollectionSchema.prototype);\n self.$items = new Map<number, V>();\n self.deletedItems = {};\n self.$refId = 0;\n self[$childType] = undefined;\n installUntrackedChangeTree(self);\n return self;\n }\n\n add(value: V) {\n // assign the next wire-protocol index\n const index = this.$refId++;\n\n const changeTree = this[$changes];\n const isRef = (value[$changes]) !== undefined;\n if (isRef) {\n value[$changes].setParent(this, changeTree.root, index);\n }\n\n this.$items.set(index, value);\n\n if (changeTree.isStreamCollection) {\n if (changeTree.root !== undefined) {\n streamRouteAdd(this, changeTree.root, index);\n }\n } else {\n changeTree.change(index);\n }\n\n return index;\n }\n\n at(index: number): V | undefined {\n const key = Array.from(this.$items.keys())[index];\n return this.$items.get(key);\n }\n\n entries() {\n return this.$items.entries();\n }\n\n delete(item: V) {\n const entries = this.$items.entries();\n\n let index: K;\n let entry: IteratorResult<[number, V]>;\n while (entry = entries.next()) {\n if (entry.done) { break; }\n\n if (item === entry.value[1]) {\n index = entry.value[0];\n break;\n }\n }\n\n if (index === undefined) {\n return false;\n }\n\n const changeTree = this[$changes];\n if (changeTree.isStreamCollection) {\n const root = changeTree.root;\n const previousValue = this.$items.get(index);\n if (root !== undefined) {\n streamRouteRemove(this, root, (this as any)[$refId], index);\n }\n if ((previousValue as any)?.[$changes] !== undefined) {\n root?.remove((previousValue as any)[$changes]);\n }\n this.deletedItems[index] = previousValue as V;\n return this.$items.delete(index);\n }\n\n this.deletedItems[index] = changeTree.delete(index);\n\n return this.$items.delete(index);\n }\n\n clear() {\n const changeTree = this[$changes];\n\n // discard previous operations.\n changeTree.discard();\n\n // remove children references\n changeTree.forEachChild((childChangeTree, _) => {\n changeTree.root?.remove(childChangeTree);\n });\n\n // clear items\n this.$items.clear();\n\n changeTree.operation(OPERATION.CLEAR);\n }\n\n has (value: V): boolean {\n return Array.from(this.$items.values()).some((v) => v === value);\n }\n\n forEach(callbackfn: (value: V, key: K, collection: CollectionSchema<V>) => void) {\n this.$items.forEach((value, key, _) => callbackfn(value, key, this));\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n // ────── Change tracking control (same API as Schema) ──────\n pauseTracking(): void { this[$changes].pause(); }\n resumeTracking(): void { this[$changes].resume(); }\n untracked<T>(fn: () => T): T { return this[$changes].untracked(fn); }\n get isTrackingPaused(): boolean { return this[$changes].paused; }\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<V> {\n return this.$items.values();\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Decoder-side index hooks. CollectionSchema's \"key\" IS the wire index,\n // so these are identity operations. Kept for protocol symmetry with\n // MapSchema (decoder calls them polymorphically).\n // ────────────────────────────────────────────────────────────────────\n\n protected setIndex(_index: number, _key: number) {\n // no-op: indexes are identity\n }\n\n protected getIndex(index: number): number {\n return index;\n }\n\n [$getByIndex](index: number): any {\n return this.$items.get(index);\n }\n\n [$deleteByIndex](index: number): void {\n this.$items.delete(index);\n }\n\n protected [$onEncodeEnd]() {\n for (const key in this.deletedItems) { delete this.deletedItems[key]; }\n }\n\n // ─── Streamable interface (Encoder priority / broadcast pass) ──────\n\n _dropView(viewId: number): void {\n streamDropView(this, viewId);\n }\n\n _unregister(): void {\n // no-op — `Root.unregisterStream` handles the Set removal.\n }\n\n toArray() {\n return Array.from(this.$items.values());\n }\n\n toJSON() {\n const values: V[] = [];\n\n this.forEach((value: any, key: K) => {\n values.push(\n (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value\n );\n });\n\n return values;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): CollectionSchema<V> {\n let cloned: CollectionSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new CollectionSchema(), this);\n\n } else {\n // server-side\n cloned = new CollectionSchema();\n this.forEach((value: any) => {\n if (value[$changes]) {\n cloned.add(value['clone']());\n } else {\n cloned.add(value);\n }\n })\n }\n\n return cloned;\n }\n\n}\n\nregisterType(\"collection\", { constructor: CollectionSchema, });\n","import { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport { $changes, $childType, $decoder, $deleteByIndex, $encoder, $filter, $getByIndex, $onEncodeEnd, $refId } from \"../symbols.js\";\nimport { Collection } from \"../HelperTypes.js\";\nimport { ChangeTree, installUntrackedChangeTree, type IRef } from \"../../encoder/ChangeTree.js\";\nimport { encodeIndexedEntry } from \"../../encoder/EncodeOperation.js\";\nimport { CollectionKind, decodeKeyValueOperation } from \"../../decoder/DecodeOperation.js\";\nimport {\n createStreamableState,\n streamDropView,\n streamRouteAdd,\n streamRouteRemove,\n type StreamableState,\n} from \"../../encoder/streaming.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport type { Schema } from \"../../Schema.js\";\n\nexport class SetSchema<V=any> implements Collection<number, V>, IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected [$childType]: string | typeof Schema;\n\n /** The user-visible data, keyed directly by the wire-protocol index. */\n protected $items: Map<number, V> = new Map<number, V>();\n\n /** Snapshots of values that were deleted this tick (for filter visibility). */\n protected deletedItems: { [field: string]: V } = {};\n\n /** Monotonic counter for assigning indexes to newly-added items. */\n protected $refId: number = 0;\n\n /**\n * Streamable state — lazily allocated when the field is opted into\n * streaming via `t.set(X).stream()`. See MapSchema for the same\n * pattern / rationale.\n */\n _stream?: StreamableState;\n\n /** Max ADD ops emitted per tick per view. Ignored outside streaming mode. */\n get maxPerTick(): number {\n return this._stream?.maxPerTick ?? 32;\n }\n set maxPerTick(n: number) {\n (this._stream ??= createStreamableState()).maxPerTick = n;\n }\n\n /** Per-view priority callback — see StreamSchema / MapSchema. */\n get priority(): ((view: any, element: V) => number) | undefined {\n return this._stream?.priority as ((view: any, element: V) => number) | undefined;\n }\n set priority(fn: ((view: any, element: V) => number) | undefined) {\n (this._stream ??= createStreamableState()).priority = fn;\n }\n\n static [$encoder] = encodeIndexedEntry;\n static [$decoder] = decodeKeyValueOperation;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Set;\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: SetSchema, index: number, view: StateView) {\n return (\n !view ||\n typeof (ref[$childType]) === \"string\" ||\n view.isVisible((ref[$getByIndex](index) ?? ref.deletedItems[index])[$changes])\n );\n }\n\n static is(type: any) {\n return type['set'] !== undefined;\n }\n\n constructor (initialValues?: Array<V>) {\n // $changes must be non-enumerable to avoid deepStrictEqual recursing\n // into ChangeTree's circular refs.\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(this),\n enumerable: false,\n writable: true,\n });\n this[$childType] = undefined as any;\n\n if (initialValues) {\n initialValues.forEach((v) => this.add(v));\n }\n }\n\n /**\n * Decoder-side factory. Skips the tracking `ChangeTree` allocation;\n * `Object.create` also bypasses the class-field initializers, so we\n * replicate the minimum slot init here. Must stay in sync with the\n * class-field declarations above.\n */\n static initializeForDecoder<V = any>(): SetSchema<V> {\n const self: any = Object.create(SetSchema.prototype);\n self.$items = new Map<number, V>();\n self.deletedItems = {};\n self.$refId = 0;\n self[$childType] = undefined;\n installUntrackedChangeTree(self);\n return self;\n }\n\n add(value: V) {\n // immediatelly return false if value already added.\n if (this.has(value)) { return false; }\n\n // assign the next wire-protocol index\n const index = this.$refId++;\n\n const changeTree = this[$changes];\n if ((value[$changes]) !== undefined) {\n value[$changes].setParent(this, changeTree.root, index);\n }\n\n this.$items.set(index, value);\n\n // Streaming-mode ADD: route into per-view pending or broadcast\n // pending instead of the tree's recorder. See MapSchema.set for\n // the same branch / rationale.\n if (changeTree.isStreamCollection) {\n if (changeTree.root !== undefined) {\n streamRouteAdd(this, changeTree.root, index);\n }\n } else {\n changeTree.change(index, OPERATION.ADD);\n }\n return index;\n }\n\n entries () {\n return this.$items.entries();\n }\n\n delete(item: V) {\n const entries = this.$items.entries();\n\n let index: number;\n let entry: IteratorResult<[number, V]>;\n while (entry = entries.next()) {\n if (entry.done) { break; }\n\n if (item === entry.value[1]) {\n index = entry.value[0];\n break;\n }\n }\n\n if (index === undefined) {\n return false;\n }\n\n const changeTree = this[$changes];\n\n // Streaming-mode: route through stream's pending/sent bookkeeping\n // — silent drop if never sent to any view, force DELETE for views\n // that already received it. Mirror of MapSchema.delete's streaming\n // branch.\n if (changeTree.isStreamCollection) {\n const root = changeTree.root;\n const previousValue = this.$items.get(index);\n if (root !== undefined) {\n streamRouteRemove(this, root, (this as any)[$refId], index);\n }\n if ((previousValue as any)?.[$changes] !== undefined) {\n root?.remove((previousValue as any)[$changes]);\n }\n this.deletedItems[index] = previousValue as V;\n return this.$items.delete(index);\n }\n\n this.deletedItems[index] = changeTree.delete(index);\n\n return this.$items.delete(index);\n }\n\n clear() {\n const changeTree = this[$changes];\n\n // discard previous operations.\n changeTree.discard();\n\n // clear items\n this.$items.clear();\n\n changeTree.operation(OPERATION.CLEAR);\n }\n\n has (value: V): boolean {\n const values = this.$items.values();\n\n let has = false;\n let entry: IteratorResult<V>;\n\n while (entry = values.next()) {\n if (entry.done) { break; }\n if (value === entry.value) {\n has = true;\n break;\n }\n }\n\n return has;\n }\n\n forEach(callbackfn: (value: V, key: number, collection: SetSchema<V>) => void) {\n this.$items.forEach((value, key, _) => callbackfn(value, key, this));\n }\n\n values() {\n return this.$items.values();\n }\n\n get size () {\n return this.$items.size;\n }\n\n // ────── Change tracking control (same API as Schema) ──────\n pauseTracking(): void { this[$changes].pause(); }\n resumeTracking(): void { this[$changes].resume(); }\n untracked<T>(fn: () => T): T { return this[$changes].untracked(fn); }\n get isTrackingPaused(): boolean { return this[$changes].paused; }\n\n /** Iterator */\n [Symbol.iterator](): IterableIterator<V> {\n return this.$items.values();\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Decoder-side index hooks. SetSchema's \"key\" IS the wire index, so\n // these are identity operations. Kept for protocol symmetry with\n // MapSchema (decoder calls them polymorphically).\n // ────────────────────────────────────────────────────────────────────\n\n protected setIndex(_index: number, _key: number) {\n // no-op: indexes are identity\n }\n\n protected getIndex(index: number): number {\n return index;\n }\n\n [$getByIndex](index: number): any {\n return this.$items.get(index);\n }\n\n [$deleteByIndex](index: number): void {\n this.$items.delete(index);\n }\n\n protected [$onEncodeEnd]() {\n for (const key in this.deletedItems) { delete this.deletedItems[key]; }\n }\n\n // ─── Streamable interface (Encoder priority / broadcast pass) ──────\n\n _dropView(viewId: number): void {\n streamDropView(this, viewId);\n }\n\n _unregister(): void {\n // no-op — `Root.unregisterStream` handles the Set removal.\n }\n\n toArray() {\n return Array.from(this.$items.values());\n }\n\n toJSON() {\n const values: V[] = [];\n\n this.forEach((value: any, key: number) => {\n values.push(\n (typeof (value['toJSON']) === \"function\")\n ? value['toJSON']()\n : value\n );\n });\n\n return values;\n }\n\n //\n // Decoding utilities\n //\n clone(isDecoding?: boolean): SetSchema<V> {\n let cloned: SetSchema;\n\n if (isDecoding) {\n // client-side\n cloned = Object.assign(new SetSchema(), this);\n\n } else {\n // server-side\n cloned = new SetSchema();\n this.forEach((value: any) => {\n if (value[$changes]) {\n cloned.add(value['clone']());\n } else {\n cloned.add(value);\n }\n })\n }\n\n return cloned;\n }\n\n}\n\nregisterType(\"set\", { constructor: SetSchema });\n","import { OPERATION } from \"../../encoding/spec.js\";\nimport { registerType } from \"../registry.js\";\nimport {\n $changes,\n $childType,\n $decoder,\n $deleteByIndex,\n $encoder,\n $filter,\n $getByIndex,\n $onEncodeEnd,\n $refId,\n} from \"../symbols.js\";\nimport { ChangeTree, installUntrackedChangeTree, type IRef } from \"../../encoder/ChangeTree.js\";\nimport { encodeIndexedEntry } from \"../../encoder/EncodeOperation.js\";\nimport { CollectionKind, decodeKeyValueOperation } from \"../../decoder/DecodeOperation.js\";\nimport {\n createStreamableState,\n streamDropView,\n streamRouteAdd,\n streamRouteClear,\n streamRouteRemove,\n type StreamableState,\n} from \"../../encoder/streaming.js\";\nimport type { StateView } from \"../../encoder/StateView.js\";\nimport type { Schema } from \"../../Schema.js\";\n\n/**\n * `t.stream(Entity)` — priority-batched collection of Schema instances.\n *\n * Designed for ECS-style use cases where many entities spawn/despawn each\n * tick and the full set won't fit in one encode budget. Adds are queued\n * per-client and drained in priority order (callback on StateView) up to\n * `maxPerTick` per encode pass. Field mutations on already-sent elements\n * propagate through the normal reliable channel without consuming the\n * per-tick budget. Chain `.static()` on the field builder to suppress\n * post-add mutation tracking entirely.\n */\nexport class StreamSchema<V = any> implements IRef {\n [$changes]: ChangeTree;\n [$refId]?: number;\n\n protected [$childType]: string | typeof Schema;\n\n /**\n * Wire-keyed storage: `position → element`. Position is a monotonic\n * counter assigned by `add()` — stable identity even when elements\n * are removed, so pending/sent view state can keep using the same\n * keys across ticks. Map (not Array) so `$items.keys()` / `.values()`\n * skip removed positions without a sparse-slot check.\n */\n protected $items: Map<number, V> = new Map();\n\n /** Monotonic position counter. Incremented on every `add()`. */\n protected $nextPosition: number = 0;\n\n /** Reverse lookup for O(1) `remove(el)`. */\n protected _itemIndex: Map<V, number> = new Map();\n\n /**\n * Streamable state — holds per-view and broadcast bookkeeping. Lazily\n * allocated when the stream is attached to a Root (or when the user\n * touches `maxPerTick`). `undefined` on detached streams so\n * construction is cheap.\n */\n _stream?: StreamableState;\n\n /** Max element ADDs emitted per encode tick (per view, or broadcast). */\n get maxPerTick(): number {\n return this._stream?.maxPerTick ?? 32;\n }\n set maxPerTick(n: number) {\n (this._stream ??= createStreamableState()).maxPerTick = n;\n }\n\n /**\n * Per-view priority callback. Initialized from the schema declaration\n * (`.priority(fn)` or `@type({ stream, priority })`); assigning here\n * overrides the class-level default for this instance. Only fires\n * during `encodeView` — broadcast mode drains FIFO.\n */\n get priority(): ((view: any, element: V) => number) | undefined {\n return this._stream?.priority as ((view: any, element: V) => number) | undefined;\n }\n set priority(fn: ((view: any, element: V) => number) | undefined) {\n (this._stream ??= createStreamableState()).priority = fn;\n }\n\n /**\n * Brand used by Root / StateView to detect stream trees without\n * importing this class (avoids circular deps). The `isStreamCollection`\n * ChangeTree flag (set via `inheritedFlags`) is the preferred runtime\n * check — this brand is kept for back-compat.\n */\n static readonly $isStream: true = true;\n\n static [$encoder] = encodeIndexedEntry;\n static [$decoder] = decodeKeyValueOperation;\n /** Integer tag read by `decodeKeyValueOperation` — see `CollectionKind`. */\n static readonly COLLECTION_KIND = CollectionKind.Stream;\n\n /**\n * Element-level visibility. Identical to SetSchema's filter: stream\n * elements are always per-view, the filter just defers to the view's\n * per-tree visibility bitmap.\n */\n static [$filter](ref: StreamSchema, index: number, view: StateView) {\n if (!view) return true;\n const value = (ref as any)[$getByIndex](index);\n if (value === undefined) return false;\n return view.isVisible(value[$changes]);\n }\n\n static is(type: any): boolean {\n return type && type['stream'] !== undefined;\n }\n\n constructor() {\n Object.defineProperty(this, $changes, {\n value: new ChangeTree(this),\n enumerable: false,\n writable: true,\n });\n this[$childType] = undefined;\n // `isFiltered` / `isStreamCollection` are set via `inheritedFlags`\n // when this stream is attached to a parent field — no constructor-\n // time init needed (the stream tree is inert until assignment).\n }\n\n /**\n * Decoder-side factory. Skips the tracking `ChangeTree` allocation;\n * `Object.create` also bypasses the class-field initializers, so we\n * replicate the minimum slot init here. Must stay in sync with the\n * class-field declarations above.\n */\n static initializeForDecoder<V = any>(): StreamSchema<V> {\n const self: any = Object.create(StreamSchema.prototype);\n self.$items = new Map<number, V>();\n self.$nextPosition = 0;\n self._itemIndex = new Map();\n self[$childType] = undefined;\n installUntrackedChangeTree(self);\n return self;\n }\n\n /**\n * Append an element to the stream. Returns the assigned position,\n * or -1 if the element was already in the stream.\n */\n add(value: V): number {\n if (this._itemIndex.has(value)) return -1;\n\n const position = this.$nextPosition++;\n this.$items.set(position, value);\n this._itemIndex.set(value, position);\n\n const tree = this[$changes];\n const root = tree.root;\n\n // Attach element as a child — assigns $refId and wires the parent\n // chain so the element's own ChangeTree participates in encoding.\n if (value[$changes] !== undefined) {\n value[$changes].setParent(this, root, position);\n }\n\n if (root !== undefined) streamRouteAdd(this, root, position);\n return position;\n }\n\n /**\n * Remove an element by reference. If the element was pending (never sent\n * to a view), the pending entry is dropped silently. If already sent,\n * a DELETE op is forced on next `encodeView` for that view.\n */\n remove(value: V): boolean {\n const position = this._itemIndex.get(value);\n if (position === undefined) return false;\n\n this._itemIndex.delete(value);\n this.$items.delete(position);\n\n const root = this[$changes].root;\n if (root !== undefined) {\n streamRouteRemove(this, root, (this as any)[$refId], position);\n if (value[$changes] !== undefined) {\n root.remove((value as any)[$changes]);\n }\n }\n\n return true;\n }\n\n has(value: V): boolean {\n return this._itemIndex.has(value);\n }\n\n /** Remove every element; queue DELETE wire ops for already-sent items. */\n clear(): void {\n const root = this[$changes].root;\n if (root !== undefined) {\n streamRouteClear(this, root, (this as any)[$refId]);\n for (const el of this.$items.values()) {\n if (el[$changes] !== undefined) {\n root.remove((el as any)[$changes]);\n }\n }\n }\n this.$items.clear();\n this._itemIndex.clear();\n }\n\n forEach(callback: (value: V, index: number, collection: StreamSchema<V>) => void): void {\n for (const [index, value] of this.$items) callback(value, index, this);\n }\n\n values(): IterableIterator<V> {\n return this.$items.values();\n }\n\n /**\n * Iterate `[position, value]` pairs in insertion order. Used by\n * `setParent` recursion when the stream is reassigned to a new parent.\n */\n entries(): IterableIterator<[number, V]> {\n return this.$items.entries();\n }\n\n [Symbol.iterator](): IterableIterator<V> {\n return this.$items.values();\n }\n\n /** Live element count. */\n get size(): number {\n return this.$items.size;\n }\n\n /** Alias for `size`. */\n get length(): number {\n return this.$items.size;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Decoder / encoder plumbing — same shape as SetSchema so\n // {encode,decode}KeyValueOperation can route uniformly. StreamSchema\n // keys are identity (wire index === position), so `setIndex`/`getIndex`\n // are no-ops / identity like SetSchema.\n // ────────────────────────────────────────────────────────────────────\n\n protected setIndex(_index: number, _key: number): void {\n // no-op: indexes are identity\n }\n\n protected getIndex(index: number): number {\n return index;\n }\n\n [$getByIndex](index: number): V {\n return this.$items.get(index) as V;\n }\n\n [$deleteByIndex](index: number): void {\n const value = this.$items.get(index);\n if (value !== undefined) {\n this._itemIndex.delete(value);\n this.$items.delete(index);\n }\n }\n\n protected [$onEncodeEnd](): void {\n // No per-tick cleanup: pending/sent state spans encode ticks by design.\n }\n\n toArray(): V[] {\n return Array.from(this.$items.values());\n }\n\n toJSON(): any[] {\n const out: any[] = [];\n this.forEach((v: any) => {\n out.push(typeof v?.toJSON === \"function\" ? v.toJSON() : v);\n });\n return out;\n }\n\n clone(isDecoding?: boolean): StreamSchema<V> {\n if (isDecoding) {\n const cloned = Object.assign(new StreamSchema<V>(), this);\n return cloned;\n }\n const cloned = new StreamSchema<V>();\n cloned.maxPerTick = this.maxPerTick;\n this.forEach((v: any) => {\n cloned.add(typeof v?.clone === \"function\" ? v.clone() : v);\n });\n return cloned;\n }\n\n // ─── Streamable interface (Encoder priority / broadcast pass) ──────\n\n _dropView(viewId: number): void {\n streamDropView(this, viewId);\n }\n\n /** Called by Root.remove when the stream's refcount hits zero. */\n _unregister(): void {\n // no-op — `Root.unregisterStream` handles the Set removal.\n }\n}\n\nregisterType(\"stream\", { constructor: StreamSchema });\n","import type { ArraySchema } from \"./custom/ArraySchema.js\";\nimport type { MapSchema } from \"./custom/MapSchema.js\";\nimport type { SetSchema } from \"./custom/SetSchema.js\";\nimport type { CollectionSchema } from \"./custom/CollectionSchema.js\";\nimport type { StreamSchema } from \"./custom/StreamSchema.js\";\nimport type { Schema } from \"../Schema.js\";\nimport type { DefinitionType, RawPrimitiveType } from \"../annotations.js\";\nimport type { InferValueType, Constructor } from \"./HelperTypes.js\";\nimport { $builder } from \"./symbols.js\";\nimport { ARRAY_STREAM_NOT_SUPPORTED } from \"../encoder/streaming.js\";\n\ntype CollectionKind = \"array\" | \"map\" | \"set\" | \"collection\";\n\n/**\n * Internal record produced by FieldBuilder#toDefinition() and consumed by schema().\n */\nexport interface BuilderDefinition {\n type: DefinitionType;\n default?: any;\n hasDefault: boolean;\n view?: number; // tag value; undefined = no view\n owned?: boolean;\n unreliable?: boolean;\n transient?: boolean;\n deprecated?: boolean;\n deprecatedThrows?: boolean;\n static?: boolean;\n stream?: boolean;\n optional?: boolean;\n /** Declaration-scope priority callback for `.stream()` fields. */\n streamPriority?: (view: any, element: any) => number;\n}\n\n/**\n * Type-function that infers the instance value for a builder.\n */\nexport type BuilderOf<T> = FieldBuilder<T>;\n\n/**\n * Chainable field builder. Instances are produced by `t.*()` factories.\n *\n * Generics:\n * - `T` is the runtime/JS type of the field (e.g. `number`, `string`,\n * `ArraySchema<Item>`). `.optional()` widens it to `T | undefined`\n * so the inferred instance/toJSON shapes reflect absence.\n * - `HasDefault` is a compile-time flag that the field carries a\n * construction-time default — either an explicit `.default(v)` or an\n * auto-default from a collection factory (`t.array`, `t.map`, …) or a\n * Schema ref whose `initialize` takes zero args.\n * - `IsOptional` is a compile-time brand for `.optional()`. Both\n * `HasDefault` and `IsOptional` make the field omittable in\n * `BuilderInitProps<T>`. A separate brand (rather than reading\n * `undefined extends V`) sidesteps a TypeScript quirk where\n * class-generic-inferred `V` resolves `undefined extends V` as `true`\n * even for non-undefined types.\n *\n * schema() reads the internal configuration via `toDefinition()` and wires\n * up metadata through the existing pipeline.\n */\nexport class FieldBuilder<\n T = unknown,\n HasDefault extends boolean = false,\n IsOptional extends boolean = false,\n> {\n readonly [$builder]: true = true;\n\n // Internal configuration. Public so schema() and tests can read it, but not\n // meant to be mutated by users directly.\n _type: DefinitionType;\n _default: any = undefined;\n _hasDefault = false;\n _view: number | undefined = undefined;\n _owned = false;\n _unreliable = false;\n _transient = false;\n _deprecated = false;\n _deprecatedThrows = true;\n _static = false;\n _stream = false;\n _optional = false;\n _streamPriority: ((view: any, element: any) => number) | undefined = undefined;\n\n constructor(type: DefinitionType) {\n this._type = type;\n }\n\n /** Provide a default value for this field. */\n default(value: T): FieldBuilder<T, true, IsOptional> {\n this._default = value;\n this._hasDefault = true;\n return this as unknown as FieldBuilder<T, true, IsOptional>;\n }\n\n /** Tag this field with a view tag (DEFAULT_VIEW_TAG when called without arg). */\n view(tag?: number): this {\n // -1 is DEFAULT_VIEW_TAG; kept numeric here to avoid a circular import.\n this._view = tag ?? -1;\n return this;\n }\n\n /** Mark this field as owned (encoder-side ownership filtering). */\n owned(): this {\n this._owned = true;\n return this;\n }\n\n /**\n * Mark this field as unreliable — tick patches emit it on the unreliable\n * transport channel. Still persisted to full-sync snapshots unless also\n * tagged with `.transient()`.\n */\n unreliable(): this {\n this._unreliable = true;\n return this;\n }\n\n /**\n * Mark this field as transient — NOT persisted to full-sync snapshots\n * (`encodeAll` / `encodeAllView`). Late-joining clients see the field\n * only after its next mutation is emitted on a tick patch. Orthogonal\n * to `.unreliable()`.\n */\n transient(): this {\n this._transient = true;\n return this;\n }\n\n /**\n * Mark this field as static.\n * - Primitive / Schema fields: synchronized once, skips change tracking.\n * - Stream fields (`t.stream(X).static()`): child elements are frozen\n * after add — post-add field mutations on elements become no-ops.\n */\n static(): this {\n this._static = true;\n return this;\n }\n\n /**\n * Opt a collection field into priority-batched streaming delivery —\n * ADDs drain at most `maxPerTick` per tick per view (or per broadcast\n * tick without a view). Applies to `t.map(X)` / `t.set(X)` /\n * `t.collection(X)`. Redundant on `t.stream(X)` (the factory already\n * sets this flag).\n *\n * **Not supported on `t.array(X)`.** Array positional operations\n * (`splice`, `unshift`, `reverse`) shift every subsequent index —\n * holding some ADDs back for a later tick while indexes mutate\n * underneath would produce a decoder-side state that doesn't match\n * the server. Use `t.stream(X)` (stable monotonic positions) or\n * `t.map(X).stream()` (keys never shift) instead.\n */\n stream(): this {\n const t = this._type as any;\n if (t && typeof t === \"object\" && t.array !== undefined) {\n throw new Error(ARRAY_STREAM_NOT_SUPPORTED);\n }\n this._stream = true;\n return this;\n }\n\n /**\n * Attach a priority callback for per-view `encodeView` delivery. The\n * callback receives the client's StateView and the candidate element;\n * higher return values emit first. Does nothing in broadcast mode\n * (shared `encode()` drains FIFO). Only meaningful on stream fields.\n *\n * ```ts\n * t.stream(Enemy).priority((view, enemy) =>\n * -dist2(view.anchor, enemy)\n * )\n * ```\n */\n priority<V = any>(fn: (view: any, element: V) => number): this {\n this._streamPriority = fn as (view: any, element: any) => number;\n return this;\n }\n\n /** Mark this field as deprecated. Pass `false` to silence the access error. */\n deprecated(throws = true): this {\n this._deprecated = true;\n this._deprecatedThrows = throws;\n return this;\n }\n\n /**\n * Mark this field as optional — inferred instance type becomes\n * `T | undefined` and the property becomes omittable in initialization\n * props. Skips the auto-instantiation of collection / Schema-ref\n * defaults, so the field starts as `undefined` at runtime.\n */\n optional(): FieldBuilder<T | undefined, HasDefault, true> {\n this._optional = true;\n return this as unknown as FieldBuilder<T | undefined, HasDefault, true>;\n }\n\n toDefinition(): BuilderDefinition {\n return {\n type: this._type,\n default: this._default,\n hasDefault: this._hasDefault,\n view: this._view,\n owned: this._owned,\n unreliable: this._unreliable,\n transient: this._transient,\n deprecated: this._deprecated,\n deprecatedThrows: this._deprecatedThrows,\n static: this._static,\n stream: this._stream,\n optional: this._optional,\n streamPriority: this._streamPriority,\n };\n }\n}\n\nexport function isBuilder(value: any): value is FieldBuilder<any> {\n return value != null && value[$builder] === true;\n}\n\n// ---------------------------------------------------------------------------\n// Factory helpers\n// ---------------------------------------------------------------------------\n\nfunction primitive<T>(name: RawPrimitiveType): () => FieldBuilder<T> {\n return () => new FieldBuilder<T>(name);\n}\n\n// Accepts a Schema class, a primitive string, or another FieldBuilder as a child type.\nexport type ChildType =\n | RawPrimitiveType\n | Constructor<Schema>\n | FieldBuilder<any>;\n\nfunction resolveChild(child: ChildType): DefinitionType {\n if (isBuilder(child)) {\n return child._type;\n }\n return child as DefinitionType;\n}\n\n// ---------------------------------------------------------------------------\n// t namespace\n// ---------------------------------------------------------------------------\n\n// Overloaded factories for collections. Implementation lives in a single function;\n// overloads narrow the return type for Schema/primitive/builder children.\n// All collection factories tag `HasDefault = true` because schema() auto-\n// instantiates an empty collection when no explicit default is given.\ninterface ArrayFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<ArraySchema<InstanceType<C>>, true, false>;\n <P extends RawPrimitiveType>(child: P): FieldBuilder<ArraySchema<InferValueType<P>>, true, false>;\n <V>(child: FieldBuilder<V>): FieldBuilder<ArraySchema<V>, true, false>;\n}\ninterface MapFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<MapSchema<InstanceType<C>>, true, false>;\n <P extends RawPrimitiveType>(child: P): FieldBuilder<MapSchema<InferValueType<P>>, true, false>;\n <V>(child: FieldBuilder<V>): FieldBuilder<MapSchema<V>, true, false>;\n}\ninterface SetFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<SetSchema<InstanceType<C>>, true, false>;\n <P extends RawPrimitiveType>(child: P): FieldBuilder<SetSchema<InferValueType<P>>, true, false>;\n <V>(child: FieldBuilder<V>): FieldBuilder<SetSchema<V>, true, false>;\n}\ninterface CollectionFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<CollectionSchema<InstanceType<C>>, true, false>;\n <P extends RawPrimitiveType>(child: P): FieldBuilder<CollectionSchema<InferValueType<P>>, true, false>;\n <V>(child: FieldBuilder<V>): FieldBuilder<CollectionSchema<V>, true, false>;\n}\n// t.stream(Entity) — priority-batched collection of Schema instances.\n// Element type is restricted to Schema subclasses (no primitives) because\n// priority batching relies on stable refIds, which primitives don't carry.\ninterface StreamFactory {\n <C extends Constructor<Schema>>(child: C): FieldBuilder<StreamSchema<InstanceType<C>>, true, false>;\n}\n\nconst arrayFactory: ArrayFactory = ((child: ChildType) =>\n new FieldBuilder({ array: resolveChild(child) } as DefinitionType)) as ArrayFactory;\nconst mapFactory: MapFactory = ((child: ChildType) =>\n new FieldBuilder({ map: resolveChild(child) } as DefinitionType)) as MapFactory;\nconst setFactory: SetFactory = ((child: ChildType) =>\n new FieldBuilder({ set: resolveChild(child) } as DefinitionType)) as SetFactory;\nconst collectionFactory: CollectionFactory = ((child: ChildType) =>\n new FieldBuilder({ collection: resolveChild(child) } as DefinitionType)) as CollectionFactory;\nconst streamFactory: StreamFactory = ((child: ChildType) => {\n const b = new FieldBuilder({ stream: resolveChild(child) } as DefinitionType);\n b._stream = true;\n return b;\n}) as StreamFactory;\n\n// Compile-time: does this Schema subclass need arguments at construction?\n// A zero-arg or absent `initialize(...)` means schema() will auto-default the\n// field to `new X()`, so `HasDefault = true`. A non-zero-arg initialize means\n// the user has to provide the ref explicitly.\ntype RefHasDefault<C> =\n C extends { prototype: { initialize(...args: infer P): any } }\n ? (P extends readonly [] ? true : false)\n : true;\n\ninterface RefFactory {\n <C extends Constructor<Schema>>(ctor: C): FieldBuilder<InstanceType<C>, RefHasDefault<C>, false>;\n}\n\nconst refFactory: RefFactory = (<C extends Constructor<Schema>>(ctor: C) =>\n new FieldBuilder<InstanceType<C>>(ctor as unknown as DefinitionType)) as RefFactory;\n\nexport const t = Object.freeze({\n // Primitives\n string: primitive<string>(\"string\"),\n number: primitive<number>(\"number\"),\n boolean: primitive<boolean>(\"boolean\"),\n int8: primitive<number>(\"int8\"),\n uint8: primitive<number>(\"uint8\"),\n int16: primitive<number>(\"int16\"),\n uint16: primitive<number>(\"uint16\"),\n int32: primitive<number>(\"int32\"),\n uint32: primitive<number>(\"uint32\"),\n int64: primitive<number>(\"int64\"),\n uint64: primitive<number>(\"uint64\"),\n float32: primitive<number>(\"float32\"),\n float64: primitive<number>(\"float64\"),\n bigint64: primitive<bigint>(\"bigint64\"),\n biguint64: primitive<bigint>(\"biguint64\"),\n\n /** Reference to a Schema subtype. `t.array(Item)` usually reads better, but this is available when a plain ref is needed. */\n ref: refFactory,\n array: arrayFactory,\n map: mapFactory,\n set: setFactory,\n collection: collectionFactory,\n stream: streamFactory,\n});\n","import \"./symbol.shim.js\";\nimport { Schema } from './Schema.js';\nimport { ArraySchema } from './types/custom/ArraySchema.js';\nimport { MapSchema } from './types/custom/MapSchema.js';\nimport { getNormalizedType, Metadata, resolveFieldType } from \"./Metadata.js\";\nimport { $changes, $childType, $descriptors, $encoders, $numFields, $track, $values } from \"./types/symbols.js\";\nimport { encode } from \"./encoding/encode.js\";\nimport { TypeDefinition, getType } from \"./types/registry.js\";\nimport { OPERATION } from \"./encoding/spec.js\";\nimport { TypeContext } from \"./types/TypeContext.js\";\nimport { assertInstanceType, assertType, EncodeSchemaError } from \"./encoding/assert.js\";\nimport type { InferValueType, InferSchemaInstanceType, AssignableProps, BuilderInitProps, IsNever } from \"./types/HelperTypes.js\";\nimport { CollectionSchema } from \"./types/custom/CollectionSchema.js\";\nimport { SetSchema } from \"./types/custom/SetSchema.js\";\nimport { StreamSchema } from \"./types/custom/StreamSchema.js\";\nimport { FieldBuilder, isBuilder } from \"./types/builder.js\";\n\nexport type RawPrimitiveType = \"string\" |\n \"number\" |\n \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"float32\" |\n \"float64\" |\n \"bigint64\" |\n \"biguint64\";\n\nexport type PrimitiveType = RawPrimitiveType | typeof Schema | object;\n\n// TODO: infer \"default\" value type correctly.\nexport type DefinitionType<T extends PrimitiveType = PrimitiveType> = T\n | T[]\n | { type: T, default?: InferValueType<T>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { array: T, default?: ArraySchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { map: T, default?: MapSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { collection: T, default?: CollectionSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { set: T, default?: SetSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean }\n | { stream: T, default?: StreamSchema<InferValueType<T>>, view?: boolean | number, sync?: boolean, owned?: boolean, priority?: (view: any, element: InferValueType<T>) => number };\n\nexport type Definition = { [field: string]: DefinitionType };\n\nexport interface TypeOptions {\n manual?: boolean,\n}\n\nexport const DEFAULT_VIEW_TAG = -1;\n\nexport function entity(constructor: any): any {\n TypeContext.register(constructor as typeof Schema);\n return constructor;\n}\n\n/**\n * [See documentation](https://docs.colyseus.io/state/schema/)\n *\n * Annotate a Schema property to be serializeable.\n * \\@type()'d fields are automatically flagged as \"dirty\" for the next patch.\n *\n * @example Standard usage, with automatic change tracking.\n * ```\n * \\@type(\"string\") propertyName: string;\n * ```\n *\n * @example You can provide the \"manual\" option if you'd like to manually control your patches via .setDirty().\n * ```\n * \\@type(\"string\", { manual: true })\n * ```\n */\n// export function type(type: DefinitionType, options?: TypeOptions) {\n// return function ({ get, set }, context: ClassAccessorDecoratorContext): ClassAccessorDecoratorResult<Schema, any> {\n// if (context.kind !== \"accessor\") {\n// throw new Error(\"@type() is only supported for class accessor properties\");\n// }\n\n// const field = context.name.toString();\n\n// //\n// // detect index for this field, considering inheritance\n// //\n// const parent = Object.getPrototypeOf(context.metadata);\n// let fieldIndex: number = context.metadata[$numFields] // current structure already has fields defined\n// ?? (parent && parent[$numFields]) // parent structure has fields defined\n// ?? -1; // no fields defined\n// fieldIndex++;\n\n// if (\n// !parent && // the parent already initializes the `$changes` property\n// !Metadata.hasFields(context.metadata)\n// ) {\n// context.addInitializer(function (this: Ref) {\n// Object.defineProperty(this, $changes, {\n// value: new ChangeTree(this),\n// enumerable: false,\n// writable: true\n// });\n// });\n// }\n\n// Metadata.addField(context.metadata, fieldIndex, field, type);\n\n// const isArray = ArraySchema.is(type);\n// const isMap = !isArray && MapSchema.is(type);\n\n// // if (options && options.manual) {\n// // // do not declare getter/setter descriptor\n// // definition.descriptors[field] = {\n// // enumerable: true,\n// // configurable: true,\n// // writable: true,\n// // };\n// // return;\n// // }\n\n// return {\n// init(value) {\n// // TODO: may need to convert ArraySchema/MapSchema here\n\n// // do not flag change if value is undefined.\n// if (value !== undefined) {\n// this[$changes].change(fieldIndex);\n\n// // automaticallty transform Array into ArraySchema\n// if (isArray) {\n// if (!(value instanceof ArraySchema)) {\n// value = new ArraySchema(...value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // automaticallty transform Map into MapSchema\n// if (isMap) {\n// if (!(value instanceof MapSchema)) {\n// value = new MapSchema(value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // try to turn provided structure into a Proxy\n// if (value['$proxy'] === undefined) {\n// if (isMap) {\n// value = getMapProxy(value);\n// }\n// }\n\n// }\n\n// return value;\n// },\n\n// get() {\n// return get.call(this);\n// },\n\n// set(value: any) {\n// /**\n// * Create Proxy for array or map items\n// */\n\n// // skip if value is the same as cached.\n// if (value === get.call(this)) {\n// return;\n// }\n\n// if (\n// value !== undefined &&\n// value !== null\n// ) {\n// // automaticallty transform Array into ArraySchema\n// if (isArray) {\n// if (!(value instanceof ArraySchema)) {\n// value = new ArraySchema(...value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // automaticallty transform Map into MapSchema\n// if (isMap) {\n// if (!(value instanceof MapSchema)) {\n// value = new MapSchema(value);\n// }\n// value[$childType] = Object.values(type)[0];\n// }\n\n// // try to turn provided structure into a Proxy\n// if (value['$proxy'] === undefined) {\n// if (isMap) {\n// value = getMapProxy(value);\n// }\n// }\n\n// // flag the change for encoding.\n// this[$changes].change(fieldIndex);\n\n// //\n// // call setParent() recursively for this and its child\n// // structures.\n// //\n// if (value[$changes]) {\n// value[$changes].setParent(\n// this,\n// this[$changes].root,\n// Metadata.getIndex(context.metadata, field),\n// );\n// }\n\n// } else if (get.call(this)) {\n// //\n// // Setting a field to `null` or `undefined` will delete it.\n// //\n// this[$changes].delete(field);\n// }\n\n// set.call(this, value);\n// },\n// };\n// }\n// }\n\nexport function view<T> (tag: number = DEFAULT_VIEW_TAG) {\n return function(target: T, fieldName: string) {\n const metadata = Metadata.initialize(target.constructor as typeof Schema);\n Metadata.setTag(metadata, fieldName, tag);\n }\n}\n\nexport function owned<T> (target: T, field: string) {\n const metadata = Metadata.initialize(target.constructor as typeof Schema);\n metadata[metadata[field]].owned = true;\n}\n\nexport function unreliable<T> (target: T, field: string) {\n const metadata = Metadata.initialize(target.constructor as typeof Schema);\n Metadata.setUnreliable(metadata, field);\n}\n\n/**\n * @transient — mark a field as not persisted to snapshots (encodeAll /\n * encodeAllView). Transient fields are still emitted on per-tick patches\n * (reliable or unreliable), but late-joining clients won't see them until\n * the next mutation.\n *\n * Orthogonal to @unreliable: a field can be either, both, or neither.\n */\nexport function transient<T> (target: T, field: string) {\n const metadata = Metadata.initialize(target.constructor as typeof Schema);\n Metadata.setTransient(metadata, field);\n}\n\nexport function type (\n type: DefinitionType,\n options?: TypeOptions\n): PropertyDecorator {\n return function (target: typeof Schema, field: string) {\n const constructor = target.constructor as typeof Schema;\n\n if (!type) {\n throw new Error(`${constructor.name}: @type() reference provided for \"${field}\" is undefined. Make sure you don't have any circular dependencies.`);\n }\n\n // Normalize type (enum/collection/etc)\n type = getNormalizedType(type);\n\n // for inheritance support\n TypeContext.register(constructor);\n\n const parentClass = Object.getPrototypeOf(constructor);\n const parentMetadata = parentClass[Symbol.metadata];\n const metadata = Metadata.initialize(constructor);\n\n let fieldIndex: number = metadata[field];\n\n /**\n * skip if descriptor already exists for this field (`@deprecated()`)\n */\n if (metadata[fieldIndex] !== undefined) {\n if (metadata[fieldIndex].deprecated) {\n // do not create accessors for deprecated properties.\n return;\n\n } else if (metadata[fieldIndex].type !== undefined) {\n // trying to define same property multiple times across inheritance.\n // https://github.com/colyseus/colyseus-unity3d/issues/131#issuecomment-814308572\n try {\n throw new Error(`@colyseus/schema: Duplicate '${field}' definition on '${constructor.name}'.\\nCheck @type() annotation`);\n\n } catch (e) {\n const definitionAtLine = e.stack.split(\"\\n\")[4].trim();\n throw new Error(`${e.message} ${definitionAtLine}`);\n }\n }\n\n } else {\n //\n // detect index for this field, considering inheritance\n //\n fieldIndex = metadata[$numFields] // current structure already has fields defined\n ?? (parentMetadata && parentMetadata[$numFields]) // parent structure has fields defined\n ?? -1; // no fields defined\n fieldIndex++;\n }\n\n if (options && options.manual) {\n Metadata.addField(\n metadata,\n fieldIndex,\n field,\n type,\n {\n // do not declare getter/setter descriptor\n enumerable: true,\n configurable: true,\n writable: true,\n }\n );\n\n } else {\n const { complexTypeKlass, childType } = resolveFieldType(type);\n\n Metadata.addField(\n metadata,\n fieldIndex,\n field,\n type,\n getPropertyDescriptor(field, fieldIndex, childType, complexTypeKlass)\n );\n }\n\n // Install accessor descriptor on the prototype (once per class field).\n if (metadata[$descriptors][field]) {\n Object.defineProperty(target, field, metadata[$descriptors][field]);\n }\n\n // Pre-compute encoder function for primitive types.\n if (typeof type === \"string\") {\n if (!metadata[$encoders]) {\n Object.defineProperty(metadata, $encoders, {\n value: [],\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n metadata[$encoders][fieldIndex] = (encode as any)[type];\n }\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────\n// Per-field-shape specialized setters.\n//\n// Single shared closure used to handle all three shapes (primitive /\n// schema-ref / collection) in one body with many branches. V8's inliner\n// gave up on it because of the size + polymorphism. Splitting into three\n// dedicated factories yields smaller, monomorphic bodies that the JIT can\n// inline into hot setters like `position.x = 100`.\n// ────────────────────────────────────────────────────────────────────────\n\n/** typeof target per primitive type. Cached once, looked up O(1) at decoration. */\nconst PRIMITIVE_TYPEOF: Record<string, \"number\" | \"string\" | \"boolean\" | \"bigint\"> = {\n number: \"number\",\n int8: \"number\", uint8: \"number\",\n int16: \"number\", uint16: \"number\",\n int32: \"number\", uint32: \"number\",\n int64: \"number\", uint64: \"number\",\n float32: \"number\", float64: \"number\",\n bigint64: \"bigint\", biguint64: \"bigint\",\n string: \"string\",\n boolean: \"boolean\",\n};\n\nfunction makePrimitiveSetter(fieldName: string, fieldIndex: number, type: string) {\n const typeofTarget = PRIMITIVE_TYPEOF[type]; // undefined for custom types\n const allowNull = type === \"string\";\n const isBool = type === \"boolean\";\n return function (this: Schema, value: any) {\n const values = this[$values];\n const previousValue = values[fieldIndex];\n if (value === previousValue) return;\n\n if (value !== undefined && value !== null) {\n // Inlined assertType primitive check.\n if (\n !isBool &&\n typeofTarget !== undefined &&\n typeof value !== typeofTarget &&\n !(allowNull && value === null)\n ) {\n const ctorSuffix = (value && value.constructor) ? ` (${value.constructor.name})` : '';\n throw new EncodeSchemaError(\n `a '${typeofTarget}' was expected, but '${JSON.stringify(value)}'${ctorSuffix} was provided in ${this.constructor.name}#${fieldName}`\n );\n }\n (this.constructor as typeof Schema)[$track](this[$changes], fieldIndex, OPERATION.ADD);\n } else if (previousValue !== undefined && previousValue !== null) {\n this[$changes].delete(fieldIndex);\n }\n values[fieldIndex] = value;\n };\n}\n\nfunction makeSchemaRefSetter(fieldName: string, fieldIndex: number, type: typeof Schema) {\n return function (this: Schema, value: any) {\n const values = this[$values];\n const previousValue = values[fieldIndex];\n if (value === previousValue) return;\n\n if (value !== undefined && value !== null) {\n assertInstanceType(value, type, this, fieldName);\n\n const changeTree = this[$changes];\n const ctor = this.constructor as typeof Schema;\n\n if (previousValue !== undefined && previousValue !== null && previousValue[$changes]) {\n changeTree.root?.remove(previousValue[$changes]);\n ctor[$track](changeTree, fieldIndex, OPERATION.DELETE_AND_ADD);\n } else {\n ctor[$track](changeTree, fieldIndex, OPERATION.ADD);\n }\n\n // External Schema-like instances may not carry a ChangeTree.\n value[$changes]?.setParent(this, changeTree.root, fieldIndex);\n\n } else if (previousValue !== undefined && previousValue !== null) {\n this[$changes].delete(fieldIndex);\n }\n values[fieldIndex] = value;\n };\n}\n\nfunction makeCollectionSetter(\n _fieldName: string,\n fieldIndex: number,\n type: DefinitionType,\n complexTypeKlass: TypeDefinition,\n) {\n const isArrayKlass = complexTypeKlass.constructor === ArraySchema;\n const isMapKlass = complexTypeKlass.constructor === MapSchema;\n return function (this: Schema, value: any) {\n const values = this[$values];\n const previousValue = values[fieldIndex];\n if (value === previousValue) return;\n\n if (value !== undefined && value !== null) {\n // automatic Array → ArraySchema / Map → MapSchema conversion.\n if (isArrayKlass && !(value instanceof ArraySchema)) {\n value = new ArraySchema(...value);\n } else if (isMapKlass && !(value instanceof MapSchema)) {\n value = new MapSchema(value);\n }\n value[$childType] = type;\n\n const changeTree = this[$changes];\n const ctor = this.constructor as typeof Schema;\n\n if (previousValue !== undefined && previousValue !== null && previousValue[$changes]) {\n changeTree.root?.remove(previousValue[$changes]);\n ctor[$track](changeTree, fieldIndex, OPERATION.DELETE_AND_ADD);\n } else {\n ctor[$track](changeTree, fieldIndex, OPERATION.ADD);\n }\n\n value[$changes]?.setParent(this, changeTree.root, fieldIndex);\n\n } else if (previousValue !== undefined && previousValue !== null) {\n this[$changes].delete(fieldIndex);\n }\n values[fieldIndex] = value;\n };\n}\n\nexport function getPropertyDescriptor(\n fieldName: string,\n fieldIndex: number,\n type: DefinitionType,\n complexTypeKlass: TypeDefinition | false,\n) {\n let setter: (this: Schema, value: any) => void;\n if (complexTypeKlass) {\n setter = makeCollectionSetter(fieldName, fieldIndex, type, complexTypeKlass);\n } else if (typeof type === \"string\") {\n setter = makePrimitiveSetter(fieldName, fieldIndex, type);\n } else {\n setter = makeSchemaRefSetter(fieldName, fieldIndex, type as typeof Schema);\n }\n return {\n get: function (this: Schema) { return this[$values][fieldIndex]; },\n set: setter,\n enumerable: true,\n configurable: true,\n };\n}\n\n/**\n * `@deprecated()` flag a field as deprecated.\n * The previous `@type()` annotation should remain along with this one.\n */\n\nexport function deprecated(throws: boolean = true): PropertyDecorator {\n return function (klass: typeof Schema, field: string) {\n const metadata = Metadata.initialize(klass.constructor as typeof Schema);\n const fieldIndex = metadata[field];\n\n metadata[fieldIndex].deprecated = true;\n\n if (throws) {\n metadata[$descriptors] ??= {};\n metadata[$descriptors][field] = {\n get: function () { throw new Error(`${field} is deprecated.`); },\n set: function (this: Schema, _value: any) { /* throw new Error(`${field} is deprecated.`); */ },\n enumerable: false,\n configurable: true\n };\n // Override accessor on the prototype so deprecated throws at access.\n Object.defineProperty(klass, field, metadata[$descriptors][field]);\n }\n\n // flag metadata[field] as non-enumerable\n Object.defineProperty(metadata, fieldIndex, {\n value: metadata[fieldIndex],\n enumerable: false,\n configurable: true\n });\n }\n}\n\n// Helper type to extract InitProps from initialize method.\n// - Non-empty initialize params: use them directly.\n// - Zero-arg initialize: no args accepted (`never`) — user-supplied field\n// values would be dropped at runtime (parent's initialize is skipped\n// during child construction via the `new.target === klass` guard, and\n// own-field auto-assignment happens only inside initialize).\n// - No initialize at all: derive from fields map.\ntype ExtractInitProps<T> = T extends { initialize: (...args: infer P) => void }\n ? P extends readonly []\n ? never\n : P extends readonly [infer First]\n ? First extends object\n ? First\n : P\n : P\n : BuilderInitProps<T>;\n\n// Does the init-props shape have at least one required property?\ntype HasRequiredKeys<X> = {} extends X ? false : true;\n\n// Whether the constructor's init-props argument must be supplied.\n// Mirrors the cases inside ExtractInitProps: non-empty initialize params\n// are required; zero-arg initialize accepts nothing; no initialize\n// depends on whether the derived BuilderInitProps has any required keys.\ntype IsInitPropsRequired<T> = T extends { initialize: (...args: infer P) => void }\n ? P extends readonly []\n ? false\n : true\n : HasRequiredKeys<BuilderInitProps<T>>;\n\n// Whether T declares any non-empty `initialize` method. Used to tighten\n// the constructor signature: authors who write an explicit `initialize()`\n// with args opt into strict required args. Without an initialize the sig\n// also allows `[]` so the common `new X(); x.field = ...` pattern works.\ntype HasExplicitInit<T> = T extends { initialize: (...args: infer P) => void }\n ? P extends readonly [] ? false : true\n : false;\n\n/**\n * A `schema()` field definition accepts a FieldBuilder, a Schema subclass\n * (shorthand for `t.ref(Class)`), or a method (attached to the prototype).\n */\nexport type FieldsAndMethods = Record<string, FieldBuilder<any, boolean, boolean> | (new (...args: any[]) => Schema) | Function>;\n\nexport interface SchemaWithExtends<T, P extends typeof Schema> {\n extend: <T2 extends FieldsAndMethods = FieldsAndMethods>(\n fields: T2 & ThisType<InferSchemaInstanceType<T & T2>>,\n name?: string,\n ) => SchemaWithExtendsConstructor<T & T2, ExtractInitProps<T & T2>, P>;\n}\n\n/**\n * Get the type of the schema defined via `schema('Name', {...})` method.\n *\n * @example\n * const Entity = schema('Entity', {\n * x: t.number(),\n * y: t.number(),\n * });\n * type Entity = SchemaType<typeof Entity>;\n */\nexport type SchemaType<T extends {'~type': any}> = T['~type'];\n\nexport interface SchemaWithExtendsConstructor<\n T,\n InitProps,\n P extends typeof Schema\n> extends SchemaWithExtends<T, P> {\n '~type': InferSchemaInstanceType<T>;\n // Constructor signature:\n // - InitProps = never (zero-arg initialize): no args.\n // - InitProps is a tuple (multi-arg initialize): spread it.\n // - Explicit `initialize(arg)` with required args: strict [InitProps]\n // — the author opted into requiring them.\n // - No initialize, but required builder fields: allow `[]` or\n // `[InitProps]`. Preserves `new X(); x.field = ...` while still\n // flagging incomplete-object mistakes like `new X({ hp: 1 })`.\n // - Otherwise: optional single-arg.\n new (...args:\n [InitProps] extends [never] ? []\n : InitProps extends readonly any[] ? InitProps\n : HasExplicitInit<T> extends true ? [InitProps]\n : IsInitPropsRequired<T> extends true ? ([] | [InitProps])\n : [InitProps?]\n ): InferSchemaInstanceType<T> & InstanceType<P>;\n prototype: InferSchemaInstanceType<T> & InstanceType<P> & {\n initialize(...args: [InitProps] extends [never] ? [] : InitProps extends readonly any[] ? InitProps : [InitProps]): void;\n };\n}\n\n/**\n * Define a Schema class declaratively.\n *\n * @example\n * import { schema, t } from '@colyseus/schema';\n *\n * const Player = schema({\n * hp: t.uint8().default(100),\n * name: t.string().view(),\n * takeDamage(n: number) { this.hp -= n; },\n * }, 'Player');\n *\n * const Warrior = Player.extend({\n * weapon: t.string(),\n * }, 'Warrior');\n */\nexport function schema<\n T extends FieldsAndMethods,\n P extends typeof Schema = typeof Schema\n>(\n fieldsAndMethods: T & ThisType<InferSchemaInstanceType<T>>,\n name?: string,\n inherits: P = Schema as P,\n): SchemaWithExtendsConstructor<T, ExtractInitProps<T>, P> {\n if (fieldsAndMethods == null || typeof fieldsAndMethods !== \"object\") {\n throw new Error(`schema(): first argument must be a fields object (got ${typeof fieldsAndMethods}).`);\n }\n\n const fields: any = {};\n const methods: any = {};\n const defaultValues: any = {};\n const viewTagFields: { [field: string]: number } = {};\n const ownedFields: string[] = [];\n const unreliableFields: string[] = [];\n const transientFields: string[] = [];\n const deprecatedFields: { [field: string]: boolean } = {};\n const staticFields: string[] = [];\n const streamFields: string[] = [];\n const streamPriorityFields: { [field: string]: (view: any, element: any) => number } = {};\n const optionalFields: string[] = [];\n\n for (const fieldName in fieldsAndMethods) {\n const value: any = (fieldsAndMethods as any)[fieldName];\n\n if (isBuilder(value)) {\n const def = value.toDefinition();\n fields[fieldName] = getNormalizedType(def.type);\n\n if (def.view !== undefined) { viewTagFields[fieldName] = def.view; }\n if (def.owned) { ownedFields.push(fieldName); }\n if (def.unreliable) { unreliableFields.push(fieldName); }\n if (def.transient) { transientFields.push(fieldName); }\n if (def.deprecated) { deprecatedFields[fieldName] = def.deprecatedThrows; }\n if (def.static) { staticFields.push(fieldName); }\n if (def.stream) { streamFields.push(fieldName); }\n if (def.streamPriority !== undefined) { streamPriorityFields[fieldName] = def.streamPriority; }\n if (def.optional) { optionalFields.push(fieldName); }\n\n if (def.hasDefault) {\n defaultValues[fieldName] = def.default;\n } else if (!def.optional) {\n // Auto-instantiate collection/Schema defaults when none is provided.\n // `.optional()` opts out — field starts as undefined.\n const rawType: any = def.type;\n if (rawType && typeof rawType === \"object\") {\n if (rawType.array !== undefined) {\n defaultValues[fieldName] = new ArraySchema();\n } else if (rawType.map !== undefined) {\n defaultValues[fieldName] = new MapSchema();\n } else if (rawType.set !== undefined) {\n defaultValues[fieldName] = new SetSchema();\n } else if (rawType.collection !== undefined) {\n defaultValues[fieldName] = new CollectionSchema();\n } else if (rawType.stream !== undefined) {\n defaultValues[fieldName] = new StreamSchema();\n }\n } else if (typeof rawType === \"function\" && Schema.is(rawType)) {\n if (!rawType.prototype.initialize || rawType.prototype.initialize.length === 0) {\n defaultValues[fieldName] = new rawType();\n }\n }\n }\n\n } else if (typeof value === \"function\") {\n if (Schema.is(value)) {\n // Convenience: allow a bare Schema subclass (equivalent to `t.ref(Class)`).\n fields[fieldName] = getNormalizedType(value);\n if (!value.prototype.initialize || value.prototype.initialize.length === 0) {\n defaultValues[fieldName] = new value();\n }\n } else {\n methods[fieldName] = value;\n }\n\n } else {\n throw new Error(\n `schema(${name ? `'${name}'` : \"\"}): field '${fieldName}' must be a t.* builder, ` +\n `Schema subclass, or method (got ${typeof value}).`\n );\n }\n }\n\n const getDefaultValues = () => {\n const defaults: any = {};\n for (const fieldName in defaultValues) {\n const defaultValue = defaultValues[fieldName];\n if (defaultValue && typeof defaultValue.clone === \"function\") {\n defaults[fieldName] = defaultValue.clone();\n } else {\n defaults[fieldName] = defaultValue;\n }\n }\n return defaults;\n };\n\n const getParentProps = (props: any) => {\n const fieldNames = Object.keys(fields);\n const parentProps: any = {};\n for (const key in props) {\n if (!fieldNames.includes(key)) {\n parentProps[key] = props[key];\n }\n }\n return parentProps;\n };\n\n /** @codegen-ignore */\n const klass = Metadata.setFields<any>(class extends (inherits as any) {\n constructor(...args: any[]) {\n if (methods.initialize && typeof methods.initialize === \"function\") {\n super(Object.assign({}, getDefaultValues(), getParentProps(args[0] || {})));\n // Only call initialize() on the exact target class, not parents.\n if (new.target === klass) {\n methods.initialize.apply(this, args);\n }\n } else {\n super(Object.assign({}, getDefaultValues(), args[0] || {}));\n }\n }\n }, fields) as unknown as SchemaWithExtendsConstructor<T, ExtractInitProps<T>, P>;\n\n (klass as any)._getDefaultValues = getDefaultValues;\n\n Object.assign(klass.prototype, methods);\n\n for (const fieldName in viewTagFields) {\n view(viewTagFields[fieldName])(klass.prototype, fieldName);\n }\n for (const fieldName of ownedFields) {\n owned(klass.prototype, fieldName);\n }\n for (const fieldName of unreliableFields) {\n unreliable(klass.prototype, fieldName);\n }\n for (const fieldName of transientFields) {\n transient(klass.prototype, fieldName);\n }\n for (const fieldName in deprecatedFields) {\n deprecated(deprecatedFields[fieldName])(klass.prototype, fieldName);\n }\n\n if (staticFields.length > 0 || streamFields.length > 0) {\n const metadata = (klass as any)[Symbol.metadata] as Metadata;\n for (const fieldName of staticFields) {\n Metadata.setStatic(metadata, fieldName);\n }\n for (const fieldName of streamFields) {\n Metadata.setStream(metadata, fieldName);\n }\n for (const fieldName in streamPriorityFields) {\n Metadata.setStreamPriority(metadata, fieldName, streamPriorityFields[fieldName]);\n }\n }\n\n if (optionalFields.length > 0) {\n const metadata = (klass as any)[Symbol.metadata] as Metadata;\n for (const fieldName of optionalFields) {\n metadata[metadata[fieldName]].optional = true;\n }\n }\n\n if (name) {\n Object.defineProperty(klass, \"name\", { value: name });\n }\n\n (klass as any).extend = <T2 extends FieldsAndMethods = FieldsAndMethods>(\n childFields: T2,\n childName?: string,\n ) => schema<T2>(childFields, childName, klass as any);\n\n return klass;\n}\n","import type { Schema } from \"./Schema.js\";\nimport { OPERATION } from \"./encoding/spec.js\";\nimport { $changes, $refId } from \"./types/symbols.js\";\n\ninterface ChangeDump {\n ops: {\n ADD?: number;\n REMOVE?: number;\n REPLACE?: number;\n },\n refs: string[],\n}\n\nexport function getIndent(level: number) {\n return (new Array(level).fill(0)).map((_, i) =>\n (i === level - 1) ? `└─ ` : ` `\n ).join(\"\");\n}\n\nexport function dumpChanges(schema: Schema) {\n const $root = schema[$changes].root;\n\n const dump: ChangeDump = {\n ops: {},\n refs: []\n };\n\n // for (const refId in $root.changes) {\n let current = $root.changes.next;\n while (current) {\n const changeTree = current.changeTree;\n // skip if ChangeTree is undefined\n if (changeTree === undefined) {\n current = current.next;\n continue;\n }\n\n dump.refs.push(`refId#${changeTree.ref[$refId]}`);\n changeTree.forEach((index, op) => {\n if (index < 0 || !op) return;\n const opName = OPERATION[op];\n if (!dump.ops[opName as keyof ChangeDump['ops']]) { dump.ops[opName as keyof ChangeDump['ops']] = 0; }\n dump.ops[opName as keyof ChangeDump['ops']]++;\n });\n current = current.next;\n }\n\n return dump;\n}\n\nexport function getNextPowerOf2(number: number) {\n // If number is already a power of 2, return it\n if ((number & (number - 1)) === 0) {\n return number;\n }\n\n // Find the position of the most significant bit\n let msbPosition = 0;\n while (number > 0) {\n number >>= 1;\n msbPosition++;\n }\n\n // Return the next power of 2\n return 1 << msbPosition;\n}","import { OPERATION } from './encoding/spec.js';\nimport { DEFAULT_VIEW_TAG, type DefinitionType } from \"./annotations.js\";\n\nimport { AssignableProps, NonFunctionPropNames, ToJSON } from './types/HelperTypes.js';\n\nimport { ChangeTree, installUntrackedChangeTree, IRef, Ref } from './encoder/ChangeTree.js';\nimport { $changes, $decoder, $deleteByIndex, $encoder, $filter, $getByIndex, $numFields, $refId, $track, $values } from './types/symbols.js';\nimport { StateView } from './encoder/StateView.js';\n\nimport { encodeSchemaOperation } from './encoder/EncodeOperation.js';\nimport { decodeSchemaOperation } from './decoder/DecodeOperation.js';\n\nimport type { Decoder } from './decoder/Decoder.js';\nimport type { Metadata, MetadataField } from './Metadata.js';\nimport { getIndent } from './utils.js';\n\n/**\n * Schema encoder / decoder\n */\nexport class Schema<C = any> implements IRef {\n static [Symbol.metadata]: Metadata;\n static [$encoder] = encodeSchemaOperation;\n static [$decoder] = decodeSchemaOperation;\n\n [$refId]?: number;\n [$values]: any[];\n\n /**\n * Initialize change tracking on this instance.\n * Field accessor descriptors (getter/setter) live on the prototype,\n * installed once at class-definition time. Per-instance work is limited\n * to allocating a ChangeTree and a values array.\n */\n static initialize(instance: any) {\n // $changes MUST be non-enumerable: tests use assert.deepStrictEqual on\n // Schema instances (e.g. arrayOfPlayers.toArray()), which walks\n // enumerable own Symbol properties. ChangeTree has circular refs\n // (root → changeTrees → other ChangeTrees), so a visible $changes\n // would send deepStrictEqual into exponential recursion. Plain\n // assignment of a Symbol key would be enumerable: true — hence we\n // keep defineProperty here.\n Object.defineProperty(instance, $changes, {\n value: new ChangeTree(instance),\n enumerable: false,\n writable: true\n });\n instance[$values] = [];\n }\n\n /**\n * Decoder-side factory. Skips the user subclass ctor entirely —\n * decoder-built instances are passive mirrors of server state, so any\n * field initializer / ctor body work would be overwritten by the\n * decoded ADDs immediately after. Assignment order matches\n * {@link Schema.initialize} so V8 assigns the same hidden class\n * ($changes, then $values), keeping decode-path ICs monomorphic even\n * when tracked and untracked instances coexist.\n *\n * The `this:` constraint pins the return type to the concrete subclass\n * when called as `Player.initializeForDecoder()`, not the base Schema.\n */\n static initializeForDecoder<T extends Schema = Schema>(this: { prototype: T } & typeof Schema): T {\n const inst: any = Object.create(this.prototype);\n installUntrackedChangeTree(inst);\n inst[$values] = [];\n return inst;\n }\n\n /**\n * Check whether `type` describes a Schema *class* (a subclass\n * constructor carrying `Symbol.metadata`, as installed by `@type`).\n * Returns false for primitive type strings like `\"number\"`, descriptor\n * objects like `{ map: Player }`, and Schema *instances*.\n *\n * For the instance-level check — \"is this value a Schema instance?\" —\n * see {@link Schema.isSchema}.\n */\n static is(type: DefinitionType) {\n return typeof((type as typeof Schema)[Symbol.metadata]) === \"object\";\n }\n\n /**\n * Check if a value is an *instance* of Schema. Uses duck-typing on\n * `.assign` to work across multiple `@colyseus/schema` versions that\n * may be loaded in the same process (e.g. bundled server types vs.\n * client types in a p2p setup).\n *\n * For the class-level check — \"is this type a Schema subclass?\" —\n * see {@link Schema.is}.\n *\n * @param obj Value to check\n * @returns true if the value is a Schema instance\n */\n static isSchema(obj: any): obj is Schema {\n return typeof obj?.assign === \"function\";\n }\n\n /**\n * Track property changes. Exposed as an override point so downstream\n * tools (debuggers, transparent proxies, custom instrumentation) can\n * intercept per-field writes. Hot-path code in `annotations.ts` calls\n * `(this.constructor as typeof Schema)[$track](...)` rather than\n * `changeTree.change(...)` directly so any subclass override wins.\n */\n static [$track] (changeTree: ChangeTree, index: number, operation: OPERATION = OPERATION.ADD) {\n changeTree.change(index, operation);\n }\n\n /**\n * Determine if a property must be filtered.\n * - If returns false, the property is NOT going to be encoded.\n * - If returns true, the property is going to be encoded.\n *\n * Encoding with \"filters\" happens in two steps:\n * - First, the encoder iterates over all \"not owned\" properties and encodes them.\n * - Then, the encoder iterates over all \"owned\" properties per instance and encodes them.\n */\n static [$filter] (ref: Schema, index: number, view: StateView) {\n const metadata: Metadata = (ref.constructor as typeof Schema)[Symbol.metadata];\n const tag = metadata[index]?.tag;\n\n if (view === undefined) {\n // shared pass/encode: encode if doesn't have a tag\n return tag === undefined;\n\n } else if (tag === undefined) {\n // view pass: no tag\n return true;\n\n } else if (tag === DEFAULT_VIEW_TAG) {\n // view pass: default tag\n return view.isChangeTreeVisible(ref[$changes]);\n\n } else {\n // view pass: custom tag\n return view.hasTagOnTree(ref[$changes], tag);\n }\n }\n\n // allow inherited classes to have a constructor\n constructor(arg?: C) {\n Schema.initialize(this);\n if (arg) {\n Schema.assignProps(this, arg);\n }\n }\n\n /**\n * Assign properties to the instance.\n * @param props Properties to assign to the instance\n * @returns\n */\n public assign<T extends Partial<this>>(props: AssignableProps<T>,): this {\n Schema.assignProps(this, props);\n return this;\n }\n\n /**\n * Metadata-driven property assignment.\n * Reads tracked fields via property access (works with prototype accessors),\n * then copies any remaining own properties for non-tracked fields.\n */\n protected static assignProps(target: any, source: any) {\n const metadata: Metadata = target.constructor[Symbol.metadata];\n if (metadata && metadata[$numFields] !== undefined) {\n for (let i = 0; i <= metadata[$numFields]; i++) {\n const field = metadata[i];\n if (!field) { continue; }\n const value = source[field.name];\n if (value !== undefined) {\n target[field.name] = value;\n }\n }\n }\n // Copy non-tracked own properties (e.g. `notSynched: true`).\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (metadata && metadata[key] !== undefined) { continue; }\n target[key] = source[key];\n }\n }\n\n /**\n * Restore the instance from JSON data.\n * @param jsonData JSON data to restore the instance from\n * @returns\n */\n public restore(jsonData: ToJSON<this>): this {\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n\n for (const fieldIndex in metadata) {\n const field = metadata[fieldIndex as any as number];\n const fieldName = field.name as keyof this;\n const fieldType = field.type;\n const value = (jsonData as any)[fieldName];\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (typeof fieldType === \"string\") {\n // Primitive type: assign directly\n this[fieldName] = value;\n\n } else if (Schema.is(fieldType)) {\n // Schema type: create instance and restore\n const instance = new (fieldType as typeof Schema)();\n instance.restore(value);\n this[fieldName] = instance as any;\n\n } else if (typeof fieldType === \"object\") {\n // Collection types: { map: ... }, { array: ... }, etc.\n const collectionType = Object.keys(fieldType)[0] as string;\n const childType = (fieldType as any)[collectionType];\n\n if (collectionType === \"map\") {\n const mapSchema = this[fieldName] as any;\n for (const key in value) {\n if (Schema.is(childType)) {\n const childInstance = new (childType as typeof Schema)();\n childInstance.restore(value[key]);\n mapSchema.set(key, childInstance);\n } else {\n mapSchema.set(key, value[key]);\n }\n }\n\n } else if (collectionType === \"array\") {\n const arraySchema = this[fieldName] as any;\n for (let i = 0; i < value.length; i++) {\n if (Schema.is(childType)) {\n const childInstance = new (childType as typeof Schema)();\n childInstance.restore(value[i]);\n arraySchema.push(childInstance);\n } else {\n arraySchema.push(value[i]);\n }\n }\n }\n }\n }\n\n return this;\n }\n\n /**\n * (Server-side): Flag a property to be encoded for the next patch.\n * @param instance Schema instance\n * @param property string representing the property name, or number representing the index of the property.\n * @param operation OPERATION to perform (detected automatically)\n */\n public setDirty<K extends NonFunctionPropNames<this>>(property: K | number, operation?: OPERATION) {\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n this[$changes].change(\n metadata[metadata[property as string]].index,\n operation\n );\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Change-tracking control API\n //\n // By default, every mutation to a @type() property is automatically\n // recorded as a change. These methods let you opt out for bulk-load\n // scenarios or custom batching.\n //\n // @example\n // // Bulk-load without emitting changes:\n // player.untracked(() => {\n // player.hp = 100;\n // player.name = \"alice\";\n // });\n //\n // // Pause / resume pattern:\n // player.pauseTracking();\n // player.hp = 100; // not tracked\n // player.resumeTracking();\n // player.hp = 50; // tracked\n // ────────────────────────────────────────────────────────────────────\n\n /** Stop recording mutations until resumeTracking() is called. */\n public pauseTracking(): void {\n this[$changes].pause();\n }\n\n /** Re-enable automatic change tracking. */\n public resumeTracking(): void {\n this[$changes].resume();\n }\n\n /**\n * Run `fn` with change tracking paused, then resume.\n * Returns the function's return value. Safe to nest.\n */\n public untracked<T>(fn: () => T): T {\n return this[$changes].untracked(fn);\n }\n\n /** True while tracking is paused. */\n public get isTrackingPaused(): boolean {\n return this[$changes].paused;\n }\n\n clone (): this {\n // Create instance without calling custom constructor\n const cloned = Object.create(this.constructor.prototype);\n Schema.initialize(cloned);\n\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n\n //\n // TODO: clone all properties, not only annotated ones\n //\n // for (const field in this) {\n for (const fieldIndex in metadata) {\n const field = metadata[fieldIndex as any as number].name as keyof this;\n\n if (\n typeof (this[field]) === \"object\" &&\n typeof ((this[field] as any)?.clone) === \"function\"\n ) {\n // deep clone\n cloned[field] = (this[field] as any).clone();\n\n } else {\n // primitive values\n cloned[field] = this[field];\n }\n }\n\n return cloned;\n }\n\n toJSON (this: any): ToJSON<this> {\n const obj: any = {};\n const metadata = this.constructor[Symbol.metadata];\n for (const index in metadata) {\n const field = metadata[index] as MetadataField;\n const fieldName = field.name;\n if (!field.deprecated && this[fieldName] !== null && typeof (this[fieldName]) !== \"undefined\") {\n obj[fieldName] = (typeof (this[fieldName]['toJSON']) === \"function\")\n ? this[fieldName]['toJSON']()\n : this[fieldName];\n }\n }\n return obj;\n }\n\n /**\n * Used in tests only\n * @internal\n */\n discardAllChanges() {\n this[$changes].discardAll();\n }\n\n [$getByIndex](index: number): any {\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n return this[metadata[index].name as keyof this];\n }\n\n [$deleteByIndex](index: number): void {\n const metadata: Metadata = (this.constructor as typeof Schema)[Symbol.metadata];\n this[metadata[index].name as keyof this] = undefined;\n }\n\n /**\n * Inspect the `refId` of all Schema instances in the tree. Optionally display the contents of the instance.\n *\n * @param ref Schema instance\n * @param showContents display JSON contents of the instance\n * @returns\n */\n static debugRefIds<T extends Schema>(ref: T, showContents: boolean = false, level: number = 0, decoder?: Decoder, keyPrefix: string = \"\") {\n const contents = (showContents) ? ` - ${JSON.stringify(ref.toJSON())}` : \"\";\n const changeTree: ChangeTree = ref[$changes];\n\n const refId = (ref as IRef)[$refId];\n const root = (decoder) ? decoder.root : changeTree.root;\n\n // log reference count if > 1\n const refCount = (root?.refCount?.[refId] > 1)\n ? ` [×${root.refCount[refId]}]`\n : '';\n\n let output = `${getIndent(level)}${keyPrefix}${ref.constructor.name} (refId: ${refId})${refCount}${contents}\\n`;\n\n changeTree.forEachChild((childChangeTree, indexOrKey) => {\n let key = indexOrKey;\n if (typeof indexOrKey === 'number' && (ref as any)['$indexes']) {\n // MapSchema\n key = (ref as any)['$indexes'].get(indexOrKey) ?? indexOrKey;\n }\n const keyPrefix = ((ref as any)['forEach'] !== undefined && key !== undefined) ? `[\"${key}\"]: ` : \"\";\n output += this.debugRefIds(childChangeTree.ref, showContents, level + 1, decoder, keyPrefix);\n });\n\n return output;\n }\n\n /**\n * @param changeSet\n * - \"changes\": iterate the current-tick dirty queue (per-tick encode order)\n * - \"allChanges\" / \"allFilteredChanges\" (legacy): structurally walk the\n * tree in DFS preorder (matches the order in which full-sync emits\n * trees). The two legacy modes differ by which side of the filter\n * split they include.\n */\n static debugRefIdEncodingOrder<T extends Ref>(\n ref: T,\n changeSet: \"changes\" | \"allChanges\" | \"allFilteredChanges\" = 'allChanges'\n ) {\n const encodeOrder: number[] = [];\n const rootChangeTree = ref[$changes];\n\n if (changeSet === \"changes\") {\n let current = rootChangeTree.root.changes?.next;\n while (current) {\n if (current.changeTree) {\n encodeOrder.push(current.changeTree.ref[$refId]);\n }\n current = current.next;\n }\n return encodeOrder;\n }\n\n // Full-sync modes: DFS preorder from root, filtered by tree's\n // filter-status to match the unfiltered / filtered split.\n const wantFiltered = (changeSet === \"allFilteredChanges\");\n const visited = new Set<ChangeTree>();\n const walk = (changeTree: ChangeTree) => {\n if (visited.has(changeTree)) return;\n visited.add(changeTree);\n if (changeTree.isFiltered === wantFiltered) {\n encodeOrder.push(changeTree.ref[$refId]);\n }\n changeTree.forEachChild((child, _) => walk(child));\n };\n walk(rootChangeTree);\n return encodeOrder;\n }\n\n static debugRefIdsFromDecoder(decoder: Decoder) {\n return this.debugRefIds(decoder.state, false, 0, decoder);\n }\n\n /**\n * Return a string representation of the changes on a Schema instance.\n * The list of changes is cleared after each encode.\n *\n * @param instance Schema instance\n * @param isEncodeAll Return \"full encode\" instead of current change set.\n * @returns\n */\n static debugChanges<T extends Ref>(instance: T, isEncodeAll: boolean = false) {\n const changeTree: ChangeTree = instance[$changes];\n const label = isEncodeAll ? \"allChanges\" : \"changes\";\n let output = `${instance.constructor.name} (${instance[$refId]}) -> .${label}:\\n`;\n\n if (isEncodeAll) {\n changeTree.forEachLive((index) => {\n output += `- [${index}]: ADD (${JSON.stringify(changeTree.getValue(Number(index), true))})\\n`;\n });\n } else {\n changeTree.forEach((index, op) => {\n if (index < 0 || !op) return;\n output += `- [${index}]: ${OPERATION[op]} (${JSON.stringify(changeTree.getValue(Number(index), false))})\\n`;\n });\n }\n\n return output;\n }\n\n}\n\n","/**\n * Allocates monotonically-increasing refIds with a reuse pool.\n *\n * `acquire()` pops from the free pool when available, otherwise bumps a\n * counter. `release()` queues a refId for reuse; the id doesn't become\n * acquirable until `flushReleases()` runs — the one-tick defer is what\n * lets the encoder guarantee a DELETE for the old instance reaches the\n * wire before the refId is handed to a new one.\n *\n * `reclaim()` handles \"resurrection\": a ref that was released but whose\n * JS instance is still alive can be re-added to the tree, in which case\n * the encoder must pull the refId back out of the pool before it's\n * handed to an unrelated instance.\n */\nexport class RefIdAllocator {\n protected nextUniqueId: number;\n\n private _free: number[] = [];\n private _pending: number[] = [];\n private _pooled: Set<number> = new Set();\n\n constructor(startRefId: number = 0) {\n this.nextUniqueId = startRefId;\n }\n\n acquire(): number {\n if (this._free.length > 0) {\n const id = this._free.pop()!;\n this._pooled.delete(id);\n return id;\n }\n return this.nextUniqueId++;\n }\n\n release(refId: number): void {\n this._pending.push(refId);\n this._pooled.add(refId);\n }\n\n isPooled(refId: number): boolean {\n return this._pooled.has(refId);\n }\n\n /**\n * Remove a refId from the pool. Called when a ref whose refId was\n * released is being resurrected. O(n) scan of the relevant array,\n * but resurrection is rare.\n */\n reclaim(refId: number): void {\n if (!this._pooled.delete(refId)) return;\n let i = this._free.indexOf(refId);\n if (i !== -1) { this._free.splice(i, 1); return; }\n i = this._pending.indexOf(refId);\n if (i !== -1) { this._pending.splice(i, 1); }\n }\n\n /**\n * Promote this tick's releases into the acquirable set. Called from\n * `Encoder.discardChanges()` — never mid-encode.\n */\n flushReleases(): void {\n const pending = this._pending;\n if (pending.length === 0) return;\n const free = this._free;\n for (let i = 0; i < pending.length; i++) free.push(pending[i]);\n pending.length = 0;\n }\n}\n","import { OPERATION } from \"../encoding/spec.js\";\nimport { TypeContext } from \"../types/TypeContext.js\";\nimport { ChangeTree, ChangeTreeList, createChangeTreeList, type ChangeTreeNode } from \"./ChangeTree.js\";\nimport { $changes, $refId } from \"../types/symbols.js\";\nimport { RefIdAllocator } from \"./RefIdAllocator.js\";\nimport type { StateView } from \"./StateView.js\";\nimport type { StreamSchema } from \"../types/custom/StreamSchema.js\";\nimport type { StreamableState } from \"./streaming.js\";\n\n/**\n * Minimal shape the encoder needs from a streamable collection. Both\n * `StreamSchema` and `.stream()`-decorated `MapSchema`/`SetSchema` etc.\n * satisfy this via a single lazily-allocated `_stream` slot — the\n * per-view / broadcast bookkeeping lives on that object, not directly\n * on the collection, so non-streaming instances pay zero Map/Set\n * allocation cost.\n */\nexport interface Streamable {\n [$refId]?: number;\n [$changes]: ChangeTree;\n _stream?: StreamableState;\n _dropView(viewId: number): void;\n _unregister(): void;\n}\n\nexport class Root {\n /**\n * Allocates and recycles refIds. See `RefIdAllocator` for the reuse\n * pool semantics (one-tick defer + resurrection).\n */\n public readonly refIds: RefIdAllocator;\n\n refCount: {[id: number]: number} = {};\n changeTrees: {[refId: number]: ChangeTree} = {};\n\n /**\n * Queue of all ChangeTrees with reliable dirty state. Per-tick encode()\n * walks this queue; per-view encodeView() walks it too (filtering at\n * emission time via tree.isFiltered + per-field @view tag).\n */\n changes: ChangeTreeList = createChangeTreeList();\n\n /**\n * Queue of all ChangeTrees with unreliable dirty state. Walked by\n * `Encoder.encodeUnreliable` / `encodeUnreliableView`. A tree may live\n * in both queues when the Schema has both reliable and unreliable\n * fields dirty at the same time.\n */\n unreliableChanges: ChangeTreeList = createChangeTreeList();\n\n /**\n * Free-list of ChangeTreeNode objects. Both queues share this pool —\n * a node carries no queue affinity, only `{ changeTree, prev, next, position }`.\n * Reusing nodes turns ~1,250 per-tick allocations (in bench) into 0.\n */\n private _nodePool: ChangeTreeNode[] = [];\n\n /**\n * View ID allocator for StateView visibility bitmaps on ChangeTree.\n * Each new StateView claims the lowest free ID; releaseViewId() puts\n * the ID back. Avoids unbounded bitmap growth across long-running rooms\n * with view churn (clients joining/leaving).\n */\n private _nextViewId: number = 0;\n private _freeViewIds: number[] = [];\n\n /** Allocate a fresh view ID (lowest available). */\n public acquireViewId(): number {\n return this._freeViewIds.length > 0\n ? this._freeViewIds.pop()!\n : this._nextViewId++;\n }\n\n /** Return a view ID to the freelist for reuse. */\n public releaseViewId(id: number): void {\n this._freeViewIds.push(id);\n }\n\n /**\n * Currently-bound StateViews, keyed by view ID and held via `WeakRef`\n * so the FinalizationRegistry backstop in StateView still works when\n * the user forgets `dispose()`. Callers must iterate via\n * `forEachActiveView`, which prunes dead entries.\n */\n public activeViews: Map<number, WeakRef<StateView>> = new Map();\n\n /**\n * Streamable collections attached under this Root — `StreamSchema`\n * plus any collection opted into streaming via `.stream()` on the\n * builder. Encoder.encodeView / broadcast pass iterates this set to\n * dispatch per-view / per-tick budget gates.\n */\n public streamTrees: Set<Streamable> = new Set();\n\n public registerView(view: StateView): void {\n this.activeViews.set(view.id, new WeakRef(view));\n }\n\n public unregisterView(view: StateView): void {\n this.activeViews.delete(view.id);\n // Clear per-view state on every registered stream so dispose()ing\n // a view doesn't leak its `_pendingByView` / `_sentByView` entries\n // indefinitely. O(streams) on dispose, acceptable since dispose is\n // rare (once per client disconnect).\n const id = view.id;\n for (const stream of this.streamTrees) {\n stream._dropView(id);\n }\n }\n\n /**\n * Iterate all live StateViews bound to this Root. Prunes entries\n * whose underlying view has been garbage collected without an\n * explicit `dispose()`.\n */\n public forEachActiveView(cb: (view: StateView) => void): void {\n for (const [id, ref] of this.activeViews) {\n const view = ref.deref();\n if (view === undefined) {\n this.activeViews.delete(id);\n for (const stream of this.streamTrees) stream._dropView(id);\n continue;\n }\n cb(view);\n }\n }\n\n public registerStream(stream: Streamable): void {\n this.streamTrees.add(stream);\n }\n\n public unregisterStream(stream: Streamable): void {\n this.streamTrees.delete(stream);\n }\n\n constructor(public types: TypeContext, startRefId: number = 0) {\n this.refIds = new RefIdAllocator(startRefId);\n }\n\n add(changeTree: ChangeTree) {\n const ref = changeTree.ref;\n\n // Assign unique `refId` to ref if it doesn't have one yet.\n // $refId is a Symbol but assert.deepStrictEqual still walks\n // *enumerable* own Symbols, so we keep defineProperty(enumerable:false)\n // to keep $refId hidden from deep-equal comparisons in tests.\n if (ref[$refId] === undefined) {\n Object.defineProperty(ref, $refId, {\n value: this.refIds.acquire(),\n enumerable: false,\n writable: true\n });\n }\n\n const refId = ref[$refId];\n\n const isNewChangeTree = (this.changeTrees[refId] === undefined);\n if (isNewChangeTree) { this.changeTrees[refId] = changeTree; }\n\n // Resurrection path: a ref whose refId is still queued for reuse\n // is being re-added. Pull the refId out of the pool before it gets\n // handed out to someone else.\n if (this.refIds.isPooled(refId)) {\n this.refIds.reclaim(refId);\n }\n\n const previousRefCount = this.refCount[refId];\n if (previousRefCount === 0) {\n //\n // When a ChangeTree is re-added, it means that it was previously\n // removed. Re-stage every currently-populated non-transient index\n // as a fresh ADD in the matching dirty bucket so the next encode\n // re-emits it on the correct channel.\n //\n changeTree.forEachLive((fieldIndex) => {\n if (changeTree.isFieldUnreliable(fieldIndex)) {\n changeTree.ensureUnreliableRecorder().record(fieldIndex, OPERATION.ADD);\n } else {\n changeTree.record(fieldIndex, OPERATION.ADD);\n }\n });\n }\n\n this.refCount[refId] = (previousRefCount || 0) + 1;\n\n return isNewChangeTree;\n }\n\n remove(changeTree: ChangeTree) {\n const refId = changeTree.ref[$refId];\n const refCount = (this.refCount[refId]) - 1;\n\n if (refCount <= 0) {\n //\n // Only remove \"root\" reference if it's the last reference\n //\n changeTree.root = undefined;\n delete this.changeTrees[refId];\n\n // Streamable-collection detach (StreamSchema + any `.stream()`\n // collection). Tree flag is cheaper than the class-level\n // brand and covers both cases uniformly.\n if (changeTree.isStreamCollection) {\n const streamable = changeTree.ref as unknown as Streamable;\n streamable._unregister?.();\n this.unregisterStream(streamable);\n }\n\n this.removeFromQueue(changeTree);\n this.removeFromUnreliableQueue(changeTree);\n\n this.refCount[refId] = 0;\n\n // Return refId to the reuse pool (deferred to end-of-tick via\n // the allocator's pending set). Stream collections are excluded\n // because their per-view delivery bookkeeping is harder to\n // audit for reuse safety and the savings there are negligible.\n // If the ref is later resurrected, `add()` evicts the refId\n // from the pool before it's handed to another instance.\n if (!changeTree.isStreamCollection) {\n this.refIds.release(refId);\n }\n\n changeTree.forEachChild((child, _) => {\n if (child.removeParent(changeTree.ref)) {\n if ((\n child.parentRef === undefined || // no parent, remove it\n (child.parentRef && this.refCount[child.ref[$refId]] > 0) // parent is still in use, but has more than one reference, remove it\n )) {\n this.remove(child);\n\n } else if (child.parentRef) {\n // re-assigning a child of the same root, move it next to parent\n this.moveNextToParent(child);\n }\n }\n });\n\n } else {\n this.refCount[refId] = refCount;\n\n //\n // When losing a reference to an instance, it is best to move the\n // ChangeTree next to its parent in the encoding queue.\n //\n // This way, at decoding time, the instance that contains the\n // ChangeTree will be available before the ChangeTree itself. If the\n // containing instance is not available, the Decoder will throw\n // \"refId not found\" error.\n //\n this.recursivelyMoveNextToParent(changeTree);\n }\n\n return refCount;\n }\n\n recursivelyMoveNextToParent(changeTree: ChangeTree) {\n this.moveNextToParent(changeTree);\n changeTree.forEachChild((child, _) => this.recursivelyMoveNextToParent(child));\n }\n\n moveNextToParent(changeTree: ChangeTree): void {\n if (changeTree.changesNode) {\n this._moveNextToParentInList(this.changes, changeTree, changeTree.changesNode, \"changesNode\");\n }\n if (changeTree.unreliableChangesNode) {\n this._moveNextToParentInList(this.unreliableChanges, changeTree, changeTree.unreliableChangesNode, \"unreliableChangesNode\");\n }\n }\n\n private _moveNextToParentInList(\n changeSet: ChangeTreeList,\n changeTree: ChangeTree,\n node: ChangeTreeNode,\n nodeField: \"changesNode\" | \"unreliableChangesNode\",\n ): void {\n const parent = changeTree.parent;\n if (!parent || !parent[$changes]) return;\n\n const parentNode = parent[$changes][nodeField];\n if (!parentNode || parentNode === node) return;\n\n // Check if child is already after parent by walking from parent\n let cursor = parentNode.next;\n while (cursor) {\n if (cursor === node) return; // already after parent\n cursor = cursor.next;\n }\n // If we reach here, node is before parent — need to move\n\n // Remove node from current position\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n changeSet.next = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n changeSet.tail = node.prev;\n }\n\n // Insert node right after parent\n node.prev = parentNode;\n node.next = parentNode.next;\n\n if (parentNode.next) {\n parentNode.next.prev = node;\n } else {\n changeSet.tail = node;\n }\n\n parentNode.next = node;\n }\n\n public enqueueChangeTree(\n changeTree: ChangeTree,\n existingNode = changeTree.changesNode\n ) {\n if (existingNode) { return; }\n changeTree.changesNode = this._appendToList(this.changes, changeTree);\n }\n\n public enqueueUnreliable(\n changeTree: ChangeTree,\n existingNode = changeTree.unreliableChangesNode\n ) {\n if (existingNode) { return; }\n changeTree.unreliableChangesNode = this._appendToList(this.unreliableChanges, changeTree);\n }\n\n private _appendToList(list: ChangeTreeList, changeTree: ChangeTree): ChangeTreeNode {\n const pool = this._nodePool;\n let node: ChangeTreeNode;\n if (pool.length > 0) {\n node = pool.pop()!;\n node.changeTree = changeTree;\n node.next = undefined;\n node.prev = undefined;\n node.position = 0;\n } else {\n node = { changeTree, next: undefined, prev: undefined, position: 0 };\n }\n if (!list.next) {\n list.next = node;\n list.tail = node;\n } else {\n node.prev = list.tail;\n list.tail!.next = node;\n list.tail = node;\n }\n return node;\n }\n\n /**\n * Release a detached node back to the free-list. Caller must have\n * already unlinked it from any list and cleared the changeTree's\n * pointer to it. Clears `changeTree`/`prev`/`next` so the pool\n * doesn't retain references through the GC root.\n */\n public releaseNode(node: ChangeTreeNode): void {\n node.changeTree = undefined!;\n node.prev = undefined;\n node.next = undefined;\n this._nodePool.push(node);\n }\n\n public removeFromQueue(changeTree: ChangeTree): boolean {\n return this._removeNode(this.changes, changeTree, changeTree.changesNode, \"changesNode\");\n }\n\n public removeFromUnreliableQueue(changeTree: ChangeTree): boolean {\n return this._removeNode(this.unreliableChanges, changeTree, changeTree.unreliableChangesNode, \"unreliableChangesNode\");\n }\n\n private _removeNode(\n changeSet: ChangeTreeList,\n changeTree: ChangeTree,\n node: ChangeTreeNode | undefined,\n nodeField: \"changesNode\" | \"unreliableChangesNode\",\n ): boolean {\n if (!node || node.changeTree !== changeTree) return false;\n\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n changeSet.next = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n changeSet.tail = node.prev;\n }\n\n changeTree[nodeField] = undefined;\n this.releaseNode(node);\n return true;\n }\n}\n","import type { Schema } from \"../Schema.js\";\nimport { TypeContext } from \"../types/TypeContext.js\";\nimport { $changes, $getByIndex, $refId } from \"../types/symbols.js\";\nimport { Metadata } from \"../Metadata.js\";\n\nimport { encode } from \"../encoding/encode.js\";\nimport type { Iterator } from \"../encoding/decode.js\";\n\nimport { OPERATION, SWITCH_TO_STRUCTURE, TYPE_ID } from '../encoding/spec.js';\nimport { Root } from \"./Root.js\";\n\nimport type { StateView } from \"./StateView.js\";\nimport type { ChangeTree, ChangeTreeList, ChangeTreeNode } from \"./ChangeTree.js\";\nimport type { EncodeOperation } from \"./EncodeOperation.js\";\nimport { forEachLiveWithCtx as _forEachLiveWithCtx } from \"./changeTree/liveIteration.js\";\nimport { forEachChildWithCtx as _forEachChildWithCtx } from \"./changeTree/treeAttachment.js\";\n\n/**\n * Reusable context passed to the recorder's forEachWithCtx to iterate changes\n * without allocating a closure per ChangeTree. All fields are (re)assigned\n * inside the main encode loop before each `forEachWithCtx` call.\n */\ninterface EncodeCtx {\n self: Encoder;\n buffer: Uint8Array;\n it: Iterator;\n changeTree: ChangeTree;\n ref: any;\n encoder: EncodeOperation;\n filter: ((ref: any, index: number, view?: StateView) => boolean) | undefined;\n metadata: any;\n view: StateView | undefined;\n isEncodeAll: boolean;\n hasView: boolean;\n\n /**\n * Per-tree flags, reset before each `forEachWithCtx` call. The per-field\n * filter decision (`emitFiltered` == `treeIsFiltered || metadata[i].tag`)\n * matches `ChangeTree.change()`'s routing rule exactly.\n */\n treeIsFiltered: boolean;\n isSchema: boolean;\n emitFiltered: boolean;\n\n /**\n * Bitmask: bit i set iff field i has a @view tag. Lets the per-field\n * filter check be a single bitwise op instead of a metadata[i]?.tag chase.\n * Always 0 for collection trees.\n */\n filterBitmask: number;\n\n /**\n * Current walk's visit stamp. `_fullSyncWalk` compares it against each\n * tree's `_fullSyncGen` on entry: match means \"already visited by\n * this walk, skip\"; mismatch means \"first visit, stamp and recurse\".\n * Rewritten per walk by `encodeFullSync` before kicking off the DFS.\n */\n gen: number;\n /** Initial buffer offset at encodeFullSync entry — used by the walker to\n * decide whether to emit SWITCH_TO_STRUCTURE for the root tree. */\n initialOffset: number;\n rootChangeTree: ChangeTree;\n\n /**\n * Lazy structure-switch state. The switch header is emitted right before\n * the first field of a tree actually passes the filter, so trees that\n * contribute zero bytes in a given pass don't leave orphaned headers.\n */\n structSwitchEmitted: boolean;\n isRootTree: boolean;\n shouldEmitSwitch: boolean;\n}\n\n\n/**\n * Emit the lazy structure-switch header (SWITCH_TO_STRUCTURE + refId) for\n * the current tree if it hasn't been emitted yet in this pass.\n */\nfunction ensureStructSwitch(ctx: EncodeCtx): void {\n if (ctx.structSwitchEmitted) return;\n if (ctx.shouldEmitSwitch) {\n ctx.buffer[ctx.it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(ctx.buffer, ctx.ref[$refId], ctx.it);\n }\n ctx.structSwitchEmitted = true;\n}\n\n/**\n * Module-level adapter for `forEachLiveWithCtx`. Full-sync emits every live\n * field as ADD, so we re-enter `encodeChangeCb` with that fixed op — keeps\n * the callback closure-free across the entire DFS walk.\n */\nfunction encodeFullSyncCb(ctx: EncodeCtx, fieldIndex: number): void {\n encodeChangeCb(ctx, fieldIndex, OPERATION.ADD);\n}\n\n/**\n * Structural DFS walker for `encodeFullSync`. Hoisted to module scope so\n * the recursion allocates no per-tree closures — `_fullSyncWalkChildCb`\n * captures nothing and is handed to `forEachChildWithCtx` once.\n *\n * The stamp check at the top (`tree._fullSyncGen === ctx.gen`) is how we\n * skip shared refs that are reachable through more than one parent. On\n * first visit the tree's stamp differs from the walk's current `ctx.gen`;\n * we write `ctx.gen` onto the tree and recurse. Any later reach of the\n * same tree during the SAME walk will find matching stamps and bail.\n * Next walk bumps `ctx.gen`, so every tree starts out stale again.\n */\nfunction _fullSyncWalk(ctx: EncodeCtx, changeTree: ChangeTree): void {\n if (changeTree._fullSyncGen === ctx.gen) return;\n changeTree._fullSyncGen = ctx.gen;\n\n // Visibility gate: when a view is active, a non-visible tree contributes\n // nothing itself but we still recurse so descendants (possibly added to\n // the view explicitly) are reachable.\n let visibleHere = true;\n if (ctx.hasView) {\n const view = ctx.view!;\n if (!view.isChangeTreeVisible(changeTree)) {\n view.markInvisible(changeTree);\n visibleHere = false;\n } else {\n view.unmarkInvisible(changeTree);\n }\n }\n\n if (visibleHere) {\n const desc = changeTree.encDescriptor;\n ctx.changeTree = changeTree;\n ctx.ref = changeTree.ref;\n ctx.encoder = desc.encoder;\n ctx.filter = desc.filter;\n ctx.metadata = desc.metadata;\n ctx.treeIsFiltered = changeTree.isFiltered;\n ctx.isSchema = desc.isSchema;\n ctx.filterBitmask = desc.filterBitmask;\n ctx.structSwitchEmitted = false;\n ctx.shouldEmitSwitch = (ctx.hasView || ctx.it.offset > ctx.initialOffset || changeTree !== ctx.rootChangeTree);\n\n // Call the module function directly — the `forEachLiveWithCtx`\n // method on ChangeTree is a pass-through that V8 doesn't inline\n // under the polymorphism the encoder sees (Schema + every\n // collection class share the method slot). Direct call saves the\n // dispatched frame.\n _forEachLiveWithCtx(changeTree, ctx, encodeFullSyncCb);\n }\n\n _forEachChildWithCtx(changeTree, ctx, _fullSyncWalkChildCb);\n}\n\n/**\n * Child-iteration callback for `_fullSyncWalk`. Module-level + closure-free:\n * just re-enters `_fullSyncWalk` on each child. Replaces a per-tree\n * `(child, _) => walk(child)` closure that used to allocate 2.5M times in\n * `encodeAll(5000 entities) x 500 iterations`.\n */\nfunction _fullSyncWalkChildCb(ctx: EncodeCtx, child: ChangeTree, _index: any): void {\n _fullSyncWalk(ctx, child);\n}\n\n/**\n * Pure (non-capturing) callback for recorder.forEachWithCtx. Module-level so\n * V8 never needs to allocate a fresh function per tree. Decides per-field\n * whether to emit based on the unified filter rule, then defers to the\n * per-type encode function.\n */\nfunction encodeChangeCb(ctx: EncodeCtx, fieldIndex: number, op: OPERATION): void {\n if (fieldIndex < 0) {\n // Pure op (CLEAR/REVERSE): encoded as a single byte. Always emitted\n // for the pass that matches the tree's filter classification —\n // collections route pure ops to their single dirty bucket.\n if (ctx.treeIsFiltered !== ctx.emitFiltered) return;\n ensureStructSwitch(ctx);\n ctx.buffer[ctx.it.offset++] = Math.abs(fieldIndex) & 255;\n return;\n }\n\n // Per-field filter decision (same rule as ChangeTree.change()):\n // a field is filtered iff the tree inherits isFiltered OR the field\n // itself carries a @view tag. Schema trees check via the precomputed\n // bitmask; collection trees inherit tree-level (bitmask is 0).\n const fieldFiltered = ctx.isSchema\n ? (ctx.treeIsFiltered || (ctx.filterBitmask & (1 << fieldIndex)) !== 0)\n : ctx.treeIsFiltered;\n if (fieldFiltered !== ctx.emitFiltered) return;\n\n const operation = ctx.isEncodeAll ? OPERATION.ADD : op;\n if (operation === undefined) return;\n if (ctx.filter !== undefined && !ctx.filter(ctx.ref, fieldIndex, ctx.view)) return;\n\n ensureStructSwitch(ctx);\n ctx.encoder(ctx.self, ctx.buffer, ctx.changeTree, fieldIndex, operation, ctx.it, ctx.isEncodeAll, ctx.hasView, ctx.metadata);\n}\n\nfunction concatBytes(a: Uint8Array, b: Uint8Array): Uint8Array {\n const result = new Uint8Array(a.length + b.length);\n result.set(a, 0);\n result.set(b, a.length);\n return result;\n}\n\nexport class Encoder<T extends Schema = any> {\n static BUFFER_SIZE = 8 * 1024; // 8KB\n sharedBuffer: Uint8Array = new Uint8Array(Encoder.BUFFER_SIZE);\n\n context: TypeContext;\n state: T;\n\n root: Root;\n\n constructor(state: T, root?: Root) {\n //\n // Use .cache() here to avoid re-creating a new context for every new room instance.\n //\n // We may need to make this optional in case of dynamically created\n // schemas - which would lead to memory leaks\n //\n this.context = TypeContext.cache(state.constructor as typeof Schema);\n this.root = root ?? new Root(this.context);\n\n this.setState(state);\n }\n\n protected setState(state: T) {\n this.state = state;\n this.state[$changes].setRoot(this.root);\n }\n\n private _encodeCtx: EncodeCtx = {\n self: undefined!, buffer: undefined!, it: undefined!, changeTree: undefined!,\n ref: undefined, encoder: undefined!, filter: undefined, metadata: undefined,\n view: undefined, isEncodeAll: false, hasView: false,\n treeIsFiltered: false, isSchema: false, emitFiltered: false,\n filterBitmask: 0,\n structSwitchEmitted: false, isRootTree: false, shouldEmitSwitch: false,\n gen: 0, initialOffset: 0, rootChangeTree: undefined!,\n };\n\n /**\n * Monotonic counter bumped at the start of every `encodeFullSync`\n * call. The new value is copied to `ctx.gen` and stamped into every\n * tree the walk touches (`tree._fullSyncGen = ctx.gen`); subsequent\n * revisits of the same tree detect the equality and return early.\n */\n private _fullSyncGen: number = 0;\n\n encode(\n it: Iterator = { offset: 0 },\n view?: StateView,\n buffer: Uint8Array = this.sharedBuffer,\n initialOffset = it.offset\n ): Uint8Array {\n return this._encodeChannel(it, view, buffer, initialOffset, /* unreliable */ false);\n }\n\n /**\n * Per-tick encode of the UNRELIABLE channel. Walks `root.unreliableChanges`\n * and emits each tree's `unreliableRecorder`. Safe to call at a different\n * cadence than `encode()` (e.g. 60Hz vs 20Hz) — the two channels are\n * fully independent.\n */\n encodeUnreliable(\n it: Iterator = { offset: 0 },\n view?: StateView,\n buffer: Uint8Array = this.sharedBuffer,\n initialOffset = it.offset\n ): Uint8Array {\n return this._encodeChannel(it, view, buffer, initialOffset, /* unreliable */ true);\n }\n\n private _encodeChannel(\n it: Iterator,\n view: StateView | undefined,\n buffer: Uint8Array,\n initialOffset: number,\n unreliable: boolean,\n ): Uint8Array {\n const hasView = (view !== undefined);\n const rootChangeTree = this.state[$changes];\n\n const ctx = this._encodeCtx;\n ctx.self = this;\n ctx.buffer = buffer;\n ctx.it = it;\n ctx.view = view;\n ctx.isEncodeAll = false;\n ctx.hasView = hasView;\n // Shared pass (no view): emit unfiltered fields. View pass: emit\n // filtered fields only. Fields on the other side of the split are\n // skipped inside encodeChangeCb.\n ctx.emitFiltered = hasView;\n\n const queue: ChangeTreeList = unreliable ? this.root.unreliableChanges : this.root.changes;\n let current: ChangeTreeList | ChangeTreeNode = queue;\n\n while (current = current.next) {\n const changeTree = (current as ChangeTreeNode).changeTree;\n\n if (hasView) {\n if (!view.isChangeTreeVisible(changeTree)) {\n view.markInvisible(changeTree);\n continue;\n }\n view.unmarkInvisible(changeTree);\n }\n\n const recorder = unreliable ? changeTree.unreliableRecorder : changeTree;\n if (!recorder || !recorder.has()) { continue; }\n\n const desc = changeTree.encDescriptor;\n ctx.changeTree = changeTree;\n ctx.ref = changeTree.ref;\n ctx.encoder = desc.encoder;\n ctx.filter = desc.filter;\n ctx.metadata = desc.metadata;\n ctx.treeIsFiltered = changeTree.isFiltered;\n ctx.isSchema = desc.isSchema;\n ctx.filterBitmask = desc.filterBitmask;\n ctx.structSwitchEmitted = false;\n ctx.isRootTree = (changeTree === rootChangeTree);\n // Root's struct switch is skipped at the very start of the shared\n // pass (matches the legacy wire protocol). In view pass or after\n // the first emission, always emit the switch.\n ctx.shouldEmitSwitch = (hasView || it.offset > initialOffset || !ctx.isRootTree);\n\n recorder.forEachWithCtx(ctx, encodeChangeCb);\n }\n\n // Broadcast-mode stream emission runs after the main loop (state /\n // parent refs are already on the wire, so stream ADD ops can\n // reference element refIds safely). Reliable shared pass only;\n // skipped when any StateView is registered (priority pass in\n // `encodeView` owns emission in that mode).\n if (!unreliable && !hasView && this.root.activeViews.size === 0 && this.root.streamTrees.size > 0) {\n this._emitStreamBroadcast(buffer, it);\n }\n\n if (it.offset > buffer.byteLength) {\n buffer = this._resizeBuffer(buffer, it.offset);\n return this._encodeChannel({ offset: initialOffset }, view, buffer, initialOffset, unreliable);\n }\n\n return buffer.subarray(0, it.offset);\n }\n\n /**\n * Structural DFS walker for full-sync (encodeAll / encodeAllView).\n * Visits each ChangeTree in DFS preorder starting from the state root,\n * emitting ADD operations for every currently-populated index via\n * {@link ChangeTree.forEachLive}.\n */\n private encodeFullSync(\n it: Iterator,\n buffer: Uint8Array,\n emitFiltered: boolean,\n view?: StateView,\n initialOffset: number = it.offset\n ): Uint8Array {\n const hasView = (view !== undefined);\n const rootChangeTree = this.state[$changes];\n\n const ctx = this._encodeCtx;\n ctx.self = this;\n ctx.buffer = buffer;\n ctx.it = it;\n ctx.view = view;\n ctx.isEncodeAll = true;\n ctx.hasView = hasView;\n ctx.emitFiltered = emitFiltered;\n\n // Bump the generation counter and carry the new value on `ctx` so\n // the recursive walker can stamp every tree it visits. Any tree\n // still holding the previous walk's stamp is treated as unvisited\n // on first reach, and stamped; a second reach (shared ref via\n // multiple parents) sees the match and bails.\n ctx.gen = ++this._fullSyncGen;\n ctx.initialOffset = initialOffset;\n ctx.rootChangeTree = rootChangeTree;\n _fullSyncWalk(ctx, rootChangeTree);\n\n if (it.offset > buffer.byteLength) {\n buffer = this._resizeBuffer(buffer, it.offset);\n return this.encodeFullSync({ offset: initialOffset }, buffer, emitFiltered, view);\n }\n\n return buffer.subarray(0, it.offset);\n }\n\n private _resizeBuffer(buffer: Uint8Array, usedOffset: number): Uint8Array {\n const newSize = Math.ceil(usedOffset / Encoder.BUFFER_SIZE) * Encoder.BUFFER_SIZE;\n\n console.warn(`@colyseus/schema buffer overflow. Encoded state is higher than default BUFFER_SIZE. Use the following to increase default BUFFER_SIZE:\n\n import { Encoder } from \"@colyseus/schema\";\n Encoder.BUFFER_SIZE = ${Math.round(newSize / 1024)} * 1024; // ${Math.round(newSize / 1024)} KB\n`);\n\n const newBuffer = new Uint8Array(newSize);\n newBuffer.set(buffer);\n\n if (buffer === this.sharedBuffer) {\n this.sharedBuffer = newBuffer;\n }\n\n return newBuffer;\n }\n\n encodeAll(\n it: Iterator = { offset: 0 },\n buffer: Uint8Array = this.sharedBuffer\n ) {\n return this.encodeFullSync(it, buffer, /* emitFiltered */ false);\n }\n\n encodeAllView(\n view: StateView,\n sharedOffset: number,\n it: Iterator,\n bytes: Uint8Array = this.sharedBuffer\n ) {\n const viewOffset = it.offset;\n\n this.encodeFullSync(it, bytes, /* emitFiltered */ true, view, viewOffset);\n\n return concatBytes(\n bytes.subarray(0, sharedOffset),\n bytes.subarray(viewOffset, it.offset)\n );\n }\n\n encodeView(\n view: StateView,\n sharedOffset: number,\n it: Iterator,\n bytes: Uint8Array = this.sharedBuffer\n ) {\n const viewOffset = it.offset;\n\n // Stream priority pass: drain up to `maxPerTick` per-view entries\n // from every registered stream before draining view.changes. Each\n // selected element is passed to `view.add()` which populates\n // view.changes with the stream-link ADD + element-field ADDs.\n this._emitStreamPriority(view);\n\n // encode visibility-triggered changes collected by view.add()\n for (const [refId, changes] of view.changes) {\n const changeTree: ChangeTree = this.root.changeTrees[refId];\n\n if (changeTree === undefined) {\n // detached instance, remove from view and skip.\n view.changes.delete(refId);\n continue;\n }\n\n if (changes.size === 0) {\n continue;\n }\n\n const desc = changeTree.encDescriptor;\n const encoder = desc.encoder;\n const metadata = desc.metadata;\n // `ref` → user-facing identity (Proxy on ArraySchema), used for\n // `[$refId]`. `refTarget` → raw instance, used for the hot\n // `[$getByIndex]` lookup that runs once per change.\n const ref = changeTree.ref;\n const refTarget = changeTree.refTarget;\n\n bytes[it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(bytes, ref[$refId], it);\n\n // Iterate entries directly — the inner Map gives us the (index, op)\n // pair without an intermediate keys array or Number() parse.\n for (const [index, op] of changes) {\n // workaround when using view.add() on item that has been deleted from state\n // (see test \"adding to view item that has been removed from state\")\n const value = refTarget[$getByIndex](index);\n const operation = (value !== undefined && op) || OPERATION.DELETE;\n\n // isEncodeAll = false, hasView = true\n encoder(this, bytes, changeTree, index, operation, it, false, true, metadata);\n }\n }\n\n //\n // TODO: only clear view changes after all views are encoded\n // (to allow re-using StateView's for multiple clients)\n //\n view.changes.clear();\n\n // per-tick view-scoped pass: walks the same `changes` queue as the\n // shared pass, but `encodeChangeCb` emits only filtered fields.\n this.encode(it, view, bytes, viewOffset);\n\n return concatBytes(\n bytes.subarray(0, sharedOffset),\n bytes.subarray(viewOffset, it.offset)\n );\n }\n\n /**\n * Per-view unreliable encode. Walks `root.unreliableChanges` and emits\n * only filtered fields visible to this view. Unlike `encodeView`, this\n * doesn't emit `view.changes` entries — those are used only for\n * reliable view bootstrap (membership ADDs) and are consumed by\n * `encodeView` on the reliable channel.\n */\n encodeUnreliableView(\n view: StateView,\n sharedOffset: number,\n it: Iterator,\n bytes: Uint8Array = this.sharedBuffer\n ) {\n const viewOffset = it.offset;\n\n this.encodeUnreliable(it, view, bytes, viewOffset);\n\n return concatBytes(\n bytes.subarray(0, sharedOffset),\n bytes.subarray(viewOffset, it.offset)\n );\n }\n\n /**\n * Broadcast-mode counterpart to `_emitStreamPriority`. Runs when NO\n * StateViews are registered — streams fall back to broadcast mode\n * where up to `maxPerTick` pending ADDs per stream emit to ALL clients\n * each shared tick. DELETEs always flush (no cap).\n *\n * Emits directly to the shared-encode buffer: stream & element trees\n * are `isFiltered=true` so the main loop would otherwise skip them.\n * Runs AFTER the main loop so state / parent refs are already encoded\n * — stream ADD ops reference element refIds, which must be decodable.\n */\n private _emitStreamBroadcast(buffer: Uint8Array, it: Iterator): void {\n const streams = this.root.streamTrees;\n for (const stream of streams) {\n const s: any = stream;\n const tree: ChangeTree = s[$changes];\n // Stream is registered with Root but not yet assigned a refId\n // (e.g. created but never attached to state). Skip.\n const streamRefId = s[$refId];\n if (streamRefId === undefined) continue;\n\n // `inheritedFlags.ensureStreamState` allocates `_stream` the\n // moment the tree picks up `isStreamCollection` — Root only\n // tracks trees that reached that point, so `_stream` is\n // guaranteed defined here.\n const st = s._stream!;\n const deletes: Set<number> = st.broadcastDeletes;\n const pending: Set<number> = st.broadcastPending;\n const sent: Set<number> = st.sentBroadcast;\n const hasDeletes = deletes.size > 0;\n const hasAdds = pending.size > 0;\n\n const desc = tree.encDescriptor;\n const streamEncoder = desc.encoder;\n const streamMetadata = desc.metadata;\n\n // Emit stream ADD/DELETE ops for this tick, if any.\n if (hasDeletes || hasAdds) {\n buffer[it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(buffer, streamRefId, it);\n\n // DELETEs first (flush all).\n if (hasDeletes) {\n for (const pos of deletes) {\n streamEncoder(this, buffer, tree, pos, OPERATION.DELETE, it, false, false, streamMetadata);\n }\n deletes.clear();\n }\n\n // ADDs up to maxPerTick.\n const max: number = st.maxPerTick;\n const emittedElements: any[] = [];\n let count = 0;\n const toDelete: number[] = [];\n for (const pos of pending) {\n if (count >= max) break;\n // `$getByIndex` works for any streamable collection:\n // StreamSchema (Map<number, V>) and MapSchema (string-keyed\n // via journal index) both route through the same symbol.\n const element = s[$getByIndex](pos);\n if (element === undefined) {\n toDelete.push(pos);\n continue;\n }\n streamEncoder(this, buffer, tree, pos, OPERATION.ADD, it, false, false, streamMetadata);\n sent.add(pos);\n emittedElements.push(element);\n toDelete.push(pos);\n count++;\n }\n for (const pos of toDelete) pending.delete(pos);\n\n // Emit each element's full state — forEachLive walks populated\n // fields structurally, mirroring encodeAllView's bootstrap.\n // Covers both static elements (dirty state was reset by\n // inheritedFlags' becameStatic branch) and non-static (still\n // has dirty state but the main loop skipped them because\n // they're filtered).\n for (const element of emittedElements) {\n const elTree: ChangeTree | undefined = element[$changes];\n if (elTree === undefined) continue;\n const elRefId = element[$refId];\n if (elRefId === undefined) continue;\n\n buffer[it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(buffer, elRefId, it);\n\n const elDesc = elTree.encDescriptor;\n const elEncoder = elDesc.encoder;\n const elMetadata = elDesc.metadata;\n elTree.forEachLive((idx: number) => {\n // @unreliable fields ship on the unreliable channel only.\n if (Metadata.hasUnreliableAtIndex(elMetadata, idx)) return;\n elEncoder(this, buffer, elTree, idx, OPERATION.ADD, it, false, false, elMetadata);\n });\n }\n }\n\n // Emit mutation updates for already-sent elements. Element\n // trees are `isFiltered=true` (inherited from stream field),\n // so the main loop skips them. We pick up their dirty state\n // here so broadcast mode sees post-send field mutations.\n for (const pos of sent) {\n const element = s[$getByIndex](pos);\n if (element === undefined) continue;\n const elTree: ChangeTree | undefined = element[$changes];\n if (elTree === undefined || !elTree.has()) continue;\n\n const elRefId = element[$refId];\n if (elRefId === undefined) continue;\n\n buffer[it.offset++] = SWITCH_TO_STRUCTURE & 255;\n encode.number(buffer, elRefId, it);\n\n const elDesc = elTree.encDescriptor;\n const elEncoder = elDesc.encoder;\n const elMetadata = elDesc.metadata;\n elTree.forEach((idx: number, op: OPERATION) => {\n if (idx < 0) return; // pure ops (collection only)\n if (Metadata.hasUnreliableAtIndex(elMetadata, idx)) return;\n elEncoder(this, buffer, elTree, idx, op, it, false, false, elMetadata);\n });\n }\n }\n }\n\n /**\n * Walk every registered stream, pick up to `maxPerTick` positions from\n * this view's pending backlog (priority-sorted when the view supplies a\n * `streamPriority` callback), and hand each element to `view.add()`.\n * `view.add()` seeds `view.changes` so the subsequent drain emits both\n * the stream-link (position → refId) and the element's field data.\n *\n * Designed to run at the very top of `encodeView`, BEFORE the\n * view.changes drain loop.\n */\n private _emitStreamPriority(view: StateView): void {\n const streams = this.root.streamTrees;\n if (streams.size === 0) return;\n\n const viewId = view.id;\n\n for (const stream of streams) {\n const s: any = stream;\n // Guaranteed non-undefined: `inheritedFlags.ensureStreamState`\n // runs before Root.registerStream.\n const st = s._stream!;\n const pending: Set<number> | undefined = st.pendingByView.get(viewId);\n if (pending === undefined || pending.size === 0) continue;\n\n // Per-stream priority callback: declared at schema time (via\n // `t.stream(X).priority(fn)` or the decorator form) and seeded\n // into `_stream.priority` when the stream was attached. Users\n // can also override per-instance by assigning to the setter.\n const priority = st.priority;\n\n // Materialize pending into an array so we can sort + slice.\n // Small sets (typical: tens to low hundreds) — allocation is\n // negligible compared to the priority sort and element walk.\n const positions: number[] = [];\n for (const p of pending) positions.push(p);\n\n if (priority !== undefined) {\n // Use the symbol-keyed accessor so Map/Set/Stream all route\n // through the same lookup regardless of $items layout.\n positions.sort(\n (a: number, b: number) => priority(view, s[$getByIndex](b)) - priority(view, s[$getByIndex](a)),\n );\n }\n\n const max = st.maxPerTick;\n const count = Math.min(positions.length, max);\n\n let sent: Set<number> | undefined = st.sentByView.get(viewId);\n if (sent === undefined) {\n sent = new Set();\n st.sentByView.set(viewId, sent);\n }\n\n for (let i = 0; i < count; i++) {\n const pos = positions[i];\n const element = s[$getByIndex](pos);\n if (element === undefined) {\n // Element was removed after being queued but before emit.\n pending.delete(pos);\n continue;\n }\n // `_addImmediate` force-ships the element through view.changes\n // (markVisible + addParentOf + forEachChild recursion) WITHOUT\n // routing stream elements back into pending — we're already\n // draining pending here, so the normal `add()` path would\n // infinite-loop. addParentOf seeds\n // `view.changes[stream.refId][pos] = ADD` (stream-link emit).\n view._addImmediate(element);\n // Force-seed element fields even when view.add skipped\n // forEachLive (isNew && !isChildAdded). Matches the\n // bootstrap emission encodeAllView does for filtered\n // refs. `@unreliable` fields are excluded — they ship\n // on the unreliable channel and force-seeding here\n // would leak onto the reliable view pass.\n const elTree = element[$changes];\n if (elTree !== undefined) {\n const elRefId = element[$refId];\n let elChanges = view.changes.get(elRefId);\n if (elChanges === undefined) {\n elChanges = new Map();\n view.changes.set(elRefId, elChanges);\n }\n const elMetadata = elTree.metadata;\n elTree.forEachLive((index: number) => {\n if (Metadata.hasUnreliableAtIndex(elMetadata, index)) return;\n elChanges!.set(index, OPERATION.ADD);\n });\n }\n pending.delete(pos);\n sent.add(pos);\n }\n }\n }\n\n discardChanges() {\n const list = this.root.changes;\n let current = list.next;\n const root = this.root;\n while (current) {\n const next = current.next;\n current.changeTree.endEncode(); // clears changesNode internally\n root.releaseNode(current);\n current = next;\n }\n list.next = undefined;\n list.tail = undefined;\n\n // End-of-tick: refIds released during this tick have now had their\n // DELETEs emitted through `encode()` / `encodeView()`, so they are\n // safe to recycle on the next tick.\n root.refIds.flushReleases();\n }\n\n discardUnreliableChanges() {\n const list = this.root.unreliableChanges;\n let current = list.next;\n const root = this.root;\n while (current) {\n const next = current.next;\n current.changeTree.endEncodeUnreliable(); // clears unreliableChangesNode internally\n root.releaseNode(current);\n current = next;\n }\n list.next = undefined;\n list.tail = undefined;\n }\n\n tryEncodeTypeId(\n bytes: Uint8Array,\n baseType: typeof Schema,\n targetType: typeof Schema,\n it: Iterator\n ) {\n const baseTypeId = this.context.getTypeId(baseType);\n const targetTypeId = this.context.getTypeId(targetType);\n\n if (targetTypeId === undefined) {\n console.warn(`@colyseus/schema WARNING: Class \"${targetType.name}\" is not registered on TypeRegistry - Please either tag the class with @entity or define a @type() field.`);\n return;\n }\n\n if (baseTypeId !== targetTypeId) {\n bytes[it.offset++] = TYPE_ID & 255;\n encode.number(bytes, targetTypeId, it);\n }\n }\n\n get hasChanges() {\n return this.root.changes.next !== undefined;\n }\n\n get hasUnreliableChanges() {\n return this.root.unreliableChanges.next !== undefined;\n }\n}\n","export function spliceOne(arr: any[], index: number): boolean {\n // manually splice an array\n if (index === -1 || index >= arr.length) {\n return false;\n }\n\n const len = arr.length - 1;\n\n for (let i = index; i < len; i++) {\n arr[i] = arr[i + 1];\n }\n\n arr.length = len;\n\n return true;\n}","import { Metadata } from \"../Metadata.js\";\nimport { $childType, $refId } from \"../types/symbols.js\";\nimport type { IRef } from \"../encoder/ChangeTree.js\";\nimport { spliceOne } from \"../types/utils.js\";\nimport { OPERATION } from \"../encoding/spec.js\";\n\nimport type { MapSchema } from \"../types/custom/MapSchema.js\";\nimport type { Schema } from \"../Schema.js\";\n\nclass DecodingWarning extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"DecodingWarning\";\n }\n}\n\n/**\n * Used for decoding only.\n */\n\nexport type SchemaCallbacks = { [field: string | number]: Function[] };\n\nexport class ReferenceTracker {\n //\n // Relation of refId => Schema structure\n // For direct access of structures during decoding time.\n //\n public refs = new Map<number, IRef>();\n\n public refCount: { [refId: number]: number; } = {};\n public deletedRefs = new Set<number>();\n\n public callbacks: { [refId: number]: SchemaCallbacks } = {};\n protected nextUniqueId: number = 0;\n\n getNextUniqueId() {\n return this.nextUniqueId++;\n }\n\n // for decoding\n addRef(refId: number, ref: IRef, incrementCount: boolean = true) {\n this.refs.set(refId, ref);\n\n // `enumerable: false` is load-bearing: tests use `deepStrictEqual`\n // on decoded instances, which WOULD walk enumerable Symbol-keyed\n // properties and include `$refId` in the comparison. Keep the\n // descriptor dance for semantic compatibility.\n Object.defineProperty(ref, $refId, {\n value: refId,\n enumerable: false,\n writable: true\n });\n\n if (incrementCount) {\n this.refCount[refId] = (this.refCount[refId] || 0) + 1;\n }\n\n if (this.deletedRefs.has(refId)) {\n this.deletedRefs.delete(refId);\n }\n }\n\n // for decoding\n removeRef(refId: number) {\n const refCount = this.refCount[refId];\n\n if (refCount === undefined) {\n try {\n throw new DecodingWarning(\"trying to remove refId that doesn't exist: \" + refId);\n } catch (e) {\n console.warn(e);\n }\n return;\n }\n\n if (refCount === 0) {\n try {\n const ref = this.refs.get(refId);\n throw new DecodingWarning(`trying to remove refId '${refId}' with 0 refCount (${ref.constructor.name}: ${JSON.stringify(ref)})`);\n } catch (e) {\n console.warn(e);\n }\n return;\n }\n\n if ((this.refCount[refId] = refCount - 1) <= 0) {\n this.deletedRefs.add(refId);\n }\n }\n\n clearRefs() {\n this.refs.clear();\n this.deletedRefs.clear();\n this.callbacks = {};\n this.refCount = {};\n }\n\n // for decoding\n garbageCollectDeletedRefs() {\n this.deletedRefs.forEach((refId) => {\n //\n // Skip active references.\n //\n if (this.refCount[refId] > 0) { return; }\n\n const ref = this.refs.get(refId);\n\n //\n // Ensure child schema instances have their references removed as well.\n //\n if ((ref.constructor as typeof Schema)[Symbol.metadata] !== undefined) {\n const metadata: Metadata = (ref.constructor as typeof Schema)[Symbol.metadata];\n for (const index in metadata) {\n const field = metadata[index as any as number].name;\n const child = ref[field as keyof IRef];\n if (typeof(child) === \"object\" && child) {\n const childRefId = (child as any)[$refId];\n if (childRefId !== undefined && !this.deletedRefs.has(childRefId)) {\n this.removeRef(childRefId);\n }\n }\n }\n\n } else {\n if (typeof ((ref as any)[$childType]) === \"function\") {\n Array.from((ref as MapSchema).values())\n .forEach((child) => {\n const childRefId = child[$refId];\n if (childRefId !== undefined && !this.deletedRefs.has(childRefId)) {\n this.removeRef(childRefId);\n }\n });\n }\n }\n\n this.refs.delete(refId); // remove ref\n delete this.refCount[refId]; // remove ref count\n delete this.callbacks[refId]; // remove callbacks\n });\n\n // clear deleted refs.\n this.deletedRefs.clear();\n }\n\n addCallback(refId: number, fieldOrOperation: string | number, callback: Function) {\n if (refId === undefined) {\n const name = (typeof(fieldOrOperation) === \"number\")\n ? OPERATION[fieldOrOperation]\n : fieldOrOperation\n throw new Error(\n `Can't addCallback on '${name}' (refId is undefined)`\n );\n }\n if (!this.callbacks[refId]) {\n this.callbacks[refId] = {};\n }\n if (!this.callbacks[refId][fieldOrOperation]) {\n this.callbacks[refId][fieldOrOperation] = [];\n }\n this.callbacks[refId][fieldOrOperation].push(callback);\n return () => this.removeCallback(refId, fieldOrOperation, callback);\n }\n\n removeCallback(refId: number, field: string | number, callback: Function) {\n const index: number | undefined = this.callbacks?.[refId]?.[field]?.indexOf(callback);\n if (index !== undefined && index !== -1) {\n spliceOne(this.callbacks[refId][field], index);\n }\n }\n\n}\n","import { TypeContext } from \"../types/TypeContext.js\";\nimport { $childType, $decoder, $onDecodeEnd, $refId } from \"../types/symbols.js\";\nimport { Schema } from \"../Schema.js\";\nimport { decode } from \"../encoding/decode.js\";\nimport { OPERATION, SWITCH_TO_STRUCTURE, TYPE_ID } from '../encoding/spec.js';\nimport { type IRef, type Ref } from \"../encoder/ChangeTree.js\";\nimport type { Iterator } from \"../encoding/decode.js\";\nimport { ReferenceTracker } from \"./ReferenceTracker.js\";\nimport { DEFINITION_MISMATCH, type DataChange, type DecodeOperation } from \"./DecodeOperation.js\";\nimport { Collection } from \"../types/HelperTypes.js\";\n\nexport class Decoder<T extends IRef = any> {\n context: TypeContext;\n\n state: T;\n root: ReferenceTracker;\n\n currentRefId: number = 0;\n\n triggerChanges?: (allChanges: DataChange[]) => void;\n\n constructor(root: T, context?: TypeContext) {\n this.setState(root);\n\n this.context = context || new TypeContext(root.constructor as typeof Schema);\n\n // console.log(\">>>>>>>>>>>>>>>> Decoder types\");\n // this.context.schemas.forEach((id, schema) => {\n // console.log(\"type:\", id, schema.name, Object.keys(schema[Symbol.metadata]));\n // });\n }\n\n protected setState(root: T) {\n this.state = root;\n this.root = new ReferenceTracker();\n this.root.addRef(0, root);\n }\n\n decode(\n bytes: Uint8Array,\n it: Iterator = { offset: 0 },\n ref: IRef = this.state,\n ) {\n // Only allocate a collection array when there's a subscriber. Every\n // decode-op push site uses `allChanges?.push(...)` — optional\n // chaining short-circuits the object literal too, so a listener-\n // free decoder does zero per-field allocation.\n const allChanges: DataChange[] | null = (this.triggerChanges !== undefined)\n ? []\n : null;\n\n const $root = this.root;\n const totalBytes = bytes.byteLength;\n\n let decoder: DecodeOperation = ref['constructor'][$decoder];\n\n this.currentRefId = 0;\n\n while (it.offset < totalBytes) {\n //\n // Peek ahead, check if it's a switch to a different structure\n //\n if (bytes[it.offset] == SWITCH_TO_STRUCTURE) {\n it.offset++;\n\n (ref as any)[$onDecodeEnd]?.()\n\n const nextRefId = decode.number(bytes, it);\n const nextRef = $root.refs.get(nextRefId);\n\n //\n // Trying to access a reference that haven't been decoded yet.\n //\n if (!nextRef) {\n // throw new Error(`\"refId\" not found: ${nextRefId}`);\n console.error(`\"refId\" not found: ${nextRefId}`, { previousRef: ref, previousRefId: this.currentRefId });\n console.warn(\"Please report this issue to the developers.\");\n this.skipCurrentStructure(bytes, it, totalBytes);\n\n } else {\n ref = nextRef;\n decoder = ref.constructor[$decoder];\n this.currentRefId = nextRefId;\n }\n\n continue;\n }\n\n const result = decoder(this, bytes, it, ref, allChanges);\n\n if (result === DEFINITION_MISMATCH) {\n console.warn(\"@colyseus/schema: definition mismatch\");\n this.skipCurrentStructure(bytes, it, totalBytes);\n continue;\n }\n }\n\n // Close out the last ref's decode session — mirrors the\n // SWITCH_TO_STRUCTURE block above, which fires it at every\n // intra-loop structure transition. ArraySchema uses this to\n // compact `items` after a tick's deletes. No other consumer\n // currently hooks it; the dual call sites stay as-is rather\n // than being extracted into a helper for a one-line body.\n (ref as any)[$onDecodeEnd]?.()\n\n // trigger changes\n if (allChanges !== null) this.triggerChanges?.(allChanges);\n\n // drop references of unused schemas\n $root.garbageCollectDeletedRefs();\n\n return allChanges;\n }\n\n skipCurrentStructure(bytes: Uint8Array, it: Iterator, totalBytes: number) {\n //\n // keep skipping next bytes until reaches a known structure\n // by local decoder.\n //\n const nextIterator: Iterator = { offset: it.offset };\n while (it.offset < totalBytes) {\n if (bytes[it.offset] === SWITCH_TO_STRUCTURE) {\n nextIterator.offset = it.offset + 1;\n if (this.root.refs.has(decode.number(bytes, nextIterator))) {\n break;\n }\n }\n it.offset++;\n }\n }\n\n getInstanceType(bytes: Uint8Array, it: Iterator, defaultType: typeof Schema): typeof Schema {\n let type: typeof Schema;\n\n if (bytes[it.offset] === TYPE_ID) {\n it.offset++;\n const type_id = decode.number(bytes, it);\n type = this.context.get(type_id);\n }\n\n return type || defaultType;\n }\n\n createInstanceOfType(type: typeof Schema): Schema {\n return type.initializeForDecoder();\n }\n\n removeChildRefs(ref: Collection, allChanges: DataChange[] | null) {\n const needRemoveRef = typeof ((ref as any)[$childType]) !== \"string\";\n const refId = (ref as Ref)[$refId];\n\n ref.forEach((value: any, key: any) => {\n allChanges?.push({\n ref: ref as Ref,\n refId,\n op: OPERATION.DELETE,\n field: key,\n value: undefined,\n previousValue: value\n });\n\n if (needRemoveRef) {\n this.root.removeRef(value[$refId]);\n }\n });\n }\n\n}\n","import { PrimitiveType, schema, SchemaType } from \"./annotations.js\";\nimport { TypeContext } from \"./types/TypeContext.js\";\nimport { Metadata } from \"./Metadata.js\";\nimport { Iterator } from \"./encoding/decode.js\";\nimport { Encoder } from \"./encoder/Encoder.js\";\nimport { Decoder } from \"./decoder/Decoder.js\";\nimport { Schema } from \"./Schema.js\";\nimport { t, FieldBuilder } from \"./types/builder.js\";\nimport { ArraySchema } from \"./types/custom/ArraySchema.js\";\nimport { $encodeDescriptor, $numFields } from \"./types/symbols.js\";\n\n/**\n * Static methods available on Reflection\n */\ninterface ReflectionStatic {\n /**\n * Encodes the TypeContext of an Encoder into a buffer.\n *\n * @param encoder Encoder instance\n * @param it\n * @returns\n */\n encode: (encoder: Encoder, it?: Iterator) => Uint8Array;\n\n /**\n * Decodes the TypeContext from a buffer into a Decoder instance.\n *\n * @param bytes Reflection.encode() output\n * @param it\n * @returns Decoder instance\n */\n decode: <T extends Schema = Schema>(bytes: Uint8Array, it?: Iterator) => Decoder<T>;\n\n /**\n * Upgrade a class produced by `Reflection.decode` so its instances\n * can be used as encode sources (for `InputEncoder` or `Encoder`).\n *\n * `Reflection.decode` reconstructs classes with decoder-only field\n * slots — `inst.x = 7` lands as a direct own property and bypasses\n * the change-tracking + `$values` plumbing that encoders rely on.\n * Calling `makeEncodable(ctor)` installs the same prototype accessor\n * descriptors and `metadata[$encoders]` lookup table that the\n * `schema(...)` / `@type` builders install at class-definition time.\n *\n * Idempotent. Pay-as-you-go: callers that only decode never invoke\n * this and pay nothing extra. Must be called BEFORE any instance of\n * the class is constructed and assigned to.\n */\n makeEncodable: (ctor: typeof Schema) => typeof Schema;\n}\n\n/**\n * Reflection\n */\nexport const ReflectionField = schema({\n name: t.string(),\n type: t.string(),\n referencedType: t.number(),\n}, \"ReflectionField\");\nexport type ReflectionField = SchemaType<typeof ReflectionField>;\n\nexport const ReflectionType = schema({\n id: t.number(),\n extendsId: t.number(),\n fields: t.array(ReflectionField),\n}, \"ReflectionType\");\nexport type ReflectionType = SchemaType<typeof ReflectionType>;\n\nexport const Reflection = schema({\n types: t.array(ReflectionType),\n rootType: t.number(),\n}, \"Reflection\") as ReturnType<typeof schema<{\n types: FieldBuilder<ArraySchema<ReflectionType>, true, false>;\n rootType: FieldBuilder<number, false, false>;\n}>> & ReflectionStatic;\n\nexport type Reflection = SchemaType<typeof Reflection>;\n\nReflection.encode = function (encoder: Encoder, it: Iterator = { offset: 0 }) {\n const context = encoder.context;\n\n const reflection = new Reflection();\n const reflectionEncoder = new Encoder(reflection);\n\n // rootType is usually the first schema passed to the Encoder\n // (unless it inherits from another schema)\n const rootType = context.schemas.get(encoder.state.constructor);\n if (rootType > 0) { reflection.rootType = rootType; }\n\n const includedTypeIds = new Set<number>();\n const pendingReflectionTypes: { [typeid: number]: ReflectionType[] } = {};\n\n // add type to reflection in a way that respects inheritance\n // (parent types should be added before their children)\n const addType = (type: ReflectionType) => {\n if (type.extendsId === undefined || includedTypeIds.has(type.extendsId)) {\n includedTypeIds.add(type.id);\n\n reflection.types.push(type);\n\n const deps = pendingReflectionTypes[type.id];\n if (deps !== undefined) {\n delete pendingReflectionTypes[type.id];\n deps.forEach((childType) => addType(childType));\n }\n } else {\n if (pendingReflectionTypes[type.extendsId] === undefined) {\n pendingReflectionTypes[type.extendsId] = [];\n }\n pendingReflectionTypes[type.extendsId].push(type);\n }\n };\n\n context.schemas.forEach((typeid, klass) => {\n const type = new ReflectionType();\n type.id = Number(typeid);\n\n // support inheritance\n const inheritFrom = Object.getPrototypeOf(klass);\n if (inheritFrom !== Schema) {\n type.extendsId = context.schemas.get(inheritFrom);\n }\n\n const metadata = klass[Symbol.metadata];\n\n //\n // FIXME: this is a workaround for inherited types without additional fields\n // if metadata is the same reference as the parent class - it means the class has no own metadata\n //\n if (metadata !== inheritFrom[Symbol.metadata]) {\n for (const fieldIndex in metadata) {\n const index = Number(fieldIndex);\n const fieldName = metadata[index].name;\n\n // skip fields from parent classes\n if (!Object.prototype.hasOwnProperty.call(metadata, fieldName)) {\n continue;\n }\n\n const reflectionField = new ReflectionField();\n reflectionField.name = fieldName;\n\n let fieldType: string;\n\n const field = metadata[index];\n\n if (typeof (field.type) === \"string\") {\n fieldType = field.type;\n\n } else {\n let childTypeSchema: typeof Schema;\n\n //\n // TODO: refactor below.\n //\n if (Schema.is(field.type)) {\n fieldType = \"ref\";\n childTypeSchema = field.type as typeof Schema;\n\n } else {\n fieldType = Object.keys(field.type)[0];\n\n if (typeof (field.type[fieldType as keyof typeof field.type]) === \"string\") {\n fieldType += \":\" + field.type[fieldType as keyof typeof field.type]; // array:string\n\n } else {\n childTypeSchema = field.type[fieldType as keyof typeof field.type];\n }\n }\n\n reflectionField.referencedType = (childTypeSchema)\n ? context.getTypeId(childTypeSchema)\n : -1;\n }\n\n reflectionField.type = fieldType;\n type.fields.push(reflectionField);\n }\n }\n\n addType(type);\n });\n\n // in case there are types that were not added due to inheritance\n for (const typeid in pendingReflectionTypes) {\n pendingReflectionTypes[typeid].forEach((type) =>\n reflection.types.push(type))\n }\n\n const buf = reflectionEncoder.encodeAll(it);\n return buf.slice(0, it.offset);\n};\n\nReflection.decode = function <T extends Schema = Schema>(bytes: Uint8Array, it?: Iterator): Decoder<T> {\n const reflection = new Reflection();\n\n const reflectionDecoder = new Decoder(reflection);\n reflectionDecoder.decode(bytes, it);\n\n const typeContext = new TypeContext();\n\n // 1st pass, initialize metadata + inheritance\n reflection.types.forEach((reflectionType) => {\n const parentClass: typeof Schema = typeContext.get(reflectionType.extendsId) ?? Schema;\n const schema: typeof Schema = class _ extends parentClass { };\n\n // register for inheritance support\n TypeContext.register(schema);\n\n typeContext.add(schema, reflectionType.id);\n }, {});\n\n // define fields\n const addFields = (metadata: Metadata, reflectionType: ReflectionType, parentFieldIndex: number) => {\n reflectionType.fields.forEach((field, i) => {\n const fieldIndex = parentFieldIndex + i;\n\n if (field.referencedType !== undefined) {\n let fieldType = field.type;\n let refType: PrimitiveType = typeContext.get(field.referencedType);\n\n // map or array of primitive type (-1)\n if (!refType) {\n const typeInfo = field.type.split(\":\");\n fieldType = typeInfo[0];\n refType = typeInfo[1] as PrimitiveType; // string\n }\n\n if (fieldType === \"ref\") {\n Metadata.addField(metadata, fieldIndex, field.name, refType);\n\n } else {\n Metadata.addField(metadata, fieldIndex, field.name, { [fieldType]: refType });\n }\n\n } else {\n Metadata.addField(metadata, fieldIndex, field.name, field.type as PrimitiveType);\n }\n });\n };\n\n // 2nd pass, set fields\n reflection.types.forEach((reflectionType) => {\n const schema = typeContext.get(reflectionType.id);\n\n // for inheritance support\n const metadata = Metadata.initialize(schema);\n\n const inheritedTypes: ReflectionType[] = [];\n\n let parentType: ReflectionType = reflectionType;\n do {\n inheritedTypes.push(parentType);\n parentType = reflection.types.find((t) => t.id === parentType.extendsId);\n } while (parentType);\n\n let parentFieldIndex = 0;\n\n inheritedTypes.reverse().forEach((reflectionType) => {\n // add fields from all inherited classes\n // TODO: refactor this to avoid adding fields from parent classes\n addFields(metadata, reflectionType, parentFieldIndex);\n parentFieldIndex += reflectionType.fields.length;\n });\n });\n\n const state: T = new (typeContext.get(reflection.rootType || 0) as unknown as any)();\n\n return new Decoder<T>(state, typeContext);\n}\n\nReflection.makeEncodable = function (ctor: typeof Schema): typeof Schema {\n const metadata: any = (ctor as any)[Symbol.metadata];\n if (!metadata) return ctor;\n\n const numFields = metadata[$numFields];\n if (numFields === undefined) return ctor;\n\n // Walk every field index across the inheritance chain. Repeat calls\n // are cheap: defineField overwrites the same descriptor and re-stamps\n // the same `metadata[$encoders]` slot (idempotent).\n for (let i = 0; i <= numFields; i++) {\n const field = metadata[i];\n if (!field) continue;\n Metadata.defineField(ctor, metadata, i, field.name, field.type);\n }\n\n // Invalidate any cached encode descriptor — `getEncodeDescriptor`\n // memoizes on the constructor. If something already constructed it\n // (e.g. a prior `InputEncoder(...)` call that threw), drop the stale\n // entry so the next read sees the upgraded metadata.\n if (Object.prototype.hasOwnProperty.call(ctor, $encodeDescriptor)) {\n delete (ctor as any)[$encodeDescriptor];\n }\n\n return ctor;\n};","import { Metadata } from \"../../Metadata.js\";\nimport { Collection, NonFunctionNonPrimitivePropNames, NonFunctionPropNames } from \"../../types/HelperTypes.js\";\nimport { IRef, Ref } from \"../../encoder/ChangeTree.js\";\nimport { Decoder } from \"../Decoder.js\";\nimport { DataChange } from \"../DecodeOperation.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { Schema } from \"../../Schema.js\";\nimport { $refId } from \"../../types/symbols.js\";\nimport type { DefinitionType } from \"../../annotations.js\";\nimport type { CollectionSchema } from \"../../types/custom/CollectionSchema.js\";\n\n//\n// Discussion: https://github.com/colyseus/schema/issues/155\n//\n// Main points:\n// - Decouple structures from their callbacks.\n// - Registering deep callbacks can be confusing.\n// - Avoid closures by allowing to pass a context. (https://github.com/colyseus/schema/issues/155#issuecomment-1804694081)\n//\n\n/**\n * TODO: define a schema interface, which even having duplicate definitions, it could be used to get the callback proxy.\n *\n * ```ts\n * export type SchemaCallbackProxy<RoomState> = (<T extends Schema>(instance: T) => CallbackProxy<T>);\n * ```\n */\nexport type SchemaCallbackProxy<RoomState> = (<T>(instance: T) => CallbackProxy<T>);\nexport type GetCallbackProxy = SchemaCallbackProxy<any>; // workaround for compatibility for < colyseus.js0.16.6. Remove me on next major release.\n\nexport type CallbackProxy<T> = unknown extends T // is \"any\"?\n ? SchemaCallback<T> & CollectionCallback<any, any>\n : T extends Collection<infer K, infer V, infer _>\n ? CollectionCallback<K, V>\n : SchemaCallback<T>;\n\nexport type SchemaCallback<T> = {\n /**\n * Trigger callback when value of a property changes.\n *\n * @param prop name of the property\n * @param callback callback to be triggered on property change\n * @param immediate trigger immediatelly if property has been already set.\n * @return callback to detach the listener\n */\n listen<K extends NonFunctionPropNames<T>>(\n prop: K,\n callback: (value: T[K], previousValue: T[K]) => void,\n immediate?: boolean,\n ): () => void;\n\n /**\n * Trigger callback whenever any property changed within this instance.\n *\n * @param prop name of the property\n * @param callback callback to be triggered on property change\n * @param immediate trigger immediatelly if property has been already set.\n * @return callback to detach the listener\n */\n onChange(callback: () => void): () => void;\n\n /**\n * Bind properties to another object. Changes on the properties will be reflected on the target object.\n *\n * @param targetObject object to bind properties to\n * @param properties list of properties to bind. If not provided, all properties will be bound.\n */\n bindTo(targetObject: any, properties?: Array<NonFunctionPropNames<T>>): void;\n} & {\n [K in NonFunctionNonPrimitivePropNames<T>]: CallbackProxy<T[K]>;\n}\n\nexport type CollectionCallback<K, V> = {\n /**\n * Trigger callback when an item has been added to the collection.\n *\n * @param callback\n * @param immediate\n * @return callback to detach the onAdd listener\n */\n onAdd(callback: (item: V, index: K) => void, immediate?: boolean): () => void;\n\n /**\n * Trigger callback when an item has been removed to the collection.\n *\n * @param callback\n * @return callback to detach the onRemove listener\n */\n onRemove(callback: (item: V, index: K) => void): () => void;\n\n /**\n * Trigger callback when the value on a key has changed.\n *\n * THIS METHOD IS NOT RECURSIVE!\n * If you want to listen to changes on individual items, you need to attach callbacks to the them directly inside the `onAdd` callback.\n *\n * @param callback\n * @return callback to detach the onChange listener\n */\n onChange(callback: (item: V, index: K) => void): () => void;\n};\n\ntype OnInstanceAvailableCallback = (callback: (ref: Ref, existing: boolean) => void) => void;\n\ntype CallContext = {\n instance?: any,\n parentInstance?: any,\n onInstanceAvailable?: OnInstanceAvailableCallback,\n}\n\n/**\n * Legacy callback system\n *\n * @param decoder\n * @returns\n */\nexport function getDecoderStateCallbacks<T extends Schema>(decoder: Decoder<T>): SchemaCallbackProxy<T> {\n const $root = decoder.root;\n const callbacks = $root.callbacks;\n\n const onAddCalls: WeakMap<Function, boolean> = new WeakMap();\n let currentOnAddCallback: Function | undefined;\n\n decoder.triggerChanges = function (allChanges: DataChange[]) {\n const uniqueRefIds = new Set<number>();\n\n for (let i = 0, l = allChanges.length; i < l; i++) {\n const change = allChanges[i];\n const refId = change.refId;\n const ref = change.ref;\n const $callbacks = callbacks[refId];\n\n if (!$callbacks) { continue; }\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n Schema.isSchema(change.previousValue)\n ) {\n const deleteCallbacks = callbacks[(change.previousValue as Ref)[$refId]]?.[OPERATION.DELETE];\n for (let i = deleteCallbacks?.length - 1; i >= 0; i--) {\n deleteCallbacks[i]();\n }\n }\n\n if (Schema.isSchema(ref)) {\n //\n // Handle schema instance\n //\n\n if (!uniqueRefIds.has(refId)) {\n // trigger onChange\n const replaceCallbacks = $callbacks?.[OPERATION.REPLACE];\n for (let i = replaceCallbacks?.length - 1; i >= 0; i--) {\n replaceCallbacks[i]();\n }\n }\n\n if ($callbacks.hasOwnProperty(change.field)) {\n const fieldCallbacks = $callbacks[change.field];\n for (let i = fieldCallbacks?.length - 1; i >= 0; i--) {\n fieldCallbacks[i](change.value, change.previousValue);\n }\n }\n\n\n } else {\n //\n // Handle collection of items\n //\n\n if ((change.op & OPERATION.DELETE) === OPERATION.DELETE) {\n // DELETE can arrive with `previousValue === undefined` in\n // two legitimate cases — neither is fixable decoder-side:\n // 1. DELETE_AND_ADD (op byte 192) for an index/refId the\n // decoder never held (e.g. a client whose @view\n // subscription just began sees the replacement op\n // first). The ADD half still fires below.\n // 2. DELETE_BY_REFID (decodeArray) for a filtered\n // ArraySchema ref that was never ADDed on this\n // decoder; that push site is unconditional.\n // The guard prevents `onRemove(undefined, key)` from firing.\n if (change.previousValue !== undefined) {\n // triger onRemove\n const deleteCallbacks = $callbacks[OPERATION.DELETE];\n for (let i = deleteCallbacks?.length - 1; i >= 0; i--) {\n deleteCallbacks[i](change.previousValue, change.dynamicIndex ?? change.field);\n }\n }\n\n // Handle DELETE_AND_ADD operations\n if ((change.op & OPERATION.ADD) === OPERATION.ADD) {\n const addCallbacks = $callbacks[OPERATION.ADD];\n for (let i = addCallbacks?.length - 1; i >= 0; i--) {\n addCallbacks[i](change.value, change.dynamicIndex ?? change.field);\n }\n }\n\n } else if (\n (change.op & OPERATION.ADD) === OPERATION.ADD &&\n change.previousValue !== change.value\n ) {\n // triger onAdd\n const addCallbacks = $callbacks[OPERATION.ADD];\n for (let i = addCallbacks?.length - 1; i >= 0; i--) {\n addCallbacks[i](change.value, change.dynamicIndex ?? change.field);\n }\n }\n\n // trigger onChange\n // The `value !== undefined || previousValue !== undefined` half\n // suppresses spurious onChange calls for DELETEs the decoder\n // never had context for — same two cases documented above\n // (DELETE_AND_ADD post-view-grant, DELETE_BY_REFID for unseen\n // refIds), plus the historical \"ADD+DELETE collapsed to DELETE\n // on the wire\" path now neutralized at the push site.\n if (\n change.value !== change.previousValue &&\n (change.value !== undefined || change.previousValue !== undefined)\n ) {\n const replaceCallbacks = $callbacks[OPERATION.REPLACE];\n for (let i = replaceCallbacks?.length - 1; i >= 0; i--) {\n replaceCallbacks[i](change.value, change.dynamicIndex ?? change.field);\n }\n }\n }\n\n uniqueRefIds.add(refId);\n }\n };\n\n function getProxy(\n metadataOrType: Metadata | DefinitionType,\n context: CallContext\n ) {\n let metadata: Metadata = context.instance?.constructor[Symbol.metadata] || metadataOrType;\n let isCollection = (\n (context.instance && typeof (context.instance['forEach']) === \"function\") ||\n (metadataOrType && typeof ((metadataOrType as typeof Schema)[Symbol.metadata]) === \"undefined\")\n );\n\n if (metadata && !isCollection) {\n\n const onAddListen = function (\n ref: Ref,\n prop: string,\n callback: (value: any, previousValue: any) => void, immediate: boolean\n ) {\n // immediate trigger\n if (\n immediate &&\n context.instance[prop] !== undefined &&\n !onAddCalls.has(currentOnAddCallback) // Workaround for https://github.com/colyseus/schema/issues/147\n ) {\n callback(context.instance[prop], undefined);\n }\n return $root.addCallback(ref[$refId], prop, callback);\n }\n\n /**\n * Schema instances\n */\n return new Proxy({\n listen: function listen(prop: string, callback: (value: any, previousValue: any) => void, immediate: boolean = true) {\n if (context.instance) {\n return onAddListen(context.instance, prop, callback, immediate);\n\n } else {\n // collection instance not received yet\n let detachCallback = () => {};\n\n context.onInstanceAvailable((ref: Ref, existing: boolean) => {\n detachCallback = onAddListen(ref, prop, callback, immediate && existing && !onAddCalls.has(currentOnAddCallback))\n });\n\n return () => detachCallback();\n }\n },\n\n onChange: function onChange(callback: () => void) {\n return $root.addCallback(\n context.instance[$refId],\n OPERATION.REPLACE,\n callback\n );\n },\n\n //\n // TODO: refactor `bindTo()` implementation.\n // There is room for improvement.\n //\n bindTo: function bindTo(targetObject: any, properties?: string[]) {\n if (!properties) {\n properties = Object.keys(metadata).map((index) => metadata[index as any as number].name);\n }\n return $root.addCallback(\n context.instance[$refId],\n OPERATION.REPLACE,\n () => {\n properties.forEach((prop) =>\n targetObject[prop] = context.instance[prop])\n }\n );\n }\n }, {\n get(target, prop: string) {\n const metadataField = metadata[metadata[prop]];\n if (metadataField) {\n const instance = context.instance?.[prop];\n const onInstanceAvailable: OnInstanceAvailableCallback = (\n (callback: (ref: Ref, existing: boolean) => void) => {\n const unbind = $(context.instance).listen(prop, (value, _) => {\n callback(value, false);\n\n // FIXME: by \"unbinding\" the callback here,\n // it will not support when the server\n // re-instantiates the instance.\n //\n unbind?.();\n }, false);\n\n // has existing value\n if (instance?.[$refId] !== undefined) {\n callback(instance, true);\n }\n }\n );\n\n return getProxy(metadataField.type, {\n // make sure refId is available, otherwise need to wait for the instance to be available.\n instance: (instance?.[$refId] !== undefined && instance),\n parentInstance: context.instance,\n onInstanceAvailable,\n });\n\n } else {\n // accessing the function\n return target[prop as keyof typeof target];\n }\n },\n has(target, prop: string) { return metadata[prop] !== undefined; },\n set(_, _1, _2) { throw new Error(\"not allowed\"); },\n deleteProperty(_, _1) { throw new Error(\"not allowed\"); },\n });\n\n } else {\n /**\n * Collection instances\n */\n\n const onAdd = function (ref: Ref, callback: (value: any, key: any) => void, immediate: boolean) {\n // Trigger callback on existing items\n if (immediate) {\n (ref as CollectionSchema).forEach((v, k) => callback(v, k));\n }\n\n return $root.addCallback(ref[$refId], OPERATION.ADD, (value: any, key: any) => {\n onAddCalls.set(callback, true);\n currentOnAddCallback = callback;\n callback(value, key);\n onAddCalls.delete(callback)\n currentOnAddCallback = undefined;\n });\n };\n\n const onRemove = function (ref: Ref, callback: (value: any, key: any) => void) {\n return $root.addCallback(ref[$refId], OPERATION.DELETE, callback);\n };\n\n const onChange = function (ref: Ref, callback: (value: any, key: any) => void) {\n return $root.addCallback(ref[$refId], OPERATION.REPLACE, callback);\n };\n\n return new Proxy({\n onAdd: function(callback: (value: any, key: any) => void, immediate: boolean = true) {\n //\n // https://github.com/colyseus/schema/issues/147\n // If parent instance has \"onAdd\" registered, avoid triggering immediate callback.\n //\n\n if (context.instance) {\n return onAdd(context.instance, callback, immediate && !onAddCalls.has(currentOnAddCallback));\n\n } else if (context.onInstanceAvailable) {\n // collection instance not received yet\n let detachCallback = () => {};\n\n context.onInstanceAvailable((ref: Ref, existing: boolean) => {\n detachCallback = onAdd(ref, callback, immediate && existing && !onAddCalls.has(currentOnAddCallback));\n });\n\n return () => detachCallback();\n }\n },\n onRemove: function(callback: (value: any, key: any) => void) {\n if (context.instance) {\n return onRemove(context.instance, callback);\n\n } else if (context.onInstanceAvailable) {\n // collection instance not received yet\n let detachCallback = () => {};\n\n context.onInstanceAvailable((ref: Ref) => {\n detachCallback = onRemove(ref, callback)\n });\n\n return () => detachCallback();\n }\n },\n onChange: function(callback: (value: any, key: any) => void) {\n if (context.instance) {\n return onChange(context.instance, callback);\n\n } else if (context.onInstanceAvailable) {\n // collection instance not received yet\n let detachCallback = () => {};\n\n context.onInstanceAvailable((ref: Ref) => {\n detachCallback = onChange(ref, callback)\n });\n\n return () => detachCallback();\n }\n },\n }, {\n get(target, prop: string) {\n if (!target[prop as keyof typeof target]) {\n throw new Error(`Can't access '${prop}' through callback proxy. access the instance directly.`);\n }\n return target[prop as keyof typeof target];\n },\n has(target, prop) { return target[prop as keyof typeof target] !== undefined; },\n set(_, _1, _2) { throw new Error(\"not allowed\"); },\n deleteProperty(_, _1) { throw new Error(\"not allowed\"); },\n });\n }\n }\n\n function $<T>(instance: T): CallbackProxy<T> {\n return getProxy(undefined, { instance }) as unknown as CallbackProxy<T>;\n }\n\n return $;\n}\n","import { DataChange } from \"../DecodeOperation.js\";\nimport { Decoder } from \"../Decoder.js\";\n\nexport function getRawChangesCallback(\n decoder: Decoder,\n callback: (changes: DataChange[]) => void\n) {\n decoder.triggerChanges = callback;\n}","import { Metadata } from \"../../Metadata.js\";\nimport { Collection, NonFunctionPropNames } from \"../../types/HelperTypes.js\";\nimport type { IRef, Ref } from \"../../encoder/ChangeTree.js\";\nimport { Decoder } from \"../Decoder.js\";\nimport { DataChange } from \"../DecodeOperation.js\";\nimport { OPERATION } from \"../../encoding/spec.js\";\nimport { Schema } from \"../../Schema.js\";\nimport { $refId } from \"../../types/symbols.js\";\nimport { MapSchema } from \"../../types/custom/MapSchema.js\";\nimport { ArraySchema } from \"../../types/custom/ArraySchema.js\";\nimport { getDecoderStateCallbacks, type SchemaCallbackProxy } from \"./getDecoderStateCallbacks.js\";\nimport { getRawChangesCallback } from \"./RawChanges.js\";\n\n//\n// C#-style Callbacks API (https://docs.colyseus.io/state/callbacks)\n//\n// Key features:\n// - Uses string property names with TypeScript auto-completion\n// - Parameter order (value, key) for onAdd/onRemove callbacks\n// - Overloaded methods for nested instance callbacks\n//\n\ntype PropertyChangeCallback<K> = (currentValue: K, previousValue: K) => void;\ntype KeyValueCallback<K, V> = (key: K, value: V) => void;\ntype ValueKeyCallback<V, K> = (value: V, key: K) => void;\ntype InstanceChangeCallback = () => void;\n\n// Exclude internal properties from valid property names\ntype PublicPropNames<T> = Exclude<NonFunctionPropNames<T>, typeof $refId> & string;\n\n// Extract only properties that extend Collection\ntype CollectionPropNames<T> = Exclude<{\n [K in keyof T]: T[K] extends Collection<any, any> ? K : never\n}[keyof T] & string, typeof $refId>;\n\n// Infer the value type of a collection property\ntype CollectionValueType<T, K extends keyof T> =\n T[K] extends MapSchema<infer V, any> ? V :\n T[K] extends ArraySchema<infer V> ? V :\n T[K] extends Collection<any, infer V, any> ? V : never;\n\n// Infer the key type of a collection property\ntype CollectionKeyType<T, K extends keyof T> =\n T[K] extends MapSchema<any, infer Key> ? Key :\n T[K] extends ArraySchema<any> ? number :\n T[K] extends Collection<infer Key, any, any> ? Key : never;\n\nexport class StateCallbackStrategy<TState extends IRef> {\n protected decoder: Decoder<TState>;\n protected uniqueRefIds: Set<number> = new Set();\n protected isTriggering: boolean = false;\n\n constructor(decoder: Decoder<TState>) {\n this.decoder = decoder;\n this.decoder.triggerChanges = this.triggerChanges.bind(this);\n }\n\n protected get callbacks() {\n return this.decoder.root.callbacks;\n }\n\n protected get state() {\n return this.decoder.state;\n }\n\n protected addCallback(\n refId: number,\n operationOrProperty: OPERATION | string,\n handler: Function\n ): () => void {\n const $root = this.decoder.root;\n return $root.addCallback(refId, operationOrProperty, handler);\n }\n\n protected addCallbackOrWaitCollectionAvailable<TInstance extends IRef, TReturn extends Ref>(\n instance: TInstance,\n propertyName: string,\n operation: OPERATION,\n handler: Function,\n immediate: boolean = true\n ): () => void {\n let removeHandler: () => void = () => {};\n const removeOnAdd = () => removeHandler();\n\n const collection = (instance as any)[propertyName] as TReturn;\n\n // Collection not available yet. Listen for its availability before attaching the handler.\n if (!collection || collection[$refId] === undefined) {\n let removePropertyCallback: () => void;\n removePropertyCallback = this.addCallback(\n instance[$refId],\n propertyName,\n (value: TReturn, _: TReturn) => {\n if (value !== null && value !== undefined) {\n // Remove the property listener now that collection is available\n removePropertyCallback();\n removeHandler = this.addCallback(value[$refId], operation, handler);\n }\n }\n );\n removeHandler = removePropertyCallback;\n return removeOnAdd;\n\n } else {\n //\n // Call immediately if collection is already available, if it's an ADD operation.\n //\n immediate = immediate && this.isTriggering === false;\n\n if (operation === OPERATION.ADD && immediate) {\n (collection as Collection<any, any>).forEach((value: any, key: any) => {\n handler(value, key);\n });\n }\n\n return this.addCallback(collection[$refId], operation, handler);\n }\n }\n\n /**\n * Listen to property changes on the root state.\n */\n listen<K extends PublicPropNames<TState>>(\n property: K,\n handler: PropertyChangeCallback<TState[K]>,\n immediate?: boolean\n ): () => void;\n\n /**\n * Listen to property changes on a nested instance.\n */\n listen<TInstance extends Schema, K extends PublicPropNames<TInstance>>(\n instance: TInstance,\n property: K,\n handler: PropertyChangeCallback<TInstance[K]>,\n immediate?: boolean\n ): () => void;\n\n listen(...args: any[]): () => void {\n if (typeof args[0] === 'string') {\n // listen(property, handler, immediate?)\n return this.listenInstance(this.state, args[0], args[1], args[2]);\n } else {\n // listen(instance, property, handler, immediate?)\n return this.listenInstance(args[0], args[1], args[2], args[3]);\n }\n }\n\n protected listenInstance<TInstance extends IRef>(\n instance: TInstance,\n propertyName: string,\n handler: PropertyChangeCallback<any>,\n immediate: boolean = true\n ): () => void {\n immediate = immediate && this.isTriggering === false;\n\n //\n // Call handler immediately if property is already available.\n //\n const currentValue = (instance as any)[propertyName];\n if (immediate && currentValue !== null && currentValue !== undefined) {\n handler(currentValue, undefined as any);\n }\n\n return this.addCallback(instance[$refId], propertyName, handler);\n }\n\n /**\n * Listen to any property change on an instance.\n */\n onChange<TInstance extends Schema>(\n instance: TInstance,\n handler: InstanceChangeCallback\n ): () => void;\n\n /**\n * Listen to item changes in a collection on root state.\n */\n onChange<K extends CollectionPropNames<TState>>(\n property: K,\n handler: KeyValueCallback<CollectionKeyType<TState, K>, CollectionValueType<TState, K>>\n ): () => void;\n\n /**\n * Listen to item changes in a nested collection.\n */\n onChange<TInstance extends Schema, K extends CollectionPropNames<TInstance>>(\n instance: TInstance,\n property: K,\n handler: KeyValueCallback<CollectionKeyType<TInstance, K>, CollectionValueType<TInstance, K>>\n ): () => void;\n\n onChange(...args: any[]): () => void {\n if (args.length === 2 && typeof args[0] !== 'string') {\n // onChange(instance, handler) - instance change\n const instance = args[0] as Schema;\n const handler = args[1] as InstanceChangeCallback;\n return this.addCallback(instance[$refId], OPERATION.REPLACE, handler);\n }\n\n if (typeof args[0] === 'string') {\n // onChange(property, handler) - collection on root state\n return this.addCallbackOrWaitCollectionAvailable(\n this.state,\n args[0],\n OPERATION.REPLACE,\n args[1]\n );\n } else {\n // onChange(instance, property, handler) - nested collection\n return this.addCallbackOrWaitCollectionAvailable(\n args[0],\n args[1],\n OPERATION.REPLACE,\n args[2]\n );\n }\n }\n\n /**\n * Listen to items added to a collection on root state.\n */\n onAdd<K extends CollectionPropNames<TState>>(\n property: K,\n handler: ValueKeyCallback<CollectionValueType<TState, K>, CollectionKeyType<TState, K>>,\n immediate?: boolean\n ): () => void;\n\n /**\n * Listen to items added to a nested collection.\n */\n onAdd<TInstance extends Schema, K extends CollectionPropNames<TInstance>>(\n instance: TInstance,\n property: K,\n handler: ValueKeyCallback<CollectionValueType<TInstance, K>, CollectionKeyType<TInstance, K>>,\n immediate?: boolean\n ): () => void;\n\n onAdd(...args: any[]): () => void {\n if (typeof args[0] === 'string') {\n // onAdd(property, handler, immediate?) - collection on root state\n return this.addCallbackOrWaitCollectionAvailable(\n this.state,\n args[0],\n OPERATION.ADD,\n args[1],\n args[2] !== false\n );\n } else {\n // onAdd(instance, property, handler, immediate?) - nested collection\n return this.addCallbackOrWaitCollectionAvailable(\n args[0],\n args[1],\n OPERATION.ADD,\n args[2],\n args[3] !== false\n );\n }\n }\n\n /**\n * Listen to items removed from a collection on root state.\n */\n onRemove<K extends CollectionPropNames<TState>>(\n property: K,\n handler: ValueKeyCallback<CollectionValueType<TState, K>, CollectionKeyType<TState, K>>\n ): () => void;\n\n /**\n * Listen to items removed from a nested collection.\n */\n onRemove<TInstance extends Schema, K extends CollectionPropNames<TInstance>>(\n instance: TInstance,\n property: K,\n handler: ValueKeyCallback<CollectionValueType<TInstance, K>, CollectionKeyType<TInstance, K>>\n ): () => void;\n\n onRemove(...args: any[]): () => void {\n if (typeof args[0] === 'string') {\n // onRemove(property, handler) - collection on root state\n return this.addCallbackOrWaitCollectionAvailable(\n this.state,\n args[0],\n OPERATION.DELETE,\n args[1]\n );\n } else {\n // onRemove(instance, property, handler) - nested collection\n return this.addCallbackOrWaitCollectionAvailable(\n args[0],\n args[1],\n OPERATION.DELETE,\n args[2]\n );\n }\n }\n\n /**\n * Bind properties from a Schema instance to a target object.\n * Changes will be automatically reflected on the target object.\n */\n bindTo<TInstance extends Schema, TTarget>(\n from: TInstance,\n to: TTarget,\n properties?: string[],\n immediate: boolean = true\n ): () => void {\n const metadata: Metadata = (from.constructor as typeof Schema)[Symbol.metadata];\n\n // If no properties specified, bind all properties\n if (!properties) {\n properties = Object.keys(metadata)\n .filter(key => !isNaN(Number(key)))\n .map((index) => metadata[index as any as number].name);\n }\n\n const action = () => {\n for (const prop of properties!) {\n const fromValue = (from as any)[prop];\n if (fromValue !== undefined) {\n (to as any)[prop] = fromValue;\n }\n }\n };\n\n if (immediate) {\n action();\n }\n\n return this.addCallback(from[$refId], OPERATION.REPLACE, action);\n }\n\n protected triggerChanges(allChanges: DataChange[]): void {\n this.uniqueRefIds.clear();\n\n // Flag stays set for the whole dispatch pass — any `listen()` /\n // `onAdd(...)` registered while a callback is firing needs to\n // suppress its immediate-trigger. One toggle per pass is enough;\n // every callback invocation below is wrapped in try/catch so\n // nothing bubbles out to leave the flag stuck.\n this.isTriggering = true;\n\n for (let i = 0, l = allChanges.length; i < l; i++) {\n const change = allChanges[i];\n const refId = change.refId;\n const ref = change.ref;\n\n const $callbacks = this.callbacks[refId];\n if (!$callbacks) {\n continue;\n }\n\n //\n // trigger onRemove on child structure.\n //\n if (\n (change.op & OPERATION.DELETE) === OPERATION.DELETE &&\n Schema.isSchema(change.previousValue)\n ) {\n const childRefId = (change.previousValue as Ref)[$refId];\n const deleteCallbacks = this.callbacks[childRefId]?.[OPERATION.DELETE];\n if (deleteCallbacks) {\n for (let j = deleteCallbacks.length - 1; j >= 0; j--) {\n try { deleteCallbacks[j](); } catch (e) { console.error(e); }\n }\n }\n }\n\n if (Schema.isSchema(ref)) {\n //\n // Handle Schema instance\n //\n\n if (!this.uniqueRefIds.has(refId)) {\n // trigger onChange\n const replaceCallbacks = $callbacks[OPERATION.REPLACE];\n if (replaceCallbacks) {\n for (let j = replaceCallbacks.length - 1; j >= 0; j--) {\n try { replaceCallbacks[j](); } catch (e) { console.error(e); }\n }\n }\n }\n\n // trigger field callbacks\n const fieldCallbacks = $callbacks[change.field];\n if (fieldCallbacks) {\n for (let j = fieldCallbacks.length - 1; j >= 0; j--) {\n try { fieldCallbacks[j](change.value, change.previousValue); } catch (e) { console.error(e); }\n }\n }\n\n } else {\n //\n // Handle collection of items\n //\n const dynamicIndex = change.dynamicIndex ?? change.field;\n\n if ((change.op & OPERATION.DELETE) === OPERATION.DELETE) {\n // DELETE can arrive with `previousValue === undefined` in two\n // legitimate cases — neither is fixable decoder-side:\n // 1. DELETE_AND_ADD (op byte 192) for an index/refId the\n // decoder never held — e.g. a client whose @view\n // subscription just began sees the replacement op\n // first. `previousValue` is undefined; `value` is the\n // newly-decoded instance. The ADD half still fires below.\n // 2. DELETE_BY_REFID (decodeArray, DecodeOperation.ts) for\n // a filtered ArraySchema ref that was never ADDed on\n // this decoder. That push site is unconditional because\n // `removeRef` has already run; raw-change observers\n // still want the event even with unknown previousValue.\n // The guard prevents `onRemove(undefined, key)` from firing.\n if (change.previousValue !== undefined) {\n // trigger onRemove (value, key)\n const deleteCallbacks = $callbacks[OPERATION.DELETE];\n if (deleteCallbacks) {\n for (let j = deleteCallbacks.length - 1; j >= 0; j--) {\n try { deleteCallbacks[j](change.previousValue, dynamicIndex); } catch (e) { console.error(e); }\n }\n }\n }\n\n // Handle DELETE_AND_ADD operation\n if ((change.op & OPERATION.ADD) === OPERATION.ADD) {\n const addCallbacks = $callbacks[OPERATION.ADD];\n if (addCallbacks) {\n for (let j = addCallbacks.length - 1; j >= 0; j--) {\n try { addCallbacks[j](change.value, dynamicIndex); } catch (e) { console.error(e); }\n }\n }\n }\n\n } else if (\n (change.op & OPERATION.ADD) === OPERATION.ADD &&\n change.previousValue !== change.value\n ) {\n // trigger onAdd (value, key)\n const addCallbacks = $callbacks[OPERATION.ADD];\n if (addCallbacks) {\n for (let j = addCallbacks.length - 1; j >= 0; j--) {\n try { addCallbacks[j](change.value, dynamicIndex); } catch (e) { console.error(e); }\n }\n }\n }\n\n // trigger onChange (key, value)\n if (change.value !== change.previousValue) {\n const replaceCallbacks = $callbacks[OPERATION.REPLACE];\n if (replaceCallbacks) {\n for (let j = replaceCallbacks.length - 1; j >= 0; j--) {\n try { replaceCallbacks[j](dynamicIndex, change.value); } catch (e) { console.error(e); }\n }\n }\n }\n }\n\n this.uniqueRefIds.add(refId);\n }\n\n this.isTriggering = false;\n }\n}\n\n/**\n * Factory class for retrieving the callbacks API.\n */\nexport const Callbacks = {\n /**\n * Get the new callbacks standard API.\n *\n * Usage:\n * ```ts\n * const callbacks = Callbacks.get(roomOrDecoder);\n *\n * // Listen to property changes\n * callbacks.listen(\"currentTurn\", (currentValue, previousValue) => { ... });\n *\n * // Listen to collection additions\n * callbacks.onAdd(\"entities\", (entity, sessionId) => {\n * // Nested property listening\n * callbacks.listen(entity, \"hp\", (currentHp, previousHp) => { ... });\n * });\n *\n * // Listen to collection removals\n * callbacks.onRemove(\"entities\", (entity, sessionId) => { ... });\n *\n * // Listen to any property change on an instance\n * callbacks.onChange(entity, () => { ... });\n *\n * // Bind properties to another object\n * callbacks.bindTo(player, playerVisual);\n * ```\n *\n * @param roomOrDecoder - Room or Decoder instance to get the callbacks for.\n * @returns the new callbacks standard API.\n */\n get<T extends IRef>(\n roomOrDecoder: Decoder<T> | { serializer: { decoder: Decoder<T> } } | { state: T; serializer: object }\n ): StateCallbackStrategy<T> {\n if (roomOrDecoder instanceof Decoder) {\n return new StateCallbackStrategy<T>(roomOrDecoder);\n\n } else if ('decoder' in roomOrDecoder.serializer) {\n return new StateCallbackStrategy<T>(roomOrDecoder.serializer.decoder);\n\n } else {\n throw new Error('Invalid room or decoder');\n }\n },\n\n /**\n * Get the legacy callbacks API.\n *\n * We aim to deprecate this API on 1.0, and iterate on improving Callbacks.get() API.\n *\n * @param roomOrDecoder - Room or Decoder instance to get the legacy callbacks for.\n * @returns the legacy callbacks API.\n */\n getLegacy<T extends Schema>(\n roomOrDecoder: Decoder<T> | { serializer: { decoder: Decoder<T> } } | { state: T; serializer: object }\n ): SchemaCallbackProxy<T> {\n if (roomOrDecoder instanceof Decoder) {\n return getDecoderStateCallbacks(roomOrDecoder);\n\n } else if ('decoder' in roomOrDecoder.serializer) {\n return getDecoderStateCallbacks(roomOrDecoder.serializer.decoder);\n }\n },\n\n getRawChanges(decoder: Decoder, callback: (changes: DataChange[]) => void) {\n return getRawChangesCallback(decoder, callback);\n }\n};\n\n","import { ChangeTree, Ref } from \"./ChangeTree.js\";\nimport { $changes, $fieldIndexesByViewTag, $refId, $viewFieldIndexes } from \"../types/symbols.js\";\nimport { DEFAULT_VIEW_TAG } from \"../annotations.js\";\nimport { OPERATION } from \"../encoding/spec.js\";\nimport { Metadata } from \"../Metadata.js\";\nimport { spliceOne } from \"../types/utils.js\";\nimport { streamDequeueForView, streamEnqueueForView } from \"./streaming.js\";\nimport type { Schema } from \"../Schema.js\";\nimport type { Root, Streamable } from \"./Root.js\";\n\nexport function createView(iterable: boolean = false) {\n return new StateView(iterable);\n}\n\n/**\n * Clear the bit for `(slot, bit)` on every ChangeTree in `root`. Called\n * from `dispose()` and from the FinalizationRegistry callback so a view's\n * leftover visibility bits don't leak to whoever next acquires its ID.\n *\n * Cost: O(N trees) per dispose. dispose is rare (once per view lifecycle,\n * typically once per client disconnect), so the per-tick encode hot path\n * is unaffected.\n */\nfunction _clearViewBitFromAllTrees(root: Root, slot: number, bit: number): void {\n const clearMask = ~bit;\n const trees = root.changeTrees;\n for (const refId in trees) {\n const tree = trees[refId];\n const v = tree.visibleViews;\n if (v !== undefined && slot < v.length) v[slot] &= clearMask;\n const i = tree.invisibleViews;\n if (i !== undefined && slot < i.length) i[slot] &= clearMask;\n const s = tree.subscribedViews;\n if (s !== undefined && slot < s.length) s[slot] &= clearMask;\n const t = tree.tagViews;\n if (t !== undefined) {\n t.forEach((bitmap) => {\n if (slot < bitmap.length) bitmap[slot] &= clearMask;\n });\n }\n }\n}\n\n/**\n * `FinalizationRegistry` returns a view's ID to its Root's freelist AND\n * clears the view's leftover bits from every ChangeTree. Backstop for\n * forgotten `view.dispose()` calls; timing is non-deterministic but bounded.\n */\nconst _disposeRegistry = new FinalizationRegistry<{ root: Root; id: number; slot: number; bit: number }>(\n ({ root, id, slot, bit }) => {\n _clearViewBitFromAllTrees(root, slot, bit);\n root.releaseViewId(id);\n },\n);\n\nexport class StateView {\n /**\n * Iterable list of items that are visible to this view\n * (Available only if constructed with `iterable: true`)\n */\n items: Ref[];\n\n /**\n * Unique ID assigned by the Root that owns this view's encoder. Used\n * to address per-StateView visibility bits stored on each ChangeTree.\n * Lazily allocated on first `add()` because the StateView itself\n * doesn't know its Root until then.\n */\n id: number = -1;\n private _root?: Root;\n\n /** Cached `id >> 5` and `1 << (id & 31)` for the hot encode-loop check. */\n private _slot: number = 0;\n private _bit: number = 0;\n\n /**\n * Per-tree custom-tag membership lives on each ChangeTree's `tagViews`\n * map (keyed by tag, value is a per-view bitmap). The StateView only\n * needs its slot/bit pair to read/write it. Replaces the legacy\n * `tags: WeakMap<ChangeTree, Set<number>>` allocation per (view, tree).\n */\n\n /**\n * Manual \"ADD\" operations for changes per ChangeTree, specific to this view.\n * (Used to force encoding a property even if it was not changed.)\n *\n * Inner storage is a Map so the encode loop in `encodeView` can iterate\n * directly with numeric keys — the legacy `{[index]: OPERATION}` shape\n * forced an `Object.keys(...)` allocation + `Number(key)` parse per ref.\n */\n changes = new Map<number, Map<number, OPERATION>>();\n\n constructor(public iterable: boolean = false) {\n if (iterable) {\n this.items = [];\n }\n }\n\n /**\n * Lazily bind this view to a Root and acquire a view ID. Called on\n * the first add() because StateView is constructed before its target\n * Root is known.\n */\n private _bindRoot(root: Root): void {\n if (this._root !== undefined) return;\n this._root = root;\n this.id = root.acquireViewId();\n this._slot = this.id >> 5;\n this._bit = 1 << (this.id & 31);\n root.registerView(this);\n _disposeRegistry.register(\n this,\n { root, id: this.id, slot: this._slot, bit: this._bit },\n this,\n );\n }\n\n /**\n * Release this view's ID back to the Root for reuse, AND clear all\n * visibility bits this view set on any ChangeTree. The clear is\n * essential — without it, a future view that acquires this same ID\n * would inherit our visibility state and see things it shouldn't\n * (privacy bug). Documented in StateViewInternals.test.ts.\n *\n * Optional API but strongly recommended on client-leave; otherwise\n * the FinalizationRegistry backstop runs at GC (non-deterministic).\n */\n public dispose(): void {\n if (this._root === undefined) return;\n this._root.unregisterView(this);\n _clearViewBitFromAllTrees(this._root, this._slot, this._bit);\n this._root.releaseViewId(this.id);\n _disposeRegistry.unregister(this);\n this._root = undefined;\n this.id = -1;\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Per-tree visibility bitmap helpers. Replace the old WeakSet ops\n // with O(1) bitwise ops on a chunked number[] stored on each tree.\n // ──────────────────────────────────────────────────────────────────\n\n /** True iff this view can see `tree`. */\n public isVisible(tree: ChangeTree): boolean {\n const arr = tree.visibleViews;\n const slot = this._slot;\n return arr !== undefined && slot < arr.length && (arr[slot] & this._bit) !== 0;\n }\n\n /** Mark `tree` as visible to this view. */\n public markVisible(tree: ChangeTree): void {\n const slot = this._slot;\n let arr = tree.visibleViews;\n if (arr === undefined) {\n arr = tree.visibleViews = [];\n }\n while (arr.length <= slot) arr.push(0);\n arr[slot] |= this._bit;\n }\n\n /** Clear visibility bit. */\n public unmarkVisible(tree: ChangeTree): void {\n const arr = tree.visibleViews;\n if (arr === undefined) return;\n const slot = this._slot;\n if (slot < arr.length) arr[slot] &= ~this._bit;\n }\n\n /** True iff this view is subscribed to `tree`. */\n public isSubscribed(tree: ChangeTree): boolean {\n const arr = tree.subscribedViews;\n const slot = this._slot;\n return arr !== undefined && slot < arr.length && (arr[slot] & this._bit) !== 0;\n }\n\n /** Set the subscription bit on `tree`. */\n private _setSubscribed(tree: ChangeTree): void {\n const slot = this._slot;\n let arr = tree.subscribedViews;\n if (arr === undefined) {\n arr = tree.subscribedViews = [];\n }\n while (arr.length <= slot) arr.push(0);\n arr[slot] |= this._bit;\n }\n\n /** Clear the subscription bit on `tree`. */\n private _clearSubscribed(tree: ChangeTree): void {\n const arr = tree.subscribedViews;\n if (arr === undefined) return;\n const slot = this._slot;\n if (slot < arr.length) arr[slot] &= ~this._bit;\n }\n\n /** True iff this view has previously marked `tree` as invisible. */\n public isInvisible(tree: ChangeTree): boolean {\n const arr = tree.invisibleViews;\n const slot = this._slot;\n return arr !== undefined && slot < arr.length && (arr[slot] & this._bit) !== 0;\n }\n\n /** Mark `tree` as invisible to this view (used by encode loop). */\n public markInvisible(tree: ChangeTree): void {\n const slot = this._slot;\n let arr = tree.invisibleViews;\n if (arr === undefined) {\n arr = tree.invisibleViews = [];\n }\n while (arr.length <= slot) arr.push(0);\n arr[slot] |= this._bit;\n }\n\n /** Clear invisible bit. */\n public unmarkInvisible(tree: ChangeTree): void {\n const arr = tree.invisibleViews;\n if (arr === undefined) return;\n const slot = this._slot;\n if (slot < arr.length) arr[slot] &= ~this._bit;\n }\n\n // ──────────────────────────────────────────────────────────────────\n // Per-tag, per-view bitmap. Replaces the legacy\n // `tags: WeakMap<ChangeTree, Set<number>>` storage. Hot read site is\n // `Schema.ts` filter check — `hasTagOnTree` is O(1) bitwise.\n // ──────────────────────────────────────────────────────────────────\n\n /** True iff this view has `tag` associated with `tree`. */\n public hasTagOnTree(tree: ChangeTree, tag: number): boolean {\n const map = tree.tagViews;\n if (map === undefined) return false;\n const arr = map.get(tag);\n const slot = this._slot;\n return arr !== undefined && slot < arr.length && (arr[slot] & this._bit) !== 0;\n }\n\n /** Mark `tree` as carrying `tag` for this view. */\n public addTag(tree: ChangeTree, tag: number): void {\n let map = tree.tagViews;\n if (map === undefined) {\n map = tree.tagViews = new Map();\n }\n let arr = map.get(tag);\n if (arr === undefined) {\n arr = [];\n map.set(tag, arr);\n }\n const slot = this._slot;\n while (arr.length <= slot) arr.push(0);\n arr[slot] |= this._bit;\n }\n\n /** Clear this view's `tag` bit on `tree`. */\n public removeTag(tree: ChangeTree, tag: number): void {\n const map = tree.tagViews;\n if (map === undefined) return;\n const arr = map.get(tag);\n if (arr === undefined) return;\n const slot = this._slot;\n if (slot < arr.length) arr[slot] &= ~this._bit;\n }\n\n /** Clear ALL tag bits this view holds on `tree` (used when the per-tag isn't known). */\n public removeAllTagsOnTree(tree: ChangeTree): void {\n const map = tree.tagViews;\n if (map === undefined) return;\n const slot = this._slot;\n const clearMask = ~this._bit;\n map.forEach((arr) => {\n if (slot < arr.length) arr[slot] &= clearMask;\n });\n }\n\n // TODO: allow to set multiple tags at once\n add(obj: Ref, tag: number = DEFAULT_VIEW_TAG, checkIncludeParent: boolean = true) {\n return this._add(obj, tag, checkIncludeParent, /* _skipStreamRouting */ false);\n }\n\n /**\n * Internal: force-ship an object through `view.changes` without\n * applying stream-element routing. Called by `Encoder._emitStreamPriority`\n * when it's draining `_pendingByView` — the element is already out of\n * pending at that point, so re-routing back into pending would be a\n * loop. User code should always call `add()`.\n */\n _addImmediate(obj: Ref, tag: number = DEFAULT_VIEW_TAG): void {\n this._add(obj, tag, /* checkIncludeParent */ true, /* _skipStreamRouting */ true);\n }\n\n private _add(obj: Ref, tag: number, checkIncludeParent: boolean, _skipStreamRouting: boolean) {\n const changeTree: ChangeTree = obj?.[$changes];\n const parentChangeTree = changeTree.parent;\n\n if (!changeTree) {\n console.warn(\"StateView#add(), invalid object:\", obj);\n return false;\n\n } else if (\n !parentChangeTree &&\n obj[$refId] !== 0 // allow root object\n ) {\n /**\n * Detached adds are refused: addParentOf() walks the parent\n * chain to propagate visibility upward, which requires a real\n * parent reference. A detached instance has neither a parent\n * ChangeTree nor a parentIndex, so we can't decide whether an\n * ancestor carries a @view tag that should bring the subtree\n * along. Users must assign the ref into the state tree before\n * calling view.add().\n */\n throw new Error(\n `Cannot add a detached instance to the StateView. Make sure to assign the \"${changeTree.ref.constructor.name}\" instance to the state before calling view.add()`\n );\n }\n\n // Bind to Root + acquire view ID on first add(). Until then, we have\n // no per-tree bit position to write into.\n if (this._root === undefined && changeTree.root !== undefined) {\n this._bindRoot(changeTree.root);\n }\n\n // Streamable-element routing: when `obj` is a child of a streamable\n // collection (StreamSchema element, or an entry in a .stream()\n // MapSchema), subscribe this element to the stream's per-view\n // pending. The element is NOT marked visible here — visibility is\n // flipped on by the encoder's priority pass (`_addImmediate`) when\n // it actually ships the element. This is load-bearing: if the\n // element were visible before the priority pass, `encodeAllView`\n // would full-sync-emit it on bootstrap and `encodeView`'s normal\n // pass would emit its dirty state — both bypass `maxPerTick`.\n //\n // StateView mode is imperative by design — users call\n // `view.add(entity)` per-entity as the game loop's AOI / interest\n // logic discovers visibility. This matches the rationale that led\n // to StateView in the first place: per-client visibility as a\n // game-loop-cadence operation, not an encode-time predicate.\n const parentStreamTree = parentChangeTree?.[$changes];\n if (!_skipStreamRouting && parentStreamTree?.isStreamCollection) {\n streamEnqueueForView(\n parentChangeTree as unknown as Streamable,\n this.id,\n changeTree.parentIndex!,\n );\n return true;\n }\n\n // Collection types (ArraySchema / MapSchema / etc.) have no\n // `Symbol.metadata` — `metadata` is undefined here and consumers\n // below use `metadata?.[...]` null-safe access. Only Schema\n // subclasses yield a real Metadata object.\n const metadata: Metadata = (obj.constructor as typeof Schema)[Symbol.metadata];\n\n this.markVisible(changeTree);\n\n // add to iterable list (only the explicitly added items)\n if (this.iterable && checkIncludeParent) {\n this.items.push(obj);\n }\n\n // add parent ChangeTree's\n // - if it was invisible to this view\n // - if it were previously filtered out\n if (checkIncludeParent && parentChangeTree) {\n this.addParentOf(changeTree, tag);\n }\n\n // Streamable-collection (the stream itself, not an element): mark\n // visible only. No auto-seed of elements — users must explicitly\n // `view.add(entity)` per element (see rationale above).\n if (!_skipStreamRouting && changeTree.isStreamCollection) {\n return true;\n }\n\n // Fast path: fresh (isNew) subtree added with default tag. The\n // shared encode pass walks the whole subtree and emits ADDs for\n // every field, so the view pass only needs visibility bits — no\n // `view.changes` entries are needed for this subtree itself.\n // `addParentOf` above already emitted the parent collection's\n // ADD. Skipping the full `_add` cascade avoids ~N empty Map\n // allocations per bootstrap where N = descendant count.\n //\n // Safe against the insertion-order invariant below because this\n // path performs no writes — there is no order to preserve.\n if (tag === DEFAULT_VIEW_TAG && changeTree.isNew) {\n this._markSubtreeVisible(changeTree, tag);\n return false;\n }\n\n // Insertion order here is load-bearing: the encoder drains\n // `view.changes` in Map iteration order, and the decoder needs the\n // parent's SWITCH_TO_STRUCTURE to register its refId before any\n // entries for nested refs arrive. `forEachChild` below recurses\n // into `this.add(child, ...)`, which inserts child refIds — if we\n // deferred this insert past that point, children would be emitted\n // first and the decoder would see \"refId not found\".\n let changes = this.changes.get(obj[$refId]);\n if (changes === undefined) {\n changes = new Map<number, OPERATION>();\n this.changes.set(obj[$refId], changes);\n }\n\n let isChildAdded = false;\n\n //\n // Add children of this ChangeTree first.\n // If successful, we must link the current ChangeTree to the child.\n //\n // Read per-field tags from the class's precomputed `tags[]` array\n // rather than chasing `metadata[index].tag` — same source, but a\n // direct array index instead of a per-field-object hop.\n const tags = changeTree.encDescriptor.tags;\n changeTree.forEachChild((change, index) => {\n // Do not ADD children that don't have the same tag\n const fieldTag = tags[index];\n if (fieldTag !== undefined && fieldTag !== tag) {\n return;\n }\n\n if (this.add(change.ref, tag, false)) {\n isChildAdded = true;\n }\n });\n\n // set tag\n if (tag !== DEFAULT_VIEW_TAG) {\n this.addTag(changeTree, tag);\n\n // Ref: add tagged properties\n metadata?.[$fieldIndexesByViewTag]?.[tag]?.forEach((index) => {\n if (changeTree.getChange(index) !== OPERATION.DELETE) {\n changes.set(index, OPERATION.ADD);\n }\n });\n\n } else if (!changeTree.isNew || isChildAdded) {\n // new structures will be added as part of .encode() call, no need to force it to .encodeView()\n const isInvisible = this.isInvisible(changeTree);\n\n // Full-sync snapshot: walk the live ref structurally instead of\n // iterating a cumulative recorder bucket. Every populated index\n // is emitted as ADD (matching the op-coercion previously done\n // at encode time). Per-field tags come from the descriptor's\n // precomputed `tags[]` array — direct index vs a metadata[i].tag\n // object hop.\n const tags = changeTree.encDescriptor.tags;\n changeTree.forEachLive((index) => {\n const tagAtIndex = tags[index];\n if (\n isInvisible || // if \"invisible\", include all\n tagAtIndex === undefined || // \"all change\" with no tag\n tagAtIndex === tag // tagged property\n ) {\n changes.set(index, OPERATION.ADD);\n isChildAdded = true;\n }\n });\n }\n\n return isChildAdded;\n }\n\n /**\n * Walk an isNew subtree marking each descendant visible. Counterpart\n * to the `_add()` fast path: skips `view.changes` allocations because\n * the shared encode pass emits the whole fresh subtree structurally\n * — the view pass just needs visibility bits to let those emissions\n * through the per-tree filter.\n *\n * Preserves the `@view()`-tag filter from `_add`'s forEachChild: a\n * Schema descendant behind a non-matching field tag is skipped so\n * tagged fields don't leak into a default-tag view. Collections have\n * no per-field tags (`encDescriptor.tags` is empty), so the filter\n * is a no-op for collection children.\n *\n * If a descendant has `isNew=false` (rare: a detached sub-collection\n * was re-attached to a fresh parent), fall back to the full `_add`\n * path for that branch so its cumulative state is emitted correctly.\n */\n private _markSubtreeVisible(tree: ChangeTree, tag: number): void {\n const tags = tree.encDescriptor.tags;\n tree.forEachChild((child, index) => {\n const fieldTag = tags[index];\n if (fieldTag !== undefined && fieldTag !== tag) return;\n\n if (child.isNew) {\n this.markVisible(child);\n this._markSubtreeVisible(child, tag);\n } else {\n this._add(child.ref, tag, false, false);\n }\n });\n }\n\n protected addParentOf(childChangeTree: ChangeTree, tag: number) {\n const changeTree = childChangeTree.parent[$changes];\n const parentIndex = childChangeTree.parentIndex;\n\n if (!this.isVisible(changeTree)) {\n // view must have all \"changeTree\" parent tree\n this.markVisible(changeTree);\n\n // add parent's parent\n const parentChangeTree: ChangeTree = changeTree.parent?.[$changes];\n if (parentChangeTree && parentChangeTree.hasFilteredFields) {\n this.addParentOf(changeTree, tag);\n }\n }\n\n // add parent's tag properties\n if (changeTree.getChange(parentIndex) !== OPERATION.DELETE) {\n let changes = this.changes.get(changeTree.ref[$refId]);\n if (changes === undefined) {\n changes = new Map<number, OPERATION>();\n this.changes.set(changeTree.ref[$refId], changes);\n }\n\n this.addTag(changeTree, tag);\n\n changes.set(parentIndex, OPERATION.ADD);\n }\n }\n\n remove(obj: Ref, tag?: number): this; // hide _isClear parameter from public API\n remove(obj: Ref, tag?: number, _isClear?: boolean): this;\n remove(obj: Ref, tag: number = DEFAULT_VIEW_TAG, _isClear: boolean = false): this {\n const changeTree: ChangeTree = obj[$changes];\n if (!changeTree) {\n console.warn(\"StateView#remove(), invalid object:\", obj);\n return this;\n }\n\n // ── Streamable-element unsubscribe ─────────────────────────────\n // Symmetric to the `add(streamElement)` routing: pull the element\n // out of the stream's per-view state. If it never made it to the\n // wire (still in pending), silent drop; if already sent, queue\n // DELETE via `view.changes` for the next encodeView drain.\n const parentStreamTree = changeTree.parent?.[$changes];\n if (parentStreamTree?.isStreamCollection) {\n this.unmarkVisible(changeTree);\n if (this.iterable && !_isClear) {\n spliceOne(this.items, this.items.indexOf(obj));\n }\n streamDequeueForView(\n changeTree.parent as unknown as Streamable,\n this.id,\n (changeTree.parent as any)[$refId],\n changeTree.parentIndex!,\n this.changes,\n );\n this._recursiveDeleteVisibleChangeTree(changeTree);\n return this;\n }\n\n // ── Streamable-collection unsubscribe (the stream itself) ─────\n // Flush DELETE for every sent position and drop pending. After\n // this, the stream is marked invisible to this view — any future\n // `stream.add()` would still seed broadcast pending (if no views)\n // but would NOT re-seed per-view pending (user must re-subscribe).\n if (changeTree.isStreamCollection) {\n this.unmarkVisible(changeTree);\n if (this.iterable && !_isClear) {\n spliceOne(this.items, this.items.indexOf(obj));\n }\n const streamRef: any = changeTree.ref;\n const st = streamRef._stream;\n if (st !== undefined) {\n st.pendingByView.get(this.id)?.clear();\n const sent = st.sentByView.get(this.id);\n if (sent !== undefined && sent.size > 0) {\n const streamRefId = streamRef[$refId];\n let changes = this.changes.get(streamRefId);\n if (changes === undefined) {\n changes = new Map();\n this.changes.set(streamRefId, changes);\n }\n for (const pos of sent) changes.set(pos, OPERATION.DELETE);\n sent.clear();\n }\n }\n return this;\n }\n\n this.unmarkVisible(changeTree);\n\n // remove from iterable list\n if (\n this.iterable &&\n !_isClear // no need to remove during clear(), as it will be cleared entirely\n ) {\n spliceOne(this.items, this.items.indexOf(obj));\n }\n\n const ref = changeTree.ref;\n const metadata: Metadata = ref.constructor[Symbol.metadata]; // ArraySchema/MapSchema do not have metadata\n\n const refId = ref[$refId];\n\n let changes = this.changes.get(refId);\n if (changes === undefined) {\n changes = new Map<number, OPERATION>();\n this.changes.set(refId, changes);\n }\n\n if (tag === DEFAULT_VIEW_TAG) {\n // parent is collection (Map/Array)\n const parent = changeTree.parent;\n if (parent && !Metadata.isValidInstance(parent) && changeTree.isFiltered) {\n const parentRefId = parent[$refId];\n let changes = this.changes.get(parentRefId);\n if (changes === undefined) {\n changes = new Map<number, OPERATION>();\n this.changes.set(parentRefId, changes);\n\n } else if (changes.get(changeTree.parentIndex) === OPERATION.ADD) {\n //\n // SAME PATCH ADD + REMOVE:\n // The 'changes' of deleted structure should be ignored.\n //\n this.changes.delete(refId);\n }\n\n // DELETE / DELETE BY REF ID\n changes.set(changeTree.parentIndex, OPERATION.DELETE);\n\n // Remove child schema from visible set\n this._recursiveDeleteVisibleChangeTree(changeTree);\n\n } else {\n // delete all \"tagged\" properties.\n const names = changeTree.encDescriptor.names;\n metadata?.[$viewFieldIndexes]?.forEach((index) => {\n changes.set(index, OPERATION.DELETE);\n\n // Remove child structures of @view() fields from visible set.\n // (They were added during view.add() via forEachChild)\n const value = changeTree.ref[names[index] as keyof Ref];\n if (value?.[$changes]) {\n this.unmarkVisible(value[$changes]);\n this._recursiveDeleteVisibleChangeTree(value[$changes]);\n }\n });\n }\n\n } else {\n // delete only tagged properties\n const names = changeTree.encDescriptor.names;\n metadata?.[$fieldIndexesByViewTag][tag].forEach((index) => {\n changes.set(index, OPERATION.DELETE);\n\n // Remove child structures from visible set\n const value = changeTree.ref[names[index] as keyof Ref];\n if (value?.[$changes]) {\n this.unmarkVisible(value[$changes]);\n this._recursiveDeleteVisibleChangeTree(value[$changes]);\n }\n });\n }\n\n // remove tag bit for this view\n if (tag === undefined) {\n this.removeAllTagsOnTree(changeTree);\n } else {\n this.removeTag(changeTree, tag);\n }\n\n return this;\n }\n\n has(obj: Ref) {\n return this.isVisible(obj[$changes]);\n }\n\n hasTag(ob: Ref, tag: number = DEFAULT_VIEW_TAG) {\n return this.hasTagOnTree(ob[$changes], tag);\n }\n\n /**\n * Persistent subscription to a collection's contents. Unlike `add()`,\n * which is a one-shot bootstrap, `subscribe()` enrolls this view in\n * future content changes — every subsequent push / set / add to the\n * collection automatically flows to this view, and every removal\n * queues a DELETE op. Works on every collection type:\n *\n * - `ArraySchema` / `MapSchema` / `SetSchema` / `CollectionSchema`:\n * new children are force-shipped immediately (equivalent to\n * `view.add(child)` per item).\n * - `StreamSchema` (or `.stream()` maps/sets): new positions are\n * enqueued into `_pendingByView` so the priority pass drains them\n * respecting `maxPerTick`.\n *\n * Idempotent on re-subscribe. Subscribing to an already-subscribed\n * collection is a no-op.\n */\n subscribe(collection: Ref): this {\n const tree: ChangeTree = collection?.[$changes];\n if (!tree) {\n console.warn(\"StateView#subscribe(), invalid collection:\", collection);\n return this;\n }\n if (this._root === undefined && tree.root !== undefined) {\n this._bindRoot(tree.root);\n }\n if (this.isSubscribed(tree)) return this;\n\n // Mark collection visible so its own ADD/DELETE ops emit in the\n // view pass. Also flip on the subscription bit.\n this.markVisible(tree);\n this._setSubscribed(tree);\n\n // Bootstrap: walk current children and mark them visible to this\n // view. We DO NOT force-seed via `_addImmediate` / view.changes\n // — the encoder's natural emission paths handle it:\n //\n // - `encodeAllView` (first-tick bootstrap): walks the tree\n // structurally and emits every visible child.\n // - Normal `encodeView` pass: walks `root.changes` and emits\n // dirty children + parent collection's ADD ops.\n //\n // Seeding view.changes ourselves would cause duplicate emission,\n // fine for idempotent collections (Array/Map/Set dedup by index\n // or value), but breaks `CollectionSchema` which appends on\n // every decode-side ADD (no dedup).\n //\n // Streams are the exception — they bypass the recorder flow, so\n // subscription must enqueue positions into `_pendingByView`\n // where the priority pass drains them per `maxPerTick`.\n if (tree.isStreamCollection) {\n const streamable = collection as unknown as Streamable;\n tree.forEachChild((_child, index) => {\n streamEnqueueForView(streamable, this.id, index);\n });\n } else {\n tree.forEachChild((child) => {\n this.markVisible(child);\n });\n }\n\n return this;\n }\n\n /**\n * End a persistent subscription. Queues DELETE for every already-sent\n * child and clears any pending. After this call, future content\n * changes on the collection no longer auto-flow to this view (though\n * direct `view.add(element)` calls still work for per-entity use).\n */\n unsubscribe(collection: Ref): this {\n const tree: ChangeTree = collection?.[$changes];\n if (!tree) {\n console.warn(\"StateView#unsubscribe(), invalid collection:\", collection);\n return this;\n }\n if (!this.isSubscribed(tree)) return this;\n this._clearSubscribed(tree);\n\n const collectionRefId = tree.ref[$refId];\n\n if (tree.isStreamCollection) {\n // Streams: clear pending + queue DELETE for everything in sent.\n const st = (collection as any)._stream;\n if (st !== undefined) {\n st.pendingByView.get(this.id)?.clear();\n const sent: Set<number> | undefined = st.sentByView.get(this.id);\n if (sent !== undefined && sent.size > 0) {\n let changes = this.changes.get(collectionRefId);\n if (changes === undefined) {\n changes = new Map();\n this.changes.set(collectionRefId, changes);\n }\n for (const pos of sent) changes.set(pos, OPERATION.DELETE);\n sent.clear();\n }\n }\n } else {\n // Non-streams: queue DELETE for every current child and\n // unmark their visibility so subsequent mutations stop\n // reaching this view.\n let changes = this.changes.get(collectionRefId);\n tree.forEachChild((childTree, index) => {\n if (changes === undefined) {\n changes = new Map();\n this.changes.set(collectionRefId, changes);\n }\n changes.set(index, OPERATION.DELETE);\n this.unmarkVisible(childTree);\n });\n }\n\n // Unmark the collection itself so future ops don't emit to this\n // view (add() / subscribe() again re-marks it).\n this.unmarkVisible(tree);\n\n return this;\n }\n\n clear() {\n if (!this.iterable) {\n throw new Error(\"StateView#clear() is only available for iterable StateView's. Use StateView(iterable: true) constructor.\");\n }\n\n for (let i = 0, l = this.items.length; i < l; i++) {\n this.remove(this.items[i], DEFAULT_VIEW_TAG, true);\n }\n\n // clear items array\n this.items.length = 0;\n }\n\n isChangeTreeVisible(changeTree: ChangeTree) {\n let isVisible = this.isVisible(changeTree);\n\n // The parent-visibility fallback handles child collections without\n // their own @view tag (see StateView.test.ts \"should not be required\n // to manually call view.add() items to child arrays...\"). The\n // `isVisibilitySharedWithParent` flag — precomputed at attach-time in\n // inheritedFlags.ts — short-circuits for the common case, and\n // `markVisible` memoizes so the branch fires at most once per\n // (tree, view) pair.\n if (!isVisible && changeTree.isVisibilitySharedWithParent){\n if (this.isVisible(changeTree.parent[$changes])) {\n this.markVisible(changeTree);\n isVisible = true;\n }\n }\n\n return isVisible;\n }\n\n protected _recursiveDeleteVisibleChangeTree(changeTree: ChangeTree) {\n changeTree.forEachChild((childChangeTree) => {\n this.unmarkVisible(childChangeTree);\n this._recursiveDeleteVisibleChangeTree(childChangeTree);\n });\n }\n}\n","export { Schema } from \"./Schema.js\";\nexport type { DataChange } from \"./decoder/DecodeOperation.js\";\nexport type { ToJSON } from \"./types/HelperTypes.js\";\n\nimport { MapSchema } from \"./types/custom/MapSchema.js\"\nexport { MapSchema };\n\nimport { ArraySchema } from \"./types/custom/ArraySchema.js\";\nexport { ArraySchema };\n\nimport { CollectionSchema } from \"./types/custom/CollectionSchema.js\";\nexport { CollectionSchema };\n\nimport { SetSchema } from \"./types/custom/SetSchema.js\";\nexport { SetSchema };\n\nimport { StreamSchema } from \"./types/custom/StreamSchema.js\";\nexport { StreamSchema };\n\nimport { registerType, defineCustomTypes } from \"./types/registry.js\";\nexport { registerType, defineCustomTypes };\n\nregisterType(\"map\", { constructor: MapSchema });\nregisterType(\"array\", { constructor: ArraySchema });\nregisterType(\"set\", { constructor: SetSchema });\nregisterType(\"collection\", { constructor: CollectionSchema, });\n// \"stream\" is registered inside StreamSchema.ts (same pattern as others\n// that co-locate registerType with the class for side-effect safety).\n\n// Utils\nexport { dumpChanges } from \"./utils.js\";\n\n// Encoder / Decoder\nexport { $track, $encoder, $decoder, $filter, $getByIndex, $deleteByIndex, $changes, $childType, $refId } from \"./types/symbols.js\";\nexport { encode } from \"./encoding/encode.js\";\nexport { decode, type Iterator } from \"./encoding/decode.js\";\n\n// Reflection\nexport {\n Reflection,\n ReflectionType,\n ReflectionField,\n} from \"./Reflection.js\";\n\n// Annotations, Metadata and TypeContext\nexport { Metadata } from \"./Metadata.js\";\n\n// Schema definition types\nexport {\n type,\n deprecated,\n owned,\n unreliable,\n transient,\n view,\n schema,\n entity,\n type DefinitionType,\n type PrimitiveType,\n type Definition,\n type FieldsAndMethods,\n // Raw schema() return types\n type SchemaWithExtendsConstructor,\n type SchemaWithExtends,\n type SchemaType,\n} from \"./annotations.js\";\n\n// zod-style chainable builders\nexport { t, FieldBuilder, isBuilder, type BuilderDefinition, type ChildType } from \"./types/builder.js\";\n\nexport { TypeContext } from \"./types/TypeContext.js\";\n\n// Helper types for type inference\nexport type { InferValueType, InferSchemaInstanceType, AssignableProps, BuilderInitProps } from \"./types/HelperTypes.js\";\n\nexport { getDecoderStateCallbacks, type CallbackProxy, type SchemaCallback, type CollectionCallback, type SchemaCallbackProxy } from \"./decoder/strategy/getDecoderStateCallbacks.js\";\nexport { Callbacks, StateCallbackStrategy } from \"./decoder/strategy/Callbacks.js\";\nexport { getRawChangesCallback } from \"./decoder/strategy/RawChanges.js\";\n\nexport { Encoder } from \"./encoder/Encoder.js\";\nexport { Root } from \"./encoder/Root.js\";\nexport { encodeSchemaOperation, encodeArray, encodeKeyValueOperation, encodeMapEntry, encodeIndexedEntry } from \"./encoder/EncodeOperation.js\";\nexport { ChangeTree, type Ref, type IRef } from \"./encoder/ChangeTree.js\";\nexport { StateView } from \"./encoder/StateView.js\";\n\nexport { Decoder } from \"./decoder/Decoder.js\";\nexport { decodeSchemaOperation, decodeKeyValueOperation } from \"./decoder/DecodeOperation.js\";\n\nexport { OPERATION } from \"./encoding/spec.js\";"],"names":["OPERATION","_convoBuffer","_int32","_float32","_float64","_int64","int8","uint8","int16","uint16","int32","uint32","int64","uint64","bigint64","biguint64","float32","float64","boolean","string","number","_invokeNoCtx","_setRoot","_setParent","_forEachChild","_forEachChildWithCtx","_forEachLive","_forEachLiveWithCtx","_addParent","_removeParent","_findParent","_hasParent","_getAllParents"],"mappings":"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"}