{"version":3,"file":"index.mjs","sources":["../../../src/msgpack/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014 Ion Drive Software Ltd.\n * https://github.com/darrachequesne/notepack/\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\n/**\n * Patch for Colyseus:\n * -------------------\n *\n * added `offset` on Decoder constructor, for messages arriving with a code\n * before actual msgpack data\n */\n\n// \n// DECODER\n// \n\nfunction Decoder(buffer, offset) {\n    this._offset = offset;\n    if (buffer instanceof ArrayBuffer) {\n        this._buffer = buffer;\n        this._view = new DataView(this._buffer);\n    } else if (ArrayBuffer.isView(buffer)) {\n        this._buffer = buffer.buffer;\n        this._view = new DataView(this._buffer, buffer.byteOffset, buffer.byteLength);\n    } else {\n        throw new Error('Invalid argument');\n    }\n}\n\nfunction utf8Read(view, offset, length) {\n    var string = '', chr = 0;\n    for (var i = offset, end = offset + length; i < end; i++) {\n        var byte = view.getUint8(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                (view.getUint8(++i) & 0x3f)\n            );\n            continue;\n        }\n        if ((byte & 0xf0) === 0xe0) {\n            string += String.fromCharCode(\n                ((byte & 0x0f) << 12) |\n                ((view.getUint8(++i) & 0x3f) << 6) |\n                ((view.getUint8(++i) & 0x3f) << 0)\n            );\n            continue;\n        }\n        if ((byte & 0xf8) === 0xf0) {\n            chr = ((byte & 0x07) << 18) |\n                ((view.getUint8(++i) & 0x3f) << 12) |\n                ((view.getUint8(++i) & 0x3f) << 6) |\n                ((view.getUint8(++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        throw new Error('Invalid byte ' + byte.toString(16));\n    }\n    return string;\n}\n\nDecoder.prototype._array = function (length) {\n    var value = new Array(length);\n    for (var i = 0; i < length; i++) {\n        value[i] = this._parse();\n    }\n    return value;\n};\n\nDecoder.prototype._map = function (length) {\n    var key = '', value = {};\n    for (var i = 0; i < length; i++) {\n        key = this._parse();\n        value[key] = this._parse();\n    }\n    return value;\n};\n\nDecoder.prototype._str = function (length) {\n    var value = utf8Read(this._view, this._offset, length);\n    this._offset += length;\n    return value;\n};\n\nDecoder.prototype._bin = function (length) {\n    var value = this._buffer.slice(this._offset, this._offset + length);\n    this._offset += length;\n    return value;\n};\n\nDecoder.prototype._parse = function () {\n    var prefix = this._view.getUint8(this._offset++);\n    var value, length = 0, type = 0, hi = 0, lo = 0;\n\n    if (prefix < 0xc0) {\n        // positive fixint\n        if (prefix < 0x80) {\n            return prefix;\n        }\n        // fixmap\n        if (prefix < 0x90) {\n            return this._map(prefix & 0x0f);\n        }\n        // fixarray\n        if (prefix < 0xa0) {\n            return this._array(prefix & 0x0f);\n        }\n        // fixstr\n        return this._str(prefix & 0x1f);\n    }\n\n    // negative fixint\n    if (prefix > 0xdf) {\n        return (0xff - prefix + 1) * -1;\n    }\n\n    switch (prefix) {\n        // nil\n        case 0xc0:\n            return null;\n        // false\n        case 0xc2:\n            return false;\n        // true\n        case 0xc3:\n            return true;\n\n        // bin\n        case 0xc4:\n            length = this._view.getUint8(this._offset);\n            this._offset += 1;\n            return this._bin(length);\n        case 0xc5:\n            length = this._view.getUint16(this._offset);\n            this._offset += 2;\n            return this._bin(length);\n        case 0xc6:\n            length = this._view.getUint32(this._offset);\n            this._offset += 4;\n            return this._bin(length);\n\n        // ext\n        case 0xc7:\n            length = this._view.getUint8(this._offset);\n            type = this._view.getInt8(this._offset + 1);\n            this._offset += 2;\n            return [type, this._bin(length)];\n        case 0xc8:\n            length = this._view.getUint16(this._offset);\n            type = this._view.getInt8(this._offset + 2);\n            this._offset += 3;\n            return [type, this._bin(length)];\n        case 0xc9:\n            length = this._view.getUint32(this._offset);\n            type = this._view.getInt8(this._offset + 4);\n            this._offset += 5;\n            return [type, this._bin(length)];\n\n        // float\n        case 0xca:\n            value = this._view.getFloat32(this._offset);\n            this._offset += 4;\n            return value;\n        case 0xcb:\n            value = this._view.getFloat64(this._offset);\n            this._offset += 8;\n            return value;\n\n        // uint\n        case 0xcc:\n            value = this._view.getUint8(this._offset);\n            this._offset += 1;\n            return value;\n        case 0xcd:\n            value = this._view.getUint16(this._offset);\n            this._offset += 2;\n            return value;\n        case 0xce:\n            value = this._view.getUint32(this._offset);\n            this._offset += 4;\n            return value;\n        case 0xcf:\n            hi = this._view.getUint32(this._offset) * Math.pow(2, 32);\n            lo = this._view.getUint32(this._offset + 4);\n            this._offset += 8;\n            return hi + lo;\n\n        // int\n        case 0xd0:\n            value = this._view.getInt8(this._offset);\n            this._offset += 1;\n            return value;\n        case 0xd1:\n            value = this._view.getInt16(this._offset);\n            this._offset += 2;\n            return value;\n        case 0xd2:\n            value = this._view.getInt32(this._offset);\n            this._offset += 4;\n            return value;\n        case 0xd3:\n            hi = this._view.getInt32(this._offset) * Math.pow(2, 32);\n            lo = this._view.getUint32(this._offset + 4);\n            this._offset += 8;\n            return hi + lo;\n\n        // fixext\n        case 0xd4:\n            type = this._view.getInt8(this._offset);\n            this._offset += 1;\n            if (type === 0x00) {\n                this._offset += 1;\n                return void 0;\n            }\n            return [type, this._bin(1)];\n        case 0xd5:\n            type = this._view.getInt8(this._offset);\n            this._offset += 1;\n            return [type, this._bin(2)];\n        case 0xd6:\n            type = this._view.getInt8(this._offset);\n            this._offset += 1;\n            return [type, this._bin(4)];\n        case 0xd7:\n            type = this._view.getInt8(this._offset);\n            this._offset += 1;\n            if (type === 0x00) {\n                hi = this._view.getInt32(this._offset) * Math.pow(2, 32);\n                lo = this._view.getUint32(this._offset + 4);\n                this._offset += 8;\n                return new Date(hi + lo);\n            }\n            return [type, this._bin(8)];\n        case 0xd8:\n            type = this._view.getInt8(this._offset);\n            this._offset += 1;\n            return [type, this._bin(16)];\n\n        // str\n        case 0xd9:\n            length = this._view.getUint8(this._offset);\n            this._offset += 1;\n            return this._str(length);\n        case 0xda:\n            length = this._view.getUint16(this._offset);\n            this._offset += 2;\n            return this._str(length);\n        case 0xdb:\n            length = this._view.getUint32(this._offset);\n            this._offset += 4;\n            return this._str(length);\n\n        // array\n        case 0xdc:\n            length = this._view.getUint16(this._offset);\n            this._offset += 2;\n            return this._array(length);\n        case 0xdd:\n            length = this._view.getUint32(this._offset);\n            this._offset += 4;\n            return this._array(length);\n\n        // map\n        case 0xde:\n            length = this._view.getUint16(this._offset);\n            this._offset += 2;\n            return this._map(length);\n        case 0xdf:\n            length = this._view.getUint32(this._offset);\n            this._offset += 4;\n            return this._map(length);\n    }\n\n    throw new Error('Could not parse');\n};\n\nfunction decode(buffer, offset = 0) {\n    var decoder = new Decoder(buffer, offset);\n    var value = decoder._parse();\n    if (decoder._offset !== buffer.byteLength) {\n        throw new Error((buffer.byteLength - decoder._offset) + ' trailing bytes');\n    }\n    return value;\n}\n\n// \n// ENCODER\n// \n\nfunction utf8Write(view, offset, str) {\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.setUint8(offset++, c);\n        }\n        else if (c < 0x800) {\n            view.setUint8(offset++, 0xc0 | (c >> 6));\n            view.setUint8(offset++, 0x80 | (c & 0x3f));\n        }\n        else if (c < 0xd800 || c >= 0xe000) {\n            view.setUint8(offset++, 0xe0 | (c >> 12));\n            view.setUint8(offset++, 0x80 | (c >> 6) & 0x3f);\n            view.setUint8(offset++, 0x80 | (c & 0x3f));\n        }\n        else {\n            i++;\n            c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n            view.setUint8(offset++, 0xf0 | (c >> 18));\n            view.setUint8(offset++, 0x80 | (c >> 12) & 0x3f);\n            view.setUint8(offset++, 0x80 | (c >> 6) & 0x3f);\n            view.setUint8(offset++, 0x80 | (c & 0x3f));\n        }\n    }\n}\n\nfunction utf8Length(str) {\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 _encode(bytes, defers, value) {\n    var type = typeof value, i = 0, l = 0, hi = 0, lo = 0, length = 0, size = 0;\n\n    if (type === 'string') {\n        length = utf8Length(value);\n\n        // fixstr\n        if (length < 0x20) {\n            bytes.push(length | 0xa0);\n            size = 1;\n        }\n        // str 8\n        else if (length < 0x100) {\n            bytes.push(0xd9, length);\n            size = 2;\n        }\n        // str 16\n        else if (length < 0x10000) {\n            bytes.push(0xda, length >> 8, length);\n            size = 3;\n        }\n        // str 32\n        else if (length < 0x100000000) {\n            bytes.push(0xdb, length >> 24, length >> 16, length >> 8, length);\n            size = 5;\n        } else {\n            throw new Error('String too long');\n        }\n        defers.push({ _str: value, _length: length, _offset: bytes.length });\n        return size + length;\n    }\n    if (type === 'number') {\n        // TODO: encode to float 32?\n\n        // float 64\n        if (Math.floor(value) !== value || !isFinite(value)) {\n            bytes.push(0xcb);\n            defers.push({ _float: value, _length: 8, _offset: bytes.length });\n            return 9;\n        }\n\n        if (value >= 0) {\n            // positive fixnum\n            if (value < 0x80) {\n                bytes.push(value);\n                return 1;\n            }\n            // uint 8\n            if (value < 0x100) {\n                bytes.push(0xcc, value);\n                return 2;\n            }\n            // uint 16\n            if (value < 0x10000) {\n                bytes.push(0xcd, value >> 8, value);\n                return 3;\n            }\n            // uint 32\n            if (value < 0x100000000) {\n                bytes.push(0xce, value >> 24, value >> 16, value >> 8, value);\n                return 5;\n            }\n            // uint 64\n            hi = (value / Math.pow(2, 32)) >> 0;\n            lo = value >>> 0;\n            bytes.push(0xcf, hi >> 24, hi >> 16, hi >> 8, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n            return 9;\n        } else {\n            // negative fixnum\n            if (value >= -0x20) {\n                bytes.push(value);\n                return 1;\n            }\n            // int 8\n            if (value >= -0x80) {\n                bytes.push(0xd0, value);\n                return 2;\n            }\n            // int 16\n            if (value >= -0x8000) {\n                bytes.push(0xd1, value >> 8, value);\n                return 3;\n            }\n            // int 32\n            if (value >= -0x80000000) {\n                bytes.push(0xd2, value >> 24, value >> 16, value >> 8, value);\n                return 5;\n            }\n            // int 64\n            hi = Math.floor(value / Math.pow(2, 32));\n            lo = value >>> 0;\n            bytes.push(0xd3, hi >> 24, hi >> 16, hi >> 8, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n            return 9;\n        }\n    }\n    if (type === 'object') {\n        // nil\n        if (value === null) {\n            bytes.push(0xc0);\n            return 1;\n        }\n\n        if (Array.isArray(value)) {\n            length = value.length;\n\n            // fixarray\n            if (length < 0x10) {\n                bytes.push(length | 0x90);\n                size = 1;\n            }\n            // array 16\n            else if (length < 0x10000) {\n                bytes.push(0xdc, length >> 8, length);\n                size = 3;\n            }\n            // array 32\n            else if (length < 0x100000000) {\n                bytes.push(0xdd, length >> 24, length >> 16, length >> 8, length);\n                size = 5;\n            } else {\n                throw new Error('Array too large');\n            }\n            for (i = 0; i < length; i++) {\n                size += _encode(bytes, defers, value[i]);\n            }\n            return size;\n        }\n\n        // fixext 8 / Date\n        if (value instanceof Date) {\n            var time = value.getTime();\n            hi = Math.floor(time / Math.pow(2, 32));\n            lo = time >>> 0;\n            bytes.push(0xd7, 0, hi >> 24, hi >> 16, hi >> 8, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n            return 10;\n        }\n\n        if (value instanceof ArrayBuffer) {\n            length = value.byteLength;\n\n            // bin 8\n            if (length < 0x100) {\n                bytes.push(0xc4, length);\n                size = 2;\n            } else\n                // bin 16\n                if (length < 0x10000) {\n                    bytes.push(0xc5, length >> 8, length);\n                    size = 3;\n                } else\n                    // bin 32\n                    if (length < 0x100000000) {\n                        bytes.push(0xc6, length >> 24, length >> 16, length >> 8, length);\n                        size = 5;\n                    } else {\n                        throw new Error('Buffer too large');\n                    }\n            defers.push({ _bin: value, _length: length, _offset: bytes.length });\n            return size + length;\n        }\n\n        if (typeof value.toJSON === 'function') {\n            return _encode(bytes, defers, value.toJSON());\n        }\n\n        var keys = [], key = '';\n\n        var allKeys = Object.keys(value);\n        for (i = 0, l = allKeys.length; i < l; i++) {\n            key = allKeys[i];\n            if (typeof value[key] !== 'function') {\n                keys.push(key);\n            }\n        }\n        length = keys.length;\n\n        // fixmap\n        if (length < 0x10) {\n            bytes.push(length | 0x80);\n            size = 1;\n        }\n        // map 16\n        else if (length < 0x10000) {\n            bytes.push(0xde, length >> 8, length);\n            size = 3;\n        }\n        // map 32\n        else if (length < 0x100000000) {\n            bytes.push(0xdf, length >> 24, length >> 16, length >> 8, length);\n            size = 5;\n        } else {\n            throw new Error('Object too large');\n        }\n\n        for (i = 0; i < length; i++) {\n            key = keys[i];\n            size += _encode(bytes, defers, key);\n            size += _encode(bytes, defers, value[key]);\n        }\n        return size;\n    }\n    // false/true\n    if (type === 'boolean') {\n        bytes.push(value ? 0xc3 : 0xc2);\n        return 1;\n    }\n    // fixext 1 / undefined\n    if (type === 'undefined') {\n        bytes.push(0xd4, 0, 0);\n        return 3;\n    }\n    throw new Error('Could not encode');\n}\n\nfunction encode(value) {\n    var bytes = [];\n    var defers = [];\n    var size = _encode(bytes, defers, value);\n    var buf = new ArrayBuffer(size);\n    var view = new DataView(buf);\n\n    var deferIndex = 0;\n    var deferWritten = 0;\n    var nextOffset = -1;\n    if (defers.length > 0) {\n        nextOffset = defers[0]._offset;\n    }\n\n    var defer, deferLength = 0, offset = 0;\n    for (var i = 0, l = bytes.length; i < l; i++) {\n        view.setUint8(deferWritten + i, bytes[i]);\n        if (i + 1 !== nextOffset) { continue; }\n        defer = defers[deferIndex];\n        deferLength = defer._length;\n        offset = deferWritten + nextOffset;\n        if (defer._bin) {\n            var bin = new Uint8Array(defer._bin);\n            for (var j = 0; j < deferLength; j++) {\n                view.setUint8(offset + j, bin[j]);\n            }\n        } else if (defer._str) {\n            utf8Write(view, offset, defer._str);\n        } else if (defer._float !== undefined) {\n            view.setFloat64(offset, defer._float);\n        }\n        deferIndex++;\n        deferWritten += deferLength;\n        if (defers[deferIndex]) {\n            nextOffset = defers[deferIndex]._offset;\n        }\n    }\n    return buf;\n}\n\nexport { encode, decode };"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;AAqBG;AAEH;;;;;;AAMG;AAEH;AACA;AACA;AAEA,SAAS,OAAO,CAAC,MAAM,EAAE,MAAM,EAAA;AAC3B,IAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACtB,IAAI,MAAM,YAAY,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,KAAA;AAAM,SAAA,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACjF,KAAA;AAAM,SAAA;AACH,QAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACvC,KAAA;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAA;AAClC,IAAA,IAAI,MAAM,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;AACzB,IAAA,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QACtD,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE;AACxB,YAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACpC,SAAS;AACZ,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE;AACxB,YAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CACzB,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC;iBAClB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAC9B,CAAC;YACF,SAAS;AACZ,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE;AACxB,YAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CACzB,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE;AACpB,iBAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AAClC,iBAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CACrC,CAAC;YACF,SAAS;AACZ,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE;YACxB,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE;AACtB,iBAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;AACnC,iBAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AAClC,iBAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;AACvC,YAAA,IAAI,GAAG,IAAI,QAAQ,EAAE;gBACjB,GAAG,IAAI,QAAQ,CAAC;gBAChB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC;AAChF,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,aAAA;YACD,SAAS;AACZ,SAAA;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,MAAM,EAAA;AACvC,IAAA,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7B,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC5B,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,MAAM,EAAA;AACrC,IAAA,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7B,QAAA,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC9B,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,MAAM,EAAA;AACrC,IAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACvD,IAAA,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;AACvB,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,MAAM,EAAA;AACrC,IAAA,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;AACpE,IAAA,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;AACvB,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,YAAA;AACvB,IAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACjD,IAAA,IAAI,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAEhD,IAAI,MAAM,GAAG,IAAI,EAAE;;QAEf,IAAI,MAAM,GAAG,IAAI,EAAE;AACf,YAAA,OAAO,MAAM,CAAC;AACjB,SAAA;;QAED,IAAI,MAAM,GAAG,IAAI,EAAE;YACf,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACnC,SAAA;;QAED,IAAI,MAAM,GAAG,IAAI,EAAE;YACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACrC,SAAA;;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACnC,KAAA;;IAGD,IAAI,MAAM,GAAG,IAAI,EAAE;QACf,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,KAAA;AAED,IAAA,QAAQ,MAAM;;AAEV,QAAA,KAAK,IAAI;AACL,YAAA,OAAO,IAAI,CAAC;;AAEhB,QAAA,KAAK,IAAI;AACL,YAAA,OAAO,KAAK,CAAC;;AAEjB,QAAA,KAAK,IAAI;AACL,YAAA,OAAO,IAAI,CAAC;;AAGhB,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAG7B,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;AAGrC,QAAA,KAAK,IAAI;YACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,KAAK,CAAC;AACjB,QAAA,KAAK,IAAI;YACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,KAAK,CAAC;;AAGjB,QAAA,KAAK,IAAI;YACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,KAAK,CAAC;AACjB,QAAA,KAAK,IAAI;YACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,KAAK,CAAC;AACjB,QAAA,KAAK,IAAI;YACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,KAAK,CAAC;AACjB,QAAA,KAAK,IAAI;YACL,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1D,YAAA,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO,EAAE,GAAG,EAAE,CAAC;;AAGnB,QAAA,KAAK,IAAI;YACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,KAAK,CAAC;AACjB,QAAA,KAAK,IAAI;YACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,KAAK,CAAC;AACjB,QAAA,KAAK,IAAI;YACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,KAAK,CAAC;AACjB,QAAA,KAAK,IAAI;YACL,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzD,YAAA,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO,EAAE,GAAG,EAAE,CAAC;;AAGnB,QAAA,KAAK,IAAI;YACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,IAAI,IAAI,KAAK,IAAI,EAAE;AACf,gBAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;gBAClB,OAAO,KAAK,CAAC,CAAC;AACjB,aAAA;YACD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI;YACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI;YACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI;YACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,IAAI,IAAI,KAAK,IAAI,EAAE;gBACf,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzD,gBAAA,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,gBAAA,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5B,aAAA;YACD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI;YACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGjC,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAG7B,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;AAG/B,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,QAAA,KAAK,IAAI;YACL,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChC,KAAA;AAED,IAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAA;IAC9B,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1C,IAAA,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAC7B,IAAA,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,UAAU,EAAE;AACvC,QAAA,MAAM,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,iBAAiB,CAAC,CAAC;AAC9E,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;AACA;AACA;AAEA,SAAS,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAA;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,QAAA,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,IAAI,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9B,SAAA;aACI,IAAI,CAAC,GAAG,KAAK,EAAE;AAChB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9C,SAAA;AACI,aAAA,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9C,SAAA;AACI,aAAA;AACD,YAAA,CAAC,EAAE,CAAC;YACJ,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9C,SAAA;AACJ,KAAA;AACL,CAAC;AAED,SAAS,UAAU,CAAC,GAAG,EAAA;AACnB,IAAA,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;AACtB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,QAAA,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,IAAI,EAAE;YACV,MAAM,IAAI,CAAC,CAAC;AACf,SAAA;aACI,IAAI,CAAC,GAAG,KAAK,EAAE;YAChB,MAAM,IAAI,CAAC,CAAC;AACf,SAAA;AACI,aAAA,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;YAChC,MAAM,IAAI,CAAC,CAAC;AACf,SAAA;AACI,aAAA;AACD,YAAA,CAAC,EAAE,CAAC;YACJ,MAAM,IAAI,CAAC,CAAC;AACf,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAA;AACjC,IAAA,IAAI,IAAI,GAAG,OAAO,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IAE5E,IAAI,IAAI,KAAK,QAAQ,EAAE;AACnB,QAAA,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;;QAG3B,IAAI,MAAM,GAAG,IAAI,EAAE;AACf,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YAC1B,IAAI,GAAG,CAAC,CAAC;AACZ,SAAA;;aAEI,IAAI,MAAM,GAAG,KAAK,EAAE;AACrB,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzB,IAAI,GAAG,CAAC,CAAC;AACZ,SAAA;;aAEI,IAAI,MAAM,GAAG,OAAO,EAAE;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YACtC,IAAI,GAAG,CAAC,CAAC;AACZ,SAAA;;aAEI,IAAI,MAAM,GAAG,WAAW,EAAE;AAC3B,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YAClE,IAAI,GAAG,CAAC,CAAC;AACZ,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,SAAA;AACD,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,GAAG,MAAM,CAAC;AACxB,KAAA;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE;;;AAInB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjD,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAClE,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;QAED,IAAI,KAAK,IAAI,CAAC,EAAE;;YAEZ,IAAI,KAAK,GAAG,IAAI,EAAE;AACd,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClB,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;;YAED,IAAI,KAAK,GAAG,KAAK,EAAE;AACf,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACxB,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;;YAED,IAAI,KAAK,GAAG,OAAO,EAAE;gBACjB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AACpC,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;;YAED,IAAI,KAAK,GAAG,WAAW,EAAE;AACrB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9D,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;;AAED,YAAA,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AACpC,YAAA,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AACjB,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACnF,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;AAAM,aAAA;;AAEH,YAAA,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AAChB,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClB,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;;AAED,YAAA,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AAChB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACxB,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;;AAED,YAAA,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;gBAClB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AACpC,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;;AAED,YAAA,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE;AACtB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9D,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;;AAED,YAAA,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACzC,YAAA,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AACjB,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACnF,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;AACJ,KAAA;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE;;QAEnB,IAAI,KAAK,KAAK,IAAI,EAAE;AAChB,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;AAED,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;;YAGtB,IAAI,MAAM,GAAG,IAAI,EAAE;AACf,gBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;gBAC1B,IAAI,GAAG,CAAC,CAAC;AACZ,aAAA;;iBAEI,IAAI,MAAM,GAAG,OAAO,EAAE;gBACvB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBACtC,IAAI,GAAG,CAAC,CAAC;AACZ,aAAA;;iBAEI,IAAI,MAAM,GAAG,WAAW,EAAE;AAC3B,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClE,IAAI,GAAG,CAAC,CAAC;AACZ,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,aAAA;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACzB,gBAAA,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;;QAGD,IAAI,KAAK,YAAY,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC3B,YAAA,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACxC,YAAA,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;AAChB,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACtF,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;QAED,IAAI,KAAK,YAAY,WAAW,EAAE;AAC9B,YAAA,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;;YAG1B,IAAI,MAAM,GAAG,KAAK,EAAE;AAChB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACzB,IAAI,GAAG,CAAC,CAAC;AACZ,aAAA;;;YAEG,IAAI,MAAM,GAAG,OAAO,EAAE;gBAClB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBACtC,IAAI,GAAG,CAAC,CAAC;AACZ,aAAA;;;YAEG,IAAI,MAAM,GAAG,WAAW,EAAE;AACtB,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClE,IAAI,GAAG,CAAC,CAAC;AACZ,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACvC,aAAA;AACT,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,GAAG,MAAM,CAAC;AACxB,SAAA;AAED,QAAA,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE;YACpC,OAAO,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AACjD,SAAA;AAED,QAAA,IAAI,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;QAExB,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE;AAClC,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClB,aAAA;AACJ,SAAA;AACD,QAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;;QAGrB,IAAI,MAAM,GAAG,IAAI,EAAE;AACf,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YAC1B,IAAI,GAAG,CAAC,CAAC;AACZ,SAAA;;aAEI,IAAI,MAAM,GAAG,OAAO,EAAE;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YACtC,IAAI,GAAG,CAAC,CAAC;AACZ,SAAA;;aAEI,IAAI,MAAM,GAAG,WAAW,EAAE;AAC3B,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YAClE,IAAI,GAAG,CAAC,CAAC;AACZ,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACvC,SAAA;QAED,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACzB,YAAA,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AACpC,YAAA,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;AACf,KAAA;;IAED,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAChC,QAAA,OAAO,CAAC,CAAC;AACZ,KAAA;;IAED,IAAI,IAAI,KAAK,WAAW,EAAE;QACtB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB,QAAA,OAAO,CAAC,CAAC;AACZ,KAAA;AACD,IAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,MAAM,CAAC,KAAK,EAAA;IACjB,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACzC,IAAA,IAAI,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AAChC,IAAA,IAAI,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,IAAA,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;AACpB,IAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,QAAA,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAClC,KAAA;IAED,IAAI,KAAK,EAAE,WAAW,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;AACvC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE;YAAE,SAAS;AAAE,SAAA;AACvC,QAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3B,QAAA,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,EAAE;YACZ,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AAClC,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,aAAA;AACJ,SAAA;aAAM,IAAI,KAAK,CAAC,IAAI,EAAE;YACnB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACvC,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AACzC,SAAA;AACD,QAAA,UAAU,EAAE,CAAC;QACb,YAAY,IAAI,WAAW,CAAC;AAC5B,QAAA,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE;AACpB,YAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;AAC3C,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,GAAG,CAAC;AACf;;;;"}