{"version":3,"file":"browser_compat-D0YxB2m9.js","names":["exports","exports","\"default\""],"sources":["../../node_modules/protobufjs/src/util/aspromise.js","../../node_modules/protobufjs/src/util/base64.js","../../node_modules/protobufjs/src/util/eventemitter.js","../../node_modules/protobufjs/src/util/float.js","../../node_modules/protobufjs/src/util/utf8.js","../../node_modules/protobufjs/src/util/pool.js","../../node_modules/protobufjs/src/util/longbits.js","../../node_modules/long/umd/index.js","../../node_modules/protobufjs/src/util/minimal.js","../../node_modules/protobufjs/src/writer.js","../../node_modules/protobufjs/src/writer_buffer.js","../../node_modules/protobufjs/src/reader.js","../../node_modules/protobufjs/src/reader_buffer.js","../../node_modules/protobufjs/src/rpc/service.js","../../node_modules/protobufjs/src/rpc.js","../../node_modules/protobufjs/src/roots.js","../../node_modules/protobufjs/src/index-minimal.js","../../node_modules/protobufjs/minimal.js","../../src/proto/compiled_proto.js","../../src/core/strings.ts","../../src/api-config.ts","../../src/locales/us-en.7350a20684fb7add93b6f816.json","../../src/i18n.ts","../../src/theme-manager.ts","../../src/core/browser_compat.ts"],"sourcesContent":["\"use strict\";\nmodule.exports = asPromise;\n\n/**\n * Callback as used by {@link util.asPromise}.\n * @typedef asPromiseCallback\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {...*} params Additional arguments\n * @returns {undefined}\n */\n\n/**\n * Returns a promise from a node-style callback function.\n * @memberof util\n * @param {asPromiseCallback} fn Function to call\n * @param {*} ctx Function context\n * @param {...*} params Function arguments\n * @returns {Promise<*>} Promisified function\n */\nfunction asPromise(fn, ctx/*, varargs */) {\n    var params  = new Array(arguments.length - 1),\n        offset  = 0,\n        index   = 2,\n        pending = true;\n    while (index < arguments.length)\n        params[offset++] = arguments[index++];\n    return new Promise(function executor(resolve, reject) {\n        params[offset] = function callback(err/*, varargs */) {\n            if (pending) {\n                pending = false;\n                if (err)\n                    reject(err);\n                else {\n                    var params = new Array(arguments.length - 1),\n                        offset = 0;\n                    while (offset < params.length)\n                        params[offset++] = arguments[offset];\n                    resolve.apply(null, params);\n                }\n            }\n        };\n        try {\n            fn.apply(ctx || null, params);\n        } catch (err) {\n            if (pending) {\n                pending = false;\n                reject(err);\n            }\n        }\n    });\n}\n","\"use strict\";\n\n/**\n * A minimal base64 implementation for number arrays.\n * @memberof util\n * @namespace\n */\nvar base64 = exports;\n\n/**\n * Calculates the byte length of a base64 encoded string.\n * @param {string} string Base64 encoded string\n * @returns {number} Byte length\n */\nbase64.length = function length(string) {\n    var p = string.length;\n    if (!p)\n        return 0;\n    while (p > 0 && string.charAt(p - 1) === \"=\")\n        --p;\n    return Math.floor(p * 3 / 4);\n};\n\n// Base64 encoding table\nvar b64 = new Array(64);\n\n// Base64 decoding table\nvar s64 = new Array(123);\n\n// 65..90, 97..122, 48..57, 43, 47\nfor (var i = 0; i < 64;)\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\n\ns64[45] = 62; // - -> +\ns64[95] = 63; // _ -> /\n\n/**\n * Encodes a buffer to a base64 encoded string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} Base64 encoded string\n */\nbase64.encode = function encode(buffer, start, end) {\n    var parts = null,\n        chunk = [];\n    var i = 0, // output index\n        j = 0, // goto index\n        t;     // temporary\n    while (start < end) {\n        var b = buffer[start++];\n        switch (j) {\n            case 0:\n                chunk[i++] = b64[b >> 2];\n                t = (b & 3) << 4;\n                j = 1;\n                break;\n            case 1:\n                chunk[i++] = b64[t | b >> 4];\n                t = (b & 15) << 2;\n                j = 2;\n                break;\n            case 2:\n                chunk[i++] = b64[t | b >> 6];\n                chunk[i++] = b64[b & 63];\n                j = 0;\n                break;\n        }\n        if (i > 8191) {\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\n            i = 0;\n        }\n    }\n    if (j) {\n        chunk[i++] = b64[t];\n        chunk[i++] = 61;\n        if (j === 1)\n            chunk[i++] = 61;\n    }\n    if (parts) {\n        if (i)\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\n        return parts.join(\"\");\n    }\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\n};\n\nvar invalidEncoding = \"invalid encoding\";\n\n/**\n * Decodes a base64 encoded string to a buffer.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Number of bytes written\n * @throws {Error} If encoding is invalid\n */\nbase64.decode = function decode(string, buffer, offset) {\n    var start = offset;\n    var j = 0, // goto index\n        t;     // temporary\n    for (var i = 0; i < string.length;) {\n        var c = string.charCodeAt(i++);\n        if (c === 61 && j > 1)\n            break;\n        if ((c = s64[c]) === undefined)\n            throw Error(invalidEncoding);\n        switch (j) {\n            case 0:\n                t = c;\n                j = 1;\n                break;\n            case 1:\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\n                t = c;\n                j = 2;\n                break;\n            case 2:\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\n                t = c;\n                j = 3;\n                break;\n            case 3:\n                buffer[offset++] = (t & 3) << 6 | c;\n                j = 0;\n                break;\n        }\n    }\n    if (j === 1)\n        throw Error(invalidEncoding);\n    return offset - start;\n};\n\nvar base64Re = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,\n    base64UrlRe = /[-_]/,\n    base64UrlNoPaddingRe = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}(?:==)?|[A-Za-z0-9_-]{3}=?)?$/;\n\n/**\n * Tests if the specified string appears to be base64 encoded.\n * @param {string} string String to test\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\n */\nbase64.test = function test(string) {\n    return base64Re.test(string)\n        || base64UrlRe.test(string) && base64UrlNoPaddingRe.test(string);\n};\n","\"use strict\";\nmodule.exports = EventEmitter;\n\n/**\n * Constructs a new event emitter instance.\n * @classdesc A minimal event emitter.\n * @memberof util\n * @constructor\n */\nfunction EventEmitter() {\n\n    /**\n     * Registered listeners.\n     * @type {Object.<string,*>}\n     * @private\n     */\n    this._listeners = Object.create(null);\n}\n\n/**\n * Event listener as used by {@link util.EventEmitter}.\n * @typedef EventEmitterListener\n * @type {function}\n * @param {...*} args Arguments\n * @returns {undefined}\n */\n\n/**\n * Registers an event listener.\n * @param {string} evt Event name\n * @param {EventEmitterListener} fn Listener\n * @param {*} [ctx] Listener context\n * @returns {this} `this`\n */\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\n        fn  : fn,\n        ctx : ctx || this\n    });\n    return this;\n};\n\n/**\n * Removes an event listener or any matching listeners if arguments are omitted.\n * @param {string} [evt] Event name. Removes all listeners if omitted.\n * @param {EventEmitterListener} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\n * @returns {this} `this`\n */\nEventEmitter.prototype.off = function off(evt, fn) {\n    if (evt === undefined)\n        this._listeners = Object.create(null);\n    else {\n        if (fn === undefined)\n            this._listeners[evt] = [];\n        else {\n            var listeners = this._listeners[evt];\n            if (!listeners)\n                return this;\n            for (var i = 0; i < listeners.length;)\n                if (listeners[i].fn === fn)\n                    listeners.splice(i, 1);\n                else\n                    ++i;\n        }\n    }\n    return this;\n};\n\n/**\n * Emits an event by calling its listeners with the specified arguments.\n * @param {string} evt Event name\n * @param {...*} args Arguments\n * @returns {this} `this`\n */\nEventEmitter.prototype.emit = function emit(evt) {\n    var listeners = this._listeners[evt];\n    if (listeners) {\n        var args = [],\n            i = 1;\n        for (; i < arguments.length;)\n            args.push(arguments[i++]);\n        for (i = 0; i < listeners.length;)\n            listeners[i].fn.apply(listeners[i++].ctx, args);\n    }\n    return this;\n};\n","\"use strict\";\n\nmodule.exports = factory(factory);\n\n/**\n * Reads / writes floats / doubles from / to buffers.\n * @name util.float\n * @namespace\n */\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order.\n * @name util.float.writeFloatLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order.\n * @name util.float.writeFloatBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order.\n * @name util.float.readFloatLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order.\n * @name util.float.readFloatBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order.\n * @name util.float.writeDoubleLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order.\n * @name util.float.writeDoubleBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order.\n * @name util.float.readDoubleLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order.\n * @name util.float.readDoubleBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n// Factory function for the purpose of node-based testing in modified global environments\nfunction factory(exports) {\n\n    // float: typed array\n    if (typeof Float32Array !== \"undefined\") (function() {\n\n        var f32 = new Float32Array([ -0 ]),\n            f8b = new Uint8Array(f32.buffer),\n            le  = f8b[3] === 128;\n\n        function writeFloat_f32_cpy(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n        }\n\n        function writeFloat_f32_rev(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[3];\n            buf[pos + 1] = f8b[2];\n            buf[pos + 2] = f8b[1];\n            buf[pos + 3] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\n\n        function readFloat_f32_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            return f32[0];\n        }\n\n        function readFloat_f32_rev(buf, pos) {\n            f8b[3] = buf[pos    ];\n            f8b[2] = buf[pos + 1];\n            f8b[1] = buf[pos + 2];\n            f8b[0] = buf[pos + 3];\n            return f32[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\n\n    // float: ieee754\n    })(); else (function() {\n\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0)\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\n            else if (isNaN(val))\n                writeUint(2143289344, buf, pos);\n            else if (val > 3.4028234663852886e+38) // +-Infinity\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\n            else if (val < 1.1754943508222875e-38) // denormal\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\n            else {\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\n            }\n        }\n\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\n\n        function readFloat_ieee754(readUint, buf, pos) {\n            var uint = readUint(buf, pos),\n                sign = (uint >> 31) * 2 + 1,\n                exponent = uint >>> 23 & 255,\n                mantissa = uint & 8388607;\n            return exponent === 255\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 1.401298464324817e-45 * mantissa\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\n        }\n\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\n\n    })();\n\n    // double: typed array\n    if (typeof Float64Array !== \"undefined\") (function() {\n\n        var f64 = new Float64Array([-0]),\n            f8b = new Uint8Array(f64.buffer),\n            le  = f8b[7] === 128;\n\n        function writeDouble_f64_cpy(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n            buf[pos + 4] = f8b[4];\n            buf[pos + 5] = f8b[5];\n            buf[pos + 6] = f8b[6];\n            buf[pos + 7] = f8b[7];\n        }\n\n        function writeDouble_f64_rev(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[7];\n            buf[pos + 1] = f8b[6];\n            buf[pos + 2] = f8b[5];\n            buf[pos + 3] = f8b[4];\n            buf[pos + 4] = f8b[3];\n            buf[pos + 5] = f8b[2];\n            buf[pos + 6] = f8b[1];\n            buf[pos + 7] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\n\n        function readDouble_f64_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            f8b[4] = buf[pos + 4];\n            f8b[5] = buf[pos + 5];\n            f8b[6] = buf[pos + 6];\n            f8b[7] = buf[pos + 7];\n            return f64[0];\n        }\n\n        function readDouble_f64_rev(buf, pos) {\n            f8b[7] = buf[pos    ];\n            f8b[6] = buf[pos + 1];\n            f8b[5] = buf[pos + 2];\n            f8b[4] = buf[pos + 3];\n            f8b[3] = buf[pos + 4];\n            f8b[2] = buf[pos + 5];\n            f8b[1] = buf[pos + 6];\n            f8b[0] = buf[pos + 7];\n            return f64[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\n\n    // double: ieee754\n    })(); else (function() {\n\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0) {\n                writeUint(0, buf, pos + off0);\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\n            } else if (isNaN(val)) {\n                writeUint(0, buf, pos + off0);\n                writeUint(2146959360, buf, pos + off1);\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\n                writeUint(0, buf, pos + off0);\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\n            } else {\n                var mantissa;\n                if (val < 2.2250738585072014e-308) { // denormal\n                    mantissa = val / 5e-324;\n                    writeUint(mantissa >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\n                } else {\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\n                    if (exponent === 1024)\n                        exponent = 1023;\n                    mantissa = val * Math.pow(2, -exponent);\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\n                }\n            }\n        }\n\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\n\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\n            var lo = readUint(buf, pos + off0),\n                hi = readUint(buf, pos + off1);\n            var sign = (hi >> 31) * 2 + 1,\n                exponent = hi >>> 20 & 2047,\n                mantissa = 4294967296 * (hi & 1048575) + lo;\n            return exponent === 2047\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 5e-324 * mantissa\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\n        }\n\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\n\n    })();\n\n    return exports;\n}\n\n// uint helpers\n\nfunction writeUintLE(val, buf, pos) {\n    buf[pos    ] =  val        & 255;\n    buf[pos + 1] =  val >>> 8  & 255;\n    buf[pos + 2] =  val >>> 16 & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\nfunction writeUintBE(val, buf, pos) {\n    buf[pos    ] =  val >>> 24;\n    buf[pos + 1] =  val >>> 16 & 255;\n    buf[pos + 2] =  val >>> 8  & 255;\n    buf[pos + 3] =  val        & 255;\n}\n\nfunction readUintLE(buf, pos) {\n    return (buf[pos    ]\n          | buf[pos + 1] << 8\n          | buf[pos + 2] << 16\n          | buf[pos + 3] << 24) >>> 0;\n}\n\nfunction readUintBE(buf, pos) {\n    return (buf[pos    ] << 24\n          | buf[pos + 1] << 16\n          | buf[pos + 2] << 8\n          | buf[pos + 3]) >>> 0;\n}\n","\"use strict\";\n\n/**\n * A minimal UTF8 implementation.\n * @memberof util\n * @namespace\n */\nvar utf8 = exports,\n    looseDecoder = new TextDecoder(\"utf-8\", { ignoreBOM: true }),\n    strictDecoder;\nvar TEXT_DECODER_MIN_LENGTH = 64;\n\ntry {\n    strictDecoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n} catch (err) {\n    // \"fatal\" option is not supported on Node.js compiled without ICU\n    strictDecoder = looseDecoder;\n}\n\n/**\n * Calculates the UTF8 byte length of a string.\n * @param {string} string String\n * @returns {number} Byte length\n */\nutf8.length = function utf8_length(string) {\n    var len = 0,\n        c = 0;\n    for (var i = 0; i < string.length; ++i) {\n        c = string.charCodeAt(i);\n        if (c < 128)\n            len += 1;\n        else if (c < 2048)\n            len += 2;\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n            ++i;\n            len += 4;\n        } else\n            len += 3;\n    }\n    return len;\n};\n\nfunction utf8_read_decoder(decoder, buffer, start, end) {\n    var source = start === 0 && end === buffer.length\n        ? buffer\n        : buffer.subarray(start, end);\n    return decoder.decode(source);\n}\n\n/**\n * Reads UTF8 bytes as a string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.read = function utf8_read_loose(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(looseDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return str + utf8_read_decoder(looseDecoder, buffer, i, end);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return str + utf8_read_decoder(looseDecoder, buffer, i, end);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Reads UTF8 bytes as a string, rejecting invalid UTF8.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.readStrict = function utf8_read_strict(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(strictDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Writes a string as UTF8 bytes.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Bytes written\n */\nutf8.write = function utf8_write(string, buffer, offset) {\n    var start = offset,\n        c1, // character 1\n        c2; // character 2\n    for (var i = 0; i < string.length; ++i) {\n        c1 = string.charCodeAt(i);\n        if (c1 < 128) {\n            buffer[offset++] = c1;\n        } else if (c1 < 2048) {\n            buffer[offset++] = c1 >> 6       | 192;\n            buffer[offset++] = c1       & 63 | 128;\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\n            ++i;\n            buffer[offset++] = c1 >> 18      | 240;\n            buffer[offset++] = c1 >> 12 & 63 | 128;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        } else {\n            buffer[offset++] = c1 >> 12      | 224;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        }\n    }\n    return offset - start;\n};\n","\"use strict\";\nmodule.exports = pool;\n\n/**\n * An allocator as used by {@link util.pool}.\n * @typedef PoolAllocator\n * @type {function}\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\n\n/**\n * A slicer as used by {@link util.pool}.\n * @typedef PoolSlicer\n * @type {function}\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Buffer slice\n * @this Uint8Array\n */\n\n/**\n * A general purpose buffer pool.\n * @memberof util\n * @function\n * @param {PoolAllocator} alloc Allocator\n * @param {PoolSlicer} slice Slicer\n * @param {number} [size=8192] Slab size\n * @returns {PoolAllocator} Pooled allocator\n */\nfunction pool(alloc, slice, size) {\n    var SIZE   = size || 8192;\n    var MAX    = SIZE >>> 1;\n    var slab   = null;\n    var offset = SIZE;\n    return function pool_alloc(size) {\n        if (size < 1 || size > MAX)\n            return alloc(size);\n        if (offset + size > SIZE) {\n            slab = alloc(SIZE);\n            offset = 0;\n        }\n        var buf = slice.call(slab, offset, offset += size);\n        if (offset & 7) // align to 32 bit\n            offset = (offset | 7) + 1;\n        return buf;\n    };\n}\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar Long;\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits.\n     * @type {number}\n     */\n    this.lo = lo >>> 0;\n\n    /**\n     * High bits.\n     * @type {number}\n     */\n    this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n    if (value === 0)\n        return zero;\n    var sign = value < 0;\n    if (sign)\n        value = -value;\n    var lo = value >>> 0,\n        hi = (value - lo) / 4294967296 >>> 0;\n    if (sign) {\n        hi = ~hi >>> 0;\n        lo = ~lo >>> 0;\n        if (++lo > 4294967295) {\n            lo = 0;\n            if (++hi > 4294967295)\n                hi = 0;\n        }\n    }\n    return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n    if (typeof value === \"number\")\n        return LongBits.fromNumber(value);\n    if (typeof value === \"string\" || value instanceof String) {\n        /* istanbul ignore else */\n        if (Long)\n            value = Long.fromString(value);\n        else\n            return LongBits.fromNumber(parseInt(value, 10));\n    }\n    return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n    if (!unsigned && this.hi >>> 31) {\n        var lo = ~this.lo + 1 >>> 0,\n            hi = ~this.hi     >>> 0;\n        if (!lo)\n            hi = hi + 1 >>> 0;\n        return -(lo + hi * 4294967296);\n    }\n    return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n    return Long\n        ? new Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n        /* istanbul ignore next */\n        : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n    if (hash === zeroHash)\n        return zero;\n    return new LongBits(\n        ( charCodeAt.call(hash, 0)\n        | charCodeAt.call(hash, 1) << 8\n        | charCodeAt.call(hash, 2) << 16\n        | charCodeAt.call(hash, 3) << 24) >>> 0\n    ,\n        ( charCodeAt.call(hash, 4)\n        | charCodeAt.call(hash, 5) << 8\n        | charCodeAt.call(hash, 6) << 16\n        | charCodeAt.call(hash, 7) << 24) >>> 0\n    );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n    return String.fromCharCode(\n        this.lo        & 255,\n        this.lo >>> 8  & 255,\n        this.lo >>> 16 & 255,\n        this.lo >>> 24      ,\n        this.hi        & 255,\n        this.hi >>> 8  & 255,\n        this.hi >>> 16 & 255,\n        this.hi >>> 24\n    );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n    var mask =   this.hi >> 31;\n    this.hi  = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n    this.lo  = ( this.lo << 1                   ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n    var mask = -(this.lo & 1);\n    this.lo  = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n    this.hi  = ( this.hi >>> 1                  ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n    var part0 =  this.lo,\n        part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n        part2 =  this.hi >>> 24;\n    return part2 === 0\n         ? part1 === 0\n           ? part0 < 16384\n             ? part0 < 128 ? 1 : 2\n             : part0 < 2097152 ? 3 : 4\n           : part1 < 16384\n             ? part1 < 128 ? 5 : 6\n             : part1 < 2097152 ? 7 : 8\n         : part2 < 128 ? 9 : 10;\n};\n\nLongBits._configure = function(Long_) {\n    Long = Long_;\n};\n","// GENERATED FILE. DO NOT EDIT.\n(function (global, factory) {\n  function preferDefault(exports) {\n    return exports.default || exports;\n  }\n  if (typeof define === \"function\" && define.amd) {\n    define([], function () {\n      var exports = {};\n      factory(exports);\n      return preferDefault(exports);\n    });\n  } else if (typeof exports === \"object\") {\n    factory(exports);\n    if (typeof module === \"object\") module.exports = preferDefault(exports);\n  } else {\n    (function () {\n      var exports = {};\n      factory(exports);\n      global.Long = preferDefault(exports);\n    })();\n  }\n})(\n  typeof globalThis !== \"undefined\"\n    ? globalThis\n    : typeof self !== \"undefined\"\n      ? self\n      : this,\n  function (_exports) {\n    \"use strict\";\n\n    Object.defineProperty(_exports, \"__esModule\", {\n      value: true,\n    });\n    _exports.default = void 0;\n    /**\n     * @license\n     * Copyright 2009 The Closure Library Authors\n     * Copyright 2020 Daniel Wirtz / The long.js Authors.\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *     http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     *\n     * SPDX-License-Identifier: Apache-2.0\n     */\n\n    // WebAssembly optimizations to do native i64 multiplication and divide\n    var wasm = null;\n    try {\n      wasm = new WebAssembly.Instance(\n        new WebAssembly.Module(\n          new Uint8Array([\n            // \\0asm\n            0, 97, 115, 109,\n            // version 1\n            1, 0, 0, 0,\n            // section \"type\"\n            1, 13, 2,\n            // 0, () => i32\n            96, 0, 1, 127,\n            // 1, (i32, i32, i32, i32) => i32\n            96, 4, 127, 127, 127, 127, 1, 127,\n            // section \"function\"\n            3, 7, 6,\n            // 0, type 0\n            0,\n            // 1, type 1\n            1,\n            // 2, type 1\n            1,\n            // 3, type 1\n            1,\n            // 4, type 1\n            1,\n            // 5, type 1\n            1,\n            // section \"global\"\n            6, 6, 1,\n            // 0, \"high\", mutable i32\n            127, 1, 65, 0, 11,\n            // section \"export\"\n            7, 50, 6,\n            // 0, \"mul\"\n            3, 109, 117, 108, 0, 1,\n            // 1, \"div_s\"\n            5, 100, 105, 118, 95, 115, 0, 2,\n            // 2, \"div_u\"\n            5, 100, 105, 118, 95, 117, 0, 3,\n            // 3, \"rem_s\"\n            5, 114, 101, 109, 95, 115, 0, 4,\n            // 4, \"rem_u\"\n            5, 114, 101, 109, 95, 117, 0, 5,\n            // 5, \"get_high\"\n            8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0,\n            // section \"code\"\n            10, 191, 1, 6,\n            // 0, \"get_high\"\n            4, 0, 35, 0, 11,\n            // 1, \"mul\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 2, \"div_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 3, \"div_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 4, \"rem_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 5, \"rem_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n          ]),\n        ),\n        {},\n      ).exports;\n    } catch {\n      // no wasm support :(\n    }\n\n    /**\n     * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n     *  See the from* functions below for more convenient ways of constructing Longs.\n     * @exports Long\n     * @class A Long class for representing a 64 bit two's-complement integer value.\n     * @param {number} low The low (signed) 32 bits of the long\n     * @param {number} high The high (signed) 32 bits of the long\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @constructor\n     */\n    function Long(low, high, unsigned) {\n      /**\n       * The low 32 bits as a signed value.\n       * @type {number}\n       */\n      this.low = low | 0;\n\n      /**\n       * The high 32 bits as a signed value.\n       * @type {number}\n       */\n      this.high = high | 0;\n\n      /**\n       * Whether unsigned or not.\n       * @type {boolean}\n       */\n      this.unsigned = !!unsigned;\n    }\n\n    // The internal representation of a long is the two given signed, 32-bit values.\n    // We use 32-bit pieces because these are the size of integers on which\n    // Javascript performs bit-operations.  For operations like addition and\n    // multiplication, we split each number into 16 bit pieces, which can easily be\n    // multiplied within Javascript's floating-point representation without overflow\n    // or change in sign.\n    //\n    // In the algorithms below, we frequently reduce the negative case to the\n    // positive case by negating the input(s) and then post-processing the result.\n    // Note that we must ALWAYS check specially whether those values are MIN_VALUE\n    // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n    // a positive number, it overflows back into a negative).  Not handling this\n    // case would often result in infinite recursion.\n    //\n    // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n    // methods on which they depend.\n\n    /**\n     * An indicator used to reliably determine if an object is a Long or not.\n     * @type {boolean}\n     * @const\n     * @private\n     */\n    Long.prototype.__isLong__;\n    Object.defineProperty(Long.prototype, \"__isLong__\", {\n      value: true,\n    });\n\n    /**\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     * @inner\n     */\n    function isLong(obj) {\n      return (obj && obj[\"__isLong__\"]) === true;\n    }\n\n    /**\n     * @function\n     * @param {*} value number\n     * @returns {number}\n     * @inner\n     */\n    function ctz32(value) {\n      var c = Math.clz32(value & -value);\n      return value ? 31 - c : c;\n    }\n\n    /**\n     * Tests if the specified object is a Long.\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     */\n    Long.isLong = isLong;\n\n    /**\n     * A cache of the Long representations of small integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var INT_CACHE = {};\n\n    /**\n     * A cache of the Long representations of small unsigned integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var UINT_CACHE = {};\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromInt(value, unsigned) {\n      var obj, cachedObj, cache;\n      if (unsigned) {\n        value >>>= 0;\n        if ((cache = 0 <= value && value < 256)) {\n          cachedObj = UINT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, 0, true);\n        if (cache) UINT_CACHE[value] = obj;\n        return obj;\n      } else {\n        value |= 0;\n        if ((cache = -128 <= value && value < 128)) {\n          cachedObj = INT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, value < 0 ? -1 : 0, false);\n        if (cache) INT_CACHE[value] = obj;\n        return obj;\n      }\n    }\n\n    /**\n     * Returns a Long representing the given 32 bit integer value.\n     * @function\n     * @param {number} value The 32 bit integer in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromInt = fromInt;\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromNumber(value, unsigned) {\n      if (isNaN(value)) return unsigned ? UZERO : ZERO;\n      if (unsigned) {\n        if (value < 0) return UZERO;\n        if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n      } else {\n        if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;\n        if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;\n      }\n      if (value < 0) return fromNumber(-value, unsigned).neg();\n      return fromBits(\n        value % TWO_PWR_32_DBL | 0,\n        (value / TWO_PWR_32_DBL) | 0,\n        unsigned,\n      );\n    }\n\n    /**\n     * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n     * @function\n     * @param {number} value The number in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromNumber = fromNumber;\n\n    /**\n     * @param {number} lowBits\n     * @param {number} highBits\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromBits(lowBits, highBits, unsigned) {\n      return new Long(lowBits, highBits, unsigned);\n    }\n\n    /**\n     * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n     *  assumed to use 32 bits.\n     * @function\n     * @param {number} lowBits The low 32 bits\n     * @param {number} highBits The high 32 bits\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromBits = fromBits;\n\n    /**\n     * @function\n     * @param {number} base\n     * @param {number} exponent\n     * @returns {number}\n     * @inner\n     */\n    var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n\n    /**\n     * @param {string} str\n     * @param {(boolean|number)=} unsigned\n     * @param {number=} radix\n     * @returns {!Long}\n     * @inner\n     */\n    function fromString(str, unsigned, radix) {\n      if (str.length === 0) throw Error(\"empty string\");\n      if (typeof unsigned === \"number\") {\n        // For goog.math.long compatibility\n        radix = unsigned;\n        unsigned = false;\n      } else {\n        unsigned = !!unsigned;\n      }\n      if (\n        str === \"NaN\" ||\n        str === \"Infinity\" ||\n        str === \"+Infinity\" ||\n        str === \"-Infinity\"\n      )\n        return unsigned ? UZERO : ZERO;\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      var p;\n      if ((p = str.indexOf(\"-\")) > 0) throw Error(\"interior hyphen\");\n      else if (p === 0) {\n        return fromString(str.substring(1), unsigned, radix).neg();\n      }\n\n      // Do several (8) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 8));\n      var result = ZERO;\n      for (var i = 0; i < str.length; i += 8) {\n        var size = Math.min(8, str.length - i),\n          value = parseInt(str.substring(i, i + size), radix);\n        if (size < 8) {\n          var power = fromNumber(pow_dbl(radix, size));\n          result = result.mul(power).add(fromNumber(value));\n        } else {\n          result = result.mul(radixToPower);\n          result = result.add(fromNumber(value));\n        }\n      }\n      result.unsigned = unsigned;\n      return result;\n    }\n\n    /**\n     * Returns a Long representation of the given string, written using the specified radix.\n     * @function\n     * @param {string} str The textual representation of the Long\n     * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n     * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromString = fromString;\n\n    /**\n     * @function\n     * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromValue(val, unsigned) {\n      if (typeof val === \"number\") return fromNumber(val, unsigned);\n      if (typeof val === \"string\") return fromString(val, unsigned);\n      // Throws for non-objects, converts non-instanceof Long:\n      return fromBits(\n        val.low,\n        val.high,\n        typeof unsigned === \"boolean\" ? unsigned : val.unsigned,\n      );\n    }\n\n    /**\n     * Converts the specified value to a Long using the appropriate from* function for its type.\n     * @function\n     * @param {!Long|number|bigint|string|!{low: number, high: number, unsigned: boolean}} val Value\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long}\n     */\n    Long.fromValue = fromValue;\n\n    // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n    // no runtime penalty for these.\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_16_DBL = 1 << 16;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24_DBL = 1 << 24;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n\n    /**\n     * @type {!Long}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ZERO = fromInt(0);\n\n    /**\n     * Signed zero.\n     * @type {!Long}\n     */\n    Long.ZERO = ZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UZERO = fromInt(0, true);\n\n    /**\n     * Unsigned zero.\n     * @type {!Long}\n     */\n    Long.UZERO = UZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ONE = fromInt(1);\n\n    /**\n     * Signed one.\n     * @type {!Long}\n     */\n    Long.ONE = ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UONE = fromInt(1, true);\n\n    /**\n     * Unsigned one.\n     * @type {!Long}\n     */\n    Long.UONE = UONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var NEG_ONE = fromInt(-1);\n\n    /**\n     * Signed negative one.\n     * @type {!Long}\n     */\n    Long.NEG_ONE = NEG_ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_VALUE = fromBits(0xffffffff | 0, 0x7fffffff | 0, false);\n\n    /**\n     * Maximum signed value.\n     * @type {!Long}\n     */\n    Long.MAX_VALUE = MAX_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_UNSIGNED_VALUE = fromBits(0xffffffff | 0, 0xffffffff | 0, true);\n\n    /**\n     * Maximum unsigned value.\n     * @type {!Long}\n     */\n    Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n\n    /**\n     * Minimum signed value.\n     * @type {!Long}\n     */\n    Long.MIN_VALUE = MIN_VALUE;\n\n    /**\n     * @alias Long.prototype\n     * @inner\n     */\n    var LongPrototype = Long.prototype;\n\n    /**\n     * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toInt = function toInt() {\n      return this.unsigned ? this.low >>> 0 : this.low;\n    };\n\n    /**\n     * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toNumber = function toNumber() {\n      if (this.unsigned)\n        return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);\n      return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\n    };\n\n    /**\n     * Converts the Long to a string written in the specified radix.\n     * @this {!Long}\n     * @param {number=} radix Radix (2-36), defaults to 10\n     * @returns {string}\n     * @override\n     * @throws {RangeError} If `radix` is out of range\n     */\n    LongPrototype.toString = function toString(radix) {\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      if (this.isZero()) return \"0\";\n      if (this.isNegative()) {\n        // Unsigned Longs are never negative\n        if (this.eq(MIN_VALUE)) {\n          // We need to change the Long value before it can be negated, so we remove\n          // the bottom-most digit in this base and then recurse to do the rest.\n          var radixLong = fromNumber(radix),\n            div = this.div(radixLong),\n            rem1 = div.mul(radixLong).sub(this);\n          return div.toString(radix) + rem1.toInt().toString(radix);\n        } else return \"-\" + this.neg().toString(radix);\n      }\n\n      // Do several (6) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\n        rem = this;\n      var result = \"\";\n      while (true) {\n        var remDiv = rem.div(radixToPower),\n          intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\n          digits = intval.toString(radix);\n        rem = remDiv;\n        if (rem.isZero()) return digits + result;\n        else {\n          while (digits.length < 6) digits = \"0\" + digits;\n          result = \"\" + digits + result;\n        }\n      }\n    };\n\n    /**\n     * Gets the high 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed high bits\n     */\n    LongPrototype.getHighBits = function getHighBits() {\n      return this.high;\n    };\n\n    /**\n     * Gets the high 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned high bits\n     */\n    LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\n      return this.high >>> 0;\n    };\n\n    /**\n     * Gets the low 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed low bits\n     */\n    LongPrototype.getLowBits = function getLowBits() {\n      return this.low;\n    };\n\n    /**\n     * Gets the low 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned low bits\n     */\n    LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\n      return this.low >>> 0;\n    };\n\n    /**\n     * Gets the number of bits needed to represent the absolute value of this Long.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\n      if (this.isNegative())\n        // Unsigned Longs are never negative\n        return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\n      var val = this.high != 0 ? this.high : this.low;\n      for (var bit = 31; bit > 0; bit--) if ((val & (1 << bit)) != 0) break;\n      return this.high != 0 ? bit + 33 : bit + 1;\n    };\n\n    /**\n     * Tests if this Long can be safely represented as a JavaScript number.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isSafeInteger = function isSafeInteger() {\n      // 2^53-1 is the maximum safe value\n      var top11Bits = this.high >> 21;\n      // [0, 2^53-1]\n      if (!top11Bits) return true;\n      // > 2^53-1\n      if (this.unsigned) return false;\n      // [-2^53, -1] except -2^53\n      return top11Bits === -1 && !(this.low === 0 && this.high === -0x200000);\n    };\n\n    /**\n     * Tests if this Long's value equals zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isZero = function isZero() {\n      return this.high === 0 && this.low === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\n     * @returns {boolean}\n     */\n    LongPrototype.eqz = LongPrototype.isZero;\n\n    /**\n     * Tests if this Long's value is negative.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isNegative = function isNegative() {\n      return !this.unsigned && this.high < 0;\n    };\n\n    /**\n     * Tests if this Long's value is positive or zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isPositive = function isPositive() {\n      return this.unsigned || this.high >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is odd.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isOdd = function isOdd() {\n      return (this.low & 1) === 1;\n    };\n\n    /**\n     * Tests if this Long's value is even.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isEven = function isEven() {\n      return (this.low & 1) === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.equals = function equals(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (\n        this.unsigned !== other.unsigned &&\n        this.high >>> 31 === 1 &&\n        other.high >>> 31 === 1\n      )\n        return false;\n      return this.high === other.high && this.low === other.low;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.eq = LongPrototype.equals;\n\n    /**\n     * Tests if this Long's value differs from the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.notEquals = function notEquals(other) {\n      return !this.eq(/* validates */ other);\n    };\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.neq = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ne = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value is less than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThan = function lessThan(other) {\n      return this.comp(/* validates */ other) < 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lt = LongPrototype.lessThan;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\n      return this.comp(/* validates */ other) <= 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lte = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.le = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThan = function greaterThan(other) {\n      return this.comp(/* validates */ other) > 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gt = LongPrototype.greaterThan;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\n      return this.comp(/* validates */ other) >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Compares this Long's value with the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.compare = function compare(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (this.eq(other)) return 0;\n      var thisNeg = this.isNegative(),\n        otherNeg = other.isNegative();\n      if (thisNeg && !otherNeg) return -1;\n      if (!thisNeg && otherNeg) return 1;\n      // At this point the sign bits are the same\n      if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;\n      // Both are positive if at least one is unsigned\n      return other.high >>> 0 > this.high >>> 0 ||\n        (other.high === this.high && other.low >>> 0 > this.low >>> 0)\n        ? -1\n        : 1;\n    };\n\n    /**\n     * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.comp = LongPrototype.compare;\n\n    /**\n     * Negates this Long's value.\n     * @this {!Long}\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.negate = function negate() {\n      if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;\n      return this.not().add(ONE);\n    };\n\n    /**\n     * Negates this Long's value. This is an alias of {@link Long#negate}.\n     * @function\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.neg = LongPrototype.negate;\n\n    /**\n     * Returns the sum of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} addend Addend\n     * @returns {!Long} Sum\n     */\n    LongPrototype.add = function add(addend) {\n      if (!isLong(addend)) addend = fromValue(addend);\n\n      // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = addend.high >>> 16;\n      var b32 = addend.high & 0xffff;\n      var b16 = addend.low >>> 16;\n      var b00 = addend.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 + b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 + b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 + b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 + b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the difference of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.subtract = function subtract(subtrahend) {\n      if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);\n      return this.add(subtrahend.neg());\n    };\n\n    /**\n     * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n     * @function\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.sub = LongPrototype.subtract;\n\n    /**\n     * Returns the product of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.multiply = function multiply(multiplier) {\n      if (this.isZero()) return this;\n      if (!isLong(multiplier)) multiplier = fromValue(multiplier);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = wasm[\"mul\"](\n          this.low,\n          this.high,\n          multiplier.low,\n          multiplier.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;\n      if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;\n      if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;\n      if (this.isNegative()) {\n        if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());\n        else return this.neg().mul(multiplier).neg();\n      } else if (multiplier.isNegative())\n        return this.mul(multiplier.neg()).neg();\n\n      // If both longs are small, use float multiplication\n      if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\n        return fromNumber(\n          this.toNumber() * multiplier.toNumber(),\n          this.unsigned,\n        );\n\n      // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n      // We can skip products that would overflow.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = multiplier.high >>> 16;\n      var b32 = multiplier.high & 0xffff;\n      var b16 = multiplier.low >>> 16;\n      var b00 = multiplier.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 * b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 * b00;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c16 += a00 * b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 * b00;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a16 * b16;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a00 * b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n     * @function\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.mul = LongPrototype.multiply;\n\n    /**\n     * Returns this Long divided by the specified. The result is signed if this Long is signed or\n     *  unsigned if this Long is unsigned.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.divide = function divide(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n      if (divisor.isZero()) throw Error(\"division by zero\");\n\n      // use wasm support if present\n      if (wasm) {\n        // guard against signed division overflow: the largest\n        // negative number / -1 would be 1 larger than the largest\n        // positive number, due to two's complement.\n        if (\n          !this.unsigned &&\n          this.high === -0x80000000 &&\n          divisor.low === -1 &&\n          divisor.high === -1\n        ) {\n          // be consistent with non-wasm code path\n          return this;\n        }\n        var low = (this.unsigned ? wasm[\"div_u\"] : wasm[\"div_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (this.isZero()) return this.unsigned ? UZERO : ZERO;\n      var approx, rem, res;\n      if (!this.unsigned) {\n        // This section is only relevant for signed longs and is derived from the\n        // closure library as a whole.\n        if (this.eq(MIN_VALUE)) {\n          if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\n            return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n          else if (divisor.eq(MIN_VALUE)) return ONE;\n          else {\n            // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n            var halfThis = this.shr(1);\n            approx = halfThis.div(divisor).shl(1);\n            if (approx.eq(ZERO)) {\n              return divisor.isNegative() ? ONE : NEG_ONE;\n            } else {\n              rem = this.sub(divisor.mul(approx));\n              res = approx.add(rem.div(divisor));\n              return res;\n            }\n          }\n        } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;\n        if (this.isNegative()) {\n          if (divisor.isNegative()) return this.neg().div(divisor.neg());\n          return this.neg().div(divisor).neg();\n        } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();\n        res = ZERO;\n      } else {\n        // The algorithm below has not been made for unsigned longs. It's therefore\n        // required to take special care of the MSB prior to running it.\n        if (!divisor.unsigned) divisor = divisor.toUnsigned();\n        if (divisor.gt(this)) return UZERO;\n        if (divisor.gt(this.shru(1)))\n          // 15 >>> 1 = 7 ; with divisor = 8 ; true\n          return UONE;\n        res = UZERO;\n      }\n\n      // Repeat the following until the remainder is less than other:  find a\n      // floating-point that approximates remainder / other *from below*, add this\n      // into the result, and subtract it from the remainder.  It is critical that\n      // the approximate value is less than or equal to the real value so that the\n      // remainder never becomes negative.\n      rem = this;\n      while (rem.gte(divisor)) {\n        // Approximate the result of division. This may be a little greater or\n        // smaller than the actual value.\n        approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\n\n        // We will tweak the approximate result by changing it in the 48-th digit or\n        // the smallest non-fractional digit, whichever is larger.\n        var log2 = Math.ceil(Math.log(approx) / Math.LN2),\n          delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),\n          // Decrease the approximation until it is smaller than the remainder.  Note\n          // that if it is too large, the product overflows and is negative.\n          approxRes = fromNumber(approx),\n          approxRem = approxRes.mul(divisor);\n        while (approxRem.isNegative() || approxRem.gt(rem)) {\n          approx -= delta;\n          approxRes = fromNumber(approx, this.unsigned);\n          approxRem = approxRes.mul(divisor);\n        }\n\n        // We know the answer can't be zero... and actually, zero would cause\n        // infinite recursion since we would make no progress.\n        if (approxRes.isZero()) approxRes = ONE;\n        res = res.add(approxRes);\n        rem = rem.sub(approxRem);\n      }\n      return res;\n    };\n\n    /**\n     * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.div = LongPrototype.divide;\n\n    /**\n     * Returns this Long modulo the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.modulo = function modulo(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = (this.unsigned ? wasm[\"rem_u\"] : wasm[\"rem_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      return this.sub(this.div(divisor).mul(divisor));\n    };\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.mod = LongPrototype.modulo;\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.rem = LongPrototype.modulo;\n\n    /**\n     * Returns the bitwise NOT of this Long.\n     * @this {!Long}\n     * @returns {!Long}\n     */\n    LongPrototype.not = function not() {\n      return fromBits(~this.low, ~this.high, this.unsigned);\n    };\n\n    /**\n     * Returns count leading zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countLeadingZeros = function countLeadingZeros() {\n      return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;\n    };\n\n    /**\n     * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.clz = LongPrototype.countLeadingZeros;\n\n    /**\n     * Returns count trailing zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countTrailingZeros = function countTrailingZeros() {\n      return this.low ? ctz32(this.low) : ctz32(this.high) + 32;\n    };\n\n    /**\n     * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.ctz = LongPrototype.countTrailingZeros;\n\n    /**\n     * Returns the bitwise AND of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.and = function and(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low & other.low,\n        this.high & other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise OR of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.or = function or(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low | other.low,\n        this.high | other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise XOR of this Long and the given one.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.xor = function xor(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low ^ other.low,\n        this.high ^ other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftLeft = function shiftLeft(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          this.low << numBits,\n          (this.high << numBits) | (this.low >>> (32 - numBits)),\n          this.unsigned,\n        );\n      else return fromBits(0, this.low << (numBits - 32), this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shl = LongPrototype.shiftLeft;\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRight = function shiftRight(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >> numBits,\n          this.unsigned,\n        );\n      else\n        return fromBits(\n          this.high >> (numBits - 32),\n          this.high >= 0 ? 0 : -1,\n          this.unsigned,\n        );\n    };\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr = LongPrototype.shiftRight;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >>> numBits,\n          this.unsigned,\n        );\n      if (numBits === 32) return fromBits(this.high, 0, this.unsigned);\n      return fromBits(this.high >>> (numBits - 32), 0, this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits rotated to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateLeft = function rotateLeft(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.low << numBits) | (this.high >>> b),\n          (this.high << numBits) | (this.low >>> b),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.high << numBits) | (this.low >>> b),\n        (this.low << numBits) | (this.high >>> b),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotl = LongPrototype.rotateLeft;\n\n    /**\n     * Returns this Long with bits rotated to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateRight = function rotateRight(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.high << b) | (this.low >>> numBits),\n          (this.low << b) | (this.high >>> numBits),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.low << b) | (this.high >>> numBits),\n        (this.high << b) | (this.low >>> numBits),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotr = LongPrototype.rotateRight;\n\n    /**\n     * Converts this Long to signed.\n     * @this {!Long}\n     * @returns {!Long} Signed long\n     */\n    LongPrototype.toSigned = function toSigned() {\n      if (!this.unsigned) return this;\n      return fromBits(this.low, this.high, false);\n    };\n\n    /**\n     * Converts this Long to unsigned.\n     * @this {!Long}\n     * @returns {!Long} Unsigned long\n     */\n    LongPrototype.toUnsigned = function toUnsigned() {\n      if (this.unsigned) return this;\n      return fromBits(this.low, this.high, true);\n    };\n\n    /**\n     * Converts this Long to its byte representation.\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @this {!Long}\n     * @returns {!Array.<number>} Byte representation\n     */\n    LongPrototype.toBytes = function toBytes(le) {\n      return le ? this.toBytesLE() : this.toBytesBE();\n    };\n\n    /**\n     * Converts this Long to its little endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Little endian byte representation\n     */\n    LongPrototype.toBytesLE = function toBytesLE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        lo & 0xff,\n        (lo >>> 8) & 0xff,\n        (lo >>> 16) & 0xff,\n        lo >>> 24,\n        hi & 0xff,\n        (hi >>> 8) & 0xff,\n        (hi >>> 16) & 0xff,\n        hi >>> 24,\n      ];\n    };\n\n    /**\n     * Converts this Long to its big endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Big endian byte representation\n     */\n    LongPrototype.toBytesBE = function toBytesBE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        hi >>> 24,\n        (hi >>> 16) & 0xff,\n        (hi >>> 8) & 0xff,\n        hi & 0xff,\n        lo >>> 24,\n        (lo >>> 16) & 0xff,\n        (lo >>> 8) & 0xff,\n        lo & 0xff,\n      ];\n    };\n\n    /**\n     * Creates a Long from its byte representation.\n     * @param {!Array.<number>} bytes Byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytes = function fromBytes(bytes, unsigned, le) {\n      return le\n        ? Long.fromBytesLE(bytes, unsigned)\n        : Long.fromBytesBE(bytes, unsigned);\n    };\n\n    /**\n     * Creates a Long from its little endian byte representation.\n     * @param {!Array.<number>} bytes Little endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {\n      return new Long(\n        bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24),\n        bytes[4] | (bytes[5] << 8) | (bytes[6] << 16) | (bytes[7] << 24),\n        unsigned,\n      );\n    };\n\n    /**\n     * Creates a Long from its big endian byte representation.\n     * @param {!Array.<number>} bytes Big endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {\n      return new Long(\n        (bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7],\n        (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3],\n        unsigned,\n      );\n    };\n\n    // Support conversion to/from BigInt where available\n    if (typeof BigInt === \"function\") {\n      /**\n       * Returns a Long representing the given big integer.\n       * @function\n       * @param {number} value The big integer value\n       * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n       * @returns {!Long} The corresponding Long value\n       */\n      Long.fromBigInt = function fromBigInt(value, unsigned) {\n        var lowBits = Number(BigInt.asIntN(32, value));\n        var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));\n        return fromBits(lowBits, highBits, unsigned);\n      };\n\n      // Override\n      Long.fromValue = function fromValueWithBigInt(value, unsigned) {\n        if (typeof value === \"bigint\") return Long.fromBigInt(value, unsigned);\n        return fromValue(value, unsigned);\n      };\n\n      /**\n       * Converts the Long to its big integer representation.\n       * @this {!Long}\n       * @returns {bigint}\n       */\n      LongPrototype.toBigInt = function toBigInt() {\n        var lowBigInt = BigInt(this.low >>> 0);\n        var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);\n        return (highBigInt << BigInt(32)) | lowBigInt;\n      };\n    }\n    var _default = (_exports.default = Long);\n  },\n);\n","\"use strict\";\n/* global globalThis */\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"./aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"./base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"./eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"./float\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"./utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"./pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Tests if the specified key can affect object prototypes.\n * @memberof util\n * @param {string} key Key to test\n * @returns {boolean} `true` if the key is unsafe\n */\nfunction isUnsafeProperty(key) {\n    return key === \"__proto__\" || key === \"prototype\" || key === \"constructor\";\n}\n\nutil.isUnsafeProperty = isUnsafeProperty;\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n                   && global\n                   && global.process\n                   && global.process.versions\n                   && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n           || typeof window !== \"undefined\" && window\n           || typeof self   !== \"undefined\" && self\n           || typeof globalThis !== \"undefined\" && globalThis\n           || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n    return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n    return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n    var value = obj[prop];\n    if (value != null && Object.hasOwnProperty.call(obj, prop)) // eslint-disable-line eqeqeq\n        return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n    return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n    try {\n        var Buffer = util.global.Buffer;\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons)\n        return Buffer.prototype.utf8Write || util.isNode ? Buffer : /* istanbul ignore next */ null;\n    } catch (e) {\n        /* istanbul ignore next */\n        return null;\n    }\n})();\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n    var Buffer = util.Buffer;\n    /* istanbul ignore next */\n    return typeof sizeOrArray === \"number\"\n        ? Buffer\n            ? Buffer.allocUnsafe(sizeOrArray)\n            : new Uint8Array(sizeOrArray)\n        : Buffer\n            ? Buffer.from(sizeOrArray)\n            : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Prepends a raw field tag to raw field data.\n * @param {number} id Field id\n * @param {number} wireType Wire type\n * @param {Uint8Array} data Raw field data\n * @returns {Uint8Array|Buffer} Raw field bytes\n * @ignore\n */\nutil.rawField = function rawField(id, wireType, data) {\n    var out = [],\n        tag = id << 3 | wireType;\n    tag >>>= 0;\n    while (tag > 127) {\n        out.push(tag & 127 | 128);\n        tag >>>= 7;\n    }\n    out.push(tag);\n    for (var i = 0; i < data.length; ++i)\n        out.push(data[i]);\n    return util.newBuffer(out);\n};\n\n/**\n * Array implementation used in the browser.\n * @type {Constructor<Uint8Array>}\n * @deprecated Use `Uint8Array` instead.\n */\nutil.Array = Uint8Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n         || /* istanbul ignore next */ util.global.Long\n         || (function() {\n                try {\n                    var Long = require(\"long\");\n                    return Long && Long.isLong ? Long : null;\n                } catch (e) {\n                    /* istanbul ignore next */\n                    return null;\n                }\n            })();\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^(?:true|false|0|1)$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/; // eslint-disable-line no-control-regex\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n    return value\n        ? util.LongBits.from(value).toHash()\n        : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n    var bits = util.LongBits.fromHash(hash);\n    if (util.Long)\n        return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n    return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Converts a 64 bit key to a long or number if it is an 8 characters long hash string.\n * @param {string} key Map key\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number|string} Original value\n */\nutil.longFromKey = function longFromKey(key, unsigned) {\n    return util.key64Re.test(key) && !util.key32Re.test(key)\n        ? util.longFromHash(key, unsigned)\n        : key;\n};\n\n/**\n * Converts a boolean key to a boolean value.\n * @param {string} key Map key\n * @returns {boolean} Boolean value\n */\nutil.boolFromKey = function boolFromKey(key) {\n    return key === \"true\" || key === \"1\";\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {...(Object.<string,*>|boolean)} src Source objects, optionally followed by an `ifNotSet` flag\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst) { // used by converters\n    var ifNotSet = typeof arguments[arguments.length - 1] === \"boolean\",\n        limit = ifNotSet ? arguments.length - 1 : arguments.length;\n    ifNotSet = ifNotSet && arguments[arguments.length - 1];\n    for (var a = 1; a < limit; ++a) {\n        var src = arguments[a];\n        if (!src)\n            continue;\n        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n            if (!isUnsafeProperty(keys[i]) && (!ifNotSet || !Object.prototype.hasOwnProperty.call(dst, keys[i]) || dst[keys[i]] === undefined))\n                dst[keys[i]] = src[keys[i]];\n    }\n    return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Schema declaration nesting limit.\n * @memberof util\n * @type {number}\n */\nutil.nestingLimit = 32; // protoc: MaxMessageDeclarationNestingDepth\n\n/**\n * Recursion limit.\n * @memberof util\n * @type {number}\n */\nutil.recursionLimit = 100; // protoc: CodedInputStream::default_recursion_limit_\n\n/**\n * Makes a property safe for assignment as an own property.\n * @memberof util\n * @param {Object.<string,*>} obj Object\n * @param {string} key Property key\n * @param {boolean} [enumerable=true] Whether the property should be enumerable\n * @returns {undefined}\n */\nutil.makeProp = function makeProp(obj, key, enumerable) {\n    if (Object.prototype.hasOwnProperty.call(obj, key))\n        return;\n    Object.defineProperty(obj, key, {\n        enumerable: enumerable === undefined ? true : enumerable,\n        configurable: true,\n        writable: true\n    });\n};\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n    return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n    function CustomError(message, properties) {\n\n        if (!(this instanceof CustomError))\n            return new CustomError(message, properties);\n\n        // Error.call(this, message);\n        // ^ just returns a new error instance because the ctor can be called as a function\n\n        Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) // node\n            Error.captureStackTrace(this, CustomError);\n        else\n            Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n        if (properties)\n            merge(this, properties);\n    }\n\n    CustomError.prototype = Object.create(Error.prototype, {\n        constructor: {\n            value: CustomError,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n        name: {\n            get: function get() { return name; },\n            set: undefined,\n            enumerable: false,\n            // configurable: false would accurately preserve the behavior of\n            // the original, but I'm guessing that was not intentional.\n            // For an actual error subclass, this property would\n            // be configurable.\n            configurable: true,\n        },\n        toString: {\n            value: function value() { return this.name + \": \" + this.message; },\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n    });\n\n    return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n *     MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n *     if (e instanceof ProtocolError && e.instance)\n *         console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n    var fieldMap = {};\n    for (var i = 0; i < fieldNames.length; ++i)\n        fieldMap[fieldNames[i]] = 1;\n\n    /**\n     * @returns {string|undefined} Set field name, if any\n     * @this Object\n     * @ignore\n     */\n    return function() { // eslint-disable-line consistent-return\n        for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n            if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n                return keys[i];\n    };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n    /**\n     * @param {string} name Field name\n     * @returns {undefined}\n     * @this Object\n     * @ignore\n     */\n    return function(name) {\n        for (var i = 0; i < fieldNames.length; ++i)\n            if (fieldNames[i] !== name)\n                delete this[fieldNames[i]];\n    };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n    longs: String,\n    enums: String,\n    bytes: String,\n    json: true\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits  = util.LongBits,\n    base64    = util.base64,\n    utf8      = util.utf8;\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array`.\n * @constructor\n */\nfunction Writer() {\n\n    /**\n     * Write cursor into {@link Writer#buf}.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Backing buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = this.constructor.alloc(Writer.initialBufferSize);\n\n    /**\n     * Cached DataView over {@link Writer#buf}.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Stack of forked length-prefix positions.\n     * @type {Array<number>|null}\n     */\n    this.states = null;\n}\n\n/**\n * Initial backing buffer size in bytes. Defaults to 128.\n * @type {number}\n */\nWriter.initialBufferSize = 128;\n\n/**\n * Current write position.\n * @name Writer#len\n * @type {number}\n * @deprecated Use {@link Writer#pos} instead.\n */\nObject.defineProperty(Writer.prototype, \"len\", {\n    configurable: true,\n    enumerable: true,\n    get: function get_len() {\n        return this.pos;\n    }\n});\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup() {\n            return (Writer.create = function create_buffer() {\n                return new BufferWriter();\n            })();\n        }\n        /* istanbul ignore next */\n        : function create_array() {\n            return new Writer();\n        };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n    return new Uint8Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\nWriter.alloc = util.pool(Writer.alloc, Uint8Array.prototype.subarray);\n\n/**\n * Calculates the number of bytes a value occupies as a varint.\n * @param {number} value Value to size (unsigned)\n * @returns {number} Byte length (1..5)\n * @ignore\n */\nfunction sizeVarint32(value) {\n    return value         < 128       ? 1\n         : value         < 16384     ? 2\n         : value         < 2097152   ? 3\n         : value         < 268435456 ? 4\n         :                             5;\n}\n\n/**\n * Ensures that at least `n` more bytes fit into the backing buffer, doubling it if not.\n * @param {number} n Number of additional bytes required\n * @returns {undefined}\n * @private\n */\nWriter.prototype._reserve = function _reserve(n) {\n    var need = this.pos + n;\n    if (need > this.buf.length) {\n        var size = this.buf.length << 1;\n        if (size < need)\n            size = need;\n        var buf = this.constructor.alloc(size);\n        buf.set(this.buf.subarray(0, this.pos), 0);\n        this.buf = buf;\n        this.view = null; // invalidate\n    }\n};\n\nfunction writeStringAscii(val, buf, pos) {\n    for (var i = 0; i < val.length;)\n        buf[pos++] = val.charCodeAt(i++);\n}\n\nfunction writeVarint32(val, buf, pos) {\n    while (val > 127) {\n        buf[pos++] = val & 127 | 128;\n        val >>>= 7;\n    }\n    buf[pos] = val;\n    return pos + 1;\n}\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n    value = value >>> 0;\n    this._reserve(5);\n    var pos = this.pos;\n    this.pos = writeVarint32(value, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n    if ((value |= 0) < 0) { // 10 bytes per spec\n        this._reserve(10);\n        writeVarint64(LongBits.fromNumber(value), this.buf, this.pos);\n        this.pos += 10;\n        return this;\n    }\n    return this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n    var lo = val.lo,\n        hi = val.hi;\n    while (hi) {\n        buf[pos++] = lo & 127 | 128;\n        lo = (lo >>> 7 | hi << 25) >>> 0;\n        hi >>>= 7;\n    }\n    while (lo > 127) {\n        buf[pos++] = lo & 127 | 128;\n        lo = lo >>> 7;\n    }\n    buf[pos] = lo;\n    return pos + 1;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n    var bits = LongBits.from(value);\n    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n    var bits = LongBits.from(value).zzEncode();\n    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n    this._reserve(1);\n    this.buf[this.pos++] = value ? 1 : 0;\n    return this;\n};\n\nfunction writeFixed32(val, buf, pos) {\n    buf[pos    ] =  val         & 255;\n    buf[pos + 1] =  val >>> 8   & 255;\n    buf[pos + 2] =  val >>> 16  & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n    this._reserve(4);\n    writeFixed32(value >>> 0, this.buf, this.pos);\n    this.pos += 4;\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n    var bits = LongBits.from(value);\n    this._reserve(8);\n    writeFixed32(bits.lo, this.buf, this.pos);\n    writeFixed32(bits.hi, this.buf, this.pos + 4);\n    this.pos += 8;\n    return this;\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n    this._reserve(4);\n    util.float.writeFloatLE(value, this.buf, this.pos);\n    this.pos += 4;\n    return this;\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n    this._reserve(8);\n    util.float.writeDoubleLE(value, this.buf, this.pos);\n    this.pos += 8;\n    return this;\n};\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n    var len = value.length >>> 0;\n    if (!len) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (util.isString(value)) {\n        var buf = Writer.alloc(len = base64.length(value));\n        base64.decode(value, buf, 0);\n        value = buf;\n    }\n    this.uint32(len);\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes raw bytes without a tag or length prefix.\n * @param {Uint8Array} value Raw bytes\n * @returns {Writer} `this`\n */\nWriter.prototype.raw = function write_raw(value) {\n    var len = value.length >>> 0;\n    if (!len)\n        return this;\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Backfills the length varint.\n * @param {number} pos Position of reserved length byte\n * @param {number} len Length of content after length varint\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._delim = function _delim(pos, len) {\n    var n = sizeVarint32(len);\n    if (n > 1)\n        this.buf.copyWithin(pos + n, pos + 1, pos + 1 + len);\n    writeVarint32(len, this.buf, pos);\n    this.pos = pos + n + len;\n    return this;\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n    var n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var lenPos = this.pos;\n        return this._delim(lenPos, utf8.write(value, this.buf, lenPos + 1));\n    }\n    var len = utf8.length(value);\n    this.uint32(len);\n    this._reserve(len);\n    if (len === value.length)\n        writeStringAscii(value, this.buf, this.pos);\n    else\n        utf8.write(value, this.buf, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes an array of unsigned 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32s = function write_uint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5); // worst case: 5 bytes per value + length varint\n    var buf = this.buf, lenPos = this.pos, p = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        p = writeVarint32(value[i] >>> 0, buf, p);\n    return this._delim(lenPos, p - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32s = function write_int32s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5); // worst case: 10 bytes per negative value + length varint\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1, val;\n    for (var i = 0; i < n; ++i) {\n        if ((val = value[i] | 0) < 0) { // negatives are 10 bytes per spec\n            pos = writeVarint64(LongBits.fromNumber(val), buf, pos);\n        } else {\n            pos = writeVarint32(val, buf, pos);\n        }\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of 32 bit values as packed, zig-zag encoded varints.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32s = function write_sint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        pos = writeVarint32((value[i] << 1 ^ value[i] >> 31) >>> 0, buf, pos);\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of unsigned 64 bit values as a packed repeated field.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint64s = function write_uint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 64 bit values as a packed repeated field.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int64s = Writer.prototype.uint64s;\n\n/**\n * Writes an array of 64 bit values as packed, zig-zag encoded varints.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint64s = function write_sint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]).zzEncode(), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of boolish values as a packed repeated field.\n * @param {boolean[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bools = function write_bools(value) {\n    var n = value.length;\n    this.uint32(n); // one byte per value\n    this._reserve(n);\n    var buf = this.buf, p = this.pos;\n    for (var i = 0; i < n; ++i)\n        buf[p++] = value[i] ? 1 : 0;\n    this.pos += n;\n    return this;\n};\n\n// The view allocation only pays off when amortized over enough writes\nvar VIEW_THRESHOLD_FLOAT = 16,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(writer, count, threshold) {\n    var view = writer.view;\n    if (view || count < threshold)\n        return view;\n    var buf = writer.buf;\n    return writer.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Writes an array of unsigned 32 bit values as packed, fixed 32 bits.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32s = function write_fixed32s(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes); // length is known exactly\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setUint32(p, value[i] >>> 0, true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { writeFixed32(value[i] >>> 0, buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 32 bit values as packed, fixed 32 bits.\n * @function\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32s = Writer.prototype.fixed32s;\n\n/**\n * Writes an array of unsigned 64 bit values as packed, fixed 64 bits.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed64s = function write_fixed64s(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, bits, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); dv.setUint32(p, bits.lo, true); dv.setUint32(p + 4, bits.hi, true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); writeFixed32(bits.lo, buf, p); writeFixed32(bits.hi, buf, p + 4); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 64 bit values as packed, fixed 64 bits.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed64s = Writer.prototype.fixed64s;\n\n/**\n * Writes an array of floats (32 bit) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.floats = function write_floats(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat32(p, value[i], true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeFloatLE(value[i], buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of doubles (64 bit float) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.doubles = function write_doubles(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat64(p, value[i], true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeDoubleLE(value[i], buf, p); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n    this._reserve(1);\n    (this.states || (this.states = [])).push(this.pos);\n    this.pos += 1;\n    return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n    var states = this.states;\n    if (states && states.length) {\n        this.pos = states.pop();\n    } else {\n        this.pos = 0;\n    }\n    return this;\n};\n\n/**\n * Resets to the last state and prepends the fork state's current write length as a varint.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n    var states = this.states,\n        len,\n        vlen;\n    if (states && states.length) {\n        var lenPos = states.pop();\n        len = this.pos - lenPos - 1;\n        vlen = sizeVarint32(len);\n        if (vlen > 1) { // grow the reserved single byte and shift content forward\n            this._reserve(vlen - 1);\n            this.buf.copyWithin(lenPos + vlen, lenPos + 1, lenPos + 1 + len);\n            this.pos += vlen - 1;\n            writeVarint32(len, this.buf, lenPos);\n        } else {\n            this.buf[lenPos] = len;\n        }\n    } else { // not forked: prefix the entire buffer with its length\n        // TODO: Compatibility with older generated code.\n        // Remove this branch in the next major release.\n        len = this.pos;\n        vlen = sizeVarint32(len);\n        this._reserve(vlen);\n        this.buf.copyWithin(vlen, 0, len);\n        writeVarint32(len, this.buf, 0);\n        this.pos += vlen;\n    }\n    return this;\n};\n\n/**\n * Finishes the write operation.\n * Returns a buffer sized to the written data by default.\n * @param {boolean} [shared=false] Whether to return a shared view instead of a unique copy\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish(shared) {\n    if (shared)\n        return this.buf.subarray(0, this.pos);\n    var buf = this.constructor.alloc(this.pos);\n    buf.set(this.buf.subarray(0, this.pos), 0);\n    return buf;\n};\n\n/**\n * Finishes the write operation, writing into the provided buffer.\n * The caller must ensure that `buf` has enough space starting at `offset`\n * to hold {@link Writer#pos} bytes.\n * @param {T} buf Target buffer\n * @param {number} [offset=0] Offset to start writing at\n * @returns {T} The provided buffer\n * @template T extends Uint8Array\n */\nWriter.prototype.finishInto = function finishInto(buf, offset) {\n    if (offset === undefined)\n        offset = 0;\n    buf.set(this.buf.subarray(0, this.pos), offset);\n    return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n    BufferWriter = BufferWriter_;\n    Writer.create = create();\n    BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\nBufferWriter.prototype = Object.create(Writer.prototype, {\n    constructor: {\n        value: BufferWriter,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n    Writer.call(this);\n}\n\nvar writeStringBuffer;\n\nBufferWriter._configure = function () {\n    /**\n     * Allocates a buffer of the specified size.\n     * @function\n     * @param {number} size Buffer size\n     * @returns {Buffer} Buffer\n     */\n    BufferWriter.alloc = util.Buffer && util.Buffer.allocUnsafe;\n\n    writeStringBuffer = util.Buffer && util.Buffer.prototype.utf8Write\n        ? function writeStringBuffer_utf8Write(val, buf, pos) {\n            return buf.utf8Write(val, pos);\n        }\n        : function writeStringBuffer_write(val, buf, pos) {\n            return buf.write(val, pos);\n        };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n    if (util.isString(value))\n        value = util.Buffer.from(value, \"base64\");\n    var len = value.length >>> 0;\n    this.uint32(len);\n    if (len) {\n        this._reserve(len);\n        this.buf.set(value, this.pos);\n        this.pos += len;\n    }\n    return this;\n};\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n    var n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var pos = this.pos,\n            buf = this.buf;\n        return this._delim(pos,\n            n < 40\n                ? util.utf8.write(value, buf, pos + 1)\n                : writeStringBuffer(value, buf, pos + 1)\n        );\n    }\n    var len = util.Buffer.byteLength(value);\n    this.uint32(len);\n    this._reserve(len);\n    writeStringBuffer(value, this.buf, this.pos);\n    this.pos += len;\n    return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits  = util.LongBits,\n    utf8      = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n    return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n    /**\n     * Read buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = buffer;\n\n    /**\n     * Read buffer position.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Read buffer length.\n     * @type {number}\n     */\n    this.len = buffer.length;\n\n    /**\n     * Cached DataView for packed reads.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Whether to discard unknown fields while decoding.\n     * @type {boolean}\n     */\n    this.discardUnknown = Reader.discardUnknown;\n}\n\nfunction create_array(buffer) {\n    // TODO: Remove plain array reader support in the next major release.\n    if (Array.isArray(buffer))\n        buffer = new Uint8Array(buffer);\n    if (buffer instanceof Uint8Array)\n        return new Reader(buffer);\n    throw Error(\"illegal buffer\");\n}\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup(buffer) {\n            return (Reader.create = function create_buffer(buffer) {\n                return util.Buffer.isBuffer(buffer)\n                    ? new BufferReader(buffer)\n                    /* istanbul ignore next */\n                    : create_array(buffer);\n            })(buffer);\n        }\n        /* istanbul ignore next */\n        : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\n/**\n * Returns raw bytes from the backing buffer without advancing the reader.\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Raw bytes\n */\nReader.prototype.raw = function read_raw(start, end) {\n    return this.buf.subarray(start, end);\n};\n\nfunction readVarint32NearEnd(reader) {\n    // Safely read up to four bytes of a varint32 near the reader limit\n    var value = 0;\n    for (var i = 0; i < 4; ++i) {\n        if (reader.pos >= reader.len)\n            throw indexOutOfRange(reader);\n        var b = reader.buf[reader.pos++];\n        value = (value | (b & 127) << i * 7) >>> 0;\n        if (b < 128)\n            return value;\n    }\n    throw indexOutOfRange(reader);\n}\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = function read_uint32() {\n    if (this.len - this.pos < 5) {\n        if (this.pos >= this.len)\n            throw indexOutOfRange(this);\n        if (this.buf[this.pos] >= 128)\n            return readVarint32NearEnd(this);\n    }\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n\n    for (var i = 0; i < 5; ++i) {\n        /* istanbul ignore if */\n        if (pos >= this.len) {\n            this.pos = pos;\n            throw indexOutOfRange(this);\n        }\n        if (buf[pos++] < 128) {\n            this.pos = pos;\n            return value;\n        }\n    }\n    /* istanbul ignore next */\n    this.pos = pos;\n    throw Error(\"invalid varint encoding\");\n};\n\n/**\n * Reads a field tag.\n * @function\n * @returns {number} Tag read\n */\nReader.prototype.tag = function read_tag() {\n    if (this.len - this.pos < 5) {\n        if (this.pos >= this.len)\n            throw indexOutOfRange(this);\n        if (this.buf[this.pos] >= 128)\n            return readVarint32NearEnd(this);\n    }\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos] < 128 && (buf[pos] & 112) === 0) {\n        this.pos = pos + 1;\n        return value;\n    }\n\n    this.pos = pos + 1;\n    throw Error(\"invalid tag encoding\");\n};\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n    return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n    var value = this.uint32();\n    return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n    // tends to deopt with local vars for octet etc.\n    var bits = new LongBits(0, 0);\n    var i = 0;\n    if (this.len - this.pos > 4) { // fast route (lo)\n        for (; i < 4; ++i) {\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 5th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >>  4) >>> 0;\n        if (this.buf[this.pos++] < 128)\n            return bits;\n        i = 0;\n    } else {\n        for (; i < 4; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        throw indexOutOfRange(this);\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n        for (; i < 5; ++i) {\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    } else {\n        for (; i < 5; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n    var value = false,\n        b;\n    for (var i = 0; i < 10; ++i) {\n        /* istanbul ignore if */\n        if (this.pos >= this.len)\n            throw indexOutOfRange(this);\n        b = this.buf[this.pos++];\n        if (b & 127)\n            value = true;\n        if (b < 128)\n            return value;\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n    return (buf[end - 4]\n          | buf[end - 3] << 8\n          | buf[end - 2] << 16\n          | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 8);\n\n    return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readFloatLE(this.buf, this.pos);\n    this.pos += 4;\n    return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readDoubleLE(this.buf, this.pos);\n    this.pos += 8;\n    return value;\n};\n\n/**\n * Reads a packed repeated field of unsigned 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.uint32s = function read_uint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len, buf = this.buf, pos = this.pos, value;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value);\n        else {\n            this.pos = pos - 1;\n            array.push(this.uint32());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    if (pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.int32s = function read_int32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len, buf = this.buf, pos = this.pos, value;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value);\n        else {\n            this.pos = pos - 1;\n            array.push(this.int32());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    if (pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sint32s = function read_sint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (this.pos < end)\n        array.push(this.sint32());\n    if (this.pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of booleans.\n * @param {boolean[]} [array] Array to read into; a new one is created if omitted\n * @returns {boolean[]} Array read into\n */\nReader.prototype.bools = function read_bools(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len, buf = this.buf, pos = this.pos, value;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value !== 0);\n        else {\n            this.pos = pos - 1;\n            array.push(this.bool());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    if (pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n// The view allocation only pays off when amortized over enough reads\nvar VIEW_THRESHOLD_FLOAT = 8,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(reader, count, threshold) {\n    var view = reader.view;\n    if (view || count < threshold)\n        return view;\n    var buf = reader.buf;\n    return reader.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Reads a packed repeated field of unsigned 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.fixed32s = function read_fixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getUint32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sfixed32s = function read_sfixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getInt32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4) | 0;\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of floats (32 bit).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.floats = function read_floats(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getFloat32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = util.float.readFloatLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of doubles (64 bit float).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.doubles = function read_doubles(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 8) array[i++] = dv.getFloat64(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 8) array[i++] = util.float.readDoubleLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.uint64s = function read_uint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (this.pos < end)\n        array.push(this.uint64());\n    if (this.pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.int64s = function read_int64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (this.pos < end)\n        array.push(this.int64());\n    if (this.pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sint64s = function read_sint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (this.pos < end)\n        array.push(this.sint64());\n    if (this.pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.fixed64s = function read_fixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.fixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sfixed64s = function read_sfixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.sfixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return this.raw(start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return utf8.read(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint, rejecting invalid UTF8.\n * @returns {string} Value read\n */\nReader.prototype.stringVerify = function read_string_verify() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return utf8.readStrict(this.buf, start, end);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n    if (typeof length === \"number\") {\n        /* istanbul ignore if */\n        if (this.pos + length > this.len)\n            throw indexOutOfRange(this, length);\n        this.pos += length;\n    } else {\n        do {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n        } while (this.buf[this.pos++] & 128);\n    }\n    return this;\n};\n\n/**\n * Recursion limit.\n * @type {number}\n */\nReader.recursionLimit = util.recursionLimit;\n\n/**\n * Whether readers discard unknown fields while decoding.\n * @type {boolean}\n */\nReader.discardUnknown = true;\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted\n * @param {number} [fieldNumber] Field number for validating group end tags\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType, depth, fieldNumber) {\n    if (depth === undefined) depth = 0;\n    if (depth > Reader.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    if (fieldNumber === 0)\n        throw Error(\"illegal tag: field number 0\");\n    switch (wireType) {\n        case 0:\n            this.skip();\n            break;\n        case 1:\n            this.skip(8);\n            break;\n        case 2:\n            this.skip(this.uint32());\n            break;\n        case 3:\n            while (true) {\n                var tag = this.tag();\n                var nestedField = tag >>> 3;\n                wireType = tag & 7;\n                if (!nestedField)\n                    throw Error(\"illegal tag: field number 0\");\n                if (wireType === 4) {\n                    if (fieldNumber !== undefined && nestedField !== fieldNumber)\n                        throw Error(\"invalid end group tag\");\n                    break;\n                }\n                this.skipType(wireType, depth + 1, nestedField);\n            }\n            break;\n        case 5:\n            this.skip(4);\n            break;\n\n        /* istanbul ignore next */\n        default:\n            throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n    }\n    return this;\n};\n\nReader._configure = function(BufferReader_) {\n    BufferReader = BufferReader_;\n    Reader.create = create();\n    BufferReader._configure();\n\n    var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n    util.merge(Reader.prototype, {\n\n        int64: function read_int64() {\n            return readLongVarint.call(this)[fn](false);\n        },\n\n        uint64: function read_uint64() {\n            return readLongVarint.call(this)[fn](true);\n        },\n\n        sint64: function read_sint64() {\n            return readLongVarint.call(this).zzDecode()[fn](false);\n        },\n\n        fixed64: function read_fixed64() {\n            return readFixed64.call(this)[fn](true);\n        },\n\n        sfixed64: function read_sfixed64() {\n            return readFixed64.call(this)[fn](false);\n        }\n\n    });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\nBufferReader.prototype = Object.create(Reader.prototype, {\n    constructor: {\n        value: BufferReader,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n    Reader.call(this, buffer);\n\n    /**\n     * Read buffer.\n     * @name BufferReader#buf\n     * @type {Buffer}\n    */\n}\n\nBufferReader._configure = function () {\n    /* istanbul ignore else */\n    if (util.Buffer)\n        BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n/**\n * Returns raw bytes from the backing buffer without advancing the reader.\n * @name BufferReader#raw\n * @function\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Buffer} Raw bytes\n */\nBufferReader.prototype.raw = function read_raw_buffer(start, end) {\n    return this._slice.call(this.buf, start, end);\n};\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n    var len = this.uint32(), // modifies pos\n        start = this.pos,\n        end = this.pos + len;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw RangeError(\"index out of range: \" + this.pos + \" + \" + len + \" > \" + this.len);\n\n    this.pos = end;\n    return this.buf.utf8Slice\n        ? this.buf.utf8Slice(start, end)\n        : this.buf.toString(\"utf-8\", start, end);\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\nService.prototype = Object.create(util.EventEmitter.prototype, {\n    constructor: {\n        value: Service,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {{\n *   (request: TReq|Properties<TReq>, callback: rpc.ServiceMethodCallback<TRes>): void;\n *   (request: TReq|Properties<TReq>): Promise<TRes>;\n *   readonly name: string;\n *   readonly path: string;\n *   readonly requestType: string;\n *   readonly responseType: string;\n *   readonly requestStream: true|undefined;\n *   readonly responseStream: true|undefined;\n * }}\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n    if (typeof rpcImpl !== \"function\")\n        throw TypeError(\"rpcImpl must be a function\");\n\n    util.EventEmitter.call(this);\n\n    /**\n     * RPC implementation. Becomes `null` once the service is ended.\n     * @type {RPCImpl|null}\n     */\n    this.rpcImpl = rpcImpl;\n\n    /**\n     * Whether requests are length-delimited.\n     * @type {boolean}\n     */\n    this.requestDelimited = Boolean(requestDelimited);\n\n    /**\n     * Whether responses are length-delimited.\n     * @type {boolean}\n     */\n    this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n    if (!request)\n        throw TypeError(\"request must be specified\");\n\n    var self = this;\n    if (!callback)\n        return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n    if (!self.rpcImpl) {\n        setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n        return undefined;\n    }\n\n    try {\n        return self.rpcImpl(\n            method,\n            requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n            function rpcCallback(err, response) {\n\n                if (err) {\n                    self.emit(\"error\", err, method);\n                    return callback(err);\n                }\n\n                if (response === null) {\n                    self.end(/* endedByRPC */ true);\n                    return undefined;\n                }\n\n                if (!(response instanceof responseCtor)) {\n                    try {\n                        response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n                    } catch (err) {\n                        self.emit(\"error\", err, method);\n                        return callback(err);\n                    }\n                }\n\n                self.emit(\"data\", response, method);\n                return callback(null, response);\n            }\n        );\n    } catch (err) {\n        self.emit(\"error\", err, method);\n        setTimeout(function() { callback(err); }, 0);\n        return undefined;\n    }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n    if (this.rpcImpl) {\n        if (!endedByRPC) // signal end to rpcImpl\n            this.rpcImpl(null, null, null);\n        this.rpcImpl = null;\n        this.emit(\"end\").off();\n    }\n    return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n *     if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n *         throw Error(\"no such method\");\n *     asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n *         callback(err, responseData);\n *     });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Object.create(null);\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nexports.build = \"minimal\";\n\n// Serialization\nexports.Writer       = require(\"./writer\");\nexports.BufferWriter = require(\"./writer_buffer\");\nexports.Reader       = require(\"./reader\");\nexports.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nexports.util         = require(\"./util/minimal\");\nexports.rpc          = require(\"./rpc\");\nexports.roots        = require(\"./roots\");\nexports.configure    = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n    exports.util.LongBits._configure(exports.util.Long);\n    exports.Writer._configure(exports.BufferWriter);\n    exports.Reader._configure(exports.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-mixed-operators, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars, default-case, jsdoc/require-param*/\nimport $protobuf from \"protobufjs/minimal.js\";\n\n// Common aliases\nconst $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\nconst $Object = $util.global.Object, $undefined = $util.global.undefined, $Error = $util.global.Error, $RangeError = $util.global.RangeError, $TypeError = $util.global.TypeError, $String = $util.global.String, $Number = $util.global.Number, $parseInt = $util.global.parseInt, $Boolean = $util.global.Boolean, $BigInt = $util.global.BigInt, $Array = $util.global.Array;\n\n// Exported root namespace\nconst $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\n\nexport const users = $root.users = (() => {\n\n    /**\n     * Namespace users.\n     * @exports users\n     * @namespace\n     */\n    const users = {};\n\n    /**\n     * Role enum.\n     * @name users.Role\n     * @enum {number}\n     * @property {number} ROLE_ADMIN=0 ROLE_ADMIN value\n     * @property {number} ROLE_BROADCASTER=1 ROLE_BROADCASTER value\n     */\n    users.Role = (function() {\n        const valuesById = $Object.create(null), values = $Object.create(valuesById);\n        values[valuesById[0] = \"ROLE_ADMIN\"] = 0;\n        values[valuesById[1] = \"ROLE_BROADCASTER\"] = 1;\n        return values;\n    })();\n\n    users.UserProtoRow = (function() {\n\n        /**\n         * Properties of a UserProtoRow.\n         * @typedef {Object} users.UserProtoRow.$Properties\n         * @property {string|null} [id] UserProtoRow id\n         * @property {string|null} [email] UserProtoRow email\n         * @property {string|null} [name] UserProtoRow name\n         * @property {number|Long|null} [createdAtUnixMs] UserProtoRow createdAtUnixMs\n         * @property {number|Long|null} [updatedAtUnixMs] UserProtoRow updatedAtUnixMs\n         * @property {Object.<string,users.Role>|null} [tenantRoles] UserProtoRow tenantRoles\n         * @property {Object.<string,string>|null} [identities] UserProtoRow identities\n         * @property {boolean|null} [isSiteAdmin] UserProtoRow isSiteAdmin\n         * @property {string|null} [tcAcceptedVersion] UserProtoRow tcAcceptedVersion\n         * @property {number|Long|null} [tcAcceptedAtUnixMs] UserProtoRow tcAcceptedAtUnixMs\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a UserProtoRow.\n         * @memberof users\n         * @interface IUserProtoRow\n         * @augments users.UserProtoRow.$Properties\n         * @deprecated Use users.UserProtoRow.$Properties instead.\n         */\n\n        /**\n         * Shape of a UserProtoRow.\n         * @typedef {users.UserProtoRow.$Properties} users.UserProtoRow.$Shape\n         */\n\n        /**\n         * Constructs a new UserProtoRow.\n         * @memberof users\n         * @classdesc Represents a UserProtoRow.\n         * @constructor\n         * @param {users.UserProtoRow.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const UserProtoRow = function (properties) {\n            this.tenantRoles = {};\n            this.identities = {};\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * UserProtoRow id.\n         * @member {string} id\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.id = \"\";\n\n        /**\n         * UserProtoRow email.\n         * @member {string} email\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.email = \"\";\n\n        /**\n         * UserProtoRow name.\n         * @member {string} name\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.name = \"\";\n\n        /**\n         * UserProtoRow createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * UserProtoRow updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * UserProtoRow tenantRoles.\n         * @member {Object.<string,users.Role>} tenantRoles\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.tenantRoles = $util.emptyObject;\n\n        /**\n         * UserProtoRow identities.\n         * @member {Object.<string,string>} identities\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.identities = $util.emptyObject;\n\n        /**\n         * UserProtoRow isSiteAdmin.\n         * @member {boolean} isSiteAdmin\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.isSiteAdmin = false;\n\n        /**\n         * UserProtoRow tcAcceptedVersion.\n         * @member {string} tcAcceptedVersion\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.tcAcceptedVersion = \"\";\n\n        /**\n         * UserProtoRow tcAcceptedAtUnixMs.\n         * @member {number|Long} tcAcceptedAtUnixMs\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.tcAcceptedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new UserProtoRow instance using the specified properties.\n         * @function create\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {users.UserProtoRow.$Properties=} [properties] Properties to set\n         * @returns {users.UserProtoRow} UserProtoRow instance\n         * @type {{\n         *   (properties: users.UserProtoRow.$Shape): users.UserProtoRow & users.UserProtoRow.$Shape;\n         *   (properties?: users.UserProtoRow.$Properties): users.UserProtoRow;\n         * }}\n         */\n        UserProtoRow.create = function(properties) {\n            return new UserProtoRow(properties);\n        };\n\n        /**\n         * Encodes the specified UserProtoRow message. Does not implicitly {@link users.UserProtoRow.verify|verify} messages.\n         * @function encode\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {users.UserProtoRow.$Properties} message UserProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UserProtoRow.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && message.id !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\") && message.email !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.email);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.name);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.createdAtUnixMs);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.updatedAtUnixMs);\n            if (message.tenantRoles != null && $Object.hasOwnProperty.call(message, \"tenantRoles\"))\n                for (let keys = $Object.keys(message.tenantRoles), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 10, wireType 2 =*/82).fork().uint32(/* id 1, wireType 0 =*/8).int64($util.longFromKey(keys[i], false)).uint32(/* id 2, wireType 0 =*/16).int32(message.tenantRoles[keys[i]]).ldelim();\n            if (message.identities != null && $Object.hasOwnProperty.call(message, \"identities\"))\n                for (let keys = $Object.keys(message.identities), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 11, wireType 2 =*/90).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.identities[keys[i]]).ldelim();\n            if (message.isSiteAdmin != null && $Object.hasOwnProperty.call(message, \"isSiteAdmin\") && message.isSiteAdmin !== false)\n                writer.uint32(/* id 12, wireType 0 =*/96).bool(message.isSiteAdmin);\n            if (message.tcAcceptedVersion != null && $Object.hasOwnProperty.call(message, \"tcAcceptedVersion\") && message.tcAcceptedVersion !== \"\")\n                writer.uint32(/* id 13, wireType 2 =*/106).string(message.tcAcceptedVersion);\n            if (message.tcAcceptedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"tcAcceptedAtUnixMs\") && (typeof message.tcAcceptedAtUnixMs === \"object\" ? message.tcAcceptedAtUnixMs.low || message.tcAcceptedAtUnixMs.high : message.tcAcceptedAtUnixMs !== 0))\n                writer.uint32(/* id 14, wireType 0 =*/112).int64(message.tcAcceptedAtUnixMs);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified UserProtoRow message, length delimited. Does not implicitly {@link users.UserProtoRow.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {users.UserProtoRow.$Properties} message UserProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UserProtoRow.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a UserProtoRow message from the specified reader or buffer.\n         * @function decode\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {users.UserProtoRow & users.UserProtoRow.$Shape} UserProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UserProtoRow.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, key, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.users.UserProtoRow();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.email = value;\n                        else\n                            delete message.email;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.tenantRoles === $util.emptyObject)\n                            message.tenantRoles = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = 0;\n                        value = 0;\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 0)\n                                    break;\n                                key = reader.int64();\n                                continue;\n                            case 2:\n                                if (wireType !== 0)\n                                    break;\n                                value = reader.int32();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        message.tenantRoles[typeof key === \"object\" ? $util.longToHash(key) : key] = value;\n                        continue;\n                    }\n                case 11: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.identities === $util.emptyObject)\n                            message.identities = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = \"\";\n                        value = \"\";\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 2)\n                                    break;\n                                key = reader.stringVerify();\n                                continue;\n                            case 2:\n                                if (wireType !== 2)\n                                    break;\n                                value = reader.stringVerify();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        if (key === \"__proto__\")\n                            $util.makeProp(message.identities, key);\n                        message.identities[key] = value;\n                        continue;\n                    }\n                case 12: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isSiteAdmin = value;\n                        else\n                            delete message.isSiteAdmin;\n                        continue;\n                    }\n                case 13: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.tcAcceptedVersion = value;\n                        else\n                            delete message.tcAcceptedVersion;\n                        continue;\n                    }\n                case 14: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tcAcceptedAtUnixMs = value;\n                        else\n                            delete message.tcAcceptedAtUnixMs;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a UserProtoRow message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {users.UserProtoRow & users.UserProtoRow.$Shape} UserProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UserProtoRow.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a UserProtoRow message.\n         * @function verify\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        UserProtoRow.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isString(message.id))\n                    return \"id: string expected\";\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\"))\n                if (!$util.isString(message.email))\n                    return \"email: string expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.tenantRoles != null && $Object.hasOwnProperty.call(message, \"tenantRoles\")) {\n                if (!$util.isObject(message.tenantRoles))\n                    return \"tenantRoles: object expected\";\n                let key = $Object.keys(message.tenantRoles);\n                for (let i = 0; i < key.length; ++i) {\n                    if (!$util.key64Re.test(key[i]))\n                        return \"tenantRoles: integer|Long key{k:int64} expected\";\n                    if (typeof message.tenantRoles[key[i]] !== \"number\" || (message.tenantRoles[key[i]] | 0) !== message.tenantRoles[key[i]])\n                        return \"tenantRoles: enum value{k:int64} expected\";\n                }\n            }\n            if (message.identities != null && $Object.hasOwnProperty.call(message, \"identities\")) {\n                if (!$util.isObject(message.identities))\n                    return \"identities: object expected\";\n                let key = $Object.keys(message.identities);\n                for (let i = 0; i < key.length; ++i)\n                    if (!$util.isString(message.identities[key[i]]))\n                        return \"identities: string{k:string} expected\";\n            }\n            if (message.isSiteAdmin != null && $Object.hasOwnProperty.call(message, \"isSiteAdmin\"))\n                if (typeof message.isSiteAdmin !== \"boolean\")\n                    return \"isSiteAdmin: boolean expected\";\n            if (message.tcAcceptedVersion != null && $Object.hasOwnProperty.call(message, \"tcAcceptedVersion\"))\n                if (!$util.isString(message.tcAcceptedVersion))\n                    return \"tcAcceptedVersion: string expected\";\n            if (message.tcAcceptedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"tcAcceptedAtUnixMs\"))\n                if (!$util.isInteger(message.tcAcceptedAtUnixMs) && !(message.tcAcceptedAtUnixMs && $util.isInteger(message.tcAcceptedAtUnixMs.low) && $util.isInteger(message.tcAcceptedAtUnixMs.high)))\n                    return \"tcAcceptedAtUnixMs: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a UserProtoRow message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {users.UserProtoRow} UserProtoRow\n         */\n        UserProtoRow.fromObject = function (object, _depth) {\n            if (object instanceof $root.users.UserProtoRow)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".users.UserProtoRow: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.users.UserProtoRow();\n            if (object.id != null)\n                if (typeof object.id !== \"string\" || object.id.length)\n                    message.id = $String(object.id);\n            if (object.email != null)\n                if (typeof object.email !== \"string\" || object.email.length)\n                    message.email = $String(object.email);\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.tenantRoles) {\n                if (!$util.isObject(object.tenantRoles))\n                    throw $TypeError(\".users.UserProtoRow.tenantRoles: object expected\");\n                message.tenantRoles = {};\n                for (let keys = $Object.keys(object.tenantRoles), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.tenantRoles, keys[i]);\n                    switch (object.tenantRoles[keys[i]]) {\n                    case \"ROLE_ADMIN\":\n                    case 0:\n                        message.tenantRoles[keys[i]] = 0;\n                        break;\n                    case \"ROLE_BROADCASTER\":\n                    case 1:\n                        message.tenantRoles[keys[i]] = 1;\n                        break;\n                    default:\n                        if (typeof object.tenantRoles[keys[i]] === \"number\" && (object.tenantRoles[keys[i]] | 0) === object.tenantRoles[keys[i]])\n                            message.tenantRoles[keys[i]] = object.tenantRoles[keys[i]];\n                    }\n                }\n            }\n            if (object.identities) {\n                if (!$util.isObject(object.identities))\n                    throw $TypeError(\".users.UserProtoRow.identities: object expected\");\n                message.identities = {};\n                for (let keys = $Object.keys(object.identities), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.identities, keys[i]);\n                    message.identities[keys[i]] = $String(object.identities[keys[i]]);\n                }\n            }\n            if (object.isSiteAdmin != null)\n                if (object.isSiteAdmin)\n                    message.isSiteAdmin = $Boolean(object.isSiteAdmin);\n            if (object.tcAcceptedVersion != null)\n                if (typeof object.tcAcceptedVersion !== \"string\" || object.tcAcceptedVersion.length)\n                    message.tcAcceptedVersion = $String(object.tcAcceptedVersion);\n            if (object.tcAcceptedAtUnixMs != null)\n                if (typeof object.tcAcceptedAtUnixMs === \"object\" ? object.tcAcceptedAtUnixMs.low || object.tcAcceptedAtUnixMs.high : $Number(object.tcAcceptedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.tcAcceptedAtUnixMs = $util.Long.fromValue(object.tcAcceptedAtUnixMs, false);\n                    else if (typeof object.tcAcceptedAtUnixMs === \"string\")\n                        message.tcAcceptedAtUnixMs = $parseInt(object.tcAcceptedAtUnixMs, 10);\n                    else if (typeof object.tcAcceptedAtUnixMs === \"number\")\n                        message.tcAcceptedAtUnixMs = object.tcAcceptedAtUnixMs;\n                    else if (typeof object.tcAcceptedAtUnixMs === \"object\")\n                        message.tcAcceptedAtUnixMs = new $util.LongBits(object.tcAcceptedAtUnixMs.low >>> 0, object.tcAcceptedAtUnixMs.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a UserProtoRow message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {users.UserProtoRow} message UserProtoRow\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        UserProtoRow.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.objects || options.defaults) {\n                object.tenantRoles = {};\n                object.identities = {};\n            }\n            if (options.defaults) {\n                object.id = \"\";\n                object.email = \"\";\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.isSiteAdmin = false;\n                object.tcAcceptedVersion = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tcAcceptedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tcAcceptedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                object.id = message.id;\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\"))\n                object.email = message.email;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            let keys2;\n            if (message.tenantRoles && (keys2 = $Object.keys(message.tenantRoles)).length) {\n                object.tenantRoles = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    let k2 = $util.longFromKey(keys2[j], false).toString();\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.tenantRoles, keys2[j]);\n                    object.tenantRoles[k2] = options.enums === $String ? $root.users.Role[message.tenantRoles[keys2[j]]] === $undefined ? message.tenantRoles[keys2[j]] : $root.users.Role[message.tenantRoles[keys2[j]]] : message.tenantRoles[keys2[j]];\n                }\n            }\n            if (message.identities && (keys2 = $Object.keys(message.identities)).length) {\n                object.identities = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.identities, keys2[j]);\n                    object.identities[keys2[j]] = message.identities[keys2[j]];\n                }\n            }\n            if (message.isSiteAdmin != null && $Object.hasOwnProperty.call(message, \"isSiteAdmin\"))\n                object.isSiteAdmin = message.isSiteAdmin;\n            if (message.tcAcceptedVersion != null && $Object.hasOwnProperty.call(message, \"tcAcceptedVersion\"))\n                object.tcAcceptedVersion = message.tcAcceptedVersion;\n            if (message.tcAcceptedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"tcAcceptedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tcAcceptedAtUnixMs = typeof message.tcAcceptedAtUnixMs === \"number\" ? $BigInt(message.tcAcceptedAtUnixMs) : $util.Long.fromBits(message.tcAcceptedAtUnixMs.low >>> 0, message.tcAcceptedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.tcAcceptedAtUnixMs === \"number\")\n                    object.tcAcceptedAtUnixMs = options.longs === $String ? $String(message.tcAcceptedAtUnixMs) : message.tcAcceptedAtUnixMs;\n                else\n                    object.tcAcceptedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.tcAcceptedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.tcAcceptedAtUnixMs.low >>> 0, message.tcAcceptedAtUnixMs.high >>> 0).toNumber() : message.tcAcceptedAtUnixMs;\n            return object;\n        };\n\n        /**\n         * Converts this UserProtoRow to JSON.\n         * @function toJSON\n         * @memberof users.UserProtoRow\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        UserProtoRow.prototype.toJSON = function() {\n            return UserProtoRow.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for UserProtoRow\n         * @function getTypeUrl\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        UserProtoRow.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/users.UserProtoRow\";\n        };\n\n        return UserProtoRow;\n    })();\n\n    users.UsersProto = (function() {\n\n        /**\n         * Properties of a UsersProto.\n         * @typedef {Object} users.UsersProto.$Properties\n         * @property {number|null} [schemaMinorVersion] UsersProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] UsersProto lastModifiedByCommit\n         * @property {Array.<users.UserProtoRow.$Properties>|null} [users] UsersProto users\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a UsersProto.\n         * @memberof users\n         * @interface IUsersProto\n         * @augments users.UsersProto.$Properties\n         * @deprecated Use users.UsersProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a UsersProto.\n         * @typedef {users.UsersProto.$Properties} users.UsersProto.$Shape\n         */\n\n        /**\n         * Constructs a new UsersProto.\n         * @memberof users\n         * @classdesc Represents a UsersProto.\n         * @constructor\n         * @param {users.UsersProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const UsersProto = function (properties) {\n            this.users = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * UsersProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof users.UsersProto\n         * @instance\n         */\n        UsersProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * UsersProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof users.UsersProto\n         * @instance\n         */\n        UsersProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * UsersProto users.\n         * @member {Array.<users.UserProtoRow.$Properties>} users\n         * @memberof users.UsersProto\n         * @instance\n         */\n        UsersProto.prototype.users = $util.emptyArray;\n\n        /**\n         * Creates a new UsersProto instance using the specified properties.\n         * @function create\n         * @memberof users.UsersProto\n         * @static\n         * @param {users.UsersProto.$Properties=} [properties] Properties to set\n         * @returns {users.UsersProto} UsersProto instance\n         * @type {{\n         *   (properties: users.UsersProto.$Shape): users.UsersProto & users.UsersProto.$Shape;\n         *   (properties?: users.UsersProto.$Properties): users.UsersProto;\n         * }}\n         */\n        UsersProto.create = function(properties) {\n            return new UsersProto(properties);\n        };\n\n        /**\n         * Encodes the specified UsersProto message. Does not implicitly {@link users.UsersProto.verify|verify} messages.\n         * @function encode\n         * @memberof users.UsersProto\n         * @static\n         * @param {users.UsersProto.$Properties} message UsersProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UsersProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.users != null && message.users.length)\n                for (let i = 0; i < message.users.length; ++i)\n                    $root.users.UserProtoRow.encode(message.users[i], writer.uint32(/* id 3, wireType 2 =*/26).fork(), _depth + 1).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified UsersProto message, length delimited. Does not implicitly {@link users.UsersProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof users.UsersProto\n         * @static\n         * @param {users.UsersProto.$Properties} message UsersProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UsersProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a UsersProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof users.UsersProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {users.UsersProto & users.UsersProto.$Shape} UsersProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UsersProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.users.UsersProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.users && message.users.length))\n                            message.users = [];\n                        message.users.push($root.users.UserProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a UsersProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof users.UsersProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {users.UsersProto & users.UsersProto.$Shape} UsersProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UsersProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a UsersProto message.\n         * @function verify\n         * @memberof users.UsersProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        UsersProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.users != null && $Object.hasOwnProperty.call(message, \"users\")) {\n                if (!$Array.isArray(message.users))\n                    return \"users: array expected\";\n                for (let i = 0; i < message.users.length; ++i) {\n                    let error = $root.users.UserProtoRow.verify(message.users[i], _depth + 1);\n                    if (error)\n                        return \"users.\" + error;\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates a UsersProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof users.UsersProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {users.UsersProto} UsersProto\n         */\n        UsersProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.users.UsersProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".users.UsersProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.users.UsersProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.users) {\n                if (!$Array.isArray(object.users))\n                    throw $TypeError(\".users.UsersProto.users: array expected\");\n                message.users = $Array(object.users.length);\n                for (let i = 0; i < object.users.length; ++i) {\n                    if (!$util.isObject(object.users[i]))\n                        throw $TypeError(\".users.UsersProto.users: object expected\");\n                    message.users[i] = $root.users.UserProtoRow.fromObject(object.users[i], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a UsersProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof users.UsersProto\n         * @static\n         * @param {users.UsersProto} message UsersProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        UsersProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.users = [];\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.users && message.users.length) {\n                object.users = $Array(message.users.length);\n                for (let j = 0; j < message.users.length; ++j)\n                    object.users[j] = $root.users.UserProtoRow.toObject(message.users[j], options, _depth + 1);\n            }\n            return object;\n        };\n\n        /**\n         * Converts this UsersProto to JSON.\n         * @function toJSON\n         * @memberof users.UsersProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        UsersProto.prototype.toJSON = function() {\n            return UsersProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for UsersProto\n         * @function getTypeUrl\n         * @memberof users.UsersProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        UsersProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/users.UsersProto\";\n        };\n\n        return UsersProto;\n    })();\n\n    return users;\n})();\n\nexport const tenants = $root.tenants = (() => {\n\n    /**\n     * Namespace tenants.\n     * @exports tenants\n     * @namespace\n     */\n    const tenants = {};\n\n    tenants.TenantProto = (function() {\n\n        /**\n         * Properties of a TenantProto.\n         * @typedef {Object} tenants.TenantProto.$Properties\n         * @property {number|null} [schemaMinorVersion] TenantProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] TenantProto lastModifiedByCommit\n         * @property {number|Long|null} [id] TenantProto id\n         * @property {string|null} [name] TenantProto name\n         * @property {number|Long|null} [createdAtUnixMs] TenantProto createdAtUnixMs\n         * @property {number|Long|null} [updatedAtUnixMs] TenantProto updatedAtUnixMs\n         * @property {number|null} [maxChannels] TenantProto maxChannels\n         * @property {string|null} [customDomain] TenantProto customDomain\n         * @property {number|Long|null} [customDomainVerifiedAtUnixMs] TenantProto customDomainVerifiedAtUnixMs\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a TenantProto.\n         * @memberof tenants\n         * @interface ITenantProto\n         * @augments tenants.TenantProto.$Properties\n         * @deprecated Use tenants.TenantProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a TenantProto.\n         * @typedef {tenants.TenantProto.$Properties} tenants.TenantProto.$Shape\n         */\n\n        /**\n         * Constructs a new TenantProto.\n         * @memberof tenants\n         * @classdesc Represents a TenantProto.\n         * @constructor\n         * @param {tenants.TenantProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const TenantProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * TenantProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * TenantProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * TenantProto id.\n         * @member {number|Long} id\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProto name.\n         * @member {string} name\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.name = \"\";\n\n        /**\n         * TenantProto createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProto updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProto maxChannels.\n         * @member {number} maxChannels\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.maxChannels = 0;\n\n        /**\n         * TenantProto customDomain.\n         * @member {string} customDomain\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.customDomain = \"\";\n\n        /**\n         * TenantProto customDomainVerifiedAtUnixMs.\n         * @member {number|Long} customDomainVerifiedAtUnixMs\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.customDomainVerifiedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new TenantProto instance using the specified properties.\n         * @function create\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {tenants.TenantProto.$Properties=} [properties] Properties to set\n         * @returns {tenants.TenantProto} TenantProto instance\n         * @type {{\n         *   (properties: tenants.TenantProto.$Shape): tenants.TenantProto & tenants.TenantProto.$Shape;\n         *   (properties?: tenants.TenantProto.$Properties): tenants.TenantProto;\n         * }}\n         */\n        TenantProto.create = function(properties) {\n            return new TenantProto(properties);\n        };\n\n        /**\n         * Encodes the specified TenantProto message. Does not implicitly {@link tenants.TenantProto.verify|verify} messages.\n         * @function encode\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {tenants.TenantProto.$Properties} message TenantProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && (typeof message.id === \"object\" ? message.id.low || message.id.high : message.id !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.id);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.name);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.createdAtUnixMs);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.updatedAtUnixMs);\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\") && message.maxChannels !== 0)\n                writer.uint32(/* id 7, wireType 0 =*/56).int32(message.maxChannels);\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\") && message.customDomain !== \"\")\n                writer.uint32(/* id 8, wireType 2 =*/66).string(message.customDomain);\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\") && (typeof message.customDomainVerifiedAtUnixMs === \"object\" ? message.customDomainVerifiedAtUnixMs.low || message.customDomainVerifiedAtUnixMs.high : message.customDomainVerifiedAtUnixMs !== 0))\n                writer.uint32(/* id 9, wireType 0 =*/72).int64(message.customDomainVerifiedAtUnixMs);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified TenantProto message, length delimited. Does not implicitly {@link tenants.TenantProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {tenants.TenantProto.$Properties} message TenantProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a TenantProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tenants.TenantProto & tenants.TenantProto.$Shape} TenantProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tenants.TenantProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.maxChannels = value;\n                        else\n                            delete message.maxChannels;\n                        continue;\n                    }\n                case 8: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.customDomain = value;\n                        else\n                            delete message.customDomain;\n                        continue;\n                    }\n                case 9: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.customDomainVerifiedAtUnixMs = value;\n                        else\n                            delete message.customDomainVerifiedAtUnixMs;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a TenantProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tenants.TenantProto & tenants.TenantProto.$Shape} TenantProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a TenantProto message.\n         * @function verify\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        TenantProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))\n                    return \"id: integer|Long expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\"))\n                if (!$util.isInteger(message.maxChannels))\n                    return \"maxChannels: integer expected\";\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\"))\n                if (!$util.isString(message.customDomain))\n                    return \"customDomain: string expected\";\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\"))\n                if (!$util.isInteger(message.customDomainVerifiedAtUnixMs) && !(message.customDomainVerifiedAtUnixMs && $util.isInteger(message.customDomainVerifiedAtUnixMs.low) && $util.isInteger(message.customDomainVerifiedAtUnixMs.high)))\n                    return \"customDomainVerifiedAtUnixMs: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a TenantProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tenants.TenantProto} TenantProto\n         */\n        TenantProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tenants.TenantProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tenants.TenantProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tenants.TenantProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.id != null)\n                if (typeof object.id === \"object\" ? object.id.low || object.id.high : $Number(object.id) !== 0)\n                    if ($util.Long)\n                        message.id = $util.Long.fromValue(object.id, false);\n                    else if (typeof object.id === \"string\")\n                        message.id = $parseInt(object.id, 10);\n                    else if (typeof object.id === \"number\")\n                        message.id = object.id;\n                    else if (typeof object.id === \"object\")\n                        message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber();\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.maxChannels != null)\n                if ($Number(object.maxChannels) !== 0)\n                    message.maxChannels = object.maxChannels | 0;\n            if (object.customDomain != null)\n                if (typeof object.customDomain !== \"string\" || object.customDomain.length)\n                    message.customDomain = $String(object.customDomain);\n            if (object.customDomainVerifiedAtUnixMs != null)\n                if (typeof object.customDomainVerifiedAtUnixMs === \"object\" ? object.customDomainVerifiedAtUnixMs.low || object.customDomainVerifiedAtUnixMs.high : $Number(object.customDomainVerifiedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.customDomainVerifiedAtUnixMs = $util.Long.fromValue(object.customDomainVerifiedAtUnixMs, false);\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"string\")\n                        message.customDomainVerifiedAtUnixMs = $parseInt(object.customDomainVerifiedAtUnixMs, 10);\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"number\")\n                        message.customDomainVerifiedAtUnixMs = object.customDomainVerifiedAtUnixMs;\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"object\")\n                        message.customDomainVerifiedAtUnixMs = new $util.LongBits(object.customDomainVerifiedAtUnixMs.low >>> 0, object.customDomainVerifiedAtUnixMs.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a TenantProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {tenants.TenantProto} message TenantProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        TenantProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.id = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.id = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.maxChannels = 0;\n                object.customDomain = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.id = typeof message.id === \"number\" ? $BigInt(message.id) : $util.Long.fromBits(message.id.low >>> 0, message.id.high >>> 0, false).toBigInt();\n                else if (typeof message.id === \"number\")\n                    object.id = options.longs === $String ? $String(message.id) : message.id;\n                else\n                    object.id = options.longs === $String ? $util.Long.prototype.toString.call(message.id) : options.longs === $Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber() : message.id;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\"))\n                object.maxChannels = message.maxChannels;\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\"))\n                object.customDomain = message.customDomain;\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.customDomainVerifiedAtUnixMs = typeof message.customDomainVerifiedAtUnixMs === \"number\" ? $BigInt(message.customDomainVerifiedAtUnixMs) : $util.Long.fromBits(message.customDomainVerifiedAtUnixMs.low >>> 0, message.customDomainVerifiedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.customDomainVerifiedAtUnixMs === \"number\")\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? $String(message.customDomainVerifiedAtUnixMs) : message.customDomainVerifiedAtUnixMs;\n                else\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.customDomainVerifiedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.customDomainVerifiedAtUnixMs.low >>> 0, message.customDomainVerifiedAtUnixMs.high >>> 0).toNumber() : message.customDomainVerifiedAtUnixMs;\n            return object;\n        };\n\n        /**\n         * Converts this TenantProto to JSON.\n         * @function toJSON\n         * @memberof tenants.TenantProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        TenantProto.prototype.toJSON = function() {\n            return TenantProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for TenantProto\n         * @function getTypeUrl\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        TenantProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tenants.TenantProto\";\n        };\n\n        return TenantProto;\n    })();\n\n    tenants.TenantProtoRow = (function() {\n\n        /**\n         * Properties of a TenantProtoRow.\n         * @typedef {Object} tenants.TenantProtoRow.$Properties\n         * @property {number|Long|null} [id] TenantProtoRow id\n         * @property {string|null} [name] TenantProtoRow name\n         * @property {number|Long|null} [createdAtUnixMs] TenantProtoRow createdAtUnixMs\n         * @property {number|Long|null} [updatedAtUnixMs] TenantProtoRow updatedAtUnixMs\n         * @property {number|null} [maxChannels] TenantProtoRow maxChannels\n         * @property {string|null} [customDomain] TenantProtoRow customDomain\n         * @property {number|Long|null} [customDomainVerifiedAtUnixMs] TenantProtoRow customDomainVerifiedAtUnixMs\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a TenantProtoRow.\n         * @memberof tenants\n         * @interface ITenantProtoRow\n         * @augments tenants.TenantProtoRow.$Properties\n         * @deprecated Use tenants.TenantProtoRow.$Properties instead.\n         */\n\n        /**\n         * Shape of a TenantProtoRow.\n         * @typedef {tenants.TenantProtoRow.$Properties} tenants.TenantProtoRow.$Shape\n         */\n\n        /**\n         * Constructs a new TenantProtoRow.\n         * @memberof tenants\n         * @classdesc Represents a TenantProtoRow.\n         * @constructor\n         * @param {tenants.TenantProtoRow.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const TenantProtoRow = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * TenantProtoRow id.\n         * @member {number|Long} id\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProtoRow name.\n         * @member {string} name\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.name = \"\";\n\n        /**\n         * TenantProtoRow createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProtoRow updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProtoRow maxChannels.\n         * @member {number} maxChannels\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.maxChannels = 0;\n\n        /**\n         * TenantProtoRow customDomain.\n         * @member {string} customDomain\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.customDomain = \"\";\n\n        /**\n         * TenantProtoRow customDomainVerifiedAtUnixMs.\n         * @member {number|Long} customDomainVerifiedAtUnixMs\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.customDomainVerifiedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new TenantProtoRow instance using the specified properties.\n         * @function create\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {tenants.TenantProtoRow.$Properties=} [properties] Properties to set\n         * @returns {tenants.TenantProtoRow} TenantProtoRow instance\n         * @type {{\n         *   (properties: tenants.TenantProtoRow.$Shape): tenants.TenantProtoRow & tenants.TenantProtoRow.$Shape;\n         *   (properties?: tenants.TenantProtoRow.$Properties): tenants.TenantProtoRow;\n         * }}\n         */\n        TenantProtoRow.create = function(properties) {\n            return new TenantProtoRow(properties);\n        };\n\n        /**\n         * Encodes the specified TenantProtoRow message. Does not implicitly {@link tenants.TenantProtoRow.verify|verify} messages.\n         * @function encode\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {tenants.TenantProtoRow.$Properties} message TenantProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantProtoRow.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && (typeof message.id === \"object\" ? message.id.low || message.id.high : message.id !== 0))\n                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.id);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.name);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.createdAtUnixMs);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.updatedAtUnixMs);\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\") && message.maxChannels !== 0)\n                writer.uint32(/* id 6, wireType 0 =*/48).int32(message.maxChannels);\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\") && message.customDomain !== \"\")\n                writer.uint32(/* id 7, wireType 2 =*/58).string(message.customDomain);\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\") && (typeof message.customDomainVerifiedAtUnixMs === \"object\" ? message.customDomainVerifiedAtUnixMs.low || message.customDomainVerifiedAtUnixMs.high : message.customDomainVerifiedAtUnixMs !== 0))\n                writer.uint32(/* id 8, wireType 0 =*/64).int64(message.customDomainVerifiedAtUnixMs);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified TenantProtoRow message, length delimited. Does not implicitly {@link tenants.TenantProtoRow.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {tenants.TenantProtoRow.$Properties} message TenantProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantProtoRow.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a TenantProtoRow message from the specified reader or buffer.\n         * @function decode\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tenants.TenantProtoRow & tenants.TenantProtoRow.$Shape} TenantProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantProtoRow.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tenants.TenantProtoRow();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.maxChannels = value;\n                        else\n                            delete message.maxChannels;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.customDomain = value;\n                        else\n                            delete message.customDomain;\n                        continue;\n                    }\n                case 8: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.customDomainVerifiedAtUnixMs = value;\n                        else\n                            delete message.customDomainVerifiedAtUnixMs;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a TenantProtoRow message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tenants.TenantProtoRow & tenants.TenantProtoRow.$Shape} TenantProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantProtoRow.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a TenantProtoRow message.\n         * @function verify\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        TenantProtoRow.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))\n                    return \"id: integer|Long expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\"))\n                if (!$util.isInteger(message.maxChannels))\n                    return \"maxChannels: integer expected\";\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\"))\n                if (!$util.isString(message.customDomain))\n                    return \"customDomain: string expected\";\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\"))\n                if (!$util.isInteger(message.customDomainVerifiedAtUnixMs) && !(message.customDomainVerifiedAtUnixMs && $util.isInteger(message.customDomainVerifiedAtUnixMs.low) && $util.isInteger(message.customDomainVerifiedAtUnixMs.high)))\n                    return \"customDomainVerifiedAtUnixMs: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a TenantProtoRow message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tenants.TenantProtoRow} TenantProtoRow\n         */\n        TenantProtoRow.fromObject = function (object, _depth) {\n            if (object instanceof $root.tenants.TenantProtoRow)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tenants.TenantProtoRow: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tenants.TenantProtoRow();\n            if (object.id != null)\n                if (typeof object.id === \"object\" ? object.id.low || object.id.high : $Number(object.id) !== 0)\n                    if ($util.Long)\n                        message.id = $util.Long.fromValue(object.id, false);\n                    else if (typeof object.id === \"string\")\n                        message.id = $parseInt(object.id, 10);\n                    else if (typeof object.id === \"number\")\n                        message.id = object.id;\n                    else if (typeof object.id === \"object\")\n                        message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber();\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.maxChannels != null)\n                if ($Number(object.maxChannels) !== 0)\n                    message.maxChannels = object.maxChannels | 0;\n            if (object.customDomain != null)\n                if (typeof object.customDomain !== \"string\" || object.customDomain.length)\n                    message.customDomain = $String(object.customDomain);\n            if (object.customDomainVerifiedAtUnixMs != null)\n                if (typeof object.customDomainVerifiedAtUnixMs === \"object\" ? object.customDomainVerifiedAtUnixMs.low || object.customDomainVerifiedAtUnixMs.high : $Number(object.customDomainVerifiedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.customDomainVerifiedAtUnixMs = $util.Long.fromValue(object.customDomainVerifiedAtUnixMs, false);\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"string\")\n                        message.customDomainVerifiedAtUnixMs = $parseInt(object.customDomainVerifiedAtUnixMs, 10);\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"number\")\n                        message.customDomainVerifiedAtUnixMs = object.customDomainVerifiedAtUnixMs;\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"object\")\n                        message.customDomainVerifiedAtUnixMs = new $util.LongBits(object.customDomainVerifiedAtUnixMs.low >>> 0, object.customDomainVerifiedAtUnixMs.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a TenantProtoRow message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {tenants.TenantProtoRow} message TenantProtoRow\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        TenantProtoRow.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.id = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.id = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.maxChannels = 0;\n                object.customDomain = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.id = typeof message.id === \"number\" ? $BigInt(message.id) : $util.Long.fromBits(message.id.low >>> 0, message.id.high >>> 0, false).toBigInt();\n                else if (typeof message.id === \"number\")\n                    object.id = options.longs === $String ? $String(message.id) : message.id;\n                else\n                    object.id = options.longs === $String ? $util.Long.prototype.toString.call(message.id) : options.longs === $Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber() : message.id;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\"))\n                object.maxChannels = message.maxChannels;\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\"))\n                object.customDomain = message.customDomain;\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.customDomainVerifiedAtUnixMs = typeof message.customDomainVerifiedAtUnixMs === \"number\" ? $BigInt(message.customDomainVerifiedAtUnixMs) : $util.Long.fromBits(message.customDomainVerifiedAtUnixMs.low >>> 0, message.customDomainVerifiedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.customDomainVerifiedAtUnixMs === \"number\")\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? $String(message.customDomainVerifiedAtUnixMs) : message.customDomainVerifiedAtUnixMs;\n                else\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.customDomainVerifiedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.customDomainVerifiedAtUnixMs.low >>> 0, message.customDomainVerifiedAtUnixMs.high >>> 0).toNumber() : message.customDomainVerifiedAtUnixMs;\n            return object;\n        };\n\n        /**\n         * Converts this TenantProtoRow to JSON.\n         * @function toJSON\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        TenantProtoRow.prototype.toJSON = function() {\n            return TenantProtoRow.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for TenantProtoRow\n         * @function getTypeUrl\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        TenantProtoRow.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tenants.TenantProtoRow\";\n        };\n\n        return TenantProtoRow;\n    })();\n\n    tenants.TenantsProto = (function() {\n\n        /**\n         * Properties of a TenantsProto.\n         * @typedef {Object} tenants.TenantsProto.$Properties\n         * @property {number|null} [schemaMinorVersion] TenantsProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] TenantsProto lastModifiedByCommit\n         * @property {Array.<tenants.TenantProtoRow.$Properties>|null} [tenants] TenantsProto tenants\n         * @property {number|Long|null} [lastUpdatedUnixMs] TenantsProto lastUpdatedUnixMs\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a TenantsProto.\n         * @memberof tenants\n         * @interface ITenantsProto\n         * @augments tenants.TenantsProto.$Properties\n         * @deprecated Use tenants.TenantsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a TenantsProto.\n         * @typedef {tenants.TenantsProto.$Properties} tenants.TenantsProto.$Shape\n         */\n\n        /**\n         * Constructs a new TenantsProto.\n         * @memberof tenants\n         * @classdesc Represents a TenantsProto.\n         * @constructor\n         * @param {tenants.TenantsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const TenantsProto = function (properties) {\n            this.tenants = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * TenantsProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof tenants.TenantsProto\n         * @instance\n         */\n        TenantsProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * TenantsProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof tenants.TenantsProto\n         * @instance\n         */\n        TenantsProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * TenantsProto tenants.\n         * @member {Array.<tenants.TenantProtoRow.$Properties>} tenants\n         * @memberof tenants.TenantsProto\n         * @instance\n         */\n        TenantsProto.prototype.tenants = $util.emptyArray;\n\n        /**\n         * TenantsProto lastUpdatedUnixMs.\n         * @member {number|Long} lastUpdatedUnixMs\n         * @memberof tenants.TenantsProto\n         * @instance\n         */\n        TenantsProto.prototype.lastUpdatedUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new TenantsProto instance using the specified properties.\n         * @function create\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {tenants.TenantsProto.$Properties=} [properties] Properties to set\n         * @returns {tenants.TenantsProto} TenantsProto instance\n         * @type {{\n         *   (properties: tenants.TenantsProto.$Shape): tenants.TenantsProto & tenants.TenantsProto.$Shape;\n         *   (properties?: tenants.TenantsProto.$Properties): tenants.TenantsProto;\n         * }}\n         */\n        TenantsProto.create = function(properties) {\n            return new TenantsProto(properties);\n        };\n\n        /**\n         * Encodes the specified TenantsProto message. Does not implicitly {@link tenants.TenantsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {tenants.TenantsProto.$Properties} message TenantsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.tenants != null && message.tenants.length)\n                for (let i = 0; i < message.tenants.length; ++i)\n                    $root.tenants.TenantProtoRow.encode(message.tenants[i], writer.uint32(/* id 3, wireType 2 =*/26).fork(), _depth + 1).ldelim();\n            if (message.lastUpdatedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUpdatedUnixMs\") && (typeof message.lastUpdatedUnixMs === \"object\" ? message.lastUpdatedUnixMs.low || message.lastUpdatedUnixMs.high : message.lastUpdatedUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.lastUpdatedUnixMs);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified TenantsProto message, length delimited. Does not implicitly {@link tenants.TenantsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {tenants.TenantsProto.$Properties} message TenantsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a TenantsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tenants.TenantsProto & tenants.TenantsProto.$Shape} TenantsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tenants.TenantsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.tenants && message.tenants.length))\n                            message.tenants = [];\n                        message.tenants.push($root.tenants.TenantProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.lastUpdatedUnixMs = value;\n                        else\n                            delete message.lastUpdatedUnixMs;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a TenantsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tenants.TenantsProto & tenants.TenantsProto.$Shape} TenantsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a TenantsProto message.\n         * @function verify\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        TenantsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.tenants != null && $Object.hasOwnProperty.call(message, \"tenants\")) {\n                if (!$Array.isArray(message.tenants))\n                    return \"tenants: array expected\";\n                for (let i = 0; i < message.tenants.length; ++i) {\n                    let error = $root.tenants.TenantProtoRow.verify(message.tenants[i], _depth + 1);\n                    if (error)\n                        return \"tenants.\" + error;\n                }\n            }\n            if (message.lastUpdatedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUpdatedUnixMs\"))\n                if (!$util.isInteger(message.lastUpdatedUnixMs) && !(message.lastUpdatedUnixMs && $util.isInteger(message.lastUpdatedUnixMs.low) && $util.isInteger(message.lastUpdatedUnixMs.high)))\n                    return \"lastUpdatedUnixMs: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a TenantsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tenants.TenantsProto} TenantsProto\n         */\n        TenantsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tenants.TenantsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tenants.TenantsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tenants.TenantsProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.tenants) {\n                if (!$Array.isArray(object.tenants))\n                    throw $TypeError(\".tenants.TenantsProto.tenants: array expected\");\n                message.tenants = $Array(object.tenants.length);\n                for (let i = 0; i < object.tenants.length; ++i) {\n                    if (!$util.isObject(object.tenants[i]))\n                        throw $TypeError(\".tenants.TenantsProto.tenants: object expected\");\n                    message.tenants[i] = $root.tenants.TenantProtoRow.fromObject(object.tenants[i], _depth + 1);\n                }\n            }\n            if (object.lastUpdatedUnixMs != null)\n                if (typeof object.lastUpdatedUnixMs === \"object\" ? object.lastUpdatedUnixMs.low || object.lastUpdatedUnixMs.high : $Number(object.lastUpdatedUnixMs) !== 0)\n                    if ($util.Long)\n                        message.lastUpdatedUnixMs = $util.Long.fromValue(object.lastUpdatedUnixMs, false);\n                    else if (typeof object.lastUpdatedUnixMs === \"string\")\n                        message.lastUpdatedUnixMs = $parseInt(object.lastUpdatedUnixMs, 10);\n                    else if (typeof object.lastUpdatedUnixMs === \"number\")\n                        message.lastUpdatedUnixMs = object.lastUpdatedUnixMs;\n                    else if (typeof object.lastUpdatedUnixMs === \"object\")\n                        message.lastUpdatedUnixMs = new $util.LongBits(object.lastUpdatedUnixMs.low >>> 0, object.lastUpdatedUnixMs.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a TenantsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {tenants.TenantsProto} message TenantsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        TenantsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.tenants = [];\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.lastUpdatedUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.lastUpdatedUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.tenants && message.tenants.length) {\n                object.tenants = $Array(message.tenants.length);\n                for (let j = 0; j < message.tenants.length; ++j)\n                    object.tenants[j] = $root.tenants.TenantProtoRow.toObject(message.tenants[j], options, _depth + 1);\n            }\n            if (message.lastUpdatedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUpdatedUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.lastUpdatedUnixMs = typeof message.lastUpdatedUnixMs === \"number\" ? $BigInt(message.lastUpdatedUnixMs) : $util.Long.fromBits(message.lastUpdatedUnixMs.low >>> 0, message.lastUpdatedUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.lastUpdatedUnixMs === \"number\")\n                    object.lastUpdatedUnixMs = options.longs === $String ? $String(message.lastUpdatedUnixMs) : message.lastUpdatedUnixMs;\n                else\n                    object.lastUpdatedUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.lastUpdatedUnixMs) : options.longs === $Number ? new $util.LongBits(message.lastUpdatedUnixMs.low >>> 0, message.lastUpdatedUnixMs.high >>> 0).toNumber() : message.lastUpdatedUnixMs;\n            return object;\n        };\n\n        /**\n         * Converts this TenantsProto to JSON.\n         * @function toJSON\n         * @memberof tenants.TenantsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        TenantsProto.prototype.toJSON = function() {\n            return TenantsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for TenantsProto\n         * @function getTypeUrl\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        TenantsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tenants.TenantsProto\";\n        };\n\n        return TenantsProto;\n    })();\n\n    return tenants;\n})();\n\nexport const channels = $root.channels = (() => {\n\n    /**\n     * Namespace channels.\n     * @exports channels\n     * @namespace\n     */\n    const channels = {};\n\n    channels.ChannelProtoRow = (function() {\n\n        /**\n         * Properties of a ChannelProtoRow.\n         * @typedef {Object} channels.ChannelProtoRow.$Properties\n         * @property {string|null} [id] ChannelProtoRow id\n         * @property {string|null} [name] ChannelProtoRow name\n         * @property {number|Long|null} [tenantId] ChannelProtoRow tenantId\n         * @property {number|Long|null} [createdAtUnixMs] ChannelProtoRow createdAtUnixMs\n         * @property {number|Long|null} [updatedAtUnixMs] ChannelProtoRow updatedAtUnixMs\n         * @property {number|null} [logoFileId] ChannelProtoRow logoFileId\n         * @property {string|null} [backgroundColor] ChannelProtoRow backgroundColor\n         * @property {boolean|null} [isPrimary] ChannelProtoRow isPrimary\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a ChannelProtoRow.\n         * @memberof channels\n         * @interface IChannelProtoRow\n         * @augments channels.ChannelProtoRow.$Properties\n         * @deprecated Use channels.ChannelProtoRow.$Properties instead.\n         */\n\n        /**\n         * Shape of a ChannelProtoRow.\n         * @typedef {channels.ChannelProtoRow.$Properties} channels.ChannelProtoRow.$Shape\n         */\n\n        /**\n         * Constructs a new ChannelProtoRow.\n         * @memberof channels\n         * @classdesc Represents a ChannelProtoRow.\n         * @constructor\n         * @param {channels.ChannelProtoRow.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const ChannelProtoRow = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * ChannelProtoRow id.\n         * @member {string} id\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.id = \"\";\n\n        /**\n         * ChannelProtoRow name.\n         * @member {string} name\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.name = \"\";\n\n        /**\n         * ChannelProtoRow tenantId.\n         * @member {number|Long} tenantId\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * ChannelProtoRow createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * ChannelProtoRow updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * ChannelProtoRow logoFileId.\n         * @member {number} logoFileId\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.logoFileId = 0;\n\n        /**\n         * ChannelProtoRow backgroundColor.\n         * @member {string} backgroundColor\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.backgroundColor = \"\";\n\n        /**\n         * ChannelProtoRow isPrimary.\n         * @member {boolean} isPrimary\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.isPrimary = false;\n\n        /**\n         * Creates a new ChannelProtoRow instance using the specified properties.\n         * @function create\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {channels.ChannelProtoRow.$Properties=} [properties] Properties to set\n         * @returns {channels.ChannelProtoRow} ChannelProtoRow instance\n         * @type {{\n         *   (properties: channels.ChannelProtoRow.$Shape): channels.ChannelProtoRow & channels.ChannelProtoRow.$Shape;\n         *   (properties?: channels.ChannelProtoRow.$Properties): channels.ChannelProtoRow;\n         * }}\n         */\n        ChannelProtoRow.create = function(properties) {\n            return new ChannelProtoRow(properties);\n        };\n\n        /**\n         * Encodes the specified ChannelProtoRow message. Does not implicitly {@link channels.ChannelProtoRow.verify|verify} messages.\n         * @function encode\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {channels.ChannelProtoRow.$Properties} message ChannelProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelProtoRow.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && message.id !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.name);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.createdAtUnixMs);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.updatedAtUnixMs);\n            if (message.logoFileId != null && $Object.hasOwnProperty.call(message, \"logoFileId\") && message.logoFileId !== 0)\n                writer.uint32(/* id 8, wireType 0 =*/64).int32(message.logoFileId);\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\") && message.backgroundColor !== \"\")\n                writer.uint32(/* id 9, wireType 2 =*/74).string(message.backgroundColor);\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\") && message.isPrimary !== false)\n                writer.uint32(/* id 10, wireType 0 =*/80).bool(message.isPrimary);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified ChannelProtoRow message, length delimited. Does not implicitly {@link channels.ChannelProtoRow.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {channels.ChannelProtoRow.$Properties} message ChannelProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelProtoRow.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a ChannelProtoRow message from the specified reader or buffer.\n         * @function decode\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {channels.ChannelProtoRow & channels.ChannelProtoRow.$Shape} ChannelProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelProtoRow.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.channels.ChannelProtoRow();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 8: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.logoFileId = value;\n                        else\n                            delete message.logoFileId;\n                        continue;\n                    }\n                case 9: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.backgroundColor = value;\n                        else\n                            delete message.backgroundColor;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isPrimary = value;\n                        else\n                            delete message.isPrimary;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a ChannelProtoRow message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {channels.ChannelProtoRow & channels.ChannelProtoRow.$Shape} ChannelProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelProtoRow.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a ChannelProtoRow message.\n         * @function verify\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        ChannelProtoRow.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isString(message.id))\n                    return \"id: string expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.logoFileId != null && $Object.hasOwnProperty.call(message, \"logoFileId\"))\n                if (!$util.isInteger(message.logoFileId))\n                    return \"logoFileId: integer expected\";\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\"))\n                if (!$util.isString(message.backgroundColor))\n                    return \"backgroundColor: string expected\";\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\"))\n                if (typeof message.isPrimary !== \"boolean\")\n                    return \"isPrimary: boolean expected\";\n            return null;\n        };\n\n        /**\n         * Creates a ChannelProtoRow message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {channels.ChannelProtoRow} ChannelProtoRow\n         */\n        ChannelProtoRow.fromObject = function (object, _depth) {\n            if (object instanceof $root.channels.ChannelProtoRow)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".channels.ChannelProtoRow: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.channels.ChannelProtoRow();\n            if (object.id != null)\n                if (typeof object.id !== \"string\" || object.id.length)\n                    message.id = $String(object.id);\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.logoFileId != null)\n                if ($Number(object.logoFileId) !== 0)\n                    message.logoFileId = object.logoFileId | 0;\n            if (object.backgroundColor != null)\n                if (typeof object.backgroundColor !== \"string\" || object.backgroundColor.length)\n                    message.backgroundColor = $String(object.backgroundColor);\n            if (object.isPrimary != null)\n                if (object.isPrimary)\n                    message.isPrimary = $Boolean(object.isPrimary);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a ChannelProtoRow message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {channels.ChannelProtoRow} message ChannelProtoRow\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        ChannelProtoRow.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.id = \"\";\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.logoFileId = 0;\n                object.backgroundColor = \"\";\n                object.isPrimary = false;\n            }\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                object.id = message.id;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            if (message.logoFileId != null && $Object.hasOwnProperty.call(message, \"logoFileId\"))\n                object.logoFileId = message.logoFileId;\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\"))\n                object.backgroundColor = message.backgroundColor;\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\"))\n                object.isPrimary = message.isPrimary;\n            return object;\n        };\n\n        /**\n         * Converts this ChannelProtoRow to JSON.\n         * @function toJSON\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        ChannelProtoRow.prototype.toJSON = function() {\n            return ChannelProtoRow.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for ChannelProtoRow\n         * @function getTypeUrl\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        ChannelProtoRow.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/channels.ChannelProtoRow\";\n        };\n\n        return ChannelProtoRow;\n    })();\n\n    channels.ChannelsProto = (function() {\n\n        /**\n         * Properties of a ChannelsProto.\n         * @typedef {Object} channels.ChannelsProto.$Properties\n         * @property {number|null} [schemaMinorVersion] ChannelsProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] ChannelsProto lastModifiedByCommit\n         * @property {Array.<channels.ChannelProtoRow.$Properties>|null} [channels] ChannelsProto channels\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a ChannelsProto.\n         * @memberof channels\n         * @interface IChannelsProto\n         * @augments channels.ChannelsProto.$Properties\n         * @deprecated Use channels.ChannelsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a ChannelsProto.\n         * @typedef {channels.ChannelsProto.$Properties} channels.ChannelsProto.$Shape\n         */\n\n        /**\n         * Constructs a new ChannelsProto.\n         * @memberof channels\n         * @classdesc Represents a ChannelsProto.\n         * @constructor\n         * @param {channels.ChannelsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const ChannelsProto = function (properties) {\n            this.channels = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * ChannelsProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof channels.ChannelsProto\n         * @instance\n         */\n        ChannelsProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * ChannelsProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof channels.ChannelsProto\n         * @instance\n         */\n        ChannelsProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * ChannelsProto channels.\n         * @member {Array.<channels.ChannelProtoRow.$Properties>} channels\n         * @memberof channels.ChannelsProto\n         * @instance\n         */\n        ChannelsProto.prototype.channels = $util.emptyArray;\n\n        /**\n         * Creates a new ChannelsProto instance using the specified properties.\n         * @function create\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {channels.ChannelsProto.$Properties=} [properties] Properties to set\n         * @returns {channels.ChannelsProto} ChannelsProto instance\n         * @type {{\n         *   (properties: channels.ChannelsProto.$Shape): channels.ChannelsProto & channels.ChannelsProto.$Shape;\n         *   (properties?: channels.ChannelsProto.$Properties): channels.ChannelsProto;\n         * }}\n         */\n        ChannelsProto.create = function(properties) {\n            return new ChannelsProto(properties);\n        };\n\n        /**\n         * Encodes the specified ChannelsProto message. Does not implicitly {@link channels.ChannelsProto.verify|verify} messages.\n         * @function encode\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {channels.ChannelsProto.$Properties} message ChannelsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.channels != null && message.channels.length)\n                for (let i = 0; i < message.channels.length; ++i)\n                    $root.channels.ChannelProtoRow.encode(message.channels[i], writer.uint32(/* id 3, wireType 2 =*/26).fork(), _depth + 1).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified ChannelsProto message, length delimited. Does not implicitly {@link channels.ChannelsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {channels.ChannelsProto.$Properties} message ChannelsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a ChannelsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {channels.ChannelsProto & channels.ChannelsProto.$Shape} ChannelsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.channels.ChannelsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.channels && message.channels.length))\n                            message.channels = [];\n                        message.channels.push($root.channels.ChannelProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a ChannelsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {channels.ChannelsProto & channels.ChannelsProto.$Shape} ChannelsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a ChannelsProto message.\n         * @function verify\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        ChannelsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.channels != null && $Object.hasOwnProperty.call(message, \"channels\")) {\n                if (!$Array.isArray(message.channels))\n                    return \"channels: array expected\";\n                for (let i = 0; i < message.channels.length; ++i) {\n                    let error = $root.channels.ChannelProtoRow.verify(message.channels[i], _depth + 1);\n                    if (error)\n                        return \"channels.\" + error;\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates a ChannelsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {channels.ChannelsProto} ChannelsProto\n         */\n        ChannelsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.channels.ChannelsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".channels.ChannelsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.channels.ChannelsProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.channels) {\n                if (!$Array.isArray(object.channels))\n                    throw $TypeError(\".channels.ChannelsProto.channels: array expected\");\n                message.channels = $Array(object.channels.length);\n                for (let i = 0; i < object.channels.length; ++i) {\n                    if (!$util.isObject(object.channels[i]))\n                        throw $TypeError(\".channels.ChannelsProto.channels: object expected\");\n                    message.channels[i] = $root.channels.ChannelProtoRow.fromObject(object.channels[i], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a ChannelsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {channels.ChannelsProto} message ChannelsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        ChannelsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.channels = [];\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.channels && message.channels.length) {\n                object.channels = $Array(message.channels.length);\n                for (let j = 0; j < message.channels.length; ++j)\n                    object.channels[j] = $root.channels.ChannelProtoRow.toObject(message.channels[j], options, _depth + 1);\n            }\n            return object;\n        };\n\n        /**\n         * Converts this ChannelsProto to JSON.\n         * @function toJSON\n         * @memberof channels.ChannelsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        ChannelsProto.prototype.toJSON = function() {\n            return ChannelsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for ChannelsProto\n         * @function getTypeUrl\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        ChannelsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/channels.ChannelsProto\";\n        };\n\n        return ChannelsProto;\n    })();\n\n    channels.ChannelInfoProto = (function() {\n\n        /**\n         * Properties of a ChannelInfoProto.\n         * @typedef {Object} channels.ChannelInfoProto.$Properties\n         * @property {string|null} [channelId] ChannelInfoProto channelId\n         * @property {string|null} [channelName] ChannelInfoProto channelName\n         * @property {number|Long|null} [tenantId] ChannelInfoProto tenantId\n         * @property {string|null} [tenantName] ChannelInfoProto tenantName\n         * @property {boolean|null} [hasLogo] ChannelInfoProto hasLogo\n         * @property {string|null} [status] ChannelInfoProto status\n         * @property {string|null} [channel] ChannelInfoProto channel\n         * @property {string|null} [backgroundColor] ChannelInfoProto backgroundColor\n         * @property {string|null} [logoUrl] ChannelInfoProto logoUrl\n         * @property {boolean|null} [isPrimary] ChannelInfoProto isPrimary\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a ChannelInfoProto.\n         * @memberof channels\n         * @interface IChannelInfoProto\n         * @augments channels.ChannelInfoProto.$Properties\n         * @deprecated Use channels.ChannelInfoProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a ChannelInfoProto.\n         * @typedef {channels.ChannelInfoProto.$Properties} channels.ChannelInfoProto.$Shape\n         */\n\n        /**\n         * Constructs a new ChannelInfoProto.\n         * @memberof channels\n         * @classdesc Represents a ChannelInfoProto.\n         * @constructor\n         * @param {channels.ChannelInfoProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const ChannelInfoProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * ChannelInfoProto channelId.\n         * @member {string} channelId\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.channelId = \"\";\n\n        /**\n         * ChannelInfoProto channelName.\n         * @member {string} channelName\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.channelName = \"\";\n\n        /**\n         * ChannelInfoProto tenantId.\n         * @member {number|Long} tenantId\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * ChannelInfoProto tenantName.\n         * @member {string} tenantName\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.tenantName = \"\";\n\n        /**\n         * ChannelInfoProto hasLogo.\n         * @member {boolean} hasLogo\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.hasLogo = false;\n\n        /**\n         * ChannelInfoProto status.\n         * @member {string} status\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.status = \"\";\n\n        /**\n         * ChannelInfoProto channel.\n         * @member {string} channel\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.channel = \"\";\n\n        /**\n         * ChannelInfoProto backgroundColor.\n         * @member {string} backgroundColor\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.backgroundColor = \"\";\n\n        /**\n         * ChannelInfoProto logoUrl.\n         * @member {string} logoUrl\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.logoUrl = \"\";\n\n        /**\n         * ChannelInfoProto isPrimary.\n         * @member {boolean} isPrimary\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.isPrimary = false;\n\n        /**\n         * Creates a new ChannelInfoProto instance using the specified properties.\n         * @function create\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {channels.ChannelInfoProto.$Properties=} [properties] Properties to set\n         * @returns {channels.ChannelInfoProto} ChannelInfoProto instance\n         * @type {{\n         *   (properties: channels.ChannelInfoProto.$Shape): channels.ChannelInfoProto & channels.ChannelInfoProto.$Shape;\n         *   (properties?: channels.ChannelInfoProto.$Properties): channels.ChannelInfoProto;\n         * }}\n         */\n        ChannelInfoProto.create = function(properties) {\n            return new ChannelInfoProto(properties);\n        };\n\n        /**\n         * Encodes the specified ChannelInfoProto message. Does not implicitly {@link channels.ChannelInfoProto.verify|verify} messages.\n         * @function encode\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {channels.ChannelInfoProto.$Properties} message ChannelInfoProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelInfoProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.channelId != null && $Object.hasOwnProperty.call(message, \"channelId\") && message.channelId !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.channelId);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.channelName);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\") && message.tenantName !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.tenantName);\n            if (message.hasLogo != null && $Object.hasOwnProperty.call(message, \"hasLogo\") && message.hasLogo !== false)\n                writer.uint32(/* id 5, wireType 0 =*/40).bool(message.hasLogo);\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\") && message.status !== \"\")\n                writer.uint32(/* id 6, wireType 2 =*/50).string(message.status);\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\") && message.channel !== \"\")\n                writer.uint32(/* id 7, wireType 2 =*/58).string(message.channel);\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\") && message.backgroundColor !== \"\")\n                writer.uint32(/* id 10, wireType 2 =*/82).string(message.backgroundColor);\n            if (message.logoUrl != null && $Object.hasOwnProperty.call(message, \"logoUrl\") && message.logoUrl !== \"\")\n                writer.uint32(/* id 11, wireType 2 =*/90).string(message.logoUrl);\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\") && message.isPrimary !== false)\n                writer.uint32(/* id 12, wireType 0 =*/96).bool(message.isPrimary);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified ChannelInfoProto message, length delimited. Does not implicitly {@link channels.ChannelInfoProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {channels.ChannelInfoProto.$Properties} message ChannelInfoProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelInfoProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a ChannelInfoProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {channels.ChannelInfoProto & channels.ChannelInfoProto.$Shape} ChannelInfoProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelInfoProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.channels.ChannelInfoProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelId = value;\n                        else\n                            delete message.channelId;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.tenantName = value;\n                        else\n                            delete message.tenantName;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.hasLogo = value;\n                        else\n                            delete message.hasLogo;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.status = value;\n                        else\n                            delete message.status;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channel = value;\n                        else\n                            delete message.channel;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.backgroundColor = value;\n                        else\n                            delete message.backgroundColor;\n                        continue;\n                    }\n                case 11: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.logoUrl = value;\n                        else\n                            delete message.logoUrl;\n                        continue;\n                    }\n                case 12: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isPrimary = value;\n                        else\n                            delete message.isPrimary;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a ChannelInfoProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {channels.ChannelInfoProto & channels.ChannelInfoProto.$Shape} ChannelInfoProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelInfoProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a ChannelInfoProto message.\n         * @function verify\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        ChannelInfoProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.channelId != null && $Object.hasOwnProperty.call(message, \"channelId\"))\n                if (!$util.isString(message.channelId))\n                    return \"channelId: string expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\"))\n                if (!$util.isString(message.tenantName))\n                    return \"tenantName: string expected\";\n            if (message.hasLogo != null && $Object.hasOwnProperty.call(message, \"hasLogo\"))\n                if (typeof message.hasLogo !== \"boolean\")\n                    return \"hasLogo: boolean expected\";\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\"))\n                if (!$util.isString(message.status))\n                    return \"status: string expected\";\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\"))\n                if (!$util.isString(message.channel))\n                    return \"channel: string expected\";\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\"))\n                if (!$util.isString(message.backgroundColor))\n                    return \"backgroundColor: string expected\";\n            if (message.logoUrl != null && $Object.hasOwnProperty.call(message, \"logoUrl\"))\n                if (!$util.isString(message.logoUrl))\n                    return \"logoUrl: string expected\";\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\"))\n                if (typeof message.isPrimary !== \"boolean\")\n                    return \"isPrimary: boolean expected\";\n            return null;\n        };\n\n        /**\n         * Creates a ChannelInfoProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {channels.ChannelInfoProto} ChannelInfoProto\n         */\n        ChannelInfoProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.channels.ChannelInfoProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".channels.ChannelInfoProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.channels.ChannelInfoProto();\n            if (object.channelId != null)\n                if (typeof object.channelId !== \"string\" || object.channelId.length)\n                    message.channelId = $String(object.channelId);\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.tenantName != null)\n                if (typeof object.tenantName !== \"string\" || object.tenantName.length)\n                    message.tenantName = $String(object.tenantName);\n            if (object.hasLogo != null)\n                if (object.hasLogo)\n                    message.hasLogo = $Boolean(object.hasLogo);\n            if (object.status != null)\n                if (typeof object.status !== \"string\" || object.status.length)\n                    message.status = $String(object.status);\n            if (object.channel != null)\n                if (typeof object.channel !== \"string\" || object.channel.length)\n                    message.channel = $String(object.channel);\n            if (object.backgroundColor != null)\n                if (typeof object.backgroundColor !== \"string\" || object.backgroundColor.length)\n                    message.backgroundColor = $String(object.backgroundColor);\n            if (object.logoUrl != null)\n                if (typeof object.logoUrl !== \"string\" || object.logoUrl.length)\n                    message.logoUrl = $String(object.logoUrl);\n            if (object.isPrimary != null)\n                if (object.isPrimary)\n                    message.isPrimary = $Boolean(object.isPrimary);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a ChannelInfoProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {channels.ChannelInfoProto} message ChannelInfoProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        ChannelInfoProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.channelId = \"\";\n                object.channelName = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.tenantName = \"\";\n                object.hasLogo = false;\n                object.status = \"\";\n                object.channel = \"\";\n                object.backgroundColor = \"\";\n                object.logoUrl = \"\";\n                object.isPrimary = false;\n            }\n            if (message.channelId != null && $Object.hasOwnProperty.call(message, \"channelId\"))\n                object.channelId = message.channelId;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\"))\n                object.tenantName = message.tenantName;\n            if (message.hasLogo != null && $Object.hasOwnProperty.call(message, \"hasLogo\"))\n                object.hasLogo = message.hasLogo;\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\"))\n                object.status = message.status;\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\"))\n                object.channel = message.channel;\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\"))\n                object.backgroundColor = message.backgroundColor;\n            if (message.logoUrl != null && $Object.hasOwnProperty.call(message, \"logoUrl\"))\n                object.logoUrl = message.logoUrl;\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\"))\n                object.isPrimary = message.isPrimary;\n            return object;\n        };\n\n        /**\n         * Converts this ChannelInfoProto to JSON.\n         * @function toJSON\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        ChannelInfoProto.prototype.toJSON = function() {\n            return ChannelInfoProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for ChannelInfoProto\n         * @function getTypeUrl\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        ChannelInfoProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/channels.ChannelInfoProto\";\n        };\n\n        return ChannelInfoProto;\n    })();\n\n    return channels;\n})();\n\nexport const tokens = $root.tokens = (() => {\n\n    /**\n     * Namespace tokens.\n     * @exports tokens\n     * @namespace\n     */\n    const tokens = {};\n\n    tokens.WorkerConnectionProto = (function() {\n\n        /**\n         * Properties of a WorkerConnectionProto.\n         * @typedef {Object} tokens.WorkerConnectionProto.$Properties\n         * @property {string|null} [workerUrl] WorkerConnectionProto workerUrl\n         * @property {string|null} [channelName] WorkerConnectionProto channelName\n         * @property {string|null} [token] WorkerConnectionProto token\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a WorkerConnectionProto.\n         * @memberof tokens\n         * @interface IWorkerConnectionProto\n         * @augments tokens.WorkerConnectionProto.$Properties\n         * @deprecated Use tokens.WorkerConnectionProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a WorkerConnectionProto.\n         * @typedef {tokens.WorkerConnectionProto.$Properties} tokens.WorkerConnectionProto.$Shape\n         */\n\n        /**\n         * Constructs a new WorkerConnectionProto.\n         * @memberof tokens\n         * @classdesc Represents a WorkerConnectionProto.\n         * @constructor\n         * @param {tokens.WorkerConnectionProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const WorkerConnectionProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * WorkerConnectionProto workerUrl.\n         * @member {string} workerUrl\n         * @memberof tokens.WorkerConnectionProto\n         * @instance\n         */\n        WorkerConnectionProto.prototype.workerUrl = \"\";\n\n        /**\n         * WorkerConnectionProto channelName.\n         * @member {string} channelName\n         * @memberof tokens.WorkerConnectionProto\n         * @instance\n         */\n        WorkerConnectionProto.prototype.channelName = \"\";\n\n        /**\n         * WorkerConnectionProto token.\n         * @member {string} token\n         * @memberof tokens.WorkerConnectionProto\n         * @instance\n         */\n        WorkerConnectionProto.prototype.token = \"\";\n\n        /**\n         * Creates a new WorkerConnectionProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {tokens.WorkerConnectionProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.WorkerConnectionProto} WorkerConnectionProto instance\n         * @type {{\n         *   (properties: tokens.WorkerConnectionProto.$Shape): tokens.WorkerConnectionProto & tokens.WorkerConnectionProto.$Shape;\n         *   (properties?: tokens.WorkerConnectionProto.$Properties): tokens.WorkerConnectionProto;\n         * }}\n         */\n        WorkerConnectionProto.create = function(properties) {\n            return new WorkerConnectionProto(properties);\n        };\n\n        /**\n         * Encodes the specified WorkerConnectionProto message. Does not implicitly {@link tokens.WorkerConnectionProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {tokens.WorkerConnectionProto.$Properties} message WorkerConnectionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        WorkerConnectionProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.workerUrl != null && $Object.hasOwnProperty.call(message, \"workerUrl\") && message.workerUrl !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.workerUrl);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.channelName);\n            if (message.token != null && $Object.hasOwnProperty.call(message, \"token\") && message.token !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.token);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified WorkerConnectionProto message, length delimited. Does not implicitly {@link tokens.WorkerConnectionProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {tokens.WorkerConnectionProto.$Properties} message WorkerConnectionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        WorkerConnectionProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a WorkerConnectionProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.WorkerConnectionProto & tokens.WorkerConnectionProto.$Shape} WorkerConnectionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        WorkerConnectionProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.WorkerConnectionProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.workerUrl = value;\n                        else\n                            delete message.workerUrl;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.token = value;\n                        else\n                            delete message.token;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a WorkerConnectionProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.WorkerConnectionProto & tokens.WorkerConnectionProto.$Shape} WorkerConnectionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        WorkerConnectionProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a WorkerConnectionProto message.\n         * @function verify\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        WorkerConnectionProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.workerUrl != null && $Object.hasOwnProperty.call(message, \"workerUrl\"))\n                if (!$util.isString(message.workerUrl))\n                    return \"workerUrl: string expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.token != null && $Object.hasOwnProperty.call(message, \"token\"))\n                if (!$util.isString(message.token))\n                    return \"token: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a WorkerConnectionProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.WorkerConnectionProto} WorkerConnectionProto\n         */\n        WorkerConnectionProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.WorkerConnectionProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.WorkerConnectionProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.WorkerConnectionProto();\n            if (object.workerUrl != null)\n                if (typeof object.workerUrl !== \"string\" || object.workerUrl.length)\n                    message.workerUrl = $String(object.workerUrl);\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.token != null)\n                if (typeof object.token !== \"string\" || object.token.length)\n                    message.token = $String(object.token);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a WorkerConnectionProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {tokens.WorkerConnectionProto} message WorkerConnectionProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        WorkerConnectionProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.workerUrl = \"\";\n                object.channelName = \"\";\n                object.token = \"\";\n            }\n            if (message.workerUrl != null && $Object.hasOwnProperty.call(message, \"workerUrl\"))\n                object.workerUrl = message.workerUrl;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.token != null && $Object.hasOwnProperty.call(message, \"token\"))\n                object.token = message.token;\n            return object;\n        };\n\n        /**\n         * Converts this WorkerConnectionProto to JSON.\n         * @function toJSON\n         * @memberof tokens.WorkerConnectionProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        WorkerConnectionProto.prototype.toJSON = function() {\n            return WorkerConnectionProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for WorkerConnectionProto\n         * @function getTypeUrl\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        WorkerConnectionProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.WorkerConnectionProto\";\n        };\n\n        return WorkerConnectionProto;\n    })();\n\n    tokens.LanguageOptionProto = (function() {\n\n        /**\n         * Properties of a LanguageOptionProto.\n         * @typedef {Object} tokens.LanguageOptionProto.$Properties\n         * @property {string|null} [code] LanguageOptionProto code\n         * @property {string|null} [name] LanguageOptionProto name\n         * @property {string|null} [nativeName] LanguageOptionProto nativeName\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a LanguageOptionProto.\n         * @memberof tokens\n         * @interface ILanguageOptionProto\n         * @augments tokens.LanguageOptionProto.$Properties\n         * @deprecated Use tokens.LanguageOptionProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a LanguageOptionProto.\n         * @typedef {tokens.LanguageOptionProto.$Properties} tokens.LanguageOptionProto.$Shape\n         */\n\n        /**\n         * Constructs a new LanguageOptionProto.\n         * @memberof tokens\n         * @classdesc Represents a LanguageOptionProto.\n         * @constructor\n         * @param {tokens.LanguageOptionProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const LanguageOptionProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * LanguageOptionProto code.\n         * @member {string} code\n         * @memberof tokens.LanguageOptionProto\n         * @instance\n         */\n        LanguageOptionProto.prototype.code = \"\";\n\n        /**\n         * LanguageOptionProto name.\n         * @member {string} name\n         * @memberof tokens.LanguageOptionProto\n         * @instance\n         */\n        LanguageOptionProto.prototype.name = \"\";\n\n        /**\n         * LanguageOptionProto nativeName.\n         * @member {string} nativeName\n         * @memberof tokens.LanguageOptionProto\n         * @instance\n         */\n        LanguageOptionProto.prototype.nativeName = \"\";\n\n        /**\n         * Creates a new LanguageOptionProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {tokens.LanguageOptionProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.LanguageOptionProto} LanguageOptionProto instance\n         * @type {{\n         *   (properties: tokens.LanguageOptionProto.$Shape): tokens.LanguageOptionProto & tokens.LanguageOptionProto.$Shape;\n         *   (properties?: tokens.LanguageOptionProto.$Properties): tokens.LanguageOptionProto;\n         * }}\n         */\n        LanguageOptionProto.create = function(properties) {\n            return new LanguageOptionProto(properties);\n        };\n\n        /**\n         * Encodes the specified LanguageOptionProto message. Does not implicitly {@link tokens.LanguageOptionProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {tokens.LanguageOptionProto.$Properties} message LanguageOptionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        LanguageOptionProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.code != null && $Object.hasOwnProperty.call(message, \"code\") && message.code !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.code);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.name);\n            if (message.nativeName != null && $Object.hasOwnProperty.call(message, \"nativeName\") && message.nativeName !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.nativeName);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified LanguageOptionProto message, length delimited. Does not implicitly {@link tokens.LanguageOptionProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {tokens.LanguageOptionProto.$Properties} message LanguageOptionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        LanguageOptionProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a LanguageOptionProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.LanguageOptionProto & tokens.LanguageOptionProto.$Shape} LanguageOptionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        LanguageOptionProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.LanguageOptionProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.code = value;\n                        else\n                            delete message.code;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.nativeName = value;\n                        else\n                            delete message.nativeName;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a LanguageOptionProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.LanguageOptionProto & tokens.LanguageOptionProto.$Shape} LanguageOptionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        LanguageOptionProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a LanguageOptionProto message.\n         * @function verify\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        LanguageOptionProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.code != null && $Object.hasOwnProperty.call(message, \"code\"))\n                if (!$util.isString(message.code))\n                    return \"code: string expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.nativeName != null && $Object.hasOwnProperty.call(message, \"nativeName\"))\n                if (!$util.isString(message.nativeName))\n                    return \"nativeName: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a LanguageOptionProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.LanguageOptionProto} LanguageOptionProto\n         */\n        LanguageOptionProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.LanguageOptionProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.LanguageOptionProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.LanguageOptionProto();\n            if (object.code != null)\n                if (typeof object.code !== \"string\" || object.code.length)\n                    message.code = $String(object.code);\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.nativeName != null)\n                if (typeof object.nativeName !== \"string\" || object.nativeName.length)\n                    message.nativeName = $String(object.nativeName);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a LanguageOptionProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {tokens.LanguageOptionProto} message LanguageOptionProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        LanguageOptionProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.code = \"\";\n                object.name = \"\";\n                object.nativeName = \"\";\n            }\n            if (message.code != null && $Object.hasOwnProperty.call(message, \"code\"))\n                object.code = message.code;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.nativeName != null && $Object.hasOwnProperty.call(message, \"nativeName\"))\n                object.nativeName = message.nativeName;\n            return object;\n        };\n\n        /**\n         * Converts this LanguageOptionProto to JSON.\n         * @function toJSON\n         * @memberof tokens.LanguageOptionProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        LanguageOptionProto.prototype.toJSON = function() {\n            return LanguageOptionProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for LanguageOptionProto\n         * @function getTypeUrl\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        LanguageOptionProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.LanguageOptionProto\";\n        };\n\n        return LanguageOptionProto;\n    })();\n\n    tokens.SupportedLanguagesProto = (function() {\n\n        /**\n         * Properties of a SupportedLanguagesProto.\n         * @typedef {Object} tokens.SupportedLanguagesProto.$Properties\n         * @property {Array.<tokens.LanguageOptionProto.$Properties>|null} [languages] SupportedLanguagesProto languages\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a SupportedLanguagesProto.\n         * @memberof tokens\n         * @interface ISupportedLanguagesProto\n         * @augments tokens.SupportedLanguagesProto.$Properties\n         * @deprecated Use tokens.SupportedLanguagesProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a SupportedLanguagesProto.\n         * @typedef {tokens.SupportedLanguagesProto.$Properties} tokens.SupportedLanguagesProto.$Shape\n         */\n\n        /**\n         * Constructs a new SupportedLanguagesProto.\n         * @memberof tokens\n         * @classdesc Represents a SupportedLanguagesProto.\n         * @constructor\n         * @param {tokens.SupportedLanguagesProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const SupportedLanguagesProto = function (properties) {\n            this.languages = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * SupportedLanguagesProto languages.\n         * @member {Array.<tokens.LanguageOptionProto.$Properties>} languages\n         * @memberof tokens.SupportedLanguagesProto\n         * @instance\n         */\n        SupportedLanguagesProto.prototype.languages = $util.emptyArray;\n\n        /**\n         * Creates a new SupportedLanguagesProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {tokens.SupportedLanguagesProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.SupportedLanguagesProto} SupportedLanguagesProto instance\n         * @type {{\n         *   (properties: tokens.SupportedLanguagesProto.$Shape): tokens.SupportedLanguagesProto & tokens.SupportedLanguagesProto.$Shape;\n         *   (properties?: tokens.SupportedLanguagesProto.$Properties): tokens.SupportedLanguagesProto;\n         * }}\n         */\n        SupportedLanguagesProto.create = function(properties) {\n            return new SupportedLanguagesProto(properties);\n        };\n\n        /**\n         * Encodes the specified SupportedLanguagesProto message. Does not implicitly {@link tokens.SupportedLanguagesProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {tokens.SupportedLanguagesProto.$Properties} message SupportedLanguagesProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        SupportedLanguagesProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.languages != null && message.languages.length)\n                for (let i = 0; i < message.languages.length; ++i)\n                    $root.tokens.LanguageOptionProto.encode(message.languages[i], writer.uint32(/* id 1, wireType 2 =*/10).fork(), _depth + 1).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified SupportedLanguagesProto message, length delimited. Does not implicitly {@link tokens.SupportedLanguagesProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {tokens.SupportedLanguagesProto.$Properties} message SupportedLanguagesProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        SupportedLanguagesProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a SupportedLanguagesProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.SupportedLanguagesProto & tokens.SupportedLanguagesProto.$Shape} SupportedLanguagesProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        SupportedLanguagesProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.SupportedLanguagesProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.languages && message.languages.length))\n                            message.languages = [];\n                        message.languages.push($root.tokens.LanguageOptionProto.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a SupportedLanguagesProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.SupportedLanguagesProto & tokens.SupportedLanguagesProto.$Shape} SupportedLanguagesProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        SupportedLanguagesProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a SupportedLanguagesProto message.\n         * @function verify\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        SupportedLanguagesProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.languages != null && $Object.hasOwnProperty.call(message, \"languages\")) {\n                if (!$Array.isArray(message.languages))\n                    return \"languages: array expected\";\n                for (let i = 0; i < message.languages.length; ++i) {\n                    let error = $root.tokens.LanguageOptionProto.verify(message.languages[i], _depth + 1);\n                    if (error)\n                        return \"languages.\" + error;\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates a SupportedLanguagesProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.SupportedLanguagesProto} SupportedLanguagesProto\n         */\n        SupportedLanguagesProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.SupportedLanguagesProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.SupportedLanguagesProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.SupportedLanguagesProto();\n            if (object.languages) {\n                if (!$Array.isArray(object.languages))\n                    throw $TypeError(\".tokens.SupportedLanguagesProto.languages: array expected\");\n                message.languages = $Array(object.languages.length);\n                for (let i = 0; i < object.languages.length; ++i) {\n                    if (!$util.isObject(object.languages[i]))\n                        throw $TypeError(\".tokens.SupportedLanguagesProto.languages: object expected\");\n                    message.languages[i] = $root.tokens.LanguageOptionProto.fromObject(object.languages[i], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a SupportedLanguagesProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {tokens.SupportedLanguagesProto} message SupportedLanguagesProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        SupportedLanguagesProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.languages = [];\n            if (message.languages && message.languages.length) {\n                object.languages = $Array(message.languages.length);\n                for (let j = 0; j < message.languages.length; ++j)\n                    object.languages[j] = $root.tokens.LanguageOptionProto.toObject(message.languages[j], options, _depth + 1);\n            }\n            return object;\n        };\n\n        /**\n         * Converts this SupportedLanguagesProto to JSON.\n         * @function toJSON\n         * @memberof tokens.SupportedLanguagesProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        SupportedLanguagesProto.prototype.toJSON = function() {\n            return SupportedLanguagesProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for SupportedLanguagesProto\n         * @function getTypeUrl\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        SupportedLanguagesProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.SupportedLanguagesProto\";\n        };\n\n        return SupportedLanguagesProto;\n    })();\n\n    tokens.SessionResponseProto = (function() {\n\n        /**\n         * Properties of a SessionResponseProto.\n         * @typedef {Object} tokens.SessionResponseProto.$Properties\n         * @property {string|null} [sessionId] SessionResponseProto sessionId\n         * @property {string|null} [channelName] SessionResponseProto channelName\n         * @property {number|Long|null} [tenantId] SessionResponseProto tenantId\n         * @property {string|null} [status] SessionResponseProto status\n         * @property {number|Long|null} [sessionSeconds] SessionResponseProto sessionSeconds\n         * @property {number|Long|null} [expiresAtUnixMs] SessionResponseProto expiresAtUnixMs\n         * @property {number|Long|null} [remainingSeconds] SessionResponseProto remainingSeconds\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a SessionResponseProto.\n         * @memberof tokens\n         * @interface ISessionResponseProto\n         * @augments tokens.SessionResponseProto.$Properties\n         * @deprecated Use tokens.SessionResponseProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a SessionResponseProto.\n         * @typedef {tokens.SessionResponseProto.$Properties} tokens.SessionResponseProto.$Shape\n         */\n\n        /**\n         * Constructs a new SessionResponseProto.\n         * @memberof tokens\n         * @classdesc Represents a SessionResponseProto.\n         * @constructor\n         * @param {tokens.SessionResponseProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const SessionResponseProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * SessionResponseProto sessionId.\n         * @member {string} sessionId\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.sessionId = \"\";\n\n        /**\n         * SessionResponseProto channelName.\n         * @member {string} channelName\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.channelName = \"\";\n\n        /**\n         * SessionResponseProto tenantId.\n         * @member {number|Long} tenantId\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * SessionResponseProto status.\n         * @member {string} status\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.status = \"\";\n\n        /**\n         * SessionResponseProto sessionSeconds.\n         * @member {number|Long} sessionSeconds\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.sessionSeconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * SessionResponseProto expiresAtUnixMs.\n         * @member {number|Long} expiresAtUnixMs\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.expiresAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * SessionResponseProto remainingSeconds.\n         * @member {number|Long} remainingSeconds\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.remainingSeconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new SessionResponseProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {tokens.SessionResponseProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.SessionResponseProto} SessionResponseProto instance\n         * @type {{\n         *   (properties: tokens.SessionResponseProto.$Shape): tokens.SessionResponseProto & tokens.SessionResponseProto.$Shape;\n         *   (properties?: tokens.SessionResponseProto.$Properties): tokens.SessionResponseProto;\n         * }}\n         */\n        SessionResponseProto.create = function(properties) {\n            return new SessionResponseProto(properties);\n        };\n\n        /**\n         * Encodes the specified SessionResponseProto message. Does not implicitly {@link tokens.SessionResponseProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {tokens.SessionResponseProto.$Properties} message SessionResponseProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        SessionResponseProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\") && message.sessionId !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.sessionId);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.channelName);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\") && message.status !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.status);\n            if (message.sessionSeconds != null && $Object.hasOwnProperty.call(message, \"sessionSeconds\") && (typeof message.sessionSeconds === \"object\" ? message.sessionSeconds.low || message.sessionSeconds.high : message.sessionSeconds !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.sessionSeconds);\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\") && (typeof message.expiresAtUnixMs === \"object\" ? message.expiresAtUnixMs.low || message.expiresAtUnixMs.high : message.expiresAtUnixMs !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.expiresAtUnixMs);\n            if (message.remainingSeconds != null && $Object.hasOwnProperty.call(message, \"remainingSeconds\") && (typeof message.remainingSeconds === \"object\" ? message.remainingSeconds.low || message.remainingSeconds.high : message.remainingSeconds !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.remainingSeconds);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified SessionResponseProto message, length delimited. Does not implicitly {@link tokens.SessionResponseProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {tokens.SessionResponseProto.$Properties} message SessionResponseProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        SessionResponseProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a SessionResponseProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.SessionResponseProto & tokens.SessionResponseProto.$Shape} SessionResponseProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        SessionResponseProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.SessionResponseProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sessionId = value;\n                        else\n                            delete message.sessionId;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.status = value;\n                        else\n                            delete message.status;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.sessionSeconds = value;\n                        else\n                            delete message.sessionSeconds;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAtUnixMs = value;\n                        else\n                            delete message.expiresAtUnixMs;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.remainingSeconds = value;\n                        else\n                            delete message.remainingSeconds;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a SessionResponseProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.SessionResponseProto & tokens.SessionResponseProto.$Shape} SessionResponseProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        SessionResponseProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a SessionResponseProto message.\n         * @function verify\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        SessionResponseProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\"))\n                if (!$util.isString(message.sessionId))\n                    return \"sessionId: string expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\"))\n                if (!$util.isString(message.status))\n                    return \"status: string expected\";\n            if (message.sessionSeconds != null && $Object.hasOwnProperty.call(message, \"sessionSeconds\"))\n                if (!$util.isInteger(message.sessionSeconds) && !(message.sessionSeconds && $util.isInteger(message.sessionSeconds.low) && $util.isInteger(message.sessionSeconds.high)))\n                    return \"sessionSeconds: integer|Long expected\";\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (!$util.isInteger(message.expiresAtUnixMs) && !(message.expiresAtUnixMs && $util.isInteger(message.expiresAtUnixMs.low) && $util.isInteger(message.expiresAtUnixMs.high)))\n                    return \"expiresAtUnixMs: integer|Long expected\";\n            if (message.remainingSeconds != null && $Object.hasOwnProperty.call(message, \"remainingSeconds\"))\n                if (!$util.isInteger(message.remainingSeconds) && !(message.remainingSeconds && $util.isInteger(message.remainingSeconds.low) && $util.isInteger(message.remainingSeconds.high)))\n                    return \"remainingSeconds: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a SessionResponseProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.SessionResponseProto} SessionResponseProto\n         */\n        SessionResponseProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.SessionResponseProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.SessionResponseProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.SessionResponseProto();\n            if (object.sessionId != null)\n                if (typeof object.sessionId !== \"string\" || object.sessionId.length)\n                    message.sessionId = $String(object.sessionId);\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.status != null)\n                if (typeof object.status !== \"string\" || object.status.length)\n                    message.status = $String(object.status);\n            if (object.sessionSeconds != null)\n                if (typeof object.sessionSeconds === \"object\" ? object.sessionSeconds.low || object.sessionSeconds.high : $Number(object.sessionSeconds) !== 0)\n                    if ($util.Long)\n                        message.sessionSeconds = $util.Long.fromValue(object.sessionSeconds, false);\n                    else if (typeof object.sessionSeconds === \"string\")\n                        message.sessionSeconds = $parseInt(object.sessionSeconds, 10);\n                    else if (typeof object.sessionSeconds === \"number\")\n                        message.sessionSeconds = object.sessionSeconds;\n                    else if (typeof object.sessionSeconds === \"object\")\n                        message.sessionSeconds = new $util.LongBits(object.sessionSeconds.low >>> 0, object.sessionSeconds.high >>> 0).toNumber();\n            if (object.expiresAtUnixMs != null)\n                if (typeof object.expiresAtUnixMs === \"object\" ? object.expiresAtUnixMs.low || object.expiresAtUnixMs.high : $Number(object.expiresAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.expiresAtUnixMs = $util.Long.fromValue(object.expiresAtUnixMs, false);\n                    else if (typeof object.expiresAtUnixMs === \"string\")\n                        message.expiresAtUnixMs = $parseInt(object.expiresAtUnixMs, 10);\n                    else if (typeof object.expiresAtUnixMs === \"number\")\n                        message.expiresAtUnixMs = object.expiresAtUnixMs;\n                    else if (typeof object.expiresAtUnixMs === \"object\")\n                        message.expiresAtUnixMs = new $util.LongBits(object.expiresAtUnixMs.low >>> 0, object.expiresAtUnixMs.high >>> 0).toNumber();\n            if (object.remainingSeconds != null)\n                if (typeof object.remainingSeconds === \"object\" ? object.remainingSeconds.low || object.remainingSeconds.high : $Number(object.remainingSeconds) !== 0)\n                    if ($util.Long)\n                        message.remainingSeconds = $util.Long.fromValue(object.remainingSeconds, false);\n                    else if (typeof object.remainingSeconds === \"string\")\n                        message.remainingSeconds = $parseInt(object.remainingSeconds, 10);\n                    else if (typeof object.remainingSeconds === \"number\")\n                        message.remainingSeconds = object.remainingSeconds;\n                    else if (typeof object.remainingSeconds === \"object\")\n                        message.remainingSeconds = new $util.LongBits(object.remainingSeconds.low >>> 0, object.remainingSeconds.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a SessionResponseProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {tokens.SessionResponseProto} message SessionResponseProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        SessionResponseProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.sessionId = \"\";\n                object.channelName = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.status = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.sessionSeconds = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.sessionSeconds = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.remainingSeconds = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.remainingSeconds = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\"))\n                object.sessionId = message.sessionId;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\"))\n                object.status = message.status;\n            if (message.sessionSeconds != null && $Object.hasOwnProperty.call(message, \"sessionSeconds\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.sessionSeconds = typeof message.sessionSeconds === \"number\" ? $BigInt(message.sessionSeconds) : $util.Long.fromBits(message.sessionSeconds.low >>> 0, message.sessionSeconds.high >>> 0, false).toBigInt();\n                else if (typeof message.sessionSeconds === \"number\")\n                    object.sessionSeconds = options.longs === $String ? $String(message.sessionSeconds) : message.sessionSeconds;\n                else\n                    object.sessionSeconds = options.longs === $String ? $util.Long.prototype.toString.call(message.sessionSeconds) : options.longs === $Number ? new $util.LongBits(message.sessionSeconds.low >>> 0, message.sessionSeconds.high >>> 0).toNumber() : message.sessionSeconds;\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAtUnixMs = typeof message.expiresAtUnixMs === \"number\" ? $BigInt(message.expiresAtUnixMs) : $util.Long.fromBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAtUnixMs === \"number\")\n                    object.expiresAtUnixMs = options.longs === $String ? $String(message.expiresAtUnixMs) : message.expiresAtUnixMs;\n                else\n                    object.expiresAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0).toNumber() : message.expiresAtUnixMs;\n            if (message.remainingSeconds != null && $Object.hasOwnProperty.call(message, \"remainingSeconds\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.remainingSeconds = typeof message.remainingSeconds === \"number\" ? $BigInt(message.remainingSeconds) : $util.Long.fromBits(message.remainingSeconds.low >>> 0, message.remainingSeconds.high >>> 0, false).toBigInt();\n                else if (typeof message.remainingSeconds === \"number\")\n                    object.remainingSeconds = options.longs === $String ? $String(message.remainingSeconds) : message.remainingSeconds;\n                else\n                    object.remainingSeconds = options.longs === $String ? $util.Long.prototype.toString.call(message.remainingSeconds) : options.longs === $Number ? new $util.LongBits(message.remainingSeconds.low >>> 0, message.remainingSeconds.high >>> 0).toNumber() : message.remainingSeconds;\n            return object;\n        };\n\n        /**\n         * Converts this SessionResponseProto to JSON.\n         * @function toJSON\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        SessionResponseProto.prototype.toJSON = function() {\n            return SessionResponseProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for SessionResponseProto\n         * @function getTypeUrl\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        SessionResponseProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.SessionResponseProto\";\n        };\n\n        return SessionResponseProto;\n    })();\n\n    tokens.DeepgramTokenProto = (function() {\n\n        /**\n         * Properties of a DeepgramTokenProto.\n         * @typedef {Object} tokens.DeepgramTokenProto.$Properties\n         * @property {string|null} [key] DeepgramTokenProto key\n         * @property {number|Long|null} [expiresAt] DeepgramTokenProto expiresAt\n         * @property {string|null} [channelName] DeepgramTokenProto channelName\n         * @property {string|null} [sessionId] DeepgramTokenProto sessionId\n         * @property {string|null} [callbackUrl] DeepgramTokenProto callbackUrl\n         * @property {string|null} [tag] DeepgramTokenProto tag\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeepgramTokenProto.\n         * @memberof tokens\n         * @interface IDeepgramTokenProto\n         * @augments tokens.DeepgramTokenProto.$Properties\n         * @deprecated Use tokens.DeepgramTokenProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeepgramTokenProto.\n         * @typedef {tokens.DeepgramTokenProto.$Properties} tokens.DeepgramTokenProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeepgramTokenProto.\n         * @memberof tokens\n         * @classdesc Represents a DeepgramTokenProto.\n         * @constructor\n         * @param {tokens.DeepgramTokenProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeepgramTokenProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeepgramTokenProto key.\n         * @member {string} key\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.key = \"\";\n\n        /**\n         * DeepgramTokenProto expiresAt.\n         * @member {number|Long} expiresAt\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.expiresAt = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeepgramTokenProto channelName.\n         * @member {string} channelName\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.channelName = \"\";\n\n        /**\n         * DeepgramTokenProto sessionId.\n         * @member {string} sessionId\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.sessionId = \"\";\n\n        /**\n         * DeepgramTokenProto callbackUrl.\n         * @member {string} callbackUrl\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.callbackUrl = \"\";\n\n        /**\n         * DeepgramTokenProto tag.\n         * @member {string} tag\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.tag = \"\";\n\n        /**\n         * Creates a new DeepgramTokenProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {tokens.DeepgramTokenProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.DeepgramTokenProto} DeepgramTokenProto instance\n         * @type {{\n         *   (properties: tokens.DeepgramTokenProto.$Shape): tokens.DeepgramTokenProto & tokens.DeepgramTokenProto.$Shape;\n         *   (properties?: tokens.DeepgramTokenProto.$Properties): tokens.DeepgramTokenProto;\n         * }}\n         */\n        DeepgramTokenProto.create = function(properties) {\n            return new DeepgramTokenProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeepgramTokenProto message. Does not implicitly {@link tokens.DeepgramTokenProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {tokens.DeepgramTokenProto.$Properties} message DeepgramTokenProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeepgramTokenProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.key != null && $Object.hasOwnProperty.call(message, \"key\") && message.key !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.key);\n            if (message.expiresAt != null && $Object.hasOwnProperty.call(message, \"expiresAt\") && (typeof message.expiresAt === \"object\" ? message.expiresAt.low || message.expiresAt.high : message.expiresAt !== 0))\n                writer.uint32(/* id 2, wireType 0 =*/16).int64(message.expiresAt);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.channelName);\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\") && message.sessionId !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.sessionId);\n            if (message.callbackUrl != null && $Object.hasOwnProperty.call(message, \"callbackUrl\") && message.callbackUrl !== \"\")\n                writer.uint32(/* id 5, wireType 2 =*/42).string(message.callbackUrl);\n            if (message.tag != null && $Object.hasOwnProperty.call(message, \"tag\") && message.tag !== \"\")\n                writer.uint32(/* id 6, wireType 2 =*/50).string(message.tag);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeepgramTokenProto message, length delimited. Does not implicitly {@link tokens.DeepgramTokenProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {tokens.DeepgramTokenProto.$Properties} message DeepgramTokenProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeepgramTokenProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeepgramTokenProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.DeepgramTokenProto & tokens.DeepgramTokenProto.$Shape} DeepgramTokenProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeepgramTokenProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.DeepgramTokenProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.key = value;\n                        else\n                            delete message.key;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAt = value;\n                        else\n                            delete message.expiresAt;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sessionId = value;\n                        else\n                            delete message.sessionId;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.callbackUrl = value;\n                        else\n                            delete message.callbackUrl;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.tag = value;\n                        else\n                            delete message.tag;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeepgramTokenProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.DeepgramTokenProto & tokens.DeepgramTokenProto.$Shape} DeepgramTokenProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeepgramTokenProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeepgramTokenProto message.\n         * @function verify\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeepgramTokenProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.key != null && $Object.hasOwnProperty.call(message, \"key\"))\n                if (!$util.isString(message.key))\n                    return \"key: string expected\";\n            if (message.expiresAt != null && $Object.hasOwnProperty.call(message, \"expiresAt\"))\n                if (!$util.isInteger(message.expiresAt) && !(message.expiresAt && $util.isInteger(message.expiresAt.low) && $util.isInteger(message.expiresAt.high)))\n                    return \"expiresAt: integer|Long expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\"))\n                if (!$util.isString(message.sessionId))\n                    return \"sessionId: string expected\";\n            if (message.callbackUrl != null && $Object.hasOwnProperty.call(message, \"callbackUrl\"))\n                if (!$util.isString(message.callbackUrl))\n                    return \"callbackUrl: string expected\";\n            if (message.tag != null && $Object.hasOwnProperty.call(message, \"tag\"))\n                if (!$util.isString(message.tag))\n                    return \"tag: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeepgramTokenProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.DeepgramTokenProto} DeepgramTokenProto\n         */\n        DeepgramTokenProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.DeepgramTokenProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.DeepgramTokenProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.DeepgramTokenProto();\n            if (object.key != null)\n                if (typeof object.key !== \"string\" || object.key.length)\n                    message.key = $String(object.key);\n            if (object.expiresAt != null)\n                if (typeof object.expiresAt === \"object\" ? object.expiresAt.low || object.expiresAt.high : $Number(object.expiresAt) !== 0)\n                    if ($util.Long)\n                        message.expiresAt = $util.Long.fromValue(object.expiresAt, false);\n                    else if (typeof object.expiresAt === \"string\")\n                        message.expiresAt = $parseInt(object.expiresAt, 10);\n                    else if (typeof object.expiresAt === \"number\")\n                        message.expiresAt = object.expiresAt;\n                    else if (typeof object.expiresAt === \"object\")\n                        message.expiresAt = new $util.LongBits(object.expiresAt.low >>> 0, object.expiresAt.high >>> 0).toNumber();\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.sessionId != null)\n                if (typeof object.sessionId !== \"string\" || object.sessionId.length)\n                    message.sessionId = $String(object.sessionId);\n            if (object.callbackUrl != null)\n                if (typeof object.callbackUrl !== \"string\" || object.callbackUrl.length)\n                    message.callbackUrl = $String(object.callbackUrl);\n            if (object.tag != null)\n                if (typeof object.tag !== \"string\" || object.tag.length)\n                    message.tag = $String(object.tag);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeepgramTokenProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {tokens.DeepgramTokenProto} message DeepgramTokenProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeepgramTokenProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.key = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAt = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAt = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.channelName = \"\";\n                object.sessionId = \"\";\n                object.callbackUrl = \"\";\n                object.tag = \"\";\n            }\n            if (message.key != null && $Object.hasOwnProperty.call(message, \"key\"))\n                object.key = message.key;\n            if (message.expiresAt != null && $Object.hasOwnProperty.call(message, \"expiresAt\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAt = typeof message.expiresAt === \"number\" ? $BigInt(message.expiresAt) : $util.Long.fromBits(message.expiresAt.low >>> 0, message.expiresAt.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAt === \"number\")\n                    object.expiresAt = options.longs === $String ? $String(message.expiresAt) : message.expiresAt;\n                else\n                    object.expiresAt = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAt) : options.longs === $Number ? new $util.LongBits(message.expiresAt.low >>> 0, message.expiresAt.high >>> 0).toNumber() : message.expiresAt;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\"))\n                object.sessionId = message.sessionId;\n            if (message.callbackUrl != null && $Object.hasOwnProperty.call(message, \"callbackUrl\"))\n                object.callbackUrl = message.callbackUrl;\n            if (message.tag != null && $Object.hasOwnProperty.call(message, \"tag\"))\n                object.tag = message.tag;\n            return object;\n        };\n\n        /**\n         * Converts this DeepgramTokenProto to JSON.\n         * @function toJSON\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeepgramTokenProto.prototype.toJSON = function() {\n            return DeepgramTokenProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeepgramTokenProto\n         * @function getTypeUrl\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeepgramTokenProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.DeepgramTokenProto\";\n        };\n\n        return DeepgramTokenProto;\n    })();\n\n    tokens.WorkerTokenClaimsProto = (function() {\n\n        /**\n         * Properties of a WorkerTokenClaimsProto.\n         * @typedef {Object} tokens.WorkerTokenClaimsProto.$Properties\n         * @property {string|null} [sub] WorkerTokenClaimsProto sub\n         * @property {string|null} [channel] WorkerTokenClaimsProto channel\n         * @property {string|null} [role] WorkerTokenClaimsProto role\n         * @property {number|Long|null} [iat] WorkerTokenClaimsProto iat\n         * @property {number|Long|null} [exp] WorkerTokenClaimsProto exp\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a WorkerTokenClaimsProto.\n         * @memberof tokens\n         * @interface IWorkerTokenClaimsProto\n         * @augments tokens.WorkerTokenClaimsProto.$Properties\n         * @deprecated Use tokens.WorkerTokenClaimsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a WorkerTokenClaimsProto.\n         * @typedef {tokens.WorkerTokenClaimsProto.$Properties} tokens.WorkerTokenClaimsProto.$Shape\n         */\n\n        /**\n         * Constructs a new WorkerTokenClaimsProto.\n         * @memberof tokens\n         * @classdesc Represents a WorkerTokenClaimsProto.\n         * @constructor\n         * @param {tokens.WorkerTokenClaimsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const WorkerTokenClaimsProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * WorkerTokenClaimsProto sub.\n         * @member {string} sub\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.sub = \"\";\n\n        /**\n         * WorkerTokenClaimsProto channel.\n         * @member {string} channel\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.channel = \"\";\n\n        /**\n         * WorkerTokenClaimsProto role.\n         * @member {string} role\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.role = \"\";\n\n        /**\n         * WorkerTokenClaimsProto iat.\n         * @member {number|Long} iat\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.iat = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * WorkerTokenClaimsProto exp.\n         * @member {number|Long} exp\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.exp = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new WorkerTokenClaimsProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {tokens.WorkerTokenClaimsProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.WorkerTokenClaimsProto} WorkerTokenClaimsProto instance\n         * @type {{\n         *   (properties: tokens.WorkerTokenClaimsProto.$Shape): tokens.WorkerTokenClaimsProto & tokens.WorkerTokenClaimsProto.$Shape;\n         *   (properties?: tokens.WorkerTokenClaimsProto.$Properties): tokens.WorkerTokenClaimsProto;\n         * }}\n         */\n        WorkerTokenClaimsProto.create = function(properties) {\n            return new WorkerTokenClaimsProto(properties);\n        };\n\n        /**\n         * Encodes the specified WorkerTokenClaimsProto message. Does not implicitly {@link tokens.WorkerTokenClaimsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {tokens.WorkerTokenClaimsProto.$Properties} message WorkerTokenClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        WorkerTokenClaimsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\") && message.sub !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.sub);\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\") && message.channel !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.channel);\n            if (message.role != null && $Object.hasOwnProperty.call(message, \"role\") && message.role !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.role);\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\") && (typeof message.iat === \"object\" ? message.iat.low || message.iat.high : message.iat !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.iat);\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\") && (typeof message.exp === \"object\" ? message.exp.low || message.exp.high : message.exp !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.exp);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified WorkerTokenClaimsProto message, length delimited. Does not implicitly {@link tokens.WorkerTokenClaimsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {tokens.WorkerTokenClaimsProto.$Properties} message WorkerTokenClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        WorkerTokenClaimsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a WorkerTokenClaimsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.WorkerTokenClaimsProto & tokens.WorkerTokenClaimsProto.$Shape} WorkerTokenClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        WorkerTokenClaimsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.WorkerTokenClaimsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sub = value;\n                        else\n                            delete message.sub;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channel = value;\n                        else\n                            delete message.channel;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.role = value;\n                        else\n                            delete message.role;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.iat = value;\n                        else\n                            delete message.iat;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.exp = value;\n                        else\n                            delete message.exp;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a WorkerTokenClaimsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.WorkerTokenClaimsProto & tokens.WorkerTokenClaimsProto.$Shape} WorkerTokenClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        WorkerTokenClaimsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a WorkerTokenClaimsProto message.\n         * @function verify\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        WorkerTokenClaimsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                if (!$util.isString(message.sub))\n                    return \"sub: string expected\";\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\"))\n                if (!$util.isString(message.channel))\n                    return \"channel: string expected\";\n            if (message.role != null && $Object.hasOwnProperty.call(message, \"role\"))\n                if (!$util.isString(message.role))\n                    return \"role: string expected\";\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (!$util.isInteger(message.iat) && !(message.iat && $util.isInteger(message.iat.low) && $util.isInteger(message.iat.high)))\n                    return \"iat: integer|Long expected\";\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (!$util.isInteger(message.exp) && !(message.exp && $util.isInteger(message.exp.low) && $util.isInteger(message.exp.high)))\n                    return \"exp: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a WorkerTokenClaimsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.WorkerTokenClaimsProto} WorkerTokenClaimsProto\n         */\n        WorkerTokenClaimsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.WorkerTokenClaimsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.WorkerTokenClaimsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.WorkerTokenClaimsProto();\n            if (object.sub != null)\n                if (typeof object.sub !== \"string\" || object.sub.length)\n                    message.sub = $String(object.sub);\n            if (object.channel != null)\n                if (typeof object.channel !== \"string\" || object.channel.length)\n                    message.channel = $String(object.channel);\n            if (object.role != null)\n                if (typeof object.role !== \"string\" || object.role.length)\n                    message.role = $String(object.role);\n            if (object.iat != null)\n                if (typeof object.iat === \"object\" ? object.iat.low || object.iat.high : $Number(object.iat) !== 0)\n                    if ($util.Long)\n                        message.iat = $util.Long.fromValue(object.iat, false);\n                    else if (typeof object.iat === \"string\")\n                        message.iat = $parseInt(object.iat, 10);\n                    else if (typeof object.iat === \"number\")\n                        message.iat = object.iat;\n                    else if (typeof object.iat === \"object\")\n                        message.iat = new $util.LongBits(object.iat.low >>> 0, object.iat.high >>> 0).toNumber();\n            if (object.exp != null)\n                if (typeof object.exp === \"object\" ? object.exp.low || object.exp.high : $Number(object.exp) !== 0)\n                    if ($util.Long)\n                        message.exp = $util.Long.fromValue(object.exp, false);\n                    else if (typeof object.exp === \"string\")\n                        message.exp = $parseInt(object.exp, 10);\n                    else if (typeof object.exp === \"number\")\n                        message.exp = object.exp;\n                    else if (typeof object.exp === \"object\")\n                        message.exp = new $util.LongBits(object.exp.low >>> 0, object.exp.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a WorkerTokenClaimsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {tokens.WorkerTokenClaimsProto} message WorkerTokenClaimsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        WorkerTokenClaimsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.sub = \"\";\n                object.channel = \"\";\n                object.role = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.iat = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.iat = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.exp = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.exp = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                object.sub = message.sub;\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\"))\n                object.channel = message.channel;\n            if (message.role != null && $Object.hasOwnProperty.call(message, \"role\"))\n                object.role = message.role;\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.iat = typeof message.iat === \"number\" ? $BigInt(message.iat) : $util.Long.fromBits(message.iat.low >>> 0, message.iat.high >>> 0, false).toBigInt();\n                else if (typeof message.iat === \"number\")\n                    object.iat = options.longs === $String ? $String(message.iat) : message.iat;\n                else\n                    object.iat = options.longs === $String ? $util.Long.prototype.toString.call(message.iat) : options.longs === $Number ? new $util.LongBits(message.iat.low >>> 0, message.iat.high >>> 0).toNumber() : message.iat;\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.exp = typeof message.exp === \"number\" ? $BigInt(message.exp) : $util.Long.fromBits(message.exp.low >>> 0, message.exp.high >>> 0, false).toBigInt();\n                else if (typeof message.exp === \"number\")\n                    object.exp = options.longs === $String ? $String(message.exp) : message.exp;\n                else\n                    object.exp = options.longs === $String ? $util.Long.prototype.toString.call(message.exp) : options.longs === $Number ? new $util.LongBits(message.exp.low >>> 0, message.exp.high >>> 0).toNumber() : message.exp;\n            return object;\n        };\n\n        /**\n         * Converts this WorkerTokenClaimsProto to JSON.\n         * @function toJSON\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        WorkerTokenClaimsProto.prototype.toJSON = function() {\n            return WorkerTokenClaimsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for WorkerTokenClaimsProto\n         * @function getTypeUrl\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        WorkerTokenClaimsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.WorkerTokenClaimsProto\";\n        };\n\n        return WorkerTokenClaimsProto;\n    })();\n\n    tokens.DeviceEnrollmentClaimsProto = (function() {\n\n        /**\n         * Properties of a DeviceEnrollmentClaimsProto.\n         * @typedef {Object} tokens.DeviceEnrollmentClaimsProto.$Properties\n         * @property {string|null} [typ] DeviceEnrollmentClaimsProto typ\n         * @property {string|null} [jti] DeviceEnrollmentClaimsProto jti\n         * @property {number|Long|null} [tid] DeviceEnrollmentClaimsProto tid\n         * @property {string|null} [chn] DeviceEnrollmentClaimsProto chn\n         * @property {string|null} [lbl] DeviceEnrollmentClaimsProto lbl\n         * @property {number|Long|null} [iat] DeviceEnrollmentClaimsProto iat\n         * @property {number|Long|null} [exp] DeviceEnrollmentClaimsProto exp\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceEnrollmentClaimsProto.\n         * @memberof tokens\n         * @interface IDeviceEnrollmentClaimsProto\n         * @augments tokens.DeviceEnrollmentClaimsProto.$Properties\n         * @deprecated Use tokens.DeviceEnrollmentClaimsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceEnrollmentClaimsProto.\n         * @typedef {tokens.DeviceEnrollmentClaimsProto.$Properties} tokens.DeviceEnrollmentClaimsProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceEnrollmentClaimsProto.\n         * @memberof tokens\n         * @classdesc Represents a DeviceEnrollmentClaimsProto.\n         * @constructor\n         * @param {tokens.DeviceEnrollmentClaimsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceEnrollmentClaimsProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceEnrollmentClaimsProto typ.\n         * @member {string} typ\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.typ = \"\";\n\n        /**\n         * DeviceEnrollmentClaimsProto jti.\n         * @member {string} jti\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.jti = \"\";\n\n        /**\n         * DeviceEnrollmentClaimsProto tid.\n         * @member {number|Long} tid\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.tid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceEnrollmentClaimsProto chn.\n         * @member {string} chn\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.chn = \"\";\n\n        /**\n         * DeviceEnrollmentClaimsProto lbl.\n         * @member {string} lbl\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.lbl = \"\";\n\n        /**\n         * DeviceEnrollmentClaimsProto iat.\n         * @member {number|Long} iat\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.iat = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceEnrollmentClaimsProto exp.\n         * @member {number|Long} exp\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.exp = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceEnrollmentClaimsProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {tokens.DeviceEnrollmentClaimsProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.DeviceEnrollmentClaimsProto} DeviceEnrollmentClaimsProto instance\n         * @type {{\n         *   (properties: tokens.DeviceEnrollmentClaimsProto.$Shape): tokens.DeviceEnrollmentClaimsProto & tokens.DeviceEnrollmentClaimsProto.$Shape;\n         *   (properties?: tokens.DeviceEnrollmentClaimsProto.$Properties): tokens.DeviceEnrollmentClaimsProto;\n         * }}\n         */\n        DeviceEnrollmentClaimsProto.create = function(properties) {\n            return new DeviceEnrollmentClaimsProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentClaimsProto message. Does not implicitly {@link tokens.DeviceEnrollmentClaimsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {tokens.DeviceEnrollmentClaimsProto.$Properties} message DeviceEnrollmentClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentClaimsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\") && message.typ !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.typ);\n            if (message.jti != null && $Object.hasOwnProperty.call(message, \"jti\") && message.jti !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.jti);\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\") && (typeof message.tid === \"object\" ? message.tid.low || message.tid.high : message.tid !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tid);\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\") && message.chn !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.chn);\n            if (message.lbl != null && $Object.hasOwnProperty.call(message, \"lbl\") && message.lbl !== \"\")\n                writer.uint32(/* id 5, wireType 2 =*/42).string(message.lbl);\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\") && (typeof message.iat === \"object\" ? message.iat.low || message.iat.high : message.iat !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.iat);\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\") && (typeof message.exp === \"object\" ? message.exp.low || message.exp.high : message.exp !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.exp);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentClaimsProto message, length delimited. Does not implicitly {@link tokens.DeviceEnrollmentClaimsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {tokens.DeviceEnrollmentClaimsProto.$Properties} message DeviceEnrollmentClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentClaimsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentClaimsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.DeviceEnrollmentClaimsProto & tokens.DeviceEnrollmentClaimsProto.$Shape} DeviceEnrollmentClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentClaimsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.DeviceEnrollmentClaimsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.typ = value;\n                        else\n                            delete message.typ;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.jti = value;\n                        else\n                            delete message.jti;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tid = value;\n                        else\n                            delete message.tid;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.chn = value;\n                        else\n                            delete message.chn;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lbl = value;\n                        else\n                            delete message.lbl;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.iat = value;\n                        else\n                            delete message.iat;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.exp = value;\n                        else\n                            delete message.exp;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentClaimsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.DeviceEnrollmentClaimsProto & tokens.DeviceEnrollmentClaimsProto.$Shape} DeviceEnrollmentClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentClaimsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceEnrollmentClaimsProto message.\n         * @function verify\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceEnrollmentClaimsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                if (!$util.isString(message.typ))\n                    return \"typ: string expected\";\n            if (message.jti != null && $Object.hasOwnProperty.call(message, \"jti\"))\n                if (!$util.isString(message.jti))\n                    return \"jti: string expected\";\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\"))\n                if (!$util.isInteger(message.tid) && !(message.tid && $util.isInteger(message.tid.low) && $util.isInteger(message.tid.high)))\n                    return \"tid: integer|Long expected\";\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\"))\n                if (!$util.isString(message.chn))\n                    return \"chn: string expected\";\n            if (message.lbl != null && $Object.hasOwnProperty.call(message, \"lbl\"))\n                if (!$util.isString(message.lbl))\n                    return \"lbl: string expected\";\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (!$util.isInteger(message.iat) && !(message.iat && $util.isInteger(message.iat.low) && $util.isInteger(message.iat.high)))\n                    return \"iat: integer|Long expected\";\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (!$util.isInteger(message.exp) && !(message.exp && $util.isInteger(message.exp.low) && $util.isInteger(message.exp.high)))\n                    return \"exp: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceEnrollmentClaimsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.DeviceEnrollmentClaimsProto} DeviceEnrollmentClaimsProto\n         */\n        DeviceEnrollmentClaimsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.DeviceEnrollmentClaimsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.DeviceEnrollmentClaimsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.DeviceEnrollmentClaimsProto();\n            if (object.typ != null)\n                if (typeof object.typ !== \"string\" || object.typ.length)\n                    message.typ = $String(object.typ);\n            if (object.jti != null)\n                if (typeof object.jti !== \"string\" || object.jti.length)\n                    message.jti = $String(object.jti);\n            if (object.tid != null)\n                if (typeof object.tid === \"object\" ? object.tid.low || object.tid.high : $Number(object.tid) !== 0)\n                    if ($util.Long)\n                        message.tid = $util.Long.fromValue(object.tid, false);\n                    else if (typeof object.tid === \"string\")\n                        message.tid = $parseInt(object.tid, 10);\n                    else if (typeof object.tid === \"number\")\n                        message.tid = object.tid;\n                    else if (typeof object.tid === \"object\")\n                        message.tid = new $util.LongBits(object.tid.low >>> 0, object.tid.high >>> 0).toNumber();\n            if (object.chn != null)\n                if (typeof object.chn !== \"string\" || object.chn.length)\n                    message.chn = $String(object.chn);\n            if (object.lbl != null)\n                if (typeof object.lbl !== \"string\" || object.lbl.length)\n                    message.lbl = $String(object.lbl);\n            if (object.iat != null)\n                if (typeof object.iat === \"object\" ? object.iat.low || object.iat.high : $Number(object.iat) !== 0)\n                    if ($util.Long)\n                        message.iat = $util.Long.fromValue(object.iat, false);\n                    else if (typeof object.iat === \"string\")\n                        message.iat = $parseInt(object.iat, 10);\n                    else if (typeof object.iat === \"number\")\n                        message.iat = object.iat;\n                    else if (typeof object.iat === \"object\")\n                        message.iat = new $util.LongBits(object.iat.low >>> 0, object.iat.high >>> 0).toNumber();\n            if (object.exp != null)\n                if (typeof object.exp === \"object\" ? object.exp.low || object.exp.high : $Number(object.exp) !== 0)\n                    if ($util.Long)\n                        message.exp = $util.Long.fromValue(object.exp, false);\n                    else if (typeof object.exp === \"string\")\n                        message.exp = $parseInt(object.exp, 10);\n                    else if (typeof object.exp === \"number\")\n                        message.exp = object.exp;\n                    else if (typeof object.exp === \"object\")\n                        message.exp = new $util.LongBits(object.exp.low >>> 0, object.exp.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceEnrollmentClaimsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {tokens.DeviceEnrollmentClaimsProto} message DeviceEnrollmentClaimsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceEnrollmentClaimsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.typ = \"\";\n                object.jti = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tid = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tid = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.chn = \"\";\n                object.lbl = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.iat = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.iat = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.exp = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.exp = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                object.typ = message.typ;\n            if (message.jti != null && $Object.hasOwnProperty.call(message, \"jti\"))\n                object.jti = message.jti;\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tid = typeof message.tid === \"number\" ? $BigInt(message.tid) : $util.Long.fromBits(message.tid.low >>> 0, message.tid.high >>> 0, false).toBigInt();\n                else if (typeof message.tid === \"number\")\n                    object.tid = options.longs === $String ? $String(message.tid) : message.tid;\n                else\n                    object.tid = options.longs === $String ? $util.Long.prototype.toString.call(message.tid) : options.longs === $Number ? new $util.LongBits(message.tid.low >>> 0, message.tid.high >>> 0).toNumber() : message.tid;\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\"))\n                object.chn = message.chn;\n            if (message.lbl != null && $Object.hasOwnProperty.call(message, \"lbl\"))\n                object.lbl = message.lbl;\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.iat = typeof message.iat === \"number\" ? $BigInt(message.iat) : $util.Long.fromBits(message.iat.low >>> 0, message.iat.high >>> 0, false).toBigInt();\n                else if (typeof message.iat === \"number\")\n                    object.iat = options.longs === $String ? $String(message.iat) : message.iat;\n                else\n                    object.iat = options.longs === $String ? $util.Long.prototype.toString.call(message.iat) : options.longs === $Number ? new $util.LongBits(message.iat.low >>> 0, message.iat.high >>> 0).toNumber() : message.iat;\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.exp = typeof message.exp === \"number\" ? $BigInt(message.exp) : $util.Long.fromBits(message.exp.low >>> 0, message.exp.high >>> 0, false).toBigInt();\n                else if (typeof message.exp === \"number\")\n                    object.exp = options.longs === $String ? $String(message.exp) : message.exp;\n                else\n                    object.exp = options.longs === $String ? $util.Long.prototype.toString.call(message.exp) : options.longs === $Number ? new $util.LongBits(message.exp.low >>> 0, message.exp.high >>> 0).toNumber() : message.exp;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceEnrollmentClaimsProto to JSON.\n         * @function toJSON\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceEnrollmentClaimsProto.prototype.toJSON = function() {\n            return DeviceEnrollmentClaimsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceEnrollmentClaimsProto\n         * @function getTypeUrl\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceEnrollmentClaimsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.DeviceEnrollmentClaimsProto\";\n        };\n\n        return DeviceEnrollmentClaimsProto;\n    })();\n\n    tokens.DeviceAuthClaimsProto = (function() {\n\n        /**\n         * Properties of a DeviceAuthClaimsProto.\n         * @typedef {Object} tokens.DeviceAuthClaimsProto.$Properties\n         * @property {string|null} [typ] DeviceAuthClaimsProto typ\n         * @property {string|null} [sub] DeviceAuthClaimsProto sub\n         * @property {number|Long|null} [tid] DeviceAuthClaimsProto tid\n         * @property {string|null} [chn] DeviceAuthClaimsProto chn\n         * @property {number|Long|null} [iat] DeviceAuthClaimsProto iat\n         * @property {number|Long|null} [exp] DeviceAuthClaimsProto exp\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceAuthClaimsProto.\n         * @memberof tokens\n         * @interface IDeviceAuthClaimsProto\n         * @augments tokens.DeviceAuthClaimsProto.$Properties\n         * @deprecated Use tokens.DeviceAuthClaimsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceAuthClaimsProto.\n         * @typedef {tokens.DeviceAuthClaimsProto.$Properties} tokens.DeviceAuthClaimsProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceAuthClaimsProto.\n         * @memberof tokens\n         * @classdesc Represents a DeviceAuthClaimsProto.\n         * @constructor\n         * @param {tokens.DeviceAuthClaimsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceAuthClaimsProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceAuthClaimsProto typ.\n         * @member {string} typ\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.typ = \"\";\n\n        /**\n         * DeviceAuthClaimsProto sub.\n         * @member {string} sub\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.sub = \"\";\n\n        /**\n         * DeviceAuthClaimsProto tid.\n         * @member {number|Long} tid\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.tid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceAuthClaimsProto chn.\n         * @member {string} chn\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.chn = \"\";\n\n        /**\n         * DeviceAuthClaimsProto iat.\n         * @member {number|Long} iat\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.iat = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceAuthClaimsProto exp.\n         * @member {number|Long} exp\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.exp = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceAuthClaimsProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {tokens.DeviceAuthClaimsProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.DeviceAuthClaimsProto} DeviceAuthClaimsProto instance\n         * @type {{\n         *   (properties: tokens.DeviceAuthClaimsProto.$Shape): tokens.DeviceAuthClaimsProto & tokens.DeviceAuthClaimsProto.$Shape;\n         *   (properties?: tokens.DeviceAuthClaimsProto.$Properties): tokens.DeviceAuthClaimsProto;\n         * }}\n         */\n        DeviceAuthClaimsProto.create = function(properties) {\n            return new DeviceAuthClaimsProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceAuthClaimsProto message. Does not implicitly {@link tokens.DeviceAuthClaimsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {tokens.DeviceAuthClaimsProto.$Properties} message DeviceAuthClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceAuthClaimsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\") && message.typ !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.typ);\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\") && message.sub !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.sub);\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\") && (typeof message.tid === \"object\" ? message.tid.low || message.tid.high : message.tid !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tid);\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\") && message.chn !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.chn);\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\") && (typeof message.iat === \"object\" ? message.iat.low || message.iat.high : message.iat !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.iat);\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\") && (typeof message.exp === \"object\" ? message.exp.low || message.exp.high : message.exp !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.exp);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceAuthClaimsProto message, length delimited. Does not implicitly {@link tokens.DeviceAuthClaimsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {tokens.DeviceAuthClaimsProto.$Properties} message DeviceAuthClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceAuthClaimsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceAuthClaimsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.DeviceAuthClaimsProto & tokens.DeviceAuthClaimsProto.$Shape} DeviceAuthClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceAuthClaimsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.DeviceAuthClaimsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.typ = value;\n                        else\n                            delete message.typ;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sub = value;\n                        else\n                            delete message.sub;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tid = value;\n                        else\n                            delete message.tid;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.chn = value;\n                        else\n                            delete message.chn;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.iat = value;\n                        else\n                            delete message.iat;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.exp = value;\n                        else\n                            delete message.exp;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceAuthClaimsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.DeviceAuthClaimsProto & tokens.DeviceAuthClaimsProto.$Shape} DeviceAuthClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceAuthClaimsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceAuthClaimsProto message.\n         * @function verify\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceAuthClaimsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                if (!$util.isString(message.typ))\n                    return \"typ: string expected\";\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                if (!$util.isString(message.sub))\n                    return \"sub: string expected\";\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\"))\n                if (!$util.isInteger(message.tid) && !(message.tid && $util.isInteger(message.tid.low) && $util.isInteger(message.tid.high)))\n                    return \"tid: integer|Long expected\";\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\"))\n                if (!$util.isString(message.chn))\n                    return \"chn: string expected\";\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (!$util.isInteger(message.iat) && !(message.iat && $util.isInteger(message.iat.low) && $util.isInteger(message.iat.high)))\n                    return \"iat: integer|Long expected\";\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (!$util.isInteger(message.exp) && !(message.exp && $util.isInteger(message.exp.low) && $util.isInteger(message.exp.high)))\n                    return \"exp: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceAuthClaimsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.DeviceAuthClaimsProto} DeviceAuthClaimsProto\n         */\n        DeviceAuthClaimsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.DeviceAuthClaimsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.DeviceAuthClaimsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.DeviceAuthClaimsProto();\n            if (object.typ != null)\n                if (typeof object.typ !== \"string\" || object.typ.length)\n                    message.typ = $String(object.typ);\n            if (object.sub != null)\n                if (typeof object.sub !== \"string\" || object.sub.length)\n                    message.sub = $String(object.sub);\n            if (object.tid != null)\n                if (typeof object.tid === \"object\" ? object.tid.low || object.tid.high : $Number(object.tid) !== 0)\n                    if ($util.Long)\n                        message.tid = $util.Long.fromValue(object.tid, false);\n                    else if (typeof object.tid === \"string\")\n                        message.tid = $parseInt(object.tid, 10);\n                    else if (typeof object.tid === \"number\")\n                        message.tid = object.tid;\n                    else if (typeof object.tid === \"object\")\n                        message.tid = new $util.LongBits(object.tid.low >>> 0, object.tid.high >>> 0).toNumber();\n            if (object.chn != null)\n                if (typeof object.chn !== \"string\" || object.chn.length)\n                    message.chn = $String(object.chn);\n            if (object.iat != null)\n                if (typeof object.iat === \"object\" ? object.iat.low || object.iat.high : $Number(object.iat) !== 0)\n                    if ($util.Long)\n                        message.iat = $util.Long.fromValue(object.iat, false);\n                    else if (typeof object.iat === \"string\")\n                        message.iat = $parseInt(object.iat, 10);\n                    else if (typeof object.iat === \"number\")\n                        message.iat = object.iat;\n                    else if (typeof object.iat === \"object\")\n                        message.iat = new $util.LongBits(object.iat.low >>> 0, object.iat.high >>> 0).toNumber();\n            if (object.exp != null)\n                if (typeof object.exp === \"object\" ? object.exp.low || object.exp.high : $Number(object.exp) !== 0)\n                    if ($util.Long)\n                        message.exp = $util.Long.fromValue(object.exp, false);\n                    else if (typeof object.exp === \"string\")\n                        message.exp = $parseInt(object.exp, 10);\n                    else if (typeof object.exp === \"number\")\n                        message.exp = object.exp;\n                    else if (typeof object.exp === \"object\")\n                        message.exp = new $util.LongBits(object.exp.low >>> 0, object.exp.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceAuthClaimsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {tokens.DeviceAuthClaimsProto} message DeviceAuthClaimsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceAuthClaimsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.typ = \"\";\n                object.sub = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tid = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tid = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.chn = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.iat = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.iat = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.exp = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.exp = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                object.typ = message.typ;\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                object.sub = message.sub;\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tid = typeof message.tid === \"number\" ? $BigInt(message.tid) : $util.Long.fromBits(message.tid.low >>> 0, message.tid.high >>> 0, false).toBigInt();\n                else if (typeof message.tid === \"number\")\n                    object.tid = options.longs === $String ? $String(message.tid) : message.tid;\n                else\n                    object.tid = options.longs === $String ? $util.Long.prototype.toString.call(message.tid) : options.longs === $Number ? new $util.LongBits(message.tid.low >>> 0, message.tid.high >>> 0).toNumber() : message.tid;\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\"))\n                object.chn = message.chn;\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.iat = typeof message.iat === \"number\" ? $BigInt(message.iat) : $util.Long.fromBits(message.iat.low >>> 0, message.iat.high >>> 0, false).toBigInt();\n                else if (typeof message.iat === \"number\")\n                    object.iat = options.longs === $String ? $String(message.iat) : message.iat;\n                else\n                    object.iat = options.longs === $String ? $util.Long.prototype.toString.call(message.iat) : options.longs === $Number ? new $util.LongBits(message.iat.low >>> 0, message.iat.high >>> 0).toNumber() : message.iat;\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.exp = typeof message.exp === \"number\" ? $BigInt(message.exp) : $util.Long.fromBits(message.exp.low >>> 0, message.exp.high >>> 0, false).toBigInt();\n                else if (typeof message.exp === \"number\")\n                    object.exp = options.longs === $String ? $String(message.exp) : message.exp;\n                else\n                    object.exp = options.longs === $String ? $util.Long.prototype.toString.call(message.exp) : options.longs === $Number ? new $util.LongBits(message.exp.low >>> 0, message.exp.high >>> 0).toNumber() : message.exp;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceAuthClaimsProto to JSON.\n         * @function toJSON\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceAuthClaimsProto.prototype.toJSON = function() {\n            return DeviceAuthClaimsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceAuthClaimsProto\n         * @function getTypeUrl\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceAuthClaimsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.DeviceAuthClaimsProto\";\n        };\n\n        return DeviceAuthClaimsProto;\n    })();\n\n    tokens.UserAuthClaimsProto = (function() {\n\n        /**\n         * Properties of a UserAuthClaimsProto.\n         * @typedef {Object} tokens.UserAuthClaimsProto.$Properties\n         * @property {string|null} [typ] UserAuthClaimsProto typ\n         * @property {string|null} [sub] UserAuthClaimsProto sub\n         * @property {string|null} [email] UserAuthClaimsProto email\n         * @property {string|null} [name] UserAuthClaimsProto name\n         * @property {number|Long|null} [iat] UserAuthClaimsProto iat\n         * @property {number|Long|null} [exp] UserAuthClaimsProto exp\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a UserAuthClaimsProto.\n         * @memberof tokens\n         * @interface IUserAuthClaimsProto\n         * @augments tokens.UserAuthClaimsProto.$Properties\n         * @deprecated Use tokens.UserAuthClaimsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a UserAuthClaimsProto.\n         * @typedef {tokens.UserAuthClaimsProto.$Properties} tokens.UserAuthClaimsProto.$Shape\n         */\n\n        /**\n         * Constructs a new UserAuthClaimsProto.\n         * @memberof tokens\n         * @classdesc Represents a UserAuthClaimsProto.\n         * @constructor\n         * @param {tokens.UserAuthClaimsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const UserAuthClaimsProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * UserAuthClaimsProto typ.\n         * @member {string} typ\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.typ = \"\";\n\n        /**\n         * UserAuthClaimsProto sub.\n         * @member {string} sub\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.sub = \"\";\n\n        /**\n         * UserAuthClaimsProto email.\n         * @member {string} email\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.email = \"\";\n\n        /**\n         * UserAuthClaimsProto name.\n         * @member {string} name\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.name = \"\";\n\n        /**\n         * UserAuthClaimsProto iat.\n         * @member {number|Long} iat\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.iat = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * UserAuthClaimsProto exp.\n         * @member {number|Long} exp\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.exp = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new UserAuthClaimsProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {tokens.UserAuthClaimsProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.UserAuthClaimsProto} UserAuthClaimsProto instance\n         * @type {{\n         *   (properties: tokens.UserAuthClaimsProto.$Shape): tokens.UserAuthClaimsProto & tokens.UserAuthClaimsProto.$Shape;\n         *   (properties?: tokens.UserAuthClaimsProto.$Properties): tokens.UserAuthClaimsProto;\n         * }}\n         */\n        UserAuthClaimsProto.create = function(properties) {\n            return new UserAuthClaimsProto(properties);\n        };\n\n        /**\n         * Encodes the specified UserAuthClaimsProto message. Does not implicitly {@link tokens.UserAuthClaimsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {tokens.UserAuthClaimsProto.$Properties} message UserAuthClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UserAuthClaimsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\") && message.typ !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.typ);\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\") && message.sub !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.sub);\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\") && message.email !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.email);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.name);\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\") && (typeof message.iat === \"object\" ? message.iat.low || message.iat.high : message.iat !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.iat);\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\") && (typeof message.exp === \"object\" ? message.exp.low || message.exp.high : message.exp !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.exp);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified UserAuthClaimsProto message, length delimited. Does not implicitly {@link tokens.UserAuthClaimsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {tokens.UserAuthClaimsProto.$Properties} message UserAuthClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UserAuthClaimsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a UserAuthClaimsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.UserAuthClaimsProto & tokens.UserAuthClaimsProto.$Shape} UserAuthClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UserAuthClaimsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.UserAuthClaimsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.typ = value;\n                        else\n                            delete message.typ;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sub = value;\n                        else\n                            delete message.sub;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.email = value;\n                        else\n                            delete message.email;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.iat = value;\n                        else\n                            delete message.iat;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.exp = value;\n                        else\n                            delete message.exp;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a UserAuthClaimsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.UserAuthClaimsProto & tokens.UserAuthClaimsProto.$Shape} UserAuthClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UserAuthClaimsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a UserAuthClaimsProto message.\n         * @function verify\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        UserAuthClaimsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                if (!$util.isString(message.typ))\n                    return \"typ: string expected\";\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                if (!$util.isString(message.sub))\n                    return \"sub: string expected\";\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\"))\n                if (!$util.isString(message.email))\n                    return \"email: string expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (!$util.isInteger(message.iat) && !(message.iat && $util.isInteger(message.iat.low) && $util.isInteger(message.iat.high)))\n                    return \"iat: integer|Long expected\";\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (!$util.isInteger(message.exp) && !(message.exp && $util.isInteger(message.exp.low) && $util.isInteger(message.exp.high)))\n                    return \"exp: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a UserAuthClaimsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.UserAuthClaimsProto} UserAuthClaimsProto\n         */\n        UserAuthClaimsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.UserAuthClaimsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.UserAuthClaimsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.UserAuthClaimsProto();\n            if (object.typ != null)\n                if (typeof object.typ !== \"string\" || object.typ.length)\n                    message.typ = $String(object.typ);\n            if (object.sub != null)\n                if (typeof object.sub !== \"string\" || object.sub.length)\n                    message.sub = $String(object.sub);\n            if (object.email != null)\n                if (typeof object.email !== \"string\" || object.email.length)\n                    message.email = $String(object.email);\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.iat != null)\n                if (typeof object.iat === \"object\" ? object.iat.low || object.iat.high : $Number(object.iat) !== 0)\n                    if ($util.Long)\n                        message.iat = $util.Long.fromValue(object.iat, false);\n                    else if (typeof object.iat === \"string\")\n                        message.iat = $parseInt(object.iat, 10);\n                    else if (typeof object.iat === \"number\")\n                        message.iat = object.iat;\n                    else if (typeof object.iat === \"object\")\n                        message.iat = new $util.LongBits(object.iat.low >>> 0, object.iat.high >>> 0).toNumber();\n            if (object.exp != null)\n                if (typeof object.exp === \"object\" ? object.exp.low || object.exp.high : $Number(object.exp) !== 0)\n                    if ($util.Long)\n                        message.exp = $util.Long.fromValue(object.exp, false);\n                    else if (typeof object.exp === \"string\")\n                        message.exp = $parseInt(object.exp, 10);\n                    else if (typeof object.exp === \"number\")\n                        message.exp = object.exp;\n                    else if (typeof object.exp === \"object\")\n                        message.exp = new $util.LongBits(object.exp.low >>> 0, object.exp.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a UserAuthClaimsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {tokens.UserAuthClaimsProto} message UserAuthClaimsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        UserAuthClaimsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.typ = \"\";\n                object.sub = \"\";\n                object.email = \"\";\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.iat = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.iat = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.exp = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.exp = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                object.typ = message.typ;\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                object.sub = message.sub;\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\"))\n                object.email = message.email;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.iat = typeof message.iat === \"number\" ? $BigInt(message.iat) : $util.Long.fromBits(message.iat.low >>> 0, message.iat.high >>> 0, false).toBigInt();\n                else if (typeof message.iat === \"number\")\n                    object.iat = options.longs === $String ? $String(message.iat) : message.iat;\n                else\n                    object.iat = options.longs === $String ? $util.Long.prototype.toString.call(message.iat) : options.longs === $Number ? new $util.LongBits(message.iat.low >>> 0, message.iat.high >>> 0).toNumber() : message.iat;\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.exp = typeof message.exp === \"number\" ? $BigInt(message.exp) : $util.Long.fromBits(message.exp.low >>> 0, message.exp.high >>> 0, false).toBigInt();\n                else if (typeof message.exp === \"number\")\n                    object.exp = options.longs === $String ? $String(message.exp) : message.exp;\n                else\n                    object.exp = options.longs === $String ? $util.Long.prototype.toString.call(message.exp) : options.longs === $Number ? new $util.LongBits(message.exp.low >>> 0, message.exp.high >>> 0).toNumber() : message.exp;\n            return object;\n        };\n\n        /**\n         * Converts this UserAuthClaimsProto to JSON.\n         * @function toJSON\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        UserAuthClaimsProto.prototype.toJSON = function() {\n            return UserAuthClaimsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for UserAuthClaimsProto\n         * @function getTypeUrl\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        UserAuthClaimsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.UserAuthClaimsProto\";\n        };\n\n        return UserAuthClaimsProto;\n    })();\n\n    return tokens;\n})();\n\nexport const devices = $root.devices = (() => {\n\n    /**\n     * Namespace devices.\n     * @exports devices\n     * @namespace\n     */\n    const devices = {};\n\n    devices.DeviceProtoRow = (function() {\n\n        /**\n         * Properties of a DeviceProtoRow.\n         * @typedef {Object} devices.DeviceProtoRow.$Properties\n         * @property {string|null} [id] DeviceProtoRow id\n         * @property {number|Long|null} [tenantId] DeviceProtoRow tenantId\n         * @property {string|null} [channelName] DeviceProtoRow channelName\n         * @property {string|null} [label] DeviceProtoRow label\n         * @property {number|Long|null} [createdAtUnixMs] DeviceProtoRow createdAtUnixMs\n         * @property {number|Long|null} [lastUsedUnixMs] DeviceProtoRow lastUsedUnixMs\n         * @property {number|Long|null} [expiresAtUnixMs] DeviceProtoRow expiresAtUnixMs\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceProtoRow.\n         * @memberof devices\n         * @interface IDeviceProtoRow\n         * @augments devices.DeviceProtoRow.$Properties\n         * @deprecated Use devices.DeviceProtoRow.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceProtoRow.\n         * @typedef {devices.DeviceProtoRow.$Properties} devices.DeviceProtoRow.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceProtoRow.\n         * @memberof devices\n         * @classdesc Represents a DeviceProtoRow.\n         * @constructor\n         * @param {devices.DeviceProtoRow.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceProtoRow = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceProtoRow id.\n         * @member {string} id\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.id = \"\";\n\n        /**\n         * DeviceProtoRow tenantId.\n         * @member {number|Long} tenantId\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceProtoRow channelName.\n         * @member {string} channelName\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.channelName = \"\";\n\n        /**\n         * DeviceProtoRow label.\n         * @member {string} label\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.label = \"\";\n\n        /**\n         * DeviceProtoRow createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceProtoRow lastUsedUnixMs.\n         * @member {number|Long} lastUsedUnixMs\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.lastUsedUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceProtoRow expiresAtUnixMs.\n         * @member {number|Long} expiresAtUnixMs\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.expiresAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceProtoRow instance using the specified properties.\n         * @function create\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {devices.DeviceProtoRow.$Properties=} [properties] Properties to set\n         * @returns {devices.DeviceProtoRow} DeviceProtoRow instance\n         * @type {{\n         *   (properties: devices.DeviceProtoRow.$Shape): devices.DeviceProtoRow & devices.DeviceProtoRow.$Shape;\n         *   (properties?: devices.DeviceProtoRow.$Properties): devices.DeviceProtoRow;\n         * }}\n         */\n        DeviceProtoRow.create = function(properties) {\n            return new DeviceProtoRow(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceProtoRow message. Does not implicitly {@link devices.DeviceProtoRow.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {devices.DeviceProtoRow.$Properties} message DeviceProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceProtoRow.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && message.id !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 2, wireType 0 =*/16).int64(message.tenantId);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.channelName);\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\") && message.label !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.label);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.createdAtUnixMs);\n            if (message.lastUsedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUsedUnixMs\") && (typeof message.lastUsedUnixMs === \"object\" ? message.lastUsedUnixMs.low || message.lastUsedUnixMs.high : message.lastUsedUnixMs !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.lastUsedUnixMs);\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\") && (typeof message.expiresAtUnixMs === \"object\" ? message.expiresAtUnixMs.low || message.expiresAtUnixMs.high : message.expiresAtUnixMs !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.expiresAtUnixMs);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceProtoRow message, length delimited. Does not implicitly {@link devices.DeviceProtoRow.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {devices.DeviceProtoRow.$Properties} message DeviceProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceProtoRow.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceProtoRow message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DeviceProtoRow & devices.DeviceProtoRow.$Shape} DeviceProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceProtoRow.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DeviceProtoRow();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.label = value;\n                        else\n                            delete message.label;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.lastUsedUnixMs = value;\n                        else\n                            delete message.lastUsedUnixMs;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAtUnixMs = value;\n                        else\n                            delete message.expiresAtUnixMs;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceProtoRow message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DeviceProtoRow & devices.DeviceProtoRow.$Shape} DeviceProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceProtoRow.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceProtoRow message.\n         * @function verify\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceProtoRow.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isString(message.id))\n                    return \"id: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                if (!$util.isString(message.label))\n                    return \"label: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.lastUsedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUsedUnixMs\"))\n                if (!$util.isInteger(message.lastUsedUnixMs) && !(message.lastUsedUnixMs && $util.isInteger(message.lastUsedUnixMs.low) && $util.isInteger(message.lastUsedUnixMs.high)))\n                    return \"lastUsedUnixMs: integer|Long expected\";\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (!$util.isInteger(message.expiresAtUnixMs) && !(message.expiresAtUnixMs && $util.isInteger(message.expiresAtUnixMs.low) && $util.isInteger(message.expiresAtUnixMs.high)))\n                    return \"expiresAtUnixMs: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceProtoRow message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DeviceProtoRow} DeviceProtoRow\n         */\n        DeviceProtoRow.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DeviceProtoRow)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DeviceProtoRow: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DeviceProtoRow();\n            if (object.id != null)\n                if (typeof object.id !== \"string\" || object.id.length)\n                    message.id = $String(object.id);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.label != null)\n                if (typeof object.label !== \"string\" || object.label.length)\n                    message.label = $String(object.label);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.lastUsedUnixMs != null)\n                if (typeof object.lastUsedUnixMs === \"object\" ? object.lastUsedUnixMs.low || object.lastUsedUnixMs.high : $Number(object.lastUsedUnixMs) !== 0)\n                    if ($util.Long)\n                        message.lastUsedUnixMs = $util.Long.fromValue(object.lastUsedUnixMs, false);\n                    else if (typeof object.lastUsedUnixMs === \"string\")\n                        message.lastUsedUnixMs = $parseInt(object.lastUsedUnixMs, 10);\n                    else if (typeof object.lastUsedUnixMs === \"number\")\n                        message.lastUsedUnixMs = object.lastUsedUnixMs;\n                    else if (typeof object.lastUsedUnixMs === \"object\")\n                        message.lastUsedUnixMs = new $util.LongBits(object.lastUsedUnixMs.low >>> 0, object.lastUsedUnixMs.high >>> 0).toNumber();\n            if (object.expiresAtUnixMs != null)\n                if (typeof object.expiresAtUnixMs === \"object\" ? object.expiresAtUnixMs.low || object.expiresAtUnixMs.high : $Number(object.expiresAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.expiresAtUnixMs = $util.Long.fromValue(object.expiresAtUnixMs, false);\n                    else if (typeof object.expiresAtUnixMs === \"string\")\n                        message.expiresAtUnixMs = $parseInt(object.expiresAtUnixMs, 10);\n                    else if (typeof object.expiresAtUnixMs === \"number\")\n                        message.expiresAtUnixMs = object.expiresAtUnixMs;\n                    else if (typeof object.expiresAtUnixMs === \"object\")\n                        message.expiresAtUnixMs = new $util.LongBits(object.expiresAtUnixMs.low >>> 0, object.expiresAtUnixMs.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceProtoRow message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {devices.DeviceProtoRow} message DeviceProtoRow\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceProtoRow.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.id = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.channelName = \"\";\n                object.label = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.lastUsedUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.lastUsedUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                object.id = message.id;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                object.label = message.label;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.lastUsedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUsedUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.lastUsedUnixMs = typeof message.lastUsedUnixMs === \"number\" ? $BigInt(message.lastUsedUnixMs) : $util.Long.fromBits(message.lastUsedUnixMs.low >>> 0, message.lastUsedUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.lastUsedUnixMs === \"number\")\n                    object.lastUsedUnixMs = options.longs === $String ? $String(message.lastUsedUnixMs) : message.lastUsedUnixMs;\n                else\n                    object.lastUsedUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.lastUsedUnixMs) : options.longs === $Number ? new $util.LongBits(message.lastUsedUnixMs.low >>> 0, message.lastUsedUnixMs.high >>> 0).toNumber() : message.lastUsedUnixMs;\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAtUnixMs = typeof message.expiresAtUnixMs === \"number\" ? $BigInt(message.expiresAtUnixMs) : $util.Long.fromBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAtUnixMs === \"number\")\n                    object.expiresAtUnixMs = options.longs === $String ? $String(message.expiresAtUnixMs) : message.expiresAtUnixMs;\n                else\n                    object.expiresAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0).toNumber() : message.expiresAtUnixMs;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceProtoRow to JSON.\n         * @function toJSON\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceProtoRow.prototype.toJSON = function() {\n            return DeviceProtoRow.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceProtoRow\n         * @function getTypeUrl\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceProtoRow.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DeviceProtoRow\";\n        };\n\n        return DeviceProtoRow;\n    })();\n\n    devices.DevicesProto = (function() {\n\n        /**\n         * Properties of a DevicesProto.\n         * @typedef {Object} devices.DevicesProto.$Properties\n         * @property {number|null} [schemaMinorVersion] DevicesProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] DevicesProto lastModifiedByCommit\n         * @property {Array.<devices.DeviceProtoRow.$Properties>|null} [devices] DevicesProto devices\n         * @property {Object.<string,number|Long>|null} [consumedEnrollmentTokens] DevicesProto consumedEnrollmentTokens\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DevicesProto.\n         * @memberof devices\n         * @interface IDevicesProto\n         * @augments devices.DevicesProto.$Properties\n         * @deprecated Use devices.DevicesProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DevicesProto.\n         * @typedef {devices.DevicesProto.$Properties} devices.DevicesProto.$Shape\n         */\n\n        /**\n         * Constructs a new DevicesProto.\n         * @memberof devices\n         * @classdesc Represents a DevicesProto.\n         * @constructor\n         * @param {devices.DevicesProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DevicesProto = function (properties) {\n            this.devices = [];\n            this.consumedEnrollmentTokens = {};\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DevicesProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof devices.DevicesProto\n         * @instance\n         */\n        DevicesProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * DevicesProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof devices.DevicesProto\n         * @instance\n         */\n        DevicesProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * DevicesProto devices.\n         * @member {Array.<devices.DeviceProtoRow.$Properties>} devices\n         * @memberof devices.DevicesProto\n         * @instance\n         */\n        DevicesProto.prototype.devices = $util.emptyArray;\n\n        /**\n         * DevicesProto consumedEnrollmentTokens.\n         * @member {Object.<string,number|Long>} consumedEnrollmentTokens\n         * @memberof devices.DevicesProto\n         * @instance\n         */\n        DevicesProto.prototype.consumedEnrollmentTokens = $util.emptyObject;\n\n        /**\n         * Creates a new DevicesProto instance using the specified properties.\n         * @function create\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {devices.DevicesProto.$Properties=} [properties] Properties to set\n         * @returns {devices.DevicesProto} DevicesProto instance\n         * @type {{\n         *   (properties: devices.DevicesProto.$Shape): devices.DevicesProto & devices.DevicesProto.$Shape;\n         *   (properties?: devices.DevicesProto.$Properties): devices.DevicesProto;\n         * }}\n         */\n        DevicesProto.create = function(properties) {\n            return new DevicesProto(properties);\n        };\n\n        /**\n         * Encodes the specified DevicesProto message. Does not implicitly {@link devices.DevicesProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {devices.DevicesProto.$Properties} message DevicesProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DevicesProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.devices != null && message.devices.length)\n                for (let i = 0; i < message.devices.length; ++i)\n                    $root.devices.DeviceProtoRow.encode(message.devices[i], writer.uint32(/* id 3, wireType 2 =*/26).fork(), _depth + 1).ldelim();\n            if (message.consumedEnrollmentTokens != null && $Object.hasOwnProperty.call(message, \"consumedEnrollmentTokens\"))\n                for (let keys = $Object.keys(message.consumedEnrollmentTokens), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 4, wireType 2 =*/34).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 0 =*/16).int64(message.consumedEnrollmentTokens[keys[i]]).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DevicesProto message, length delimited. Does not implicitly {@link devices.DevicesProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {devices.DevicesProto.$Properties} message DevicesProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DevicesProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DevicesProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DevicesProto & devices.DevicesProto.$Shape} DevicesProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DevicesProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, key, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DevicesProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.devices && message.devices.length))\n                            message.devices = [];\n                        message.devices.push($root.devices.DeviceProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.consumedEnrollmentTokens === $util.emptyObject)\n                            message.consumedEnrollmentTokens = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = \"\";\n                        value = $util.Long ? $util.Long.fromNumber(0, false) : 0;\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 2)\n                                    break;\n                                key = reader.stringVerify();\n                                continue;\n                            case 2:\n                                if (wireType !== 0)\n                                    break;\n                                value = reader.int64();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        if (key === \"__proto__\")\n                            $util.makeProp(message.consumedEnrollmentTokens, key);\n                        message.consumedEnrollmentTokens[key] = value;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DevicesProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DevicesProto & devices.DevicesProto.$Shape} DevicesProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DevicesProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DevicesProto message.\n         * @function verify\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DevicesProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.devices != null && $Object.hasOwnProperty.call(message, \"devices\")) {\n                if (!$Array.isArray(message.devices))\n                    return \"devices: array expected\";\n                for (let i = 0; i < message.devices.length; ++i) {\n                    let error = $root.devices.DeviceProtoRow.verify(message.devices[i], _depth + 1);\n                    if (error)\n                        return \"devices.\" + error;\n                }\n            }\n            if (message.consumedEnrollmentTokens != null && $Object.hasOwnProperty.call(message, \"consumedEnrollmentTokens\")) {\n                if (!$util.isObject(message.consumedEnrollmentTokens))\n                    return \"consumedEnrollmentTokens: object expected\";\n                let key = $Object.keys(message.consumedEnrollmentTokens);\n                for (let i = 0; i < key.length; ++i)\n                    if (!$util.isInteger(message.consumedEnrollmentTokens[key[i]]) && !(message.consumedEnrollmentTokens[key[i]] && $util.isInteger(message.consumedEnrollmentTokens[key[i]].low) && $util.isInteger(message.consumedEnrollmentTokens[key[i]].high)))\n                        return \"consumedEnrollmentTokens: integer|Long{k:string} expected\";\n            }\n            return null;\n        };\n\n        /**\n         * Creates a DevicesProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DevicesProto} DevicesProto\n         */\n        DevicesProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DevicesProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DevicesProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DevicesProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.devices) {\n                if (!$Array.isArray(object.devices))\n                    throw $TypeError(\".devices.DevicesProto.devices: array expected\");\n                message.devices = $Array(object.devices.length);\n                for (let i = 0; i < object.devices.length; ++i) {\n                    if (!$util.isObject(object.devices[i]))\n                        throw $TypeError(\".devices.DevicesProto.devices: object expected\");\n                    message.devices[i] = $root.devices.DeviceProtoRow.fromObject(object.devices[i], _depth + 1);\n                }\n            }\n            if (object.consumedEnrollmentTokens) {\n                if (!$util.isObject(object.consumedEnrollmentTokens))\n                    throw $TypeError(\".devices.DevicesProto.consumedEnrollmentTokens: object expected\");\n                message.consumedEnrollmentTokens = {};\n                for (let keys = $Object.keys(object.consumedEnrollmentTokens), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.consumedEnrollmentTokens, keys[i]);\n                    if ($util.Long)\n                        message.consumedEnrollmentTokens[keys[i]] = $util.Long.fromValue(object.consumedEnrollmentTokens[keys[i]], false);\n                    else if (typeof object.consumedEnrollmentTokens[keys[i]] === \"string\")\n                        message.consumedEnrollmentTokens[keys[i]] = $parseInt(object.consumedEnrollmentTokens[keys[i]], 10);\n                    else if (typeof object.consumedEnrollmentTokens[keys[i]] === \"number\")\n                        message.consumedEnrollmentTokens[keys[i]] = object.consumedEnrollmentTokens[keys[i]];\n                    else if (typeof object.consumedEnrollmentTokens[keys[i]] === \"object\")\n                        message.consumedEnrollmentTokens[keys[i]] = new $util.LongBits(object.consumedEnrollmentTokens[keys[i]].low >>> 0, object.consumedEnrollmentTokens[keys[i]].high >>> 0).toNumber();\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DevicesProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {devices.DevicesProto} message DevicesProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DevicesProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.devices = [];\n            if (options.objects || options.defaults)\n                object.consumedEnrollmentTokens = {};\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.devices && message.devices.length) {\n                object.devices = $Array(message.devices.length);\n                for (let j = 0; j < message.devices.length; ++j)\n                    object.devices[j] = $root.devices.DeviceProtoRow.toObject(message.devices[j], options, _depth + 1);\n            }\n            let keys2;\n            if (message.consumedEnrollmentTokens && (keys2 = $Object.keys(message.consumedEnrollmentTokens)).length) {\n                object.consumedEnrollmentTokens = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.consumedEnrollmentTokens, keys2[j]);\n                    if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                        object.consumedEnrollmentTokens[keys2[j]] = typeof message.consumedEnrollmentTokens[keys2[j]] === \"number\" ? $BigInt(message.consumedEnrollmentTokens[keys2[j]]) : $util.Long.fromBits(message.consumedEnrollmentTokens[keys2[j]].low >>> 0, message.consumedEnrollmentTokens[keys2[j]].high >>> 0, false).toBigInt();\n                    else if (typeof message.consumedEnrollmentTokens[keys2[j]] === \"number\")\n                        object.consumedEnrollmentTokens[keys2[j]] = options.longs === $String ? $String(message.consumedEnrollmentTokens[keys2[j]]) : message.consumedEnrollmentTokens[keys2[j]];\n                    else\n                        object.consumedEnrollmentTokens[keys2[j]] = options.longs === $String ? $util.Long.prototype.toString.call(message.consumedEnrollmentTokens[keys2[j]]) : options.longs === $Number ? new $util.LongBits(message.consumedEnrollmentTokens[keys2[j]].low >>> 0, message.consumedEnrollmentTokens[keys2[j]].high >>> 0).toNumber() : message.consumedEnrollmentTokens[keys2[j]];\n                }\n            }\n            return object;\n        };\n\n        /**\n         * Converts this DevicesProto to JSON.\n         * @function toJSON\n         * @memberof devices.DevicesProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DevicesProto.prototype.toJSON = function() {\n            return DevicesProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DevicesProto\n         * @function getTypeUrl\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DevicesProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DevicesProto\";\n        };\n\n        return DevicesProto;\n    })();\n\n    devices.CreateDeviceEnrollmentLinkRequestProto = (function() {\n\n        /**\n         * Properties of a CreateDeviceEnrollmentLinkRequestProto.\n         * @typedef {Object} devices.CreateDeviceEnrollmentLinkRequestProto.$Properties\n         * @property {string|null} [channelName] CreateDeviceEnrollmentLinkRequestProto channelName\n         * @property {string|null} [label] CreateDeviceEnrollmentLinkRequestProto label\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a CreateDeviceEnrollmentLinkRequestProto.\n         * @memberof devices\n         * @interface ICreateDeviceEnrollmentLinkRequestProto\n         * @augments devices.CreateDeviceEnrollmentLinkRequestProto.$Properties\n         * @deprecated Use devices.CreateDeviceEnrollmentLinkRequestProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a CreateDeviceEnrollmentLinkRequestProto.\n         * @typedef {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties} devices.CreateDeviceEnrollmentLinkRequestProto.$Shape\n         */\n\n        /**\n         * Constructs a new CreateDeviceEnrollmentLinkRequestProto.\n         * @memberof devices\n         * @classdesc Represents a CreateDeviceEnrollmentLinkRequestProto.\n         * @constructor\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const CreateDeviceEnrollmentLinkRequestProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * CreateDeviceEnrollmentLinkRequestProto channelName.\n         * @member {string} channelName\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @instance\n         */\n        CreateDeviceEnrollmentLinkRequestProto.prototype.channelName = \"\";\n\n        /**\n         * CreateDeviceEnrollmentLinkRequestProto label.\n         * @member {string} label\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @instance\n         */\n        CreateDeviceEnrollmentLinkRequestProto.prototype.label = \"\";\n\n        /**\n         * Creates a new CreateDeviceEnrollmentLinkRequestProto instance using the specified properties.\n         * @function create\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties=} [properties] Properties to set\n         * @returns {devices.CreateDeviceEnrollmentLinkRequestProto} CreateDeviceEnrollmentLinkRequestProto instance\n         * @type {{\n         *   (properties: devices.CreateDeviceEnrollmentLinkRequestProto.$Shape): devices.CreateDeviceEnrollmentLinkRequestProto & devices.CreateDeviceEnrollmentLinkRequestProto.$Shape;\n         *   (properties?: devices.CreateDeviceEnrollmentLinkRequestProto.$Properties): devices.CreateDeviceEnrollmentLinkRequestProto;\n         * }}\n         */\n        CreateDeviceEnrollmentLinkRequestProto.create = function(properties) {\n            return new CreateDeviceEnrollmentLinkRequestProto(properties);\n        };\n\n        /**\n         * Encodes the specified CreateDeviceEnrollmentLinkRequestProto message. Does not implicitly {@link devices.CreateDeviceEnrollmentLinkRequestProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties} message CreateDeviceEnrollmentLinkRequestProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        CreateDeviceEnrollmentLinkRequestProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.channelName);\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\") && message.label !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.label);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified CreateDeviceEnrollmentLinkRequestProto message, length delimited. Does not implicitly {@link devices.CreateDeviceEnrollmentLinkRequestProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties} message CreateDeviceEnrollmentLinkRequestProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        CreateDeviceEnrollmentLinkRequestProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a CreateDeviceEnrollmentLinkRequestProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.CreateDeviceEnrollmentLinkRequestProto & devices.CreateDeviceEnrollmentLinkRequestProto.$Shape} CreateDeviceEnrollmentLinkRequestProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        CreateDeviceEnrollmentLinkRequestProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.CreateDeviceEnrollmentLinkRequestProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.label = value;\n                        else\n                            delete message.label;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a CreateDeviceEnrollmentLinkRequestProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.CreateDeviceEnrollmentLinkRequestProto & devices.CreateDeviceEnrollmentLinkRequestProto.$Shape} CreateDeviceEnrollmentLinkRequestProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        CreateDeviceEnrollmentLinkRequestProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a CreateDeviceEnrollmentLinkRequestProto message.\n         * @function verify\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        CreateDeviceEnrollmentLinkRequestProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                if (!$util.isString(message.label))\n                    return \"label: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a CreateDeviceEnrollmentLinkRequestProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.CreateDeviceEnrollmentLinkRequestProto} CreateDeviceEnrollmentLinkRequestProto\n         */\n        CreateDeviceEnrollmentLinkRequestProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.CreateDeviceEnrollmentLinkRequestProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.CreateDeviceEnrollmentLinkRequestProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.CreateDeviceEnrollmentLinkRequestProto();\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.label != null)\n                if (typeof object.label !== \"string\" || object.label.length)\n                    message.label = $String(object.label);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a CreateDeviceEnrollmentLinkRequestProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto} message CreateDeviceEnrollmentLinkRequestProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        CreateDeviceEnrollmentLinkRequestProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.channelName = \"\";\n                object.label = \"\";\n            }\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                object.label = message.label;\n            return object;\n        };\n\n        /**\n         * Converts this CreateDeviceEnrollmentLinkRequestProto to JSON.\n         * @function toJSON\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        CreateDeviceEnrollmentLinkRequestProto.prototype.toJSON = function() {\n            return CreateDeviceEnrollmentLinkRequestProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for CreateDeviceEnrollmentLinkRequestProto\n         * @function getTypeUrl\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        CreateDeviceEnrollmentLinkRequestProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.CreateDeviceEnrollmentLinkRequestProto\";\n        };\n\n        return CreateDeviceEnrollmentLinkRequestProto;\n    })();\n\n    devices.DeviceEnrollmentLinkProto = (function() {\n\n        /**\n         * Properties of a DeviceEnrollmentLinkProto.\n         * @typedef {Object} devices.DeviceEnrollmentLinkProto.$Properties\n         * @property {string|null} [enrollmentToken] DeviceEnrollmentLinkProto enrollmentToken\n         * @property {string|null} [enrollmentUrl] DeviceEnrollmentLinkProto enrollmentUrl\n         * @property {number|Long|null} [expiresInSeconds] DeviceEnrollmentLinkProto expiresInSeconds\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceEnrollmentLinkProto.\n         * @memberof devices\n         * @interface IDeviceEnrollmentLinkProto\n         * @augments devices.DeviceEnrollmentLinkProto.$Properties\n         * @deprecated Use devices.DeviceEnrollmentLinkProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceEnrollmentLinkProto.\n         * @typedef {devices.DeviceEnrollmentLinkProto.$Properties} devices.DeviceEnrollmentLinkProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceEnrollmentLinkProto.\n         * @memberof devices\n         * @classdesc Represents a DeviceEnrollmentLinkProto.\n         * @constructor\n         * @param {devices.DeviceEnrollmentLinkProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceEnrollmentLinkProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceEnrollmentLinkProto enrollmentToken.\n         * @member {string} enrollmentToken\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @instance\n         */\n        DeviceEnrollmentLinkProto.prototype.enrollmentToken = \"\";\n\n        /**\n         * DeviceEnrollmentLinkProto enrollmentUrl.\n         * @member {string} enrollmentUrl\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @instance\n         */\n        DeviceEnrollmentLinkProto.prototype.enrollmentUrl = \"\";\n\n        /**\n         * DeviceEnrollmentLinkProto expiresInSeconds.\n         * @member {number|Long} expiresInSeconds\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @instance\n         */\n        DeviceEnrollmentLinkProto.prototype.expiresInSeconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceEnrollmentLinkProto instance using the specified properties.\n         * @function create\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {devices.DeviceEnrollmentLinkProto.$Properties=} [properties] Properties to set\n         * @returns {devices.DeviceEnrollmentLinkProto} DeviceEnrollmentLinkProto instance\n         * @type {{\n         *   (properties: devices.DeviceEnrollmentLinkProto.$Shape): devices.DeviceEnrollmentLinkProto & devices.DeviceEnrollmentLinkProto.$Shape;\n         *   (properties?: devices.DeviceEnrollmentLinkProto.$Properties): devices.DeviceEnrollmentLinkProto;\n         * }}\n         */\n        DeviceEnrollmentLinkProto.create = function(properties) {\n            return new DeviceEnrollmentLinkProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentLinkProto message. Does not implicitly {@link devices.DeviceEnrollmentLinkProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {devices.DeviceEnrollmentLinkProto.$Properties} message DeviceEnrollmentLinkProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentLinkProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\") && message.enrollmentToken !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.enrollmentToken);\n            if (message.enrollmentUrl != null && $Object.hasOwnProperty.call(message, \"enrollmentUrl\") && message.enrollmentUrl !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.enrollmentUrl);\n            if (message.expiresInSeconds != null && $Object.hasOwnProperty.call(message, \"expiresInSeconds\") && (typeof message.expiresInSeconds === \"object\" ? message.expiresInSeconds.low || message.expiresInSeconds.high : message.expiresInSeconds !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.expiresInSeconds);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentLinkProto message, length delimited. Does not implicitly {@link devices.DeviceEnrollmentLinkProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {devices.DeviceEnrollmentLinkProto.$Properties} message DeviceEnrollmentLinkProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentLinkProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentLinkProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DeviceEnrollmentLinkProto & devices.DeviceEnrollmentLinkProto.$Shape} DeviceEnrollmentLinkProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentLinkProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DeviceEnrollmentLinkProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.enrollmentToken = value;\n                        else\n                            delete message.enrollmentToken;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.enrollmentUrl = value;\n                        else\n                            delete message.enrollmentUrl;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresInSeconds = value;\n                        else\n                            delete message.expiresInSeconds;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentLinkProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DeviceEnrollmentLinkProto & devices.DeviceEnrollmentLinkProto.$Shape} DeviceEnrollmentLinkProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentLinkProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceEnrollmentLinkProto message.\n         * @function verify\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceEnrollmentLinkProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\"))\n                if (!$util.isString(message.enrollmentToken))\n                    return \"enrollmentToken: string expected\";\n            if (message.enrollmentUrl != null && $Object.hasOwnProperty.call(message, \"enrollmentUrl\"))\n                if (!$util.isString(message.enrollmentUrl))\n                    return \"enrollmentUrl: string expected\";\n            if (message.expiresInSeconds != null && $Object.hasOwnProperty.call(message, \"expiresInSeconds\"))\n                if (!$util.isInteger(message.expiresInSeconds) && !(message.expiresInSeconds && $util.isInteger(message.expiresInSeconds.low) && $util.isInteger(message.expiresInSeconds.high)))\n                    return \"expiresInSeconds: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceEnrollmentLinkProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DeviceEnrollmentLinkProto} DeviceEnrollmentLinkProto\n         */\n        DeviceEnrollmentLinkProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DeviceEnrollmentLinkProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DeviceEnrollmentLinkProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DeviceEnrollmentLinkProto();\n            if (object.enrollmentToken != null)\n                if (typeof object.enrollmentToken !== \"string\" || object.enrollmentToken.length)\n                    message.enrollmentToken = $String(object.enrollmentToken);\n            if (object.enrollmentUrl != null)\n                if (typeof object.enrollmentUrl !== \"string\" || object.enrollmentUrl.length)\n                    message.enrollmentUrl = $String(object.enrollmentUrl);\n            if (object.expiresInSeconds != null)\n                if (typeof object.expiresInSeconds === \"object\" ? object.expiresInSeconds.low || object.expiresInSeconds.high : $Number(object.expiresInSeconds) !== 0)\n                    if ($util.Long)\n                        message.expiresInSeconds = $util.Long.fromValue(object.expiresInSeconds, false);\n                    else if (typeof object.expiresInSeconds === \"string\")\n                        message.expiresInSeconds = $parseInt(object.expiresInSeconds, 10);\n                    else if (typeof object.expiresInSeconds === \"number\")\n                        message.expiresInSeconds = object.expiresInSeconds;\n                    else if (typeof object.expiresInSeconds === \"object\")\n                        message.expiresInSeconds = new $util.LongBits(object.expiresInSeconds.low >>> 0, object.expiresInSeconds.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceEnrollmentLinkProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {devices.DeviceEnrollmentLinkProto} message DeviceEnrollmentLinkProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceEnrollmentLinkProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.enrollmentToken = \"\";\n                object.enrollmentUrl = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresInSeconds = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresInSeconds = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\"))\n                object.enrollmentToken = message.enrollmentToken;\n            if (message.enrollmentUrl != null && $Object.hasOwnProperty.call(message, \"enrollmentUrl\"))\n                object.enrollmentUrl = message.enrollmentUrl;\n            if (message.expiresInSeconds != null && $Object.hasOwnProperty.call(message, \"expiresInSeconds\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresInSeconds = typeof message.expiresInSeconds === \"number\" ? $BigInt(message.expiresInSeconds) : $util.Long.fromBits(message.expiresInSeconds.low >>> 0, message.expiresInSeconds.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresInSeconds === \"number\")\n                    object.expiresInSeconds = options.longs === $String ? $String(message.expiresInSeconds) : message.expiresInSeconds;\n                else\n                    object.expiresInSeconds = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresInSeconds) : options.longs === $Number ? new $util.LongBits(message.expiresInSeconds.low >>> 0, message.expiresInSeconds.high >>> 0).toNumber() : message.expiresInSeconds;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceEnrollmentLinkProto to JSON.\n         * @function toJSON\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceEnrollmentLinkProto.prototype.toJSON = function() {\n            return DeviceEnrollmentLinkProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceEnrollmentLinkProto\n         * @function getTypeUrl\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceEnrollmentLinkProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DeviceEnrollmentLinkProto\";\n        };\n\n        return DeviceEnrollmentLinkProto;\n    })();\n\n    devices.EnrollDeviceRequestProto = (function() {\n\n        /**\n         * Properties of an EnrollDeviceRequestProto.\n         * @typedef {Object} devices.EnrollDeviceRequestProto.$Properties\n         * @property {string|null} [enrollmentToken] EnrollDeviceRequestProto enrollmentToken\n         * @property {string|null} [label] EnrollDeviceRequestProto label\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of an EnrollDeviceRequestProto.\n         * @memberof devices\n         * @interface IEnrollDeviceRequestProto\n         * @augments devices.EnrollDeviceRequestProto.$Properties\n         * @deprecated Use devices.EnrollDeviceRequestProto.$Properties instead.\n         */\n\n        /**\n         * Shape of an EnrollDeviceRequestProto.\n         * @typedef {devices.EnrollDeviceRequestProto.$Properties} devices.EnrollDeviceRequestProto.$Shape\n         */\n\n        /**\n         * Constructs a new EnrollDeviceRequestProto.\n         * @memberof devices\n         * @classdesc Represents an EnrollDeviceRequestProto.\n         * @constructor\n         * @param {devices.EnrollDeviceRequestProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const EnrollDeviceRequestProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * EnrollDeviceRequestProto enrollmentToken.\n         * @member {string} enrollmentToken\n         * @memberof devices.EnrollDeviceRequestProto\n         * @instance\n         */\n        EnrollDeviceRequestProto.prototype.enrollmentToken = \"\";\n\n        /**\n         * EnrollDeviceRequestProto label.\n         * @member {string} label\n         * @memberof devices.EnrollDeviceRequestProto\n         * @instance\n         */\n        EnrollDeviceRequestProto.prototype.label = \"\";\n\n        /**\n         * Creates a new EnrollDeviceRequestProto instance using the specified properties.\n         * @function create\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {devices.EnrollDeviceRequestProto.$Properties=} [properties] Properties to set\n         * @returns {devices.EnrollDeviceRequestProto} EnrollDeviceRequestProto instance\n         * @type {{\n         *   (properties: devices.EnrollDeviceRequestProto.$Shape): devices.EnrollDeviceRequestProto & devices.EnrollDeviceRequestProto.$Shape;\n         *   (properties?: devices.EnrollDeviceRequestProto.$Properties): devices.EnrollDeviceRequestProto;\n         * }}\n         */\n        EnrollDeviceRequestProto.create = function(properties) {\n            return new EnrollDeviceRequestProto(properties);\n        };\n\n        /**\n         * Encodes the specified EnrollDeviceRequestProto message. Does not implicitly {@link devices.EnrollDeviceRequestProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {devices.EnrollDeviceRequestProto.$Properties} message EnrollDeviceRequestProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EnrollDeviceRequestProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\") && message.enrollmentToken !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.enrollmentToken);\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\") && message.label !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.label);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified EnrollDeviceRequestProto message, length delimited. Does not implicitly {@link devices.EnrollDeviceRequestProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {devices.EnrollDeviceRequestProto.$Properties} message EnrollDeviceRequestProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EnrollDeviceRequestProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes an EnrollDeviceRequestProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.EnrollDeviceRequestProto & devices.EnrollDeviceRequestProto.$Shape} EnrollDeviceRequestProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EnrollDeviceRequestProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.EnrollDeviceRequestProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.enrollmentToken = value;\n                        else\n                            delete message.enrollmentToken;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.label = value;\n                        else\n                            delete message.label;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes an EnrollDeviceRequestProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.EnrollDeviceRequestProto & devices.EnrollDeviceRequestProto.$Shape} EnrollDeviceRequestProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EnrollDeviceRequestProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies an EnrollDeviceRequestProto message.\n         * @function verify\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        EnrollDeviceRequestProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\"))\n                if (!$util.isString(message.enrollmentToken))\n                    return \"enrollmentToken: string expected\";\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                if (!$util.isString(message.label))\n                    return \"label: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates an EnrollDeviceRequestProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.EnrollDeviceRequestProto} EnrollDeviceRequestProto\n         */\n        EnrollDeviceRequestProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.EnrollDeviceRequestProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.EnrollDeviceRequestProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.EnrollDeviceRequestProto();\n            if (object.enrollmentToken != null)\n                if (typeof object.enrollmentToken !== \"string\" || object.enrollmentToken.length)\n                    message.enrollmentToken = $String(object.enrollmentToken);\n            if (object.label != null)\n                if (typeof object.label !== \"string\" || object.label.length)\n                    message.label = $String(object.label);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from an EnrollDeviceRequestProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {devices.EnrollDeviceRequestProto} message EnrollDeviceRequestProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        EnrollDeviceRequestProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.enrollmentToken = \"\";\n                object.label = \"\";\n            }\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\"))\n                object.enrollmentToken = message.enrollmentToken;\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                object.label = message.label;\n            return object;\n        };\n\n        /**\n         * Converts this EnrollDeviceRequestProto to JSON.\n         * @function toJSON\n         * @memberof devices.EnrollDeviceRequestProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        EnrollDeviceRequestProto.prototype.toJSON = function() {\n            return EnrollDeviceRequestProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for EnrollDeviceRequestProto\n         * @function getTypeUrl\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        EnrollDeviceRequestProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.EnrollDeviceRequestProto\";\n        };\n\n        return EnrollDeviceRequestProto;\n    })();\n\n    devices.DeviceEnrollmentResultProto = (function() {\n\n        /**\n         * Properties of a DeviceEnrollmentResultProto.\n         * @typedef {Object} devices.DeviceEnrollmentResultProto.$Properties\n         * @property {string|null} [deviceToken] DeviceEnrollmentResultProto deviceToken\n         * @property {string|null} [deviceId] DeviceEnrollmentResultProto deviceId\n         * @property {number|Long|null} [tenantId] DeviceEnrollmentResultProto tenantId\n         * @property {string|null} [tenantName] DeviceEnrollmentResultProto tenantName\n         * @property {string|null} [channelName] DeviceEnrollmentResultProto channelName\n         * @property {string|null} [label] DeviceEnrollmentResultProto label\n         * @property {number|Long|null} [expiresAtUnixMs] DeviceEnrollmentResultProto expiresAtUnixMs\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceEnrollmentResultProto.\n         * @memberof devices\n         * @interface IDeviceEnrollmentResultProto\n         * @augments devices.DeviceEnrollmentResultProto.$Properties\n         * @deprecated Use devices.DeviceEnrollmentResultProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceEnrollmentResultProto.\n         * @typedef {devices.DeviceEnrollmentResultProto.$Properties} devices.DeviceEnrollmentResultProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceEnrollmentResultProto.\n         * @memberof devices\n         * @classdesc Represents a DeviceEnrollmentResultProto.\n         * @constructor\n         * @param {devices.DeviceEnrollmentResultProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceEnrollmentResultProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceEnrollmentResultProto deviceToken.\n         * @member {string} deviceToken\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.deviceToken = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto deviceId.\n         * @member {string} deviceId\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.deviceId = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto tenantId.\n         * @member {number|Long} tenantId\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceEnrollmentResultProto tenantName.\n         * @member {string} tenantName\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.tenantName = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto channelName.\n         * @member {string} channelName\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.channelName = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto label.\n         * @member {string} label\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.label = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto expiresAtUnixMs.\n         * @member {number|Long} expiresAtUnixMs\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.expiresAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceEnrollmentResultProto instance using the specified properties.\n         * @function create\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {devices.DeviceEnrollmentResultProto.$Properties=} [properties] Properties to set\n         * @returns {devices.DeviceEnrollmentResultProto} DeviceEnrollmentResultProto instance\n         * @type {{\n         *   (properties: devices.DeviceEnrollmentResultProto.$Shape): devices.DeviceEnrollmentResultProto & devices.DeviceEnrollmentResultProto.$Shape;\n         *   (properties?: devices.DeviceEnrollmentResultProto.$Properties): devices.DeviceEnrollmentResultProto;\n         * }}\n         */\n        DeviceEnrollmentResultProto.create = function(properties) {\n            return new DeviceEnrollmentResultProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentResultProto message. Does not implicitly {@link devices.DeviceEnrollmentResultProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {devices.DeviceEnrollmentResultProto.$Properties} message DeviceEnrollmentResultProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentResultProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.deviceToken != null && $Object.hasOwnProperty.call(message, \"deviceToken\") && message.deviceToken !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.deviceToken);\n            if (message.deviceId != null && $Object.hasOwnProperty.call(message, \"deviceId\") && message.deviceId !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.deviceId);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\") && message.tenantName !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.tenantName);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 5, wireType 2 =*/42).string(message.channelName);\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\") && message.label !== \"\")\n                writer.uint32(/* id 6, wireType 2 =*/50).string(message.label);\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\") && (typeof message.expiresAtUnixMs === \"object\" ? message.expiresAtUnixMs.low || message.expiresAtUnixMs.high : message.expiresAtUnixMs !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.expiresAtUnixMs);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentResultProto message, length delimited. Does not implicitly {@link devices.DeviceEnrollmentResultProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {devices.DeviceEnrollmentResultProto.$Properties} message DeviceEnrollmentResultProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentResultProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentResultProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DeviceEnrollmentResultProto & devices.DeviceEnrollmentResultProto.$Shape} DeviceEnrollmentResultProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentResultProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DeviceEnrollmentResultProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.deviceToken = value;\n                        else\n                            delete message.deviceToken;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.deviceId = value;\n                        else\n                            delete message.deviceId;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.tenantName = value;\n                        else\n                            delete message.tenantName;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.label = value;\n                        else\n                            delete message.label;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAtUnixMs = value;\n                        else\n                            delete message.expiresAtUnixMs;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentResultProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DeviceEnrollmentResultProto & devices.DeviceEnrollmentResultProto.$Shape} DeviceEnrollmentResultProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentResultProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceEnrollmentResultProto message.\n         * @function verify\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceEnrollmentResultProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.deviceToken != null && $Object.hasOwnProperty.call(message, \"deviceToken\"))\n                if (!$util.isString(message.deviceToken))\n                    return \"deviceToken: string expected\";\n            if (message.deviceId != null && $Object.hasOwnProperty.call(message, \"deviceId\"))\n                if (!$util.isString(message.deviceId))\n                    return \"deviceId: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\"))\n                if (!$util.isString(message.tenantName))\n                    return \"tenantName: string expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                if (!$util.isString(message.label))\n                    return \"label: string expected\";\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (!$util.isInteger(message.expiresAtUnixMs) && !(message.expiresAtUnixMs && $util.isInteger(message.expiresAtUnixMs.low) && $util.isInteger(message.expiresAtUnixMs.high)))\n                    return \"expiresAtUnixMs: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceEnrollmentResultProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DeviceEnrollmentResultProto} DeviceEnrollmentResultProto\n         */\n        DeviceEnrollmentResultProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DeviceEnrollmentResultProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DeviceEnrollmentResultProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DeviceEnrollmentResultProto();\n            if (object.deviceToken != null)\n                if (typeof object.deviceToken !== \"string\" || object.deviceToken.length)\n                    message.deviceToken = $String(object.deviceToken);\n            if (object.deviceId != null)\n                if (typeof object.deviceId !== \"string\" || object.deviceId.length)\n                    message.deviceId = $String(object.deviceId);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.tenantName != null)\n                if (typeof object.tenantName !== \"string\" || object.tenantName.length)\n                    message.tenantName = $String(object.tenantName);\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.label != null)\n                if (typeof object.label !== \"string\" || object.label.length)\n                    message.label = $String(object.label);\n            if (object.expiresAtUnixMs != null)\n                if (typeof object.expiresAtUnixMs === \"object\" ? object.expiresAtUnixMs.low || object.expiresAtUnixMs.high : $Number(object.expiresAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.expiresAtUnixMs = $util.Long.fromValue(object.expiresAtUnixMs, false);\n                    else if (typeof object.expiresAtUnixMs === \"string\")\n                        message.expiresAtUnixMs = $parseInt(object.expiresAtUnixMs, 10);\n                    else if (typeof object.expiresAtUnixMs === \"number\")\n                        message.expiresAtUnixMs = object.expiresAtUnixMs;\n                    else if (typeof object.expiresAtUnixMs === \"object\")\n                        message.expiresAtUnixMs = new $util.LongBits(object.expiresAtUnixMs.low >>> 0, object.expiresAtUnixMs.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceEnrollmentResultProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {devices.DeviceEnrollmentResultProto} message DeviceEnrollmentResultProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceEnrollmentResultProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.deviceToken = \"\";\n                object.deviceId = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.tenantName = \"\";\n                object.channelName = \"\";\n                object.label = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.deviceToken != null && $Object.hasOwnProperty.call(message, \"deviceToken\"))\n                object.deviceToken = message.deviceToken;\n            if (message.deviceId != null && $Object.hasOwnProperty.call(message, \"deviceId\"))\n                object.deviceId = message.deviceId;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\"))\n                object.tenantName = message.tenantName;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                object.label = message.label;\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAtUnixMs = typeof message.expiresAtUnixMs === \"number\" ? $BigInt(message.expiresAtUnixMs) : $util.Long.fromBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAtUnixMs === \"number\")\n                    object.expiresAtUnixMs = options.longs === $String ? $String(message.expiresAtUnixMs) : message.expiresAtUnixMs;\n                else\n                    object.expiresAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0).toNumber() : message.expiresAtUnixMs;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceEnrollmentResultProto to JSON.\n         * @function toJSON\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceEnrollmentResultProto.prototype.toJSON = function() {\n            return DeviceEnrollmentResultProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceEnrollmentResultProto\n         * @function getTypeUrl\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceEnrollmentResultProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DeviceEnrollmentResultProto\";\n        };\n\n        return DeviceEnrollmentResultProto;\n    })();\n\n    devices.DeviceListProto = (function() {\n\n        /**\n         * Properties of a DeviceListProto.\n         * @typedef {Object} devices.DeviceListProto.$Properties\n         * @property {Array.<devices.DeviceProtoRow.$Properties>|null} [devices] DeviceListProto devices\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceListProto.\n         * @memberof devices\n         * @interface IDeviceListProto\n         * @augments devices.DeviceListProto.$Properties\n         * @deprecated Use devices.DeviceListProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceListProto.\n         * @typedef {devices.DeviceListProto.$Properties} devices.DeviceListProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceListProto.\n         * @memberof devices\n         * @classdesc Represents a DeviceListProto.\n         * @constructor\n         * @param {devices.DeviceListProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceListProto = function (properties) {\n            this.devices = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceListProto devices.\n         * @member {Array.<devices.DeviceProtoRow.$Properties>} devices\n         * @memberof devices.DeviceListProto\n         * @instance\n         */\n        DeviceListProto.prototype.devices = $util.emptyArray;\n\n        /**\n         * Creates a new DeviceListProto instance using the specified properties.\n         * @function create\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {devices.DeviceListProto.$Properties=} [properties] Properties to set\n         * @returns {devices.DeviceListProto} DeviceListProto instance\n         * @type {{\n         *   (properties: devices.DeviceListProto.$Shape): devices.DeviceListProto & devices.DeviceListProto.$Shape;\n         *   (properties?: devices.DeviceListProto.$Properties): devices.DeviceListProto;\n         * }}\n         */\n        DeviceListProto.create = function(properties) {\n            return new DeviceListProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceListProto message. Does not implicitly {@link devices.DeviceListProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {devices.DeviceListProto.$Properties} message DeviceListProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceListProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.devices != null && message.devices.length)\n                for (let i = 0; i < message.devices.length; ++i)\n                    $root.devices.DeviceProtoRow.encode(message.devices[i], writer.uint32(/* id 1, wireType 2 =*/10).fork(), _depth + 1).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceListProto message, length delimited. Does not implicitly {@link devices.DeviceListProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {devices.DeviceListProto.$Properties} message DeviceListProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceListProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceListProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DeviceListProto & devices.DeviceListProto.$Shape} DeviceListProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceListProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DeviceListProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.devices && message.devices.length))\n                            message.devices = [];\n                        message.devices.push($root.devices.DeviceProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceListProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DeviceListProto & devices.DeviceListProto.$Shape} DeviceListProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceListProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceListProto message.\n         * @function verify\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceListProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.devices != null && $Object.hasOwnProperty.call(message, \"devices\")) {\n                if (!$Array.isArray(message.devices))\n                    return \"devices: array expected\";\n                for (let i = 0; i < message.devices.length; ++i) {\n                    let error = $root.devices.DeviceProtoRow.verify(message.devices[i], _depth + 1);\n                    if (error)\n                        return \"devices.\" + error;\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates a DeviceListProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DeviceListProto} DeviceListProto\n         */\n        DeviceListProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DeviceListProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DeviceListProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DeviceListProto();\n            if (object.devices) {\n                if (!$Array.isArray(object.devices))\n                    throw $TypeError(\".devices.DeviceListProto.devices: array expected\");\n                message.devices = $Array(object.devices.length);\n                for (let i = 0; i < object.devices.length; ++i) {\n                    if (!$util.isObject(object.devices[i]))\n                        throw $TypeError(\".devices.DeviceListProto.devices: object expected\");\n                    message.devices[i] = $root.devices.DeviceProtoRow.fromObject(object.devices[i], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceListProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {devices.DeviceListProto} message DeviceListProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceListProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.devices = [];\n            if (message.devices && message.devices.length) {\n                object.devices = $Array(message.devices.length);\n                for (let j = 0; j < message.devices.length; ++j)\n                    object.devices[j] = $root.devices.DeviceProtoRow.toObject(message.devices[j], options, _depth + 1);\n            }\n            return object;\n        };\n\n        /**\n         * Converts this DeviceListProto to JSON.\n         * @function toJSON\n         * @memberof devices.DeviceListProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceListProto.prototype.toJSON = function() {\n            return DeviceListProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceListProto\n         * @function getTypeUrl\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceListProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DeviceListProto\";\n        };\n\n        return DeviceListProto;\n    })();\n\n    return devices;\n})();\n\nexport const entitlement = $root.entitlement = (() => {\n\n    /**\n     * Namespace entitlement.\n     * @exports entitlement\n     * @namespace\n     */\n    const entitlement = {};\n\n    /**\n     * EntitlementTransactionType enum.\n     * @name entitlement.EntitlementTransactionType\n     * @enum {number}\n     * @property {number} ENTITLEMENT_TRANSACTION_TYPE_REPLACING=0 ENTITLEMENT_TRANSACTION_TYPE_REPLACING value\n     * @property {number} ENTITLEMENT_TRANSACTION_TYPE_INCREMENTING=1 ENTITLEMENT_TRANSACTION_TYPE_INCREMENTING value\n     * @property {number} ENTITLEMENT_TRANSACTION_TYPE_LEASE=2 ENTITLEMENT_TRANSACTION_TYPE_LEASE value\n     */\n    entitlement.EntitlementTransactionType = (function() {\n        const valuesById = $Object.create(null), values = $Object.create(valuesById);\n        values[valuesById[0] = \"ENTITLEMENT_TRANSACTION_TYPE_REPLACING\"] = 0;\n        values[valuesById[1] = \"ENTITLEMENT_TRANSACTION_TYPE_INCREMENTING\"] = 1;\n        values[valuesById[2] = \"ENTITLEMENT_TRANSACTION_TYPE_LEASE\"] = 2;\n        return values;\n    })();\n\n    entitlement.EntitlementDimensionProto = (function() {\n\n        /**\n         * Properties of an EntitlementDimensionProto.\n         * @typedef {Object} entitlement.EntitlementDimensionProto.$Properties\n         * @property {string|null} [name] EntitlementDimensionProto name\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of an EntitlementDimensionProto.\n         * @memberof entitlement\n         * @interface IEntitlementDimensionProto\n         * @augments entitlement.EntitlementDimensionProto.$Properties\n         * @deprecated Use entitlement.EntitlementDimensionProto.$Properties instead.\n         */\n\n        /**\n         * Shape of an EntitlementDimensionProto.\n         * @typedef {entitlement.EntitlementDimensionProto.$Properties} entitlement.EntitlementDimensionProto.$Shape\n         */\n\n        /**\n         * Constructs a new EntitlementDimensionProto.\n         * @memberof entitlement\n         * @classdesc Represents an EntitlementDimensionProto.\n         * @constructor\n         * @param {entitlement.EntitlementDimensionProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const EntitlementDimensionProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * EntitlementDimensionProto name.\n         * @member {string} name\n         * @memberof entitlement.EntitlementDimensionProto\n         * @instance\n         */\n        EntitlementDimensionProto.prototype.name = \"\";\n\n        /**\n         * Creates a new EntitlementDimensionProto instance using the specified properties.\n         * @function create\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {entitlement.EntitlementDimensionProto.$Properties=} [properties] Properties to set\n         * @returns {entitlement.EntitlementDimensionProto} EntitlementDimensionProto instance\n         * @type {{\n         *   (properties: entitlement.EntitlementDimensionProto.$Shape): entitlement.EntitlementDimensionProto & entitlement.EntitlementDimensionProto.$Shape;\n         *   (properties?: entitlement.EntitlementDimensionProto.$Properties): entitlement.EntitlementDimensionProto;\n         * }}\n         */\n        EntitlementDimensionProto.create = function(properties) {\n            return new EntitlementDimensionProto(properties);\n        };\n\n        /**\n         * Encodes the specified EntitlementDimensionProto message. Does not implicitly {@link entitlement.EntitlementDimensionProto.verify|verify} messages.\n         * @function encode\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {entitlement.EntitlementDimensionProto.$Properties} message EntitlementDimensionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementDimensionProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified EntitlementDimensionProto message, length delimited. Does not implicitly {@link entitlement.EntitlementDimensionProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {entitlement.EntitlementDimensionProto.$Properties} message EntitlementDimensionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementDimensionProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes an EntitlementDimensionProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {entitlement.EntitlementDimensionProto & entitlement.EntitlementDimensionProto.$Shape} EntitlementDimensionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementDimensionProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.entitlement.EntitlementDimensionProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes an EntitlementDimensionProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {entitlement.EntitlementDimensionProto & entitlement.EntitlementDimensionProto.$Shape} EntitlementDimensionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementDimensionProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies an EntitlementDimensionProto message.\n         * @function verify\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        EntitlementDimensionProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates an EntitlementDimensionProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {entitlement.EntitlementDimensionProto} EntitlementDimensionProto\n         */\n        EntitlementDimensionProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.entitlement.EntitlementDimensionProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".entitlement.EntitlementDimensionProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.entitlement.EntitlementDimensionProto();\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from an EntitlementDimensionProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {entitlement.EntitlementDimensionProto} message EntitlementDimensionProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        EntitlementDimensionProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults)\n                object.name = \"\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            return object;\n        };\n\n        /**\n         * Converts this EntitlementDimensionProto to JSON.\n         * @function toJSON\n         * @memberof entitlement.EntitlementDimensionProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        EntitlementDimensionProto.prototype.toJSON = function() {\n            return EntitlementDimensionProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for EntitlementDimensionProto\n         * @function getTypeUrl\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        EntitlementDimensionProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/entitlement.EntitlementDimensionProto\";\n        };\n\n        return EntitlementDimensionProto;\n    })();\n\n    entitlement.EntitlementTransactionProto = (function() {\n\n        /**\n         * Properties of an EntitlementTransactionProto.\n         * @typedef {Object} entitlement.EntitlementTransactionProto.$Properties\n         * @property {number|Long|null} [transactionId] EntitlementTransactionProto transactionId\n         * @property {entitlement.EntitlementTransactionType|null} [transactionType] EntitlementTransactionProto transactionType\n         * @property {Object.<string,number|Long>|null} [dimensionValues] EntitlementTransactionProto dimensionValues\n         * @property {string|null} [description] EntitlementTransactionProto description\n         * @property {number|Long|null} [createdAtUnixMs] EntitlementTransactionProto createdAtUnixMs\n         * @property {number|Long|null} [effectiveAtUnixMs] EntitlementTransactionProto effectiveAtUnixMs\n         * @property {number|Long|null} [expiresAtUnixMs] EntitlementTransactionProto expiresAtUnixMs\n         * @property {string|null} [invoiceNumber] EntitlementTransactionProto invoiceNumber\n         * @property {number|Long|null} [billingTransactionId] EntitlementTransactionProto billingTransactionId\n         * @property {Object.<string,string>|null} [labels] EntitlementTransactionProto labels\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of an EntitlementTransactionProto.\n         * @memberof entitlement\n         * @interface IEntitlementTransactionProto\n         * @augments entitlement.EntitlementTransactionProto.$Properties\n         * @deprecated Use entitlement.EntitlementTransactionProto.$Properties instead.\n         */\n\n        /**\n         * Shape of an EntitlementTransactionProto.\n         * @typedef {entitlement.EntitlementTransactionProto.$Properties} entitlement.EntitlementTransactionProto.$Shape\n         */\n\n        /**\n         * Constructs a new EntitlementTransactionProto.\n         * @memberof entitlement\n         * @classdesc Represents an EntitlementTransactionProto.\n         * @constructor\n         * @param {entitlement.EntitlementTransactionProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const EntitlementTransactionProto = function (properties) {\n            this.dimensionValues = {};\n            this.labels = {};\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * EntitlementTransactionProto transactionId.\n         * @member {number|Long} transactionId\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.transactionId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto transactionType.\n         * @member {entitlement.EntitlementTransactionType} transactionType\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.transactionType = 0;\n\n        /**\n         * EntitlementTransactionProto dimensionValues.\n         * @member {Object.<string,number|Long>} dimensionValues\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.dimensionValues = $util.emptyObject;\n\n        /**\n         * EntitlementTransactionProto description.\n         * @member {string} description\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.description = \"\";\n\n        /**\n         * EntitlementTransactionProto createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto effectiveAtUnixMs.\n         * @member {number|Long} effectiveAtUnixMs\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.effectiveAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto expiresAtUnixMs.\n         * @member {number|Long} expiresAtUnixMs\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.expiresAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto invoiceNumber.\n         * @member {string} invoiceNumber\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.invoiceNumber = \"\";\n\n        /**\n         * EntitlementTransactionProto billingTransactionId.\n         * @member {number|Long} billingTransactionId\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.billingTransactionId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto labels.\n         * @member {Object.<string,string>} labels\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.labels = $util.emptyObject;\n\n        /**\n         * Creates a new EntitlementTransactionProto instance using the specified properties.\n         * @function create\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {entitlement.EntitlementTransactionProto.$Properties=} [properties] Properties to set\n         * @returns {entitlement.EntitlementTransactionProto} EntitlementTransactionProto instance\n         * @type {{\n         *   (properties: entitlement.EntitlementTransactionProto.$Shape): entitlement.EntitlementTransactionProto & entitlement.EntitlementTransactionProto.$Shape;\n         *   (properties?: entitlement.EntitlementTransactionProto.$Properties): entitlement.EntitlementTransactionProto;\n         * }}\n         */\n        EntitlementTransactionProto.create = function(properties) {\n            return new EntitlementTransactionProto(properties);\n        };\n\n        /**\n         * Encodes the specified EntitlementTransactionProto message. Does not implicitly {@link entitlement.EntitlementTransactionProto.verify|verify} messages.\n         * @function encode\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {entitlement.EntitlementTransactionProto.$Properties} message EntitlementTransactionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementTransactionProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.transactionId != null && $Object.hasOwnProperty.call(message, \"transactionId\") && (typeof message.transactionId === \"object\" ? message.transactionId.low || message.transactionId.high : message.transactionId !== 0))\n                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.transactionId);\n            if (message.transactionType != null && $Object.hasOwnProperty.call(message, \"transactionType\") && message.transactionType !== 0)\n                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.transactionType);\n            if (message.dimensionValues != null && $Object.hasOwnProperty.call(message, \"dimensionValues\"))\n                for (let keys = $Object.keys(message.dimensionValues), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 3, wireType 2 =*/26).fork().uint32(/* id 1, wireType 0 =*/8).int32(keys[i]).uint32(/* id 2, wireType 0 =*/16).int64(message.dimensionValues[keys[i]]).ldelim();\n            if (message.description != null && $Object.hasOwnProperty.call(message, \"description\") && message.description !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.description);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.createdAtUnixMs);\n            if (message.effectiveAtUnixMs != null && $Object.hasOwnProperty.call(message, \"effectiveAtUnixMs\") && (typeof message.effectiveAtUnixMs === \"object\" ? message.effectiveAtUnixMs.low || message.effectiveAtUnixMs.high : message.effectiveAtUnixMs !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.effectiveAtUnixMs);\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\") && (typeof message.expiresAtUnixMs === \"object\" ? message.expiresAtUnixMs.low || message.expiresAtUnixMs.high : message.expiresAtUnixMs !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.expiresAtUnixMs);\n            if (message.invoiceNumber != null && $Object.hasOwnProperty.call(message, \"invoiceNumber\") && message.invoiceNumber !== \"\")\n                writer.uint32(/* id 8, wireType 2 =*/66).string(message.invoiceNumber);\n            if (message.billingTransactionId != null && $Object.hasOwnProperty.call(message, \"billingTransactionId\") && (typeof message.billingTransactionId === \"object\" ? message.billingTransactionId.low || message.billingTransactionId.high : message.billingTransactionId !== 0))\n                writer.uint32(/* id 9, wireType 0 =*/72).int64(message.billingTransactionId);\n            if (message.labels != null && $Object.hasOwnProperty.call(message, \"labels\"))\n                for (let keys = $Object.keys(message.labels), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 10, wireType 2 =*/82).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.labels[keys[i]]).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified EntitlementTransactionProto message, length delimited. Does not implicitly {@link entitlement.EntitlementTransactionProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {entitlement.EntitlementTransactionProto.$Properties} message EntitlementTransactionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementTransactionProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes an EntitlementTransactionProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {entitlement.EntitlementTransactionProto & entitlement.EntitlementTransactionProto.$Shape} EntitlementTransactionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementTransactionProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, key, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.entitlement.EntitlementTransactionProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.transactionId = value;\n                        else\n                            delete message.transactionId;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.transactionType = value;\n                        else\n                            delete message.transactionType;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.dimensionValues === $util.emptyObject)\n                            message.dimensionValues = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = 0;\n                        value = $util.Long ? $util.Long.fromNumber(0, false) : 0;\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 0)\n                                    break;\n                                key = reader.int32();\n                                continue;\n                            case 2:\n                                if (wireType !== 0)\n                                    break;\n                                value = reader.int64();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        message.dimensionValues[key] = value;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.description = value;\n                        else\n                            delete message.description;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.effectiveAtUnixMs = value;\n                        else\n                            delete message.effectiveAtUnixMs;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAtUnixMs = value;\n                        else\n                            delete message.expiresAtUnixMs;\n                        continue;\n                    }\n                case 8: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.invoiceNumber = value;\n                        else\n                            delete message.invoiceNumber;\n                        continue;\n                    }\n                case 9: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.billingTransactionId = value;\n                        else\n                            delete message.billingTransactionId;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.labels === $util.emptyObject)\n                            message.labels = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = \"\";\n                        value = \"\";\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 2)\n                                    break;\n                                key = reader.stringVerify();\n                                continue;\n                            case 2:\n                                if (wireType !== 2)\n                                    break;\n                                value = reader.stringVerify();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        if (key === \"__proto__\")\n                            $util.makeProp(message.labels, key);\n                        message.labels[key] = value;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes an EntitlementTransactionProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {entitlement.EntitlementTransactionProto & entitlement.EntitlementTransactionProto.$Shape} EntitlementTransactionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementTransactionProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies an EntitlementTransactionProto message.\n         * @function verify\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        EntitlementTransactionProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.transactionId != null && $Object.hasOwnProperty.call(message, \"transactionId\"))\n                if (!$util.isInteger(message.transactionId) && !(message.transactionId && $util.isInteger(message.transactionId.low) && $util.isInteger(message.transactionId.high)))\n                    return \"transactionId: integer|Long expected\";\n            if (message.transactionType != null && $Object.hasOwnProperty.call(message, \"transactionType\"))\n                if (typeof message.transactionType !== \"number\" || (message.transactionType | 0) !== message.transactionType)\n                    return \"transactionType: enum value expected\";\n            if (message.dimensionValues != null && $Object.hasOwnProperty.call(message, \"dimensionValues\")) {\n                if (!$util.isObject(message.dimensionValues))\n                    return \"dimensionValues: object expected\";\n                let key = $Object.keys(message.dimensionValues);\n                for (let i = 0; i < key.length; ++i) {\n                    if (!$util.key32Re.test(key[i]))\n                        return \"dimensionValues: integer key{k:int32} expected\";\n                    if (!$util.isInteger(message.dimensionValues[key[i]]) && !(message.dimensionValues[key[i]] && $util.isInteger(message.dimensionValues[key[i]].low) && $util.isInteger(message.dimensionValues[key[i]].high)))\n                        return \"dimensionValues: integer|Long{k:int32} expected\";\n                }\n            }\n            if (message.description != null && $Object.hasOwnProperty.call(message, \"description\"))\n                if (!$util.isString(message.description))\n                    return \"description: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.effectiveAtUnixMs != null && $Object.hasOwnProperty.call(message, \"effectiveAtUnixMs\"))\n                if (!$util.isInteger(message.effectiveAtUnixMs) && !(message.effectiveAtUnixMs && $util.isInteger(message.effectiveAtUnixMs.low) && $util.isInteger(message.effectiveAtUnixMs.high)))\n                    return \"effectiveAtUnixMs: integer|Long expected\";\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (!$util.isInteger(message.expiresAtUnixMs) && !(message.expiresAtUnixMs && $util.isInteger(message.expiresAtUnixMs.low) && $util.isInteger(message.expiresAtUnixMs.high)))\n                    return \"expiresAtUnixMs: integer|Long expected\";\n            if (message.invoiceNumber != null && $Object.hasOwnProperty.call(message, \"invoiceNumber\"))\n                if (!$util.isString(message.invoiceNumber))\n                    return \"invoiceNumber: string expected\";\n            if (message.billingTransactionId != null && $Object.hasOwnProperty.call(message, \"billingTransactionId\"))\n                if (!$util.isInteger(message.billingTransactionId) && !(message.billingTransactionId && $util.isInteger(message.billingTransactionId.low) && $util.isInteger(message.billingTransactionId.high)))\n                    return \"billingTransactionId: integer|Long expected\";\n            if (message.labels != null && $Object.hasOwnProperty.call(message, \"labels\")) {\n                if (!$util.isObject(message.labels))\n                    return \"labels: object expected\";\n                let key = $Object.keys(message.labels);\n                for (let i = 0; i < key.length; ++i)\n                    if (!$util.isString(message.labels[key[i]]))\n                        return \"labels: string{k:string} expected\";\n            }\n            return null;\n        };\n\n        /**\n         * Creates an EntitlementTransactionProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {entitlement.EntitlementTransactionProto} EntitlementTransactionProto\n         */\n        EntitlementTransactionProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.entitlement.EntitlementTransactionProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".entitlement.EntitlementTransactionProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.entitlement.EntitlementTransactionProto();\n            if (object.transactionId != null)\n                if (typeof object.transactionId === \"object\" ? object.transactionId.low || object.transactionId.high : $Number(object.transactionId) !== 0)\n                    if ($util.Long)\n                        message.transactionId = $util.Long.fromValue(object.transactionId, false);\n                    else if (typeof object.transactionId === \"string\")\n                        message.transactionId = $parseInt(object.transactionId, 10);\n                    else if (typeof object.transactionId === \"number\")\n                        message.transactionId = object.transactionId;\n                    else if (typeof object.transactionId === \"object\")\n                        message.transactionId = new $util.LongBits(object.transactionId.low >>> 0, object.transactionId.high >>> 0).toNumber();\n            if (object.transactionType !== 0 && (typeof object.transactionType !== \"string\" || $root.entitlement.EntitlementTransactionType[object.transactionType] !== 0))\n                switch (object.transactionType) {\n                case \"ENTITLEMENT_TRANSACTION_TYPE_REPLACING\":\n                case 0:\n                    message.transactionType = 0;\n                    break;\n                case \"ENTITLEMENT_TRANSACTION_TYPE_INCREMENTING\":\n                case 1:\n                    message.transactionType = 1;\n                    break;\n                case \"ENTITLEMENT_TRANSACTION_TYPE_LEASE\":\n                case 2:\n                    message.transactionType = 2;\n                    break;\n                default:\n                    if (typeof object.transactionType === \"number\" && (object.transactionType | 0) === object.transactionType)\n                        message.transactionType = object.transactionType;\n                }\n            if (object.dimensionValues) {\n                if (!$util.isObject(object.dimensionValues))\n                    throw $TypeError(\".entitlement.EntitlementTransactionProto.dimensionValues: object expected\");\n                message.dimensionValues = {};\n                for (let keys = $Object.keys(object.dimensionValues), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.dimensionValues, keys[i]);\n                    if ($util.Long)\n                        message.dimensionValues[keys[i]] = $util.Long.fromValue(object.dimensionValues[keys[i]], false);\n                    else if (typeof object.dimensionValues[keys[i]] === \"string\")\n                        message.dimensionValues[keys[i]] = $parseInt(object.dimensionValues[keys[i]], 10);\n                    else if (typeof object.dimensionValues[keys[i]] === \"number\")\n                        message.dimensionValues[keys[i]] = object.dimensionValues[keys[i]];\n                    else if (typeof object.dimensionValues[keys[i]] === \"object\")\n                        message.dimensionValues[keys[i]] = new $util.LongBits(object.dimensionValues[keys[i]].low >>> 0, object.dimensionValues[keys[i]].high >>> 0).toNumber();\n                }\n            }\n            if (object.description != null)\n                if (typeof object.description !== \"string\" || object.description.length)\n                    message.description = $String(object.description);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.effectiveAtUnixMs != null)\n                if (typeof object.effectiveAtUnixMs === \"object\" ? object.effectiveAtUnixMs.low || object.effectiveAtUnixMs.high : $Number(object.effectiveAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.effectiveAtUnixMs = $util.Long.fromValue(object.effectiveAtUnixMs, false);\n                    else if (typeof object.effectiveAtUnixMs === \"string\")\n                        message.effectiveAtUnixMs = $parseInt(object.effectiveAtUnixMs, 10);\n                    else if (typeof object.effectiveAtUnixMs === \"number\")\n                        message.effectiveAtUnixMs = object.effectiveAtUnixMs;\n                    else if (typeof object.effectiveAtUnixMs === \"object\")\n                        message.effectiveAtUnixMs = new $util.LongBits(object.effectiveAtUnixMs.low >>> 0, object.effectiveAtUnixMs.high >>> 0).toNumber();\n            if (object.expiresAtUnixMs != null)\n                if (typeof object.expiresAtUnixMs === \"object\" ? object.expiresAtUnixMs.low || object.expiresAtUnixMs.high : $Number(object.expiresAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.expiresAtUnixMs = $util.Long.fromValue(object.expiresAtUnixMs, false);\n                    else if (typeof object.expiresAtUnixMs === \"string\")\n                        message.expiresAtUnixMs = $parseInt(object.expiresAtUnixMs, 10);\n                    else if (typeof object.expiresAtUnixMs === \"number\")\n                        message.expiresAtUnixMs = object.expiresAtUnixMs;\n                    else if (typeof object.expiresAtUnixMs === \"object\")\n                        message.expiresAtUnixMs = new $util.LongBits(object.expiresAtUnixMs.low >>> 0, object.expiresAtUnixMs.high >>> 0).toNumber();\n            if (object.invoiceNumber != null)\n                if (typeof object.invoiceNumber !== \"string\" || object.invoiceNumber.length)\n                    message.invoiceNumber = $String(object.invoiceNumber);\n            if (object.billingTransactionId != null)\n                if (typeof object.billingTransactionId === \"object\" ? object.billingTransactionId.low || object.billingTransactionId.high : $Number(object.billingTransactionId) !== 0)\n                    if ($util.Long)\n                        message.billingTransactionId = $util.Long.fromValue(object.billingTransactionId, false);\n                    else if (typeof object.billingTransactionId === \"string\")\n                        message.billingTransactionId = $parseInt(object.billingTransactionId, 10);\n                    else if (typeof object.billingTransactionId === \"number\")\n                        message.billingTransactionId = object.billingTransactionId;\n                    else if (typeof object.billingTransactionId === \"object\")\n                        message.billingTransactionId = new $util.LongBits(object.billingTransactionId.low >>> 0, object.billingTransactionId.high >>> 0).toNumber();\n            if (object.labels) {\n                if (!$util.isObject(object.labels))\n                    throw $TypeError(\".entitlement.EntitlementTransactionProto.labels: object expected\");\n                message.labels = {};\n                for (let keys = $Object.keys(object.labels), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.labels, keys[i]);\n                    message.labels[keys[i]] = $String(object.labels[keys[i]]);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from an EntitlementTransactionProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {entitlement.EntitlementTransactionProto} message EntitlementTransactionProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        EntitlementTransactionProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.objects || options.defaults) {\n                object.dimensionValues = {};\n                object.labels = {};\n            }\n            if (options.defaults) {\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.transactionId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.transactionId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.transactionType = options.enums === $String ? \"ENTITLEMENT_TRANSACTION_TYPE_REPLACING\" : 0;\n                object.description = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.effectiveAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.effectiveAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.invoiceNumber = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.billingTransactionId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.billingTransactionId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.transactionId != null && $Object.hasOwnProperty.call(message, \"transactionId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.transactionId = typeof message.transactionId === \"number\" ? $BigInt(message.transactionId) : $util.Long.fromBits(message.transactionId.low >>> 0, message.transactionId.high >>> 0, false).toBigInt();\n                else if (typeof message.transactionId === \"number\")\n                    object.transactionId = options.longs === $String ? $String(message.transactionId) : message.transactionId;\n                else\n                    object.transactionId = options.longs === $String ? $util.Long.prototype.toString.call(message.transactionId) : options.longs === $Number ? new $util.LongBits(message.transactionId.low >>> 0, message.transactionId.high >>> 0).toNumber() : message.transactionId;\n            if (message.transactionType != null && $Object.hasOwnProperty.call(message, \"transactionType\"))\n                object.transactionType = options.enums === $String ? $root.entitlement.EntitlementTransactionType[message.transactionType] === $undefined ? message.transactionType : $root.entitlement.EntitlementTransactionType[message.transactionType] : message.transactionType;\n            let keys2;\n            if (message.dimensionValues && (keys2 = $Object.keys(message.dimensionValues)).length) {\n                object.dimensionValues = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.dimensionValues, keys2[j]);\n                    if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                        object.dimensionValues[keys2[j]] = typeof message.dimensionValues[keys2[j]] === \"number\" ? $BigInt(message.dimensionValues[keys2[j]]) : $util.Long.fromBits(message.dimensionValues[keys2[j]].low >>> 0, message.dimensionValues[keys2[j]].high >>> 0, false).toBigInt();\n                    else if (typeof message.dimensionValues[keys2[j]] === \"number\")\n                        object.dimensionValues[keys2[j]] = options.longs === $String ? $String(message.dimensionValues[keys2[j]]) : message.dimensionValues[keys2[j]];\n                    else\n                        object.dimensionValues[keys2[j]] = options.longs === $String ? $util.Long.prototype.toString.call(message.dimensionValues[keys2[j]]) : options.longs === $Number ? new $util.LongBits(message.dimensionValues[keys2[j]].low >>> 0, message.dimensionValues[keys2[j]].high >>> 0).toNumber() : message.dimensionValues[keys2[j]];\n                }\n            }\n            if (message.description != null && $Object.hasOwnProperty.call(message, \"description\"))\n                object.description = message.description;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.effectiveAtUnixMs != null && $Object.hasOwnProperty.call(message, \"effectiveAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.effectiveAtUnixMs = typeof message.effectiveAtUnixMs === \"number\" ? $BigInt(message.effectiveAtUnixMs) : $util.Long.fromBits(message.effectiveAtUnixMs.low >>> 0, message.effectiveAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.effectiveAtUnixMs === \"number\")\n                    object.effectiveAtUnixMs = options.longs === $String ? $String(message.effectiveAtUnixMs) : message.effectiveAtUnixMs;\n                else\n                    object.effectiveAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.effectiveAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.effectiveAtUnixMs.low >>> 0, message.effectiveAtUnixMs.high >>> 0).toNumber() : message.effectiveAtUnixMs;\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAtUnixMs = typeof message.expiresAtUnixMs === \"number\" ? $BigInt(message.expiresAtUnixMs) : $util.Long.fromBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAtUnixMs === \"number\")\n                    object.expiresAtUnixMs = options.longs === $String ? $String(message.expiresAtUnixMs) : message.expiresAtUnixMs;\n                else\n                    object.expiresAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0).toNumber() : message.expiresAtUnixMs;\n            if (message.invoiceNumber != null && $Object.hasOwnProperty.call(message, \"invoiceNumber\"))\n                object.invoiceNumber = message.invoiceNumber;\n            if (message.billingTransactionId != null && $Object.hasOwnProperty.call(message, \"billingTransactionId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.billingTransactionId = typeof message.billingTransactionId === \"number\" ? $BigInt(message.billingTransactionId) : $util.Long.fromBits(message.billingTransactionId.low >>> 0, message.billingTransactionId.high >>> 0, false).toBigInt();\n                else if (typeof message.billingTransactionId === \"number\")\n                    object.billingTransactionId = options.longs === $String ? $String(message.billingTransactionId) : message.billingTransactionId;\n                else\n                    object.billingTransactionId = options.longs === $String ? $util.Long.prototype.toString.call(message.billingTransactionId) : options.longs === $Number ? new $util.LongBits(message.billingTransactionId.low >>> 0, message.billingTransactionId.high >>> 0).toNumber() : message.billingTransactionId;\n            if (message.labels && (keys2 = $Object.keys(message.labels)).length) {\n                object.labels = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.labels, keys2[j]);\n                    object.labels[keys2[j]] = message.labels[keys2[j]];\n                }\n            }\n            return object;\n        };\n\n        /**\n         * Converts this EntitlementTransactionProto to JSON.\n         * @function toJSON\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        EntitlementTransactionProto.prototype.toJSON = function() {\n            return EntitlementTransactionProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for EntitlementTransactionProto\n         * @function getTypeUrl\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        EntitlementTransactionProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/entitlement.EntitlementTransactionProto\";\n        };\n\n        return EntitlementTransactionProto;\n    })();\n\n    entitlement.EntitlementProto = (function() {\n\n        /**\n         * Properties of an EntitlementProto.\n         * @typedef {Object} entitlement.EntitlementProto.$Properties\n         * @property {number|null} [schemaMinorVersion] EntitlementProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] EntitlementProto lastModifiedByCommit\n         * @property {number|Long|null} [tenantId] EntitlementProto tenantId\n         * @property {number|Long|null} [updatedAtUnixMs] EntitlementProto updatedAtUnixMs\n         * @property {Array.<entitlement.EntitlementTransactionProto.$Properties>|null} [transactions] EntitlementProto transactions\n         * @property {Object.<string,entitlement.EntitlementDimensionProto.$Properties>|null} [dimensions] EntitlementProto dimensions\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of an EntitlementProto.\n         * @memberof entitlement\n         * @interface IEntitlementProto\n         * @augments entitlement.EntitlementProto.$Properties\n         * @deprecated Use entitlement.EntitlementProto.$Properties instead.\n         */\n\n        /**\n         * Shape of an EntitlementProto.\n         * @typedef {entitlement.EntitlementProto.$Properties} entitlement.EntitlementProto.$Shape\n         */\n\n        /**\n         * Constructs a new EntitlementProto.\n         * @memberof entitlement\n         * @classdesc Represents an EntitlementProto.\n         * @constructor\n         * @param {entitlement.EntitlementProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const EntitlementProto = function (properties) {\n            this.transactions = [];\n            this.dimensions = {};\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * EntitlementProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * EntitlementProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * EntitlementProto tenantId.\n         * @member {number|Long} tenantId\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementProto updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementProto transactions.\n         * @member {Array.<entitlement.EntitlementTransactionProto.$Properties>} transactions\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.transactions = $util.emptyArray;\n\n        /**\n         * EntitlementProto dimensions.\n         * @member {Object.<string,entitlement.EntitlementDimensionProto.$Properties>} dimensions\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.dimensions = $util.emptyObject;\n\n        /**\n         * Creates a new EntitlementProto instance using the specified properties.\n         * @function create\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {entitlement.EntitlementProto.$Properties=} [properties] Properties to set\n         * @returns {entitlement.EntitlementProto} EntitlementProto instance\n         * @type {{\n         *   (properties: entitlement.EntitlementProto.$Shape): entitlement.EntitlementProto & entitlement.EntitlementProto.$Shape;\n         *   (properties?: entitlement.EntitlementProto.$Properties): entitlement.EntitlementProto;\n         * }}\n         */\n        EntitlementProto.create = function(properties) {\n            return new EntitlementProto(properties);\n        };\n\n        /**\n         * Encodes the specified EntitlementProto message. Does not implicitly {@link entitlement.EntitlementProto.verify|verify} messages.\n         * @function encode\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {entitlement.EntitlementProto.$Properties} message EntitlementProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.updatedAtUnixMs);\n            if (message.transactions != null && message.transactions.length)\n                for (let i = 0; i < message.transactions.length; ++i)\n                    $root.entitlement.EntitlementTransactionProto.encode(message.transactions[i], writer.uint32(/* id 5, wireType 2 =*/42).fork(), _depth + 1).ldelim();\n            if (message.dimensions != null && $Object.hasOwnProperty.call(message, \"dimensions\"))\n                for (let keys = $Object.keys(message.dimensions), i = 0; i < keys.length; ++i) {\n                    writer.uint32(/* id 6, wireType 2 =*/50).fork().uint32(/* id 1, wireType 0 =*/8).int32(keys[i]);\n                    $root.entitlement.EntitlementDimensionProto.encode(message.dimensions[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork(), _depth + 1).ldelim().ldelim();\n                }\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified EntitlementProto message, length delimited. Does not implicitly {@link entitlement.EntitlementProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {entitlement.EntitlementProto.$Properties} message EntitlementProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes an EntitlementProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {entitlement.EntitlementProto & entitlement.EntitlementProto.$Shape} EntitlementProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, key, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.entitlement.EntitlementProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.transactions && message.transactions.length))\n                            message.transactions = [];\n                        message.transactions.push($root.entitlement.EntitlementTransactionProto.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.dimensions === $util.emptyObject)\n                            message.dimensions = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = 0;\n                        value = null;\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 0)\n                                    break;\n                                key = reader.int32();\n                                continue;\n                            case 2:\n                                if (wireType !== 2)\n                                    break;\n                                value = $root.entitlement.EntitlementDimensionProto.decode(reader, reader.uint32(), $undefined, _depth + 1, value);\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        message.dimensions[key] = value || new $root.entitlement.EntitlementDimensionProto();\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes an EntitlementProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {entitlement.EntitlementProto & entitlement.EntitlementProto.$Shape} EntitlementProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies an EntitlementProto message.\n         * @function verify\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        EntitlementProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.transactions != null && $Object.hasOwnProperty.call(message, \"transactions\")) {\n                if (!$Array.isArray(message.transactions))\n                    return \"transactions: array expected\";\n                for (let i = 0; i < message.transactions.length; ++i) {\n                    let error = $root.entitlement.EntitlementTransactionProto.verify(message.transactions[i], _depth + 1);\n                    if (error)\n                        return \"transactions.\" + error;\n                }\n            }\n            if (message.dimensions != null && $Object.hasOwnProperty.call(message, \"dimensions\")) {\n                if (!$util.isObject(message.dimensions))\n                    return \"dimensions: object expected\";\n                let key = $Object.keys(message.dimensions);\n                for (let i = 0; i < key.length; ++i) {\n                    if (!$util.key32Re.test(key[i]))\n                        return \"dimensions: integer key{k:int32} expected\";\n                    {\n                        let error = $root.entitlement.EntitlementDimensionProto.verify(message.dimensions[key[i]], _depth + 1);\n                        if (error)\n                            return \"dimensions.\" + error;\n                    }\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates an EntitlementProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {entitlement.EntitlementProto} EntitlementProto\n         */\n        EntitlementProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.entitlement.EntitlementProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".entitlement.EntitlementProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.entitlement.EntitlementProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.transactions) {\n                if (!$Array.isArray(object.transactions))\n                    throw $TypeError(\".entitlement.EntitlementProto.transactions: array expected\");\n                message.transactions = $Array(object.transactions.length);\n                for (let i = 0; i < object.transactions.length; ++i) {\n                    if (!$util.isObject(object.transactions[i]))\n                        throw $TypeError(\".entitlement.EntitlementProto.transactions: object expected\");\n                    message.transactions[i] = $root.entitlement.EntitlementTransactionProto.fromObject(object.transactions[i], _depth + 1);\n                }\n            }\n            if (object.dimensions) {\n                if (!$util.isObject(object.dimensions))\n                    throw $TypeError(\".entitlement.EntitlementProto.dimensions: object expected\");\n                message.dimensions = {};\n                for (let keys = $Object.keys(object.dimensions), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.dimensions, keys[i]);\n                    if (!$util.isObject(object.dimensions[keys[i]]))\n                        throw $TypeError(\".entitlement.EntitlementProto.dimensions: object expected\");\n                    message.dimensions[keys[i]] = $root.entitlement.EntitlementDimensionProto.fromObject(object.dimensions[keys[i]], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from an EntitlementProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {entitlement.EntitlementProto} message EntitlementProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        EntitlementProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.transactions = [];\n            if (options.objects || options.defaults)\n                object.dimensions = {};\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            if (message.transactions && message.transactions.length) {\n                object.transactions = $Array(message.transactions.length);\n                for (let j = 0; j < message.transactions.length; ++j)\n                    object.transactions[j] = $root.entitlement.EntitlementTransactionProto.toObject(message.transactions[j], options, _depth + 1);\n            }\n            let keys2;\n            if (message.dimensions && (keys2 = $Object.keys(message.dimensions)).length) {\n                object.dimensions = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.dimensions, keys2[j]);\n                    object.dimensions[keys2[j]] = $root.entitlement.EntitlementDimensionProto.toObject(message.dimensions[keys2[j]], options, _depth + 1);\n                }\n            }\n            return object;\n        };\n\n        /**\n         * Converts this EntitlementProto to JSON.\n         * @function toJSON\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        EntitlementProto.prototype.toJSON = function() {\n            return EntitlementProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for EntitlementProto\n         * @function getTypeUrl\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        EntitlementProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/entitlement.EntitlementProto\";\n        };\n\n        return EntitlementProto;\n    })();\n\n    return entitlement;\n})();\n\nexport {\n  $root as default\n};\n","/**\n * Common string constants for DOM events, CSS state classes, attributes,\n * display values, and keyboard keys to eliminate magic strings across the frontend.\n */\n\n// DOM Event Names\nexport const EVENT_CLICK = 'click';\nexport const EVENT_CHANGE = 'change';\nexport const EVENT_INPUT = 'input';\nexport const EVENT_KEYDOWN = 'keydown';\nexport const EVENT_KEYUP = 'keyup';\nexport const EVENT_SUBMIT = 'submit';\nexport const EVENT_RESIZE = 'resize';\nexport const EVENT_SCROLL = 'scroll';\nexport const EVENT_FOCUS = 'focus';\nexport const EVENT_BLUR = 'blur';\nexport const EVENT_BEFOREUNLOAD = 'beforeunload';\nexport const EVENT_PAGEHIDE = 'pagehide';\nexport const EVENT_VISIBILITYCHANGE = 'visibilitychange';\nexport const EVENT_DOM_CONTENT_LOADED = 'DOMContentLoaded';\nexport const EVENT_DEVICECHANGE = 'devicechange';\nexport const EVENT_MESSAGE = 'message';\nexport const EVENT_OPEN = 'open';\nexport const EVENT_CLOSE = 'close';\nexport const EVENT_ERROR = 'error';\nexport const EVENT_TOUCHSTART = 'touchstart';\nexport const EVENT_MOUSEENTER = 'mouseenter';\nexport const EVENT_MOUSELEAVE = 'mouseleave';\nexport const EVENT_HASHCHANGE = 'hashchange';\nexport const EVENT_RELEASE = 'release';\n\n// CSS State Classes\nexport const CLASS_OPEN = 'open';\nexport const CLASS_HIDDEN = 'hidden';\nexport const CLASS_ACTIVE = 'active';\nexport const CLASS_DISABLED = 'disabled';\nexport const CLASS_MENU_DISABLED = 'menu-disabled';\nexport const CLASS_DANGER = 'danger';\nexport const CLASS_SUCCESS = 'success';\nexport const CLASS_WARNING = 'warning';\nexport const CLASS_EXPIRED = 'expired';\nexport const CLASS_CLOSING = 'closing';\n\n// Common Display / Layout Styles\nexport const DISPLAY_NONE = 'none';\nexport const DISPLAY_BLOCK = 'block';\nexport const DISPLAY_FLEX = 'flex';\nexport const DISPLAY_INLINE = 'inline';\nexport const DISPLAY_INLINE_BLOCK = 'inline-block';\nexport const DISPLAY_INLINE_FLEX = 'inline-flex';\nexport const DISPLAY_GRID = 'grid';\n\n// Common Attributes & Values\nexport const ATTR_PAGE = 'data-page';\nexport const ATTR_SRC = 'src';\nexport const ATTR_DISABLED = 'disabled';\nexport const ATTR_ARIA_EXPANDED = 'aria-expanded';\nexport const ATTR_ARIA_HIDDEN = 'aria-hidden';\nexport const ATTR_ARIA_SELECTED = 'aria-selected';\nexport const ATTR_ARIA_DISABLED = 'aria-disabled';\n\nexport const VALUE_TRUE = 'true';\nexport const VALUE_FALSE = 'false';\n\n// Keyboard Keys\nexport const KEY_ESCAPE = 'Escape';\nexport const KEY_ENTER = 'Enter';\nexport const KEY_SPACE = ' ';\nexport const KEY_ARROW_UP = 'ArrowUp';\nexport const KEY_ARROW_DOWN = 'ArrowDown';\n\n// HTTP Methods\nexport const HTTP_GET = 'GET';\nexport const HTTP_POST = 'POST';\nexport const HTTP_PUT = 'PUT';\nexport const HTTP_DELETE = 'DELETE';\n\n// URL Query Parameter Names\nexport const PARAM_TOKEN = 'token';\nexport const PARAM_LANG = 'lang';\nexport const PARAM_CHANNEL = 'channel';\nexport const PARAM_RETURN_TO = 'return_to';\nexport const PARAM_DEVICE_ENROLL = 'device_enroll';\n\n// Local Storage Keys\nexport const STORAGE_AUTH_TOKEN = 'fluentchurch_token';\nexport const STORAGE_DEVICE_TOKEN = 'fluentchurch_device_token';\nexport const STORAGE_DEVICE_INFO = 'fluentchurch_device_info';\nexport const STORAGE_LAST_TENANT_ID = 'last_selected_tenant_id';\nexport const STORAGE_THEME_PREFERENCE = 'rtc_theme_preference';\nexport const STORAGE_BROADCAST_LANGUAGE = 'fluentchurch_broadcast_language';\nexport const STORAGE_GATE_THRESHOLD = 'fluentchurch_gate_threshold';\nexport const STORAGE_GATE_ATTACK = 'fluentchurch_gate_attack';\nexport const STORAGE_GATE_HOLD = 'fluentchurch_gate_hold';\nexport const STORAGE_AUDIO_DEVICE_ID = 'fluentchurch_audio_device_id';\nexport const STORAGE_AUDIO_DEVICE_LABEL = 'fluentchurch_audio_device_label';\nexport const STORAGE_VIEWER_LANGUAGE = 'fluentchurch_viewer_language';\n\n// WebSocket Subprotocols\nexport const WS_SUBPROTOCOL_TOKEN = 'token';\n","import { STORAGE_AUTH_TOKEN, STORAGE_DEVICE_TOKEN } from './core/strings';\n\n// API configuration supporting cross-domain frontend and API hosting\n\nexport function getApiBaseUrl(): string {\n  if ((window as any).__API_BASE_URL__) {\n    return (window as any).__API_BASE_URL__;\n  }\n  if (import.meta.env && (import.meta.env as any).VITE_API_BASE_URL) {\n    return (import.meta.env as any).VITE_API_BASE_URL;\n  }\n  return '';\n}\n\nexport function normalizeWorkerUrl(workerUrl: string): string {\n  if (!workerUrl) return '';\n  try {\n    const hasScheme =\n      workerUrl.startsWith('http://') ||\n      workerUrl.startsWith('https://') ||\n      workerUrl.startsWith('ws://') ||\n      workerUrl.startsWith('wss://');\n    const url = new URL(hasScheme ? workerUrl : `http://${workerUrl}`);\n    if (\n      typeof window !== 'undefined' &&\n      window.location &&\n      (url.hostname === 'localhost' || url.hostname === '127.0.0.1') &&\n      window.location.hostname !== 'localhost' &&\n      window.location.hostname !== '127.0.0.1'\n    ) {\n      url.hostname = window.location.hostname;\n    }\n    return url.toString().replace(/\\/+$/, '');\n  } catch {\n    return workerUrl;\n  }\n}\n\nexport function getWorkerUrl(): string {\n  let raw = '';\n  if ((window as any).__WORKER_URL__) {\n    raw = (window as any).__WORKER_URL__;\n  } else if (import.meta.env && (import.meta.env as any).VITE_WORKER_URL) {\n    raw = (import.meta.env as any).VITE_WORKER_URL;\n  }\n  return normalizeWorkerUrl(raw);\n}\n\nexport function apiUrl(path: string): string {\n  const base = getApiBaseUrl().replace(/\\/+$/, '');\n  const cleanPath = path.startsWith('/') ? path : `/${path}`;\n  return `${base}${cleanPath}`;\n}\n\nexport function getAuthToken(): string | null {\n  return localStorage.getItem(STORAGE_AUTH_TOKEN);\n}\n\nexport function setAuthToken(token: string | null): void {\n  if (token) {\n    localStorage.setItem(STORAGE_AUTH_TOKEN, token);\n  } else {\n    localStorage.removeItem(STORAGE_AUTH_TOKEN);\n  }\n}\n\nexport function getDeviceToken(): string | null {\n  return localStorage.getItem(STORAGE_DEVICE_TOKEN);\n}\n\nexport function setDeviceToken(token: string | null): void {\n  if (token) {\n    localStorage.setItem(STORAGE_DEVICE_TOKEN, token);\n  } else {\n    localStorage.removeItem(STORAGE_DEVICE_TOKEN);\n  }\n}\n\nlet onUnauthorizedCallback: (() => void) | null = null;\n\nexport function setOnUnauthorized(cb: (() => void) | null): void {\n  onUnauthorizedCallback = cb;\n}\n\nlet detectedContinent: string | null = null;\n\nexport function getClientContinent(): string | null {\n  if (detectedContinent) return detectedContinent;\n  if (typeof window !== 'undefined' && (window as any).__CONTINENT__) {\n    return (window as any).__CONTINENT__;\n  }\n  return null;\n}\n\nexport function setClientContinent(continent: string | null): void {\n  if (continent) {\n    detectedContinent = continent.trim();\n  }\n}\n\nexport async function fetchWithAuth(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n  const pathOrUrl = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n  const isAbsolute = pathOrUrl.startsWith('http://') || pathOrUrl.startsWith('https://');\n  const fullUrl = isAbsolute ? pathOrUrl : apiUrl(pathOrUrl);\n  const headers = new Headers(init?.headers || {});\n  const token = getAuthToken() || getDeviceToken();\n  const apiBase = getApiBaseUrl();\n  const isApi = !isAbsolute || (apiBase && fullUrl.startsWith(apiBase));\n  if (isApi && token && !headers.has('Authorization')) {\n    headers.set('Authorization', `Bearer ${token}`);\n  }\n  const resp = await fetch(fullUrl, { ...init, headers });\n  const continent =\n    resp.headers.get('cf-ipcontinent') ||\n    resp.headers.get('x-continent') ||\n    resp.headers.get('cf-continent') ||\n    resp.headers.get('continent');\n  if (continent) {\n    setClientContinent(continent);\n  }\n  const renewed = resp.headers.get('X-Renewed-Token');\n  if (renewed && getAuthToken()) {\n    setAuthToken(renewed);\n  }\n  if (isApi && resp.status === 401) {\n    if (getAuthToken()) {\n      setAuthToken(null);\n      if (onUnauthorizedCallback) {\n        onUnauthorizedCallback();\n      }\n    } else if (!getDeviceToken()) {\n      if (onUnauthorizedCallback) {\n        onUnauthorizedCallback();\n      }\n    }\n  }\n  return resp;\n}\n\n\n\n","{\n  \"common\": {\n    \"appName\": \"Fluent Church\",\n    \"liveCaptions\": \"Live Captions\",\n    \"studio\": \"Console\",\n    \"fohConsole\": \"Console\",\n    \"channel\": \"Channel\",\n    \"venue\": \"Account\",\n    \"account\": \"Account\",\n    \"organization\": \"Organization\",\n    \"close\": \"Close\",\n    \"cancel\": \"Cancel\",\n    \"save\": \"Save\",\n    \"delete\": \"Delete\",\n    \"copy\": \"Copy\",\n    \"copied\": \"Copied!\",\n    \"loading\": \"Loading...\",\n    \"error\": \"Error\"\n  },\n  \"auth\": {\n    \"signInTitle\": \"Console Sign In\",\n    \"loginTitle\": \"Console Sign In\",\n    \"signInDesc\": \"Sign in with your organization account to access the audio console and broadcast live captions.\",\n    \"loginDesc\": \"Sign in with your organization account to access the audio console and broadcast live captions.\",\n    \"continueWith\": \"Continue with {name}\",\n    \"noProviders\": \"Authentication providers are not yet configured. Please check your deployment settings.\",\n    \"sessionExpired\": \"Your session has expired. Please sign in again.\",\n    \"audienceNotice\": \"Audience member? You don't need to sign in. Scan the QR code or visit {homeLink}.\"\n  },\n  \"landing\": {\n    \"launchStudio\": \"Open Console\",\n    \"heroTitle\": \"Real-Time Live Captioning for Churches & Assemblies\",\n    \"heroDesc\": \"Sub-second speech-to-text broadcasting directly from audio consoles to audience mobile screens via QR code.\",\n    \"studioTitle\": \"Audio Engineer: Console\",\n    \"studioDesc\": \"Plug into your console's dedicated spoken-word AUX bus and broadcast live AI transcriptions.\",\n    \"openStudio\": \"Open Console (/broadcast.html)\",\n    \"audienceTitle\": \"Audience Member: Join a Channel\",\n    \"audienceDesc\": \"Enter the channel name shown on the display or scan the QR code.\",\n    \"channelPlaceholder\": \"dallas-grace-church\",\n    \"joinCaptions\": \"Join Captions\",\n    \"invalidChannel\": \"Please enter a valid channel name (6-20 characters: letters, numbers, underscores, and single hyphens).\"\n  },\n  \"studio\": {\n    \"connecting\": \"Connecting to console...\",\n    \"welcome\": \"Welcome, {name}!\",\n    \"createOrgTitle\": \"Create Your Account\",\n    \"createOrgDesc\": \"To start broadcasting live captions, create your organization or church account and your first channel.\",\n    \"orgNameLabel\": \"Organization / Church / Account Name\",\n    \"orgNamePlaceholder\": \"e.g. Grace Fellowship, City Church, St. Mary's\",\n    \"firstChannelLabel\": \"First Channel Name (Globally Unique)\",\n    \"firstChannelPlaceholder\": \"\",\n    \"suggestions\": \"Suggestions\",\n    \"channelHelp\": \"Audiences will view live captions for this channel at /view.html?@channel-name\",\n    \"createOrgBtn\": \"Create Account & Open Console\",\n    \"creatingOrg\": \"Setting up account...\",\n    \"invalidChannelError\": \"Channel name must be between 6 and 20 characters (letters, numbers, underscores, and single hyphens).\",\n    \"channelsQuota\": \"({count}/{max} channels active)\",\n    \"membersQuota\": \"({count}/{max} members)\",\n    \"channelLimitReached\": \"Maximum limit of {max} channels reached for this account. Delete an existing channel or contact support to increase your quota.\",\n    \"addChannelModalTitle\": \"Create New Channel\",\n    \"channelNameLabel\": \"Channel Name (Globally Unique)\",\n    \"addChannelModalPlaceholder\": \"dallas-faith-church\",\n    \"createChannelBtn\": \"Create Channel\",\n    \"addChannelBtn\": \"+ Channel\",\n    \"addChannelOption\": \"+ Channel...\",\n    \"newVenueOption\": \"+ New Account...\",\n    \"newAccountOption\": \"+ New Account...\",\n    \"inviteMemberBtn\": \"+ Invite Team\",\n    \"audienceLinkBtn\": \"Audience Link\",\n    \"audienceLinkCopied\": \"Audience Link copied to clipboard:\\n{url}\",\n    \"inviteModalTitle\": \"Invite Team Member\",\n    \"emailLabel\": \"User Email\",\n    \"roleLabel\": \"Access Role\",\n    \"roleBroadcaster\": \"Broadcaster (Can stream captions)\",\n    \"roleAdmin\": \"Administrator (Can manage channels and users)\",\n    \"sendInviteBtn\": \"Send Invitation\",\n    \"sendingInvite\": \"Inviting...\",\n    \"inviteSuccess\": \"Invitation assigned to {email}\",\n    \"deleteChannel\": \"Delete Channel\",\n    \"deleteChannelConfirm\": \"Are you sure you want to delete channel \\\"@{channel}\\\"? Audiences tuned in will be disconnected.\",\n    \"switchOrg\": \"Switch Organization\",\n    \"signOut\": \"Sign Out\",\n    \"audienceUrl\": \"Audience URL:\",\n    \"qrCode\": \"Audience QR Code\"\n  },\n  \"broadcaster\": {\n    \"fohConsole\": \"Console\",\n    \"audienceStatus\": \"Audience: {count}\",\n    \"audienceOffline\": \"Audience: 0\",\n    \"broadcastStatus\": \"Broadcast: {status}\",\n    \"transcribingStatus\": \"Transcribing: {status}\",\n    \"startBroadcast\": \"Start Broadcast\",\n    \"stopBroadcast\": \"Stop Broadcast\",\n    \"btnStop\": \"Stop\",\n    \"btnPause\": \"Pause\",\n    \"btnBroadcast\": \"Broadcast\",\n    \"starting\": \"Starting...\",\n    \"stopping\": \"Stopping...\",\n    \"audioInputTitle\": \"Audio input & Gate\",\n    \"audioInputSource\": \"Audio Input Source (AUX / USB)\",\n    \"spokenLanguage\": \"Spoken Language\",\n    \"defaultMic\": \"Default System Microphone\",\n    \"inputLevel\": \"Input Level\",\n    \"gateThreshold\": \"Gate Threshold\",\n    \"attackTime\": \"Attack Time\",\n    \"holdTime\": \"Hold Time\",\n    \"gateOpen\": \"GATE OPEN (Streaming Audio)\",\n    \"gateClosed\": \"GATE CLOSED (Audio Suppressed)\",\n    \"gatePaused\": \"PAUSED (NO AUDIENCE)\",\n    \"gateStopped\": \"BROADCAST STOPPED\",\n    \"broadcastStoppedMsg\": \"Broadcast has stopped\",\n    \"testModeTitle\": \"Force transcription\",\n    \"testModeDesc\": \"Force sending audio regardless of mute and number of subscribers.\",\n    \"liveMonitorTitle\": \"Live Caption Preview Monitor\",\n    \"liveMonitorPlaceholder\": \"Transcripts will appear here once speech is detected...\",\n    \"audienceAccess\": \"Audience Access\",\n    \"audienceAccessDesc\": \"Project this QR code or share the URL with attendees.\",\n    \"navWarningTitle\": \"Broadcast is Currently Live!\",\n    \"navWarningDesc\": \"You are currently streaming audio and live captions on {channel}. Navigating away will immediately stop the broadcast, close the audio gate, and disconnect all listeners.\",\n    \"stayOnPage\": \"Keep Broadcasting\",\n    \"leavePage\": \"Stop Broadcast & Leave\"\n  },\n  \"listener\": {\n    \"channel\": \"Channel: {channel}\",\n    \"connecting\": \"Connecting\",\n    \"live\": \"Live\",\n    \"paused\": \"Paused\",\n    \"disconnected\": \"Disconnected\",\n    \"smallerFont\": \"Smaller Font\",\n    \"largerFont\": \"Larger Font\",\n    \"theme\": \"Theme\",\n    \"resumeScroll\": \"Resume Live Scroll\",\n    \"waitingForCaptions\": \"Waiting for speaker to begin...\",\n    \"originalLanguage\": \"Original Language\",\n    \"originalAudio\": \"Original Language\"\n  }\n}","import defaultTranslations from './locales/us-en.7350a20684fb7add93b6f816.json';\n\nexport type TranslationParams = Record<string, string | number>;\n\nexport class I18n {\n  private static currentLocale: string = 'us-en';\n  private static locales: Record<string, Record<string, any>> = {\n    'us-en': defaultTranslations,\n  };\n\n  /**\n   * Initializes or changes the active locale.\n   * If a locale other than us-en is requested, attempts to fetch /locales/{locale}.json.\n   */\n  public static async init(locale: string = 'us-en'): Promise<void> {\n    this.currentLocale = locale;\n    if (!this.locales[locale]) {\n      try {\n        const baseUrl = (import.meta.env && import.meta.env.BASE_URL) || '/';\n        const cleanBase = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n        const resp = await fetch(`${cleanBase}/locales/${encodeURIComponent(locale)}.json`);\n        if (resp.ok) {\n          this.locales[locale] = await resp.json();\n        } else {\n          console.warn(`Could not load locale \"${locale}\", falling back to us-en`);\n        }\n      } catch (err) {\n        console.warn(`Error fetching locale \"${locale}\", falling back to us-en:`, err);\n      }\n    }\n  }\n\n  /**\n   * Translates a dot-separated key (e.g. \"landing.heroTitle\") with optional placeholder replacements.\n   */\n  public static t(key: string, params?: TranslationParams): string {\n    const dict = this.locales[this.currentLocale] || this.locales['us-en'] || defaultTranslations;\n    const parts = key.split('.');\n    let val: any = dict;\n\n    for (const part of parts) {\n      if (val && typeof val === 'object' && part in val) {\n        val = val[part];\n      } else {\n        // Fallback to us-en if current locale didn't have the key\n        let fallbackVal: any = defaultTranslations;\n        for (const fbPart of parts) {\n          if (fallbackVal && typeof fallbackVal === 'object' && fbPart in fallbackVal) {\n            fallbackVal = fallbackVal[fbPart];\n          } else {\n            fallbackVal = undefined;\n            break;\n          }\n        }\n        val = fallbackVal !== undefined ? fallbackVal : key;\n        break;\n      }\n    }\n\n    if (typeof val !== 'string') {\n      return key;\n    }\n\n    if (params) {\n      return Object.entries(params).reduce((str, [k, v]) => {\n        return str.replace(new RegExp(`\\\\{${k}\\\\}`, 'g'), String(v));\n      }, val);\n    }\n\n    return val;\n  }\n\n  public static getLocale(): string {\n    return this.currentLocale;\n  }\n}\n\nexport const t = (key: string, params?: TranslationParams): string => I18n.t(key, params);\n","import { EVENT_CHANGE, STORAGE_THEME_PREFERENCE } from './core/strings';\n\nexport type AppTheme = 'dark' | 'light' | 'high-contrast';\n\nconst THEME_STORAGE_KEY = STORAGE_THEME_PREFERENCE;\ntype ThemeChangeListener = (theme: AppTheme) => void;\nconst listeners: ThemeChangeListener[] = [];\n\n/**\n * Returns the effective theme based on system preference and user override.\n * Default is 'dark'.\n */\nexport function getSystemPreferredTheme(): AppTheme {\n  if (typeof window !== 'undefined' && window.matchMedia) {\n    if (window.matchMedia('(prefers-color-scheme: light)').matches) {\n      return 'light';\n    }\n  }\n  return 'dark';\n}\n\nexport function getCurrentTheme(): AppTheme {\n  const saved = localStorage.getItem(THEME_STORAGE_KEY);\n  if (saved === 'dark' || saved === 'light' || saved === 'high-contrast') {\n    return saved;\n  }\n  return getSystemPreferredTheme();\n}\n\nexport function applyTheme(theme: AppTheme): void {\n  document.documentElement.setAttribute('data-theme', theme);\n  document.body.setAttribute('data-theme', theme);\n\n  // Update color-scheme meta for mobile browser chrome\n  let metaTheme = document.querySelector('meta[name=\"color-scheme\"]') as HTMLMetaElement;\n  if (!metaTheme) {\n    metaTheme = document.createElement('meta');\n    metaTheme.name = 'color-scheme';\n    document.head.appendChild(metaTheme);\n  }\n  metaTheme.content = theme === 'light' ? 'light' : 'dark';\n\n  listeners.forEach((cb) => cb(theme));\n}\n\nexport function setTheme(theme: AppTheme): void {\n  localStorage.setItem(THEME_STORAGE_KEY, theme);\n  applyTheme(theme);\n}\n\nexport function toggleTheme(): AppTheme {\n  const current = getCurrentTheme();\n  let next: AppTheme = 'dark';\n  if (current === 'dark') {\n    next = 'light';\n  } else if (current === 'light') {\n    next = 'high-contrast';\n  } else {\n    next = 'dark';\n  }\n  setTheme(next);\n  return next;\n}\n\nexport function onThemeChange(cb: ThemeChangeListener): () => void {\n  listeners.push(cb);\n  return () => {\n    const idx = listeners.indexOf(cb);\n    if (idx !== -1) listeners.splice(idx, 1);\n  };\n}\n\n/**\n * Initializes theme system:\n * 1. Checks localStorage override, or follows desktop prefers-color-scheme.\n * 2. Defaults to 'dark'.\n * 3. Listens for OS system theme changes.\n */\nexport function initTheme(): AppTheme {\n  const initial = getCurrentTheme();\n  applyTheme(initial);\n\n  if (typeof window !== 'undefined' && window.matchMedia) {\n    const mediaQuery = window.matchMedia('(prefers-color-scheme: light)');\n    const handleSystemChange = (e: MediaQueryListEvent) => {\n      const manualOverride = localStorage.getItem(THEME_STORAGE_KEY);\n      // If user hasn't explicitly set a preference, follow desktop theme\n      if (!manualOverride) {\n        applyTheme(e.matches ? 'light' : 'dark');\n      }\n    };\n\n    if (mediaQuery.addEventListener) {\n      mediaQuery.addEventListener(EVENT_CHANGE, handleSystemChange);\n    } else if ((mediaQuery as any).addListener) {\n      (mediaQuery as any).addListener(handleSystemChange);\n    }\n  }\n\n  return initial;\n}\n","/**\n * Browser Compatibility Checker\n * Verifies that the client browser meets modern standards (such as Zstandard compression)\n * and displays an actionable notice if an outdated browser is detected.\n */\n\nexport function isZstdSupported(): boolean {\n  const ua = navigator.userAgent;\n\n  // Check for Microsoft Edge (Chromium based)\n  const edgeMatch = ua.match(/Edg\\/(\\d+)/);\n  if (edgeMatch) {\n    return parseInt(edgeMatch[1], 10) >= 123;\n  }\n\n  // Check for Google Chrome / Chromium based browsers (Opera, Brave, Vivaldi, etc.)\n  const chromeMatch = ua.match(/Chrome\\/(\\d+)/);\n  if (chromeMatch) {\n    return parseInt(chromeMatch[1], 10) >= 123;\n  }\n\n  // Check for Mozilla Firefox\n  const firefoxMatch = ua.match(/Firefox\\/(\\d+)/);\n  if (firefoxMatch) {\n    return parseInt(firefoxMatch[1], 10) >= 126;\n  }\n\n  // Check for Apple Safari (desktop and iOS)\n  const safariVersionMatch = ua.match(/Version\\/(\\d+)/);\n  if (safariVersionMatch && ua.includes('Safari')) {\n    return parseInt(safariVersionMatch[1], 10) >= 18;\n  }\n  const iosMatch = ua.match(/OS (\\d+)_/);\n  if (iosMatch) {\n    return parseInt(iosMatch[1], 10) >= 18;\n  }\n\n  // Allow unknown / automated environments (e.g. headless tests)\n  return true;\n}\n\n/**\n * Generic browser compatibility check.\n * Evaluates core browser capabilities and returns whether the browser is supported.\n */\nexport function checkBrowserCompatibility(): boolean {\n  if (!isZstdSupported()) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Checks compatibility and renders a prominent notice banner if unsupported.\n * Returns true if compatible, false if incompatible.\n */\nexport function enforceBrowserCompatibility(): boolean {\n  if (checkBrowserCompatibility()) {\n    return true;\n  }\n\n  if (document.getElementById('browser-compat-banner')) {\n    return false;\n  }\n\n  const banner = document.createElement('div');\n  banner.id = 'browser-compat-banner';\n  banner.className = 'browser-compat-banner';\n  banner.setAttribute('role', 'alert');\n  banner.innerHTML = `\n    <div class=\"browser-compat-content\">\n      <div class=\"browser-compat-title\">\n        <svg class=\"browser-compat-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n          <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n          <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n        </svg>\n        <span>Your browser is not supported, please use one of these:</span>\n      </div>\n      <ul class=\"browser-compat-list\">\n        <li><strong>Google Chrome</strong> (version 123+)</li>\n        <li><strong>Mozilla Firefox</strong> (version 126+)</li>\n        <li><strong>Apple Safari</strong> (version 18+, iOS 18+)</li>\n        <li><strong>Microsoft Edge</strong> (version 123+)</li>\n      </ul>\n      <button class=\"browser-compat-dismiss\" id=\"browser-compat-dismiss-btn\" aria-label=\"Dismiss warning\">&times;</button>\n    </div>\n  `;\n\n  document.body.prepend(banner);\n\n  const dismissBtn = document.getElementById('browser-compat-dismiss-btn');\n  if (dismissBtn) {\n    dismissBtn.addEventListener('click', () => {\n      banner.remove();\n    });\n  }\n\n  return false;\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"mappings":"4rBACA,EAAO,QAAU,EAmBjB,SAAS,EAAU,EAAI,EAAmB,CAKtC,IAJA,IAAI,EAAc,MAAM,UAAU,OAAS,CAAC,EACxC,EAAU,EACV,EAAU,EACV,EAAU,GACP,EAAQ,UAAU,QACrB,EAAO,KAAY,UAAU,KACjC,OAAO,IAAI,QAAQ,SAAkB,EAAS,EAAQ,CAClD,EAAO,GAAU,SAAkB,EAAmB,CAClD,GAAI,EAAS,CAET,GADA,EAAU,GACN,EACA,EAAO,CAAG,MACT,CAGD,IAFA,IAAI,EAAa,MAAM,UAAU,OAAS,CAAC,EACvC,EAAS,EACN,EAAS,EAAO,QACnB,EAAO,KAAY,UAAU,GACjC,EAAQ,MAAM,KAAM,CAAM,CAC9B,CACJ,CACJ,EACA,GAAI,CACA,EAAG,MAAM,GAAO,KAAM,CAAM,CAChC,OAAS,EAAK,CACN,IACA,EAAU,GACV,EAAO,CAAG,EAElB,CACJ,CAAC,CACL,cC5CA,IAAI,EAAS,EAOb,EAAO,OAAS,SAAgB,EAAQ,CACpC,IAAI,EAAI,EAAO,OACf,GAAI,CAAC,EACD,MAAO,GACX,KAAO,EAAI,GAAK,EAAO,OAAO,EAAI,CAAC,IAAM,KACrC,EAAE,EACN,OAAO,KAAK,MAAM,EAAI,EAAI,CAAC,CAC/B,EASA,IAAK,IAND,EAAU,MAAM,EAAE,EAGlB,EAAU,MAAM,GAAG,EAGd,EAAI,EAAG,EAAI,IAChB,EAAI,EAAI,GAAK,EAAI,GAAK,EAAI,GAAK,EAAI,GAAK,EAAI,GAAK,EAAI,GAAK,EAAI,EAAI,EAAI,GAAK,IAAM,IAErF,EAAI,IAAM,GACV,EAAI,IAAM,GASV,EAAO,OAAS,SAAgB,EAAQ,EAAO,EAAK,CAMhD,IALA,IAAI,EAAQ,KACR,EAAQ,CAAC,EACT,EAAI,EACJ,EAAI,EACJ,EACG,EAAQ,GAAK,CAChB,IAAI,EAAI,EAAO,KACf,OAAQ,EAAR,CACI,IAAK,GACD,EAAM,KAAO,EAAI,GAAK,GACtB,GAAK,EAAI,IAAM,EACf,EAAI,EACJ,MACJ,IAAK,GACD,EAAM,KAAO,EAAI,EAAI,GAAK,GAC1B,GAAK,EAAI,KAAO,EAChB,EAAI,EACJ,MACJ,IAAK,GACD,EAAM,KAAO,EAAI,EAAI,GAAK,GAC1B,EAAM,KAAO,EAAI,EAAI,IACrB,EAAI,CAEZ,CACI,EAAI,QACH,AAAU,IAAQ,CAAC,EAAA,CAAI,KAAK,OAAO,aAAa,MAAM,OAAQ,CAAK,CAAC,EACrE,EAAI,EAEZ,CAYA,OAXI,IACA,EAAM,KAAO,EAAI,GACjB,EAAM,KAAO,GACT,IAAM,IACN,EAAM,KAAO,KAEjB,GACI,GACA,EAAM,KAAK,OAAO,aAAa,MAAM,OAAQ,EAAM,MAAM,EAAG,CAAC,CAAC,CAAC,EAC5D,EAAM,KAAK,EAAE,GAEjB,OAAO,aAAa,MAAM,OAAQ,EAAM,MAAM,EAAG,CAAC,CAAC,CAC9D,EAEA,IAAI,EAAkB,mBAUtB,EAAO,OAAS,SAAgB,EAAQ,EAAQ,EAAQ,CAIpD,IAAK,IAHD,EAAQ,EACR,EAAI,EACJ,EACK,EAAI,EAAG,EAAI,EAAO,QAAS,CAChC,IAAI,EAAI,EAAO,WAAW,GAAG,EAC7B,GAAI,IAAM,IAAM,EAAI,EAChB,MACJ,IAAK,EAAI,EAAI,MAAQ,IAAA,GACjB,MAAM,MAAM,CAAe,EAC/B,OAAQ,EAAR,CACI,IAAK,GACD,EAAI,EACJ,EAAI,EACJ,MACJ,IAAK,GACD,EAAO,KAAY,GAAK,GAAK,EAAI,KAAO,EACxC,EAAI,EACJ,EAAI,EACJ,MACJ,IAAK,GACD,EAAO,MAAa,EAAI,KAAO,GAAK,EAAI,KAAO,EAC/C,EAAI,EACJ,EAAI,EACJ,MACJ,IAAK,GACD,EAAO,MAAa,EAAI,IAAM,EAAI,EAClC,EAAI,CAEZ,CACJ,CACA,GAAI,IAAM,EACN,MAAM,MAAM,CAAe,EAC/B,OAAO,EAAS,CACpB,EAEA,IAAI,EAAW,mEACX,EAAc,OACd,EAAuB,yEAO3B,EAAO,KAAO,SAAc,EAAQ,CAChC,OAAO,EAAS,KAAK,CAAM,GACpB,EAAY,KAAK,CAAM,GAAK,EAAqB,KAAK,CAAM,CACvE,kBChJA,EAAO,QAAU,EAQjB,SAAS,GAAe,CAOpB,KAAK,WAAa,OAAO,OAAO,IAAI,CACxC,CAiBA,EAAa,UAAU,GAAK,SAAY,EAAK,EAAI,EAAK,CAKlD,OAJC,KAAK,WAAW,KAAS,KAAK,WAAW,GAAO,CAAC,GAAA,CAAI,KAAK,CACjD,KACN,IAAM,GAAO,IACjB,CAAC,EACM,IACX,EAQA,EAAa,UAAU,IAAM,SAAa,EAAK,EAAI,CAC/C,GAAI,IAAQ,IAAA,GACR,KAAK,WAAa,OAAO,OAAO,IAAI,OAEpC,GAAI,IAAO,IAAA,GACP,KAAK,WAAW,GAAO,CAAC,MACvB,CACD,IAAI,EAAY,KAAK,WAAW,GAChC,GAAI,CAAC,EACD,OAAO,KACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,QACtB,EAAU,EAAE,CAAC,KAAO,EACpB,EAAU,OAAO,EAAG,CAAC,EAErB,EAAE,CACd,CAEJ,OAAO,IACX,EAQA,EAAa,UAAU,KAAO,SAAc,EAAK,CAC7C,IAAI,EAAY,KAAK,WAAW,GAChC,GAAI,EAAW,CAGX,IAFA,IAAI,EAAO,CAAC,EACR,EAAI,EACD,EAAI,UAAU,QACjB,EAAK,KAAK,UAAU,IAAI,EAC5B,IAAK,EAAI,EAAG,EAAI,EAAU,QACtB,EAAU,EAAE,CAAC,GAAG,MAAM,EAAU,IAAI,CAAC,IAAK,CAAI,CACtD,CACA,OAAO,IACX,kBCnFA,EAAO,QAAU,EAAQ,CAAO,EAqFhC,SAAS,EAAQ,EAAS,CAwNtB,OArNI,OAAO,aAAiB,KAAc,UAAW,CAEjD,IAAI,EAAM,IAAI,aAAa,CAAE,EAAG,CAAC,EAC7B,EAAM,IAAI,WAAW,EAAI,MAAM,EAC/B,EAAM,EAAI,KAAO,IAErB,SAAS,EAAmB,EAAK,EAAK,EAAK,CACvC,EAAI,GAAK,EACT,EAAI,GAAW,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,EACvB,CAEA,SAAS,EAAmB,EAAK,EAAK,EAAK,CACvC,EAAI,GAAK,EACT,EAAI,GAAW,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,EACvB,CAGA,EAAQ,aAAe,EAAK,EAAqB,EAEjD,EAAQ,aAAe,EAAK,EAAqB,EAEjD,SAAS,EAAkB,EAAK,EAAK,CAKjC,MAJA,GAAI,GAAK,EAAI,GACb,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACZ,EAAI,EACf,CAEA,SAAS,EAAkB,EAAK,EAAK,CAKjC,MAJA,GAAI,GAAK,EAAI,GACb,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACZ,EAAI,EACf,CAGA,EAAQ,YAAc,EAAK,EAAoB,EAE/C,EAAQ,YAAc,EAAK,EAAoB,CAGnD,EAAA,CAAG,GAAS,UAAW,CAEnB,SAAS,EAAmB,EAAW,EAAK,EAAK,EAAK,CAClD,IAAI,EAAO,IAAM,GAGjB,GAFI,IACA,EAAM,CAAC,GACP,IAAQ,EACR,EAAU,EAAI,EAAM,EAAmB,EAAqB,WAAY,EAAK,CAAG,OAC/E,GAAI,MAAM,CAAG,EACd,EAAU,WAAY,EAAK,CAAG,OAC7B,GAAI,EAAM,qBACX,GAAW,GAAQ,GAAK,cAAgB,EAAG,EAAK,CAAG,OAClD,GAAI,EAAM,sBACX,GAAW,GAAQ,GAAK,KAAK,MAAM,EAAM,oBAAqB,KAAO,EAAG,EAAK,CAAG,MAC/E,CACD,IAAI,EAAW,KAAK,MAAM,KAAK,IAAI,CAAG,EAAI,KAAK,GAAG,EAC9C,EAAW,KAAK,MAAM,EAAe,GAAG,CAAC,EAAY,OAAO,EAAI,QACpE,GAAW,GAAQ,GAAK,EAAW,KAAO,GAAK,KAAc,EAAG,EAAK,CAAG,CAC5E,CACJ,CAEA,EAAQ,aAAe,EAAmB,KAAK,KAAM,CAAW,EAChE,EAAQ,aAAe,EAAmB,KAAK,KAAM,CAAW,EAEhE,SAAS,EAAkB,EAAU,EAAK,EAAK,CAC3C,IAAI,EAAO,EAAS,EAAK,CAAG,EACxB,GAAQ,GAAQ,IAAM,EAAI,EAC1B,EAAW,IAAS,GAAK,IACzB,EAAW,EAAO,QACtB,OAAO,IAAa,IACd,EACA,IACA,EAAO,MACP,IAAa,EACb,EAAO,qBAAwB,EAC/B,EAAgB,IAAG,EAAW,MAAQ,EAAW,QAC3D,CAEA,EAAQ,YAAc,EAAkB,KAAK,KAAM,CAAU,EAC7D,EAAQ,YAAc,EAAkB,KAAK,KAAM,CAAU,CAEjE,EAAA,CAAG,EAGC,OAAO,aAAiB,KAAc,UAAW,CAEjD,IAAI,EAAM,IAAI,aAAa,CAAC,EAAE,CAAC,EAC3B,EAAM,IAAI,WAAW,EAAI,MAAM,EAC/B,EAAM,EAAI,KAAO,IAErB,SAAS,EAAoB,EAAK,EAAK,EAAK,CACxC,EAAI,GAAK,EACT,EAAI,GAAW,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,EACvB,CAEA,SAAS,EAAoB,EAAK,EAAK,EAAK,CACxC,EAAI,GAAK,EACT,EAAI,GAAW,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,GACnB,EAAI,EAAM,GAAK,EAAI,EACvB,CAGA,EAAQ,cAAgB,EAAK,EAAsB,EAEnD,EAAQ,cAAgB,EAAK,EAAsB,EAEnD,SAAS,EAAmB,EAAK,EAAK,CASlC,MARA,GAAI,GAAK,EAAI,GACb,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACZ,EAAI,EACf,CAEA,SAAS,EAAmB,EAAK,EAAK,CASlC,MARA,GAAI,GAAK,EAAI,GACb,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACnB,EAAI,GAAK,EAAI,EAAM,GACZ,EAAI,EACf,CAGA,EAAQ,aAAe,EAAK,EAAqB,EAEjD,EAAQ,aAAe,EAAK,EAAqB,CAGrD,EAAA,CAAG,GAAS,UAAW,CAEnB,SAAS,EAAoB,EAAW,EAAM,EAAM,EAAK,EAAK,EAAK,CAC/D,IAAI,EAAO,IAAM,GAGjB,GAFI,IACA,EAAM,CAAC,GACP,IAAQ,EACR,EAAU,EAAG,EAAK,EAAM,CAAI,EAC5B,EAAU,EAAI,EAAM,EAAmB,EAAqB,WAAY,EAAK,EAAM,CAAI,OACpF,GAAI,MAAM,CAAG,EAChB,EAAU,EAAG,EAAK,EAAM,CAAI,EAC5B,EAAU,WAAY,EAAK,EAAM,CAAI,OAClC,GAAI,EAAM,sBACb,EAAU,EAAG,EAAK,EAAM,CAAI,EAC5B,GAAW,GAAQ,GAAK,cAAgB,EAAG,EAAK,EAAM,CAAI,MACvD,CACH,IAAI,EACJ,GAAI,EAAM,uBACN,EAAW,EAAM,OACjB,EAAU,IAAa,EAAG,EAAK,EAAM,CAAI,EACzC,GAAW,GAAQ,GAAK,EAAW,cAAgB,EAAG,EAAK,EAAM,CAAI,MAClE,CACH,IAAI,EAAW,KAAK,MAAM,KAAK,IAAI,CAAG,EAAI,KAAK,GAAG,EAC9C,IAAa,OACb,EAAW,MACf,EAAW,EAAe,GAAG,CAAC,EAC9B,EAAU,EAAW,mBAAqB,EAAG,EAAK,EAAM,CAAI,EAC5D,GAAW,GAAQ,GAAK,EAAW,MAAQ,GAAK,EAAW,QAAU,WAAa,EAAG,EAAK,EAAM,CAAI,CACxG,CACJ,CACJ,CAEA,EAAQ,cAAgB,EAAoB,KAAK,KAAM,EAAa,EAAG,CAAC,EACxE,EAAQ,cAAgB,EAAoB,KAAK,KAAM,EAAa,EAAG,CAAC,EAExE,SAAS,EAAmB,EAAU,EAAM,EAAM,EAAK,EAAK,CACxD,IAAI,EAAK,EAAS,EAAK,EAAM,CAAI,EAC7B,EAAK,EAAS,EAAK,EAAM,CAAI,EAC7B,GAAQ,GAAM,IAAM,EAAI,EACxB,EAAW,IAAO,GAAK,KACvB,EAAW,YAAc,EAAK,SAAW,EAC7C,OAAO,IAAa,KACd,EACA,IACA,EAAO,MACP,IAAa,EACb,EAAO,OAAS,EAChB,EAAgB,IAAG,EAAW,OAAS,EAAW,iBAC5D,CAEA,EAAQ,aAAe,EAAmB,KAAK,KAAM,EAAY,EAAG,CAAC,EACrE,EAAQ,aAAe,EAAmB,KAAK,KAAM,EAAY,EAAG,CAAC,CAEzE,EAAA,CAAG,EAEIA,CACX,CAIA,SAAS,EAAY,EAAK,EAAK,EAAK,CAChC,EAAI,GAAY,EAAa,IAC7B,EAAI,EAAM,GAAM,IAAQ,EAAK,IAC7B,EAAI,EAAM,GAAM,IAAQ,GAAK,IAC7B,EAAI,EAAM,GAAM,IAAQ,EAC5B,CAEA,SAAS,EAAY,EAAK,EAAK,EAAK,CAChC,EAAI,GAAY,IAAQ,GACxB,EAAI,EAAM,GAAM,IAAQ,GAAK,IAC7B,EAAI,EAAM,GAAM,IAAQ,EAAK,IAC7B,EAAI,EAAM,GAAM,EAAa,GACjC,CAEA,SAAS,EAAW,EAAK,EAAK,CAC1B,OAAQ,EAAI,GACJ,EAAI,EAAM,IAAM,EAChB,EAAI,EAAM,IAAM,GAChB,EAAI,EAAM,IAAM,MAAQ,CACpC,CAEA,SAAS,EAAW,EAAK,EAAK,CAC1B,OAAQ,EAAI,IAAY,GAChB,EAAI,EAAM,IAAM,GAChB,EAAI,EAAM,IAAM,EAChB,EAAI,EAAM,MAAQ,CAC9B,cCvUA,IAAI,EAAO,EACP,EAAe,IAAI,YAAY,QAAS,CAAE,UAAW,EAAK,CAAC,EAC3D,EACA,EAA0B,GAE9B,GAAI,CACA,EAAgB,IAAI,YAAY,QAAS,CAAE,MAAO,GAAM,UAAW,EAAK,CAAC,CAC7E,MAAc,CAEV,EAAgB,CACpB,CAOA,EAAK,OAAS,SAAqB,EAAQ,CAGvC,IAAK,IAFD,EAAM,EACN,EAAI,EACC,EAAI,EAAG,EAAI,EAAO,OAAQ,EAAE,EACjC,EAAI,EAAO,WAAW,CAAC,EACnB,EAAI,IACJ,GAAO,EACF,EAAI,KACT,GAAO,GACD,EAAI,QAAY,QAAW,EAAO,WAAW,EAAI,CAAC,EAAI,QAAY,OACxE,EAAE,EACF,GAAO,GAEP,GAAO,EAEf,OAAO,CACX,EAEA,SAAS,EAAkB,EAAS,EAAQ,EAAO,EAAK,CACpD,IAAI,EAAS,IAAU,GAAK,IAAQ,EAAO,OACrC,EACA,EAAO,SAAS,EAAO,CAAG,EAChC,OAAO,EAAQ,OAAO,CAAM,CAChC,CASA,EAAK,KAAO,SAAyB,EAAQ,EAAO,EAAK,CACrD,GAAI,EAAM,EAAQ,EACd,MAAO,GACX,GAAI,EAAM,GAAS,EACf,OAAO,EAAkB,EAAc,EAAQ,EAAO,CAAG,EAM7D,IAJA,IAAI,EAAM,GACN,EAAI,EACJ,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAEzB,EAAI,EAAI,EAAK,GAAK,EAAG,CASxB,GARA,EAAK,EAAO,GACZ,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,IACX,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GAAM,IAC1C,OAAO,EAAM,EAAkB,EAAc,EAAQ,EAAG,CAAG,EAC/D,GAAO,OAAO,aAAa,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CAAE,CAC7D,CAEA,KAAO,EAAI,EAAK,EAAE,EAAG,CAEjB,GADA,EAAK,EAAO,GACR,EAAK,IACL,OAAO,EAAM,EAAkB,EAAc,EAAQ,EAAG,CAAG,EAC/D,GAAO,OAAO,aAAa,CAAE,CACjC,CAEA,OAAO,CACX,EASA,EAAK,WAAa,SAA0B,EAAQ,EAAO,EAAK,CAC5D,GAAI,EAAM,EAAQ,EACd,MAAO,GACX,GAAI,EAAM,GAAS,EACf,OAAO,EAAkB,EAAe,EAAQ,EAAO,CAAG,EAM9D,IAJA,IAAI,EAAM,GACN,EAAI,EACJ,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAEzB,EAAI,EAAI,EAAK,GAAK,EAAG,CASxB,GARA,EAAK,EAAO,GACZ,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,GAChB,EAAK,EAAO,EAAI,IACX,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GAAM,IAC1C,OAAO,EAAM,EAAkB,EAAe,EAAQ,EAAG,CAAG,EAChE,GAAO,OAAO,aAAa,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CAAE,CAC7D,CAEA,KAAO,EAAI,EAAK,EAAE,EAAG,CAEjB,GADA,EAAK,EAAO,GACR,EAAK,IACL,OAAO,EAAM,EAAkB,EAAe,EAAQ,EAAG,CAAG,EAChE,GAAO,OAAO,aAAa,CAAE,CACjC,CAEA,OAAO,CACX,EASA,EAAK,MAAQ,SAAoB,EAAQ,EAAQ,EAAQ,CAIrD,IAAK,IAHD,EAAQ,EACR,EACA,EACK,EAAI,EAAG,EAAI,EAAO,OAAQ,EAAE,EACjC,EAAK,EAAO,WAAW,CAAC,EACpB,EAAK,IACL,EAAO,KAAY,EACZ,EAAK,MACZ,EAAO,KAAY,GAAM,EAAU,IACnC,EAAO,KAAY,EAAW,GAAK,MAC3B,EAAK,QAAY,SAAY,EAAK,EAAO,WAAW,EAAI,CAAC,GAAK,QAAY,OAClF,EAAK,QAAY,EAAK,OAAW,KAAO,EAAK,MAC7C,EAAE,EACF,EAAO,KAAY,GAAM,GAAU,IACnC,EAAO,KAAY,GAAM,GAAK,GAAK,IACnC,EAAO,KAAY,GAAM,EAAK,GAAK,IACnC,EAAO,KAAY,EAAW,GAAK,MAEnC,EAAO,KAAY,GAAM,GAAU,IACnC,EAAO,KAAY,GAAM,EAAK,GAAK,IACnC,EAAO,KAAY,EAAW,GAAK,KAG3C,OAAO,EAAS,CACpB,kBClKA,EAAO,QAAU,EA6BjB,SAAS,EAAK,EAAO,EAAO,EAAM,CAC9B,IAAI,EAAS,GAAQ,KACjB,EAAS,IAAS,EAClB,EAAS,KACT,EAAS,EACb,OAAO,SAAoB,EAAM,CAC7B,GAAI,EAAO,GAAK,EAAO,EACnB,OAAO,EAAM,CAAI,EACjB,EAAS,EAAO,IAChB,EAAO,EAAM,CAAI,EACjB,EAAS,GAEb,IAAI,EAAM,EAAM,KAAK,EAAM,EAAQ,GAAU,CAAI,EAGjD,OAFI,EAAS,IACT,GAAU,EAAS,GAAK,GACrB,CACX,CACJ,kBC9CA,EAAO,QAAU,EAEjB,IAAI,EAUJ,SAAS,EAAS,EAAI,EAAI,CAStB,KAAK,GAAK,IAAO,EAMjB,KAAK,GAAK,IAAO,CACrB,CAOA,IAAI,EAAO,EAAS,KAAO,IAAI,EAAS,EAAG,CAAC,EAE5C,EAAK,SAAW,UAAW,CAAE,MAAO,EAAG,EACvC,EAAK,SAAW,EAAK,SAAW,UAAW,CAAE,OAAO,IAAM,EAC1D,EAAK,OAAS,UAAW,CAAE,MAAO,EAAG,EAOrC,IAAI,EAAW,EAAS,SAAW,mBAOnC,EAAS,WAAa,SAAoB,EAAO,CAC7C,GAAI,IAAU,EACV,OAAO,EACX,IAAI,EAAO,EAAQ,EACf,IACA,EAAQ,CAAC,GACb,IAAI,EAAK,IAAU,EACf,GAAM,EAAQ,GAAM,aAAe,EAUvC,OATI,IACA,EAAK,CAAC,IAAO,EACb,EAAK,CAAC,IAAO,EACT,EAAE,EAAK,aACP,EAAK,EACD,EAAE,EAAK,aACP,EAAK,KAGV,IAAI,EAAS,EAAI,CAAE,CAC9B,EAOA,EAAS,KAAO,SAAc,EAAO,CACjC,GAAI,OAAO,GAAU,SACjB,OAAO,EAAS,WAAW,CAAK,EACpC,GAAI,OAAO,GAAU,UAAY,aAAiB,OAAQ,CAEtD,GAAI,EACA,EAAQ,EAAK,WAAW,CAAK,OAE7B,OAAO,EAAS,WAAW,SAAS,EAAO,EAAE,CAAC,CACtD,CACA,OAAO,EAAM,KAAO,EAAM,KAAO,IAAI,EAAS,EAAM,MAAQ,EAAG,EAAM,OAAS,CAAC,EAAI,CACvF,EAOA,EAAS,UAAU,SAAW,SAAkB,EAAU,CACtD,GAAI,CAAC,GAAY,KAAK,KAAO,GAAI,CAC7B,IAAI,EAAK,CAAC,KAAK,GAAK,IAAM,EACtB,EAAK,CAAC,KAAK,KAAW,EAG1B,OAFK,IACD,EAAK,EAAK,IAAM,GACb,EAAE,EAAK,EAAK,WACvB,CACA,OAAO,KAAK,GAAK,KAAK,GAAK,UAC/B,EAOA,EAAS,UAAU,OAAS,SAAgB,EAAU,CAClD,OAAO,EACD,IAAI,EAAK,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAQ,CAAS,EAEpD,CAAE,IAAK,KAAK,GAAK,EAAG,KAAM,KAAK,GAAK,EAAG,SAAU,EAAQ,CAAU,CAC7E,EAEA,IAAI,EAAa,OAAO,UAAU,WAOlC,EAAS,SAAW,SAAkB,EAAM,CAGxC,OAFI,IAAS,EACF,EACJ,IAAI,GACL,EAAW,KAAK,EAAM,CAAC,EACvB,EAAW,KAAK,EAAM,CAAC,GAAK,EAC5B,EAAW,KAAK,EAAM,CAAC,GAAK,GAC5B,EAAW,KAAK,EAAM,CAAC,GAAK,MAAQ,GAEpC,EAAW,KAAK,EAAM,CAAC,EACvB,EAAW,KAAK,EAAM,CAAC,GAAK,EAC5B,EAAW,KAAK,EAAM,CAAC,GAAK,GAC5B,EAAW,KAAK,EAAM,CAAC,GAAK,MAAQ,CAC1C,CACJ,EAMA,EAAS,UAAU,OAAS,UAAkB,CAC1C,OAAO,OAAO,aACV,KAAK,GAAY,IACjB,KAAK,KAAO,EAAK,IACjB,KAAK,KAAO,GAAK,IACjB,KAAK,KAAO,GACZ,KAAK,GAAY,IACjB,KAAK,KAAO,EAAK,IACjB,KAAK,KAAO,GAAK,IACjB,KAAK,KAAO,EAChB,CACJ,EAMA,EAAS,UAAU,SAAW,UAAoB,CAC9C,IAAI,EAAS,KAAK,IAAM,GAGxB,MAFA,MAAK,KAAQ,KAAK,IAAM,EAAI,KAAK,KAAO,IAAM,KAAU,EACxD,KAAK,IAAQ,KAAK,IAAM,EAAsB,KAAU,EACjD,IACX,EAMA,EAAS,UAAU,SAAW,UAAoB,CAC9C,IAAI,EAAO,EAAE,KAAK,GAAK,GAGvB,MAFA,MAAK,KAAQ,KAAK,KAAO,EAAI,KAAK,IAAM,IAAM,KAAU,EACxD,KAAK,IAAQ,KAAK,KAAO,EAAqB,KAAU,EACjD,IACX,EAMA,EAAS,UAAU,OAAS,UAAkB,CAC1C,IAAI,EAAS,KAAK,GACd,GAAS,KAAK,KAAO,GAAK,KAAK,IAAM,KAAO,EAC5C,EAAS,KAAK,KAAO,GACzB,OAAO,IAAU,EACV,IAAU,EACR,EAAQ,MACN,EAAQ,IAAM,EAAI,EAClB,EAAQ,QAAU,EAAI,EACxB,EAAQ,MACN,EAAQ,IAAM,EAAI,EAClB,EAAQ,QAAU,EAAI,EAC1B,EAAQ,IAAM,EAAI,EAC7B,EAEA,EAAS,WAAa,SAAS,EAAO,CAClC,EAAO,CACX,mBC1MC,SAAU,EAAQ,EAAS,CAC1B,SAAS,EAAc,EAAS,CAC9B,OAAOC,EAAQ,SAAWA,CAC5B,CACI,OAAO,QAAW,YAAc,OAAO,IACzC,OAAO,CAAC,EAAG,UAAY,CACrB,IAAIA,EAAU,CAAC,EAEf,OADA,EAAQA,CAAO,EACR,EAAcA,CAAO,CAC9B,CAAC,EACQ,OAAO,GAAY,UAC5B,EAAQ,CAAO,EACX,OAAO,GAAW,WAAU,EAAO,QAAU,EAAc,CAAO,KAErE,UAAY,CACX,IAAIA,EAAU,CAAC,EACf,EAAQA,CAAO,EACf,EAAO,KAAO,EAAcA,CAAO,CACrC,EAAA,CAAG,CAEP,EAAA,CACE,OAAO,WAAe,IAClB,WACA,OAAO,KAAS,IACd,KAAA,EAEN,SAAU,EAAU,CAGlB,OAAO,eAAe,EAAU,aAAc,CAC5C,MAAO,EACT,CAAC,EACD,EAAS,QAAU,IAAK,GAsBxB,IAAI,EAAO,KAC+B,EAAO,KAYjD,SAAS,EAAK,EAAK,EAAM,EAAU,CAKjC,KAAK,IAAM,EAAM,EAMjB,KAAK,KAAO,EAAO,EAMnB,KAAK,SAAW,CAAC,CAAC,CACpB,CAyBA,EAAK,UAAU,WACf,OAAO,eAAe,EAAK,UAAW,aAAc,CAClD,MAAO,EACT,CAAC,EAQD,SAAS,EAAO,EAAK,CACnB,OAAQ,GAAO,EAAI,cAAmB,EACxC,CAQA,SAAS,EAAM,EAAO,CACpB,IAAI,EAAI,KAAK,MAAM,EAAQ,CAAC,CAAK,EACjC,OAAO,EAAQ,GAAK,EAAI,CAC1B,CAQA,EAAK,OAAS,EAOd,IAAI,EAAY,CAAC,EAOb,EAAa,CAAC,EAQlB,SAAS,EAAQ,EAAO,EAAU,CAChC,IAAI,EAAK,EAAW,EAkBlB,OAjBE,GACF,KAAW,GACN,EAAQ,GAAK,GAAS,EAAQ,OACjC,EAAY,EAAW,GACnB,GAAkB,GAExB,EAAM,EAAS,EAAO,EAAG,EAAI,EACzB,IAAO,EAAW,GAAS,GACxB,KAEP,GAAS,GACJ,EAAQ,MAAQ,GAAS,EAAQ,OACpC,EAAY,EAAU,GAClB,GAAkB,GAExB,EAAM,EAAS,EAAO,EAAQ,EAAI,GAAK,EAAG,EAAK,EAC3C,IAAO,EAAU,GAAS,GACvB,GAEX,CASA,EAAK,QAAU,EAQf,SAAS,EAAW,EAAO,EAAU,CACnC,GAAI,MAAM,CAAK,EAAG,OAAO,EAAW,EAAQ,EAC5C,GAAI,EAAU,CACZ,GAAI,EAAQ,EAAG,OAAO,EACtB,GAAI,GAAS,EAAgB,OAAO,CACtC,KAAO,CACL,GAAI,GAAS,CAAC,EAAgB,OAAO,EACrC,GAAI,EAAQ,GAAK,EAAgB,OAAO,CAC1C,CAEA,OADI,EAAQ,EAAU,EAAW,CAAC,EAAO,CAAQ,CAAC,CAAC,IAAI,EAChD,EACL,EAAQ,EAAiB,EACxB,EAAQ,EAAkB,EAC3B,CACF,CACF,CASA,EAAK,WAAa,EASlB,SAAS,EAAS,EAAS,EAAU,EAAU,CAC7C,OAAO,IAAI,EAAK,EAAS,EAAU,CAAQ,CAC7C,CAWA,EAAK,SAAW,EAShB,IAAI,EAAU,KAAK,IASnB,SAAS,EAAW,EAAK,EAAU,EAAO,CACxC,GAAI,EAAI,SAAW,EAAG,MAAM,MAAM,cAAc,EAQhD,GAPI,OAAO,GAAa,UAEtB,EAAQ,EACR,EAAW,IAEX,EAAW,CAAC,CAAC,EAGb,IAAQ,OACR,IAAQ,YACR,IAAQ,aACR,IAAQ,YAER,OAAO,EAAW,EAAQ,EAE5B,GADA,IAAiB,GACb,EAAQ,GAAK,GAAK,EAAO,MAAM,WAAW,OAAO,EACrD,IAAI,EACJ,IAAK,EAAI,EAAI,QAAQ,GAAG,GAAK,EAAG,MAAM,MAAM,iBAAiB,EACxD,GAAI,IAAM,EACb,OAAO,EAAW,EAAI,UAAU,CAAC,EAAG,EAAU,CAAK,CAAC,CAAC,IAAI,EAO3D,IAAK,IAFD,EAAe,EAAW,EAAQ,EAAO,CAAC,CAAC,EAC3C,EAAS,EACJ,EAAI,EAAG,EAAI,EAAI,OAAQ,GAAK,EAAG,CACtC,IAAI,EAAO,KAAK,IAAI,EAAG,EAAI,OAAS,CAAC,EACnC,EAAQ,SAAS,EAAI,UAAU,EAAG,EAAI,CAAI,EAAG,CAAK,EACpD,GAAI,EAAO,EAAG,CACZ,IAAI,EAAQ,EAAW,EAAQ,EAAO,CAAI,CAAC,EAC3C,EAAS,EAAO,IAAI,CAAK,CAAC,CAAC,IAAI,EAAW,CAAK,CAAC,CAClD,KACE,GAAS,EAAO,IAAI,CAAY,EAChC,EAAS,EAAO,IAAI,EAAW,CAAK,CAAC,CAEzC,CAEA,MADA,GAAO,SAAW,EACX,CACT,CAUA,EAAK,WAAa,EASlB,SAAS,EAAU,EAAK,EAAU,CAIhC,OAHI,OAAO,GAAQ,SAAiB,EAAW,EAAK,CAAQ,EACxD,OAAO,GAAQ,SAAiB,EAAW,EAAK,CAAQ,EAErD,EACL,EAAI,IACJ,EAAI,KACJ,OAAO,GAAa,UAAY,EAAW,EAAI,QACjD,CACF,CASA,EAAK,UAAY,EAUjB,IAAI,EAAiB,MAOjB,EAAiB,GAAK,GAOtB,EAAiB,EAAiB,EAOlC,EAAiB,EAAiB,EAOlC,EAAiB,EAAiB,EAOlC,EAAa,EAAQ,CAAc,EAMnC,EAAO,EAAQ,CAAC,EAMpB,EAAK,KAAO,EAMZ,IAAI,EAAQ,EAAQ,EAAG,EAAI,EAM3B,EAAK,MAAQ,EAMb,IAAI,EAAM,EAAQ,CAAC,EAMnB,EAAK,IAAM,EAMX,IAAI,EAAO,EAAQ,EAAG,EAAI,EAM1B,EAAK,KAAO,EAMZ,IAAI,EAAU,EAAQ,EAAE,EAMxB,EAAK,QAAU,EAMf,IAAI,EAAY,EAAS,GAAgB,WAAgB,EAAK,EAM9D,EAAK,UAAY,EAMjB,IAAI,EAAqB,EAAS,GAAgB,GAAgB,EAAI,EAMtE,EAAK,mBAAqB,EAM1B,IAAI,EAAY,EAAS,EAAG,YAAgB,EAAK,EAMjD,EAAK,UAAY,EAMjB,IAAI,EAAgB,EAAK,UAOzB,EAAc,MAAQ,UAAiB,CACrC,OAAO,KAAK,SAAW,KAAK,MAAQ,EAAI,KAAK,GAC/C,EAOA,EAAc,SAAW,UAAoB,CAG3C,OAFI,KAAK,UACC,KAAK,OAAS,GAAK,GAAkB,KAAK,MAAQ,GACrD,KAAK,KAAO,GAAkB,KAAK,MAAQ,EACpD,EAUA,EAAc,SAAW,SAAkB,EAAO,CAEhD,GADA,IAAiB,GACb,EAAQ,GAAK,GAAK,EAAO,MAAM,WAAW,OAAO,EACrD,GAAI,KAAK,OAAO,EAAG,MAAO,IAC1B,GAAI,KAAK,WAAW,EAAG,CAErB,GAAI,KAAK,GAAG,CAAS,EAAG,CAGtB,IAAI,EAAY,EAAW,CAAK,EAC9B,EAAM,KAAK,IAAI,CAAS,EACxB,EAAO,EAAI,IAAI,CAAS,CAAC,CAAC,IAAI,IAAI,EACpC,OAAO,EAAI,SAAS,CAAK,EAAI,EAAK,MAAM,CAAC,CAAC,SAAS,CAAK,CAC1D,CAAO,MAAO,IAAM,KAAK,IAAI,CAAC,CAAC,SAAS,CAAK,CAC/C,CAOA,IAHA,IAAI,EAAe,EAAW,EAAQ,EAAO,CAAC,EAAG,KAAK,QAAQ,EAC5D,EAAM,KACJ,EAAS,KACA,CACX,IAAI,EAAS,EAAI,IAAI,CAAY,EAE/B,GADS,EAAI,IAAI,EAAO,IAAI,CAAY,CAAC,CAAC,CAAC,MAAM,IAAM,EAAA,CACvC,SAAS,CAAK,EAEhC,GADA,EAAM,EACF,EAAI,OAAO,EAAG,OAAO,EAAS,EAEhC,KAAO,EAAO,OAAS,GAAG,EAAS,IAAM,EACzC,EAAS,GAAK,EAAS,CAE3B,CACF,EAOA,EAAc,YAAc,UAAuB,CACjD,OAAO,KAAK,IACd,EAOA,EAAc,oBAAsB,UAA+B,CACjE,OAAO,KAAK,OAAS,CACvB,EAOA,EAAc,WAAa,UAAsB,CAC/C,OAAO,KAAK,GACd,EAOA,EAAc,mBAAqB,UAA8B,CAC/D,OAAO,KAAK,MAAQ,CACtB,EAOA,EAAc,cAAgB,UAAyB,CACrD,GAAI,KAAK,WAAW,EAElB,OAAO,KAAK,GAAG,CAAS,EAAI,GAAK,KAAK,IAAI,CAAC,CAAC,cAAc,EAE5D,IAAK,IADD,EAAM,KAAK,MAAQ,EAAgB,KAAK,IAAjB,KAAK,KACvB,EAAM,GAAI,EAAM,GAAe,IAAO,GAAK,GAAxB,KAC5B,OAAO,KAAK,MAAQ,EAAe,EAAM,EAAjB,EAAM,EAChC,EAOA,EAAc,cAAgB,UAAyB,CAErD,IAAI,EAAY,KAAK,MAAQ,GAM7B,MAJA,CAAK,GAEL,CAAI,KAAK,UAEF,IAAc,KAAQ,KAAK,MAAQ,GAAK,KAAK,OAAS,SAC/D,EAOA,EAAc,OAAS,UAAkB,CACvC,OAAO,KAAK,OAAS,GAAK,KAAK,MAAQ,CACzC,EAMA,EAAc,IAAM,EAAc,OAOlC,EAAc,WAAa,UAAsB,CAC/C,MAAO,CAAC,KAAK,UAAY,KAAK,KAAO,CACvC,EAOA,EAAc,WAAa,UAAsB,CAC/C,OAAO,KAAK,UAAY,KAAK,MAAQ,CACvC,EAOA,EAAc,MAAQ,UAAiB,CACrC,OAAQ,KAAK,IAAM,IAAO,CAC5B,EAOA,EAAc,OAAS,UAAkB,CACvC,MAAA,EAAQ,KAAK,IAAM,EACrB,EAQA,EAAc,OAAS,SAAgB,EAAO,CAQ5C,OAPK,EAAO,CAAK,IAAG,EAAQ,EAAU,CAAK,GAEzC,KAAK,WAAa,EAAM,UACxB,KAAK,OAAS,IAAO,GACrB,EAAM,OAAS,IAAO,EAEf,GACF,KAAK,OAAS,EAAM,MAAQ,KAAK,MAAQ,EAAM,GACxD,EAQA,EAAc,GAAK,EAAc,OAQjC,EAAc,UAAY,SAAmB,EAAO,CAClD,MAAO,CAAC,KAAK,GAAmB,CAAK,CACvC,EAQA,EAAc,IAAM,EAAc,UAQlC,EAAc,GAAK,EAAc,UAQjC,EAAc,SAAW,SAAkB,EAAO,CAChD,OAAO,KAAK,KAAqB,CAAK,EAAI,CAC5C,EAQA,EAAc,GAAK,EAAc,SAQjC,EAAc,gBAAkB,SAAyB,EAAO,CAC9D,OAAO,KAAK,KAAqB,CAAK,GAAK,CAC7C,EAQA,EAAc,IAAM,EAAc,gBAQlC,EAAc,GAAK,EAAc,gBAQjC,EAAc,YAAc,SAAqB,EAAO,CACtD,OAAO,KAAK,KAAqB,CAAK,EAAI,CAC5C,EAQA,EAAc,GAAK,EAAc,YAQjC,EAAc,mBAAqB,SAA4B,EAAO,CACpE,OAAO,KAAK,KAAqB,CAAK,GAAK,CAC7C,EAQA,EAAc,IAAM,EAAc,mBAQlC,EAAc,GAAK,EAAc,mBASjC,EAAc,QAAU,SAAiB,EAAO,CAE9C,GADK,EAAO,CAAK,IAAG,EAAQ,EAAU,CAAK,GACvC,KAAK,GAAG,CAAK,EAAG,MAAO,GAC3B,IAAI,EAAU,KAAK,WAAW,EAC5B,EAAW,EAAM,WAAW,EAM9B,OALI,GAAW,CAAC,EAAiB,GAC7B,CAAC,GAAW,EAAiB,EAE5B,KAAK,SAEH,EAAM,OAAS,EAAI,KAAK,OAAS,GACrC,EAAM,OAAS,KAAK,MAAQ,EAAM,MAAQ,EAAI,KAAK,MAAQ,EAC1D,GACA,EALuB,KAAK,IAAI,CAAK,CAAC,CAAC,WAAW,EAAI,GAAK,CAMjE,EASA,EAAc,KAAO,EAAc,QAOnC,EAAc,OAAS,UAAkB,CAEvC,MADI,CAAC,KAAK,UAAY,KAAK,GAAG,CAAS,EAAU,EAC1C,KAAK,IAAI,CAAC,CAAC,IAAI,CAAG,CAC3B,EAOA,EAAc,IAAM,EAAc,OAQlC,EAAc,IAAM,SAAa,EAAQ,CAClC,EAAO,CAAM,IAAG,EAAS,EAAU,CAAM,GAI9C,IAAI,EAAM,KAAK,OAAS,GACpB,EAAM,KAAK,KAAO,MAClB,EAAM,KAAK,MAAQ,GACnB,EAAM,KAAK,IAAM,MACjB,EAAM,EAAO,OAAS,GACtB,EAAM,EAAO,KAAO,MACpB,EAAM,EAAO,MAAQ,GACrB,EAAM,EAAO,IAAM,MACnB,EAAM,EACR,EAAM,EACN,EAAM,EACN,EAAM,EAYR,MAXA,IAAO,EAAM,EACb,GAAO,IAAQ,GACf,GAAO,MACP,GAAO,EAAM,EACb,GAAO,IAAQ,GACf,GAAO,MACP,GAAO,EAAM,EACb,GAAO,IAAQ,GACf,GAAO,MACP,GAAO,EAAM,EACb,GAAO,MACA,EAAU,GAAO,GAAM,EAAM,GAAO,GAAM,EAAK,KAAK,QAAQ,CACrE,EAQA,EAAc,SAAW,SAAkB,EAAY,CAErD,OADK,EAAO,CAAU,IAAG,EAAa,EAAU,CAAU,GACnD,KAAK,IAAI,EAAW,IAAI,CAAC,CAClC,EAQA,EAAc,IAAM,EAAc,SAQlC,EAAc,SAAW,SAAkB,EAAY,CACrD,GAAI,KAAK,OAAO,EAAG,OAAO,KAI1B,GAHK,EAAO,CAAU,IAAG,EAAa,EAAU,CAAU,GAGtD,EAOF,OAAO,EANG,EAAK,IACb,KAAK,IACL,KAAK,KACL,EAAW,IACX,EAAW,IAEK,EAAG,EAAK,SAAY,EAAG,KAAK,QAAQ,EAExD,GAAI,EAAW,OAAO,EAAG,OAAO,KAAK,SAAW,EAAQ,EACxD,GAAI,KAAK,GAAG,CAAS,EAAG,OAAO,EAAW,MAAM,EAAI,EAAY,EAChE,GAAI,EAAW,GAAG,CAAS,EAAG,OAAO,KAAK,MAAM,EAAI,EAAY,EAChE,GAAI,KAAK,WAAW,EAEb,OADD,EAAW,WAAW,EAAU,KAAK,IAAI,CAAC,CAAC,IAAI,EAAW,IAAI,CAAC,EACvD,KAAK,IAAI,CAAC,CAAC,IAAI,CAAU,CAAC,CAAC,IAAI,EACtC,GAAI,EAAW,WAAW,EAC/B,OAAO,KAAK,IAAI,EAAW,IAAI,CAAC,CAAC,CAAC,IAAI,EAGxC,GAAI,KAAK,GAAG,CAAU,GAAK,EAAW,GAAG,CAAU,EACjD,OAAO,EACL,KAAK,SAAS,EAAI,EAAW,SAAS,EACtC,KAAK,QACP,EAKF,IAAI,EAAM,KAAK,OAAS,GACpB,EAAM,KAAK,KAAO,MAClB,EAAM,KAAK,MAAQ,GACnB,EAAM,KAAK,IAAM,MACjB,EAAM,EAAW,OAAS,GAC1B,EAAM,EAAW,KAAO,MACxB,EAAM,EAAW,MAAQ,GACzB,EAAM,EAAW,IAAM,MACvB,EAAM,EACR,EAAM,EACN,EAAM,EACN,EAAM,EAqBR,MApBA,IAAO,EAAM,EACb,GAAO,IAAQ,GACf,GAAO,MACP,GAAO,EAAM,EACb,GAAO,IAAQ,GACf,GAAO,MACP,GAAO,EAAM,EACb,GAAO,IAAQ,GACf,GAAO,MACP,GAAO,EAAM,EACb,GAAO,IAAQ,GACf,GAAO,MACP,GAAO,EAAM,EACb,GAAO,IAAQ,GACf,GAAO,MACP,GAAO,EAAM,EACb,GAAO,IAAQ,GACf,GAAO,MACP,GAAO,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACjD,GAAO,MACA,EAAU,GAAO,GAAM,EAAM,GAAO,GAAM,EAAK,KAAK,QAAQ,CACrE,EAQA,EAAc,IAAM,EAAc,SASlC,EAAc,OAAS,SAAgB,EAAS,CAE9C,GADK,EAAO,CAAO,IAAG,EAAU,EAAU,CAAO,GAC7C,EAAQ,OAAO,EAAG,MAAM,MAAM,kBAAkB,EAGpD,GAAI,EAmBF,MAdE,CAAC,KAAK,UACN,KAAK,OAAS,aACd,EAAQ,MAAQ,IAChB,EAAQ,OAAS,GAGV,KAQF,GANI,KAAK,SAAW,EAAK,MAAW,EAAK,MAAA,CAC9C,KAAK,IACL,KAAK,KACL,EAAQ,IACR,EAAQ,IAEQ,EAAG,EAAK,SAAY,EAAG,KAAK,QAAQ,EAExD,GAAI,KAAK,OAAO,EAAG,OAAO,KAAK,SAAW,EAAQ,EAClD,IAAI,EAAQ,EAAK,EACjB,GAAK,KAAK,SAyBH,CAIL,GADK,EAAQ,WAAU,EAAU,EAAQ,WAAW,GAChD,EAAQ,GAAG,IAAI,EAAG,OAAO,EAC7B,GAAI,EAAQ,GAAG,KAAK,KAAK,CAAC,CAAC,EAEzB,OAAO,EACT,EAAM,CACR,KAlCoB,CAGlB,GAAI,KAAK,GAAG,CAAS,EAaf,OAZA,EAAQ,GAAG,CAAG,GAAK,EAAQ,GAAG,CAAO,EAChC,EACA,EAAQ,GAAG,CAAS,EAAU,GAIrC,EADe,KAAK,IAAI,CACR,CAAC,CAAC,IAAI,CAAO,CAAC,CAAC,IAAI,CAAC,EAChC,EAAO,GAAG,CAAI,EACT,EAAQ,WAAW,EAAI,EAAM,GAEpC,EAAM,KAAK,IAAI,EAAQ,IAAI,CAAM,CAAC,EAClC,EAAM,EAAO,IAAI,EAAI,IAAI,CAAO,CAAC,EAC1B,IAGN,GAAI,EAAQ,GAAG,CAAS,EAAG,OAAO,KAAK,SAAW,EAAQ,EACjE,GAAI,KAAK,WAAW,EAElB,OADI,EAAQ,WAAW,EAAU,KAAK,IAAI,CAAC,CAAC,IAAI,EAAQ,IAAI,CAAC,EACtD,KAAK,IAAI,CAAC,CAAC,IAAI,CAAO,CAAC,CAAC,IAAI,EAC9B,GAAI,EAAQ,WAAW,EAAG,OAAO,KAAK,IAAI,EAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EACpE,EAAM,CACR,CAiBA,IADA,EAAM,KACC,EAAI,IAAI,CAAO,GAAG,CAGvB,EAAS,KAAK,IAAI,EAAG,KAAK,MAAM,EAAI,SAAS,EAAI,EAAQ,SAAS,CAAC,CAAC,EAUpE,IANA,IAAI,EAAO,KAAK,KAAK,KAAK,IAAI,CAAM,EAAI,KAAK,GAAG,EAC9C,EAAQ,GAAQ,GAAK,EAAI,EAAQ,EAAG,EAAO,EAAE,EAG7C,EAAY,EAAW,CAAM,EAC7B,EAAY,EAAU,IAAI,CAAO,EAC5B,EAAU,WAAW,GAAK,EAAU,GAAG,CAAG,GAC/C,GAAU,EACV,EAAY,EAAW,EAAQ,KAAK,QAAQ,EAC5C,EAAY,EAAU,IAAI,CAAO,EAK/B,EAAU,OAAO,IAAG,EAAY,GACpC,EAAM,EAAI,IAAI,CAAS,EACvB,EAAM,EAAI,IAAI,CAAS,CACzB,CACA,OAAO,CACT,EAQA,EAAc,IAAM,EAAc,OAQlC,EAAc,OAAS,SAAgB,EAAS,CAa9C,OAZK,EAAO,CAAO,IAAG,EAAU,EAAU,CAAO,GAG7C,EAOK,GANI,KAAK,SAAW,EAAK,MAAW,EAAK,MAAA,CAC9C,KAAK,IACL,KAAK,KACL,EAAQ,IACR,EAAQ,IAEQ,EAAG,EAAK,SAAY,EAAG,KAAK,QAAQ,EAEjD,KAAK,IAAI,KAAK,IAAI,CAAO,CAAC,CAAC,IAAI,CAAO,CAAC,CAChD,EAQA,EAAc,IAAM,EAAc,OAQlC,EAAc,IAAM,EAAc,OAOlC,EAAc,IAAM,UAAe,CACjC,OAAO,EAAS,CAAC,KAAK,IAAK,CAAC,KAAK,KAAM,KAAK,QAAQ,CACtD,EAOA,EAAc,kBAAoB,UAA6B,CAC7D,OAAO,KAAK,KAAO,KAAK,MAAM,KAAK,IAAI,EAAI,KAAK,MAAM,KAAK,GAAG,EAAI,EACpE,EAQA,EAAc,IAAM,EAAc,kBAOlC,EAAc,mBAAqB,UAA8B,CAC/D,OAAO,KAAK,IAAM,EAAM,KAAK,GAAG,EAAI,EAAM,KAAK,IAAI,EAAI,EACzD,EAQA,EAAc,IAAM,EAAc,mBAQlC,EAAc,IAAM,SAAa,EAAO,CAEtC,OADK,EAAO,CAAK,IAAG,EAAQ,EAAU,CAAK,GACpC,EACL,KAAK,IAAM,EAAM,IACjB,KAAK,KAAO,EAAM,KAClB,KAAK,QACP,CACF,EAQA,EAAc,GAAK,SAAY,EAAO,CAEpC,OADK,EAAO,CAAK,IAAG,EAAQ,EAAU,CAAK,GACpC,EACL,KAAK,IAAM,EAAM,IACjB,KAAK,KAAO,EAAM,KAClB,KAAK,QACP,CACF,EAQA,EAAc,IAAM,SAAa,EAAO,CAEtC,OADK,EAAO,CAAK,IAAG,EAAQ,EAAU,CAAK,GACpC,EACL,KAAK,IAAM,EAAM,IACjB,KAAK,KAAO,EAAM,KAClB,KAAK,QACP,CACF,EAQA,EAAc,UAAY,SAAmB,EAAS,CAS/C,OARD,EAAO,CAAO,IAAG,EAAU,EAAQ,MAAM,IACxC,GAAW,KAAQ,EAAU,KACzB,EAAU,GACV,EACL,KAAK,KAAO,EACX,KAAK,MAAQ,EAAY,KAAK,MAAS,GAAK,EAC7C,KAAK,QACP,EACU,EAAS,EAAG,KAAK,KAAQ,EAAU,GAAK,KAAK,QAAQ,CACnE,EAQA,EAAc,IAAM,EAAc,UAQlC,EAAc,WAAa,SAAoB,EAAS,CAUpD,OATE,EAAO,CAAO,IAAG,EAAU,EAAQ,MAAM,IACxC,GAAW,KAAQ,EAAU,KACzB,EAAU,GACV,EACJ,KAAK,MAAQ,EAAY,KAAK,MAAS,GAAK,EAC7C,KAAK,MAAQ,EACb,KAAK,QACP,EAEO,EACL,KAAK,MAAS,EAAU,GACxB,KAAK,MAAQ,EAAI,EAAI,GACrB,KAAK,QACP,CACJ,EAQA,EAAc,IAAM,EAAc,WAQlC,EAAc,mBAAqB,SAA4B,EAAS,CAUtE,OATI,EAAO,CAAO,IAAG,EAAU,EAAQ,MAAM,IACxC,GAAW,KAAQ,EAAU,KAC9B,EAAU,GACL,EACJ,KAAK,MAAQ,EAAY,KAAK,MAAS,GAAK,EAC7C,KAAK,OAAS,EACd,KAAK,QACP,EACyB,EAAvB,IAAY,GAAoB,KAAK,KACzB,KAAK,OAAU,EAAU,GADM,EAAG,KAAK,QAAQ,CAEjE,EAQA,EAAc,KAAO,EAAc,mBAQnC,EAAc,MAAQ,EAAc,mBAQpC,EAAc,WAAa,SAAoB,EAAS,CACtD,IAAI,EAcJ,OAbI,EAAO,CAAO,IAAG,EAAU,EAAQ,MAAM,IACxC,GAAW,KAAQ,EAAU,KAC9B,IAAY,GAAW,EAAS,KAAK,KAAM,KAAK,IAAK,KAAK,QAAQ,EAClE,EAAU,IACZ,EAAI,GAAK,EACF,EACJ,KAAK,KAAO,EAAY,KAAK,OAAS,EACtC,KAAK,MAAQ,EAAY,KAAK,MAAQ,EACvC,KAAK,QACP,IAEF,GAAW,GACX,EAAI,GAAK,EACF,EACJ,KAAK,MAAQ,EAAY,KAAK,MAAQ,EACtC,KAAK,KAAO,EAAY,KAAK,OAAS,EACvC,KAAK,QACP,EACF,EAOA,EAAc,KAAO,EAAc,WAQnC,EAAc,YAAc,SAAqB,EAAS,CACxD,IAAI,EAcJ,OAbI,EAAO,CAAO,IAAG,EAAU,EAAQ,MAAM,IACxC,GAAW,KAAQ,EAAU,KAC9B,IAAY,GAAW,EAAS,KAAK,KAAM,KAAK,IAAK,KAAK,QAAQ,EAClE,EAAU,IACZ,EAAI,GAAK,EACF,EACJ,KAAK,MAAQ,EAAM,KAAK,MAAQ,EAChC,KAAK,KAAO,EAAM,KAAK,OAAS,EACjC,KAAK,QACP,IAEF,GAAW,GACX,EAAI,GAAK,EACF,EACJ,KAAK,KAAO,EAAM,KAAK,OAAS,EAChC,KAAK,MAAQ,EAAM,KAAK,MAAQ,EACjC,KAAK,QACP,EACF,EAOA,EAAc,KAAO,EAAc,YAOnC,EAAc,SAAW,UAAoB,CAE3C,OADK,KAAK,SACH,EAAS,KAAK,IAAK,KAAK,KAAM,EAAK,EADf,IAE7B,EAOA,EAAc,WAAa,UAAsB,CAE/C,OADI,KAAK,SAAiB,KACnB,EAAS,KAAK,IAAK,KAAK,KAAM,EAAI,CAC3C,EAQA,EAAc,QAAU,SAAiB,EAAI,CAC3C,OAAO,EAAK,KAAK,UAAU,EAAI,KAAK,UAAU,CAChD,EAOA,EAAc,UAAY,UAAqB,CAC7C,IAAI,EAAK,KAAK,KACZ,EAAK,KAAK,IACZ,MAAO,CACL,EAAK,IACJ,IAAO,EAAK,IACZ,IAAO,GAAM,IACd,IAAO,GACP,EAAK,IACJ,IAAO,EAAK,IACZ,IAAO,GAAM,IACd,IAAO,EACT,CACF,EAOA,EAAc,UAAY,UAAqB,CAC7C,IAAI,EAAK,KAAK,KACZ,EAAK,KAAK,IACZ,MAAO,CACL,IAAO,GACN,IAAO,GAAM,IACb,IAAO,EAAK,IACb,EAAK,IACL,IAAO,GACN,IAAO,GAAM,IACb,IAAO,EAAK,IACb,EAAK,GACP,CACF,EASA,EAAK,UAAY,SAAmB,EAAO,EAAU,EAAI,CACvD,OAAO,EACH,EAAK,YAAY,EAAO,CAAQ,EAChC,EAAK,YAAY,EAAO,CAAQ,CACtC,EAQA,EAAK,YAAc,SAAqB,EAAO,EAAU,CACvD,OAAO,IAAI,EACT,EAAM,GAAM,EAAM,IAAM,EAAM,EAAM,IAAM,GAAO,EAAM,IAAM,GAC7D,EAAM,GAAM,EAAM,IAAM,EAAM,EAAM,IAAM,GAAO,EAAM,IAAM,GAC7D,CACF,CACF,EAQA,EAAK,YAAc,SAAqB,EAAO,EAAU,CACvD,OAAO,IAAI,EACR,EAAM,IAAM,GAAO,EAAM,IAAM,GAAO,EAAM,IAAM,EAAK,EAAM,GAC7D,EAAM,IAAM,GAAO,EAAM,IAAM,GAAO,EAAM,IAAM,EAAK,EAAM,GAC9D,CACF,CACF,EAGI,OAAO,QAAW,aAQpB,EAAK,WAAa,SAAoB,EAAO,EAAU,CAGrD,OAAO,EAFO,OAAO,OAAO,OAAO,GAAI,CAAK,CAEtB,EADP,OAAO,OAAO,OAAO,GAAI,GAAS,OAAO,EAAE,CAAC,CAC3B,EAAG,CAAQ,CAC7C,EAGA,EAAK,UAAY,SAA6B,EAAO,EAAU,CAE7D,OADI,OAAO,GAAU,SAAiB,EAAK,WAAW,EAAO,CAAQ,EAC9D,EAAU,EAAO,CAAQ,CAClC,EAOA,EAAc,SAAW,UAAoB,CAC3C,IAAI,EAAY,OAAO,KAAK,MAAQ,CAAC,EAErC,OADiB,OAAO,KAAK,SAAW,KAAK,OAAS,EAAI,KAAK,IAC9C,GAAK,OAAO,EAAE,EAAK,CACtC,GAEc,EAAS,QAAU,CACrC,CACF,cCvgDA,IAAI,EAAO,EAGX,EAAK,UAAA,EAAA,EAGL,EAAK,OAAA,EAAA,EAGL,EAAK,aAAA,EAAA,EAGL,EAAK,MAAA,EAAA,EAGL,EAAK,KAAA,EAAA,EAGL,EAAK,KAAA,EAAA,EAGL,EAAK,SAAA,EAAA,EAQL,SAAS,EAAiB,EAAK,CAC3B,OAAO,IAAQ,aAAe,IAAQ,aAAe,IAAQ,aACjE,CAEA,EAAK,iBAAmB,EAOxB,EAAK,OAAS,GAAQ,OAAO,OAAW,KAClB,QACA,OAAO,SACP,OAAO,QAAQ,UACf,OAAO,QAAQ,SAAS,MAO9C,EAAK,OAAS,EAAK,QAAU,QACf,OAAO,OAAW,KAAe,QACjC,OAAO,KAAW,KAAe,MACjC,OAAO,WAAe,KAAe,YAAA,EASnD,EAAK,WAAa,OAAO,OAAS,OAAO,OAAO,CAAC,CAAC,EAA+B,CAAC,EAOlF,EAAK,YAAc,OAAO,OAAS,OAAO,OAAO,CAAC,CAAC,EAA+B,CAAC,EAQnF,EAAK,UAAY,OAAO,WAAwC,SAAmB,EAAO,CACtF,OAAO,OAAO,GAAU,UAAY,SAAS,CAAK,GAAK,KAAK,MAAM,CAAK,IAAM,CACjF,EAOA,EAAK,SAAW,SAAkB,EAAO,CACrC,OAAO,OAAO,GAAU,UAAY,aAAiB,MACzD,EAOA,EAAK,SAAW,SAAkB,EAAO,CACrC,OAAO,GAAS,OAAO,GAAU,QACrC,EAUA,EAAK,MAQL,EAAK,MAAQ,SAAe,EAAK,EAAM,CACnC,IAAI,EAAQ,EAAI,GAGhB,OAFI,GAAS,MAAQ,OAAO,eAAe,KAAK,EAAK,CAAI,EAC9C,OAAO,GAAU,WAAa,MAAM,QAAQ,CAAK,EAAI,EAAM,OAAS,OAAO,KAAK,CAAK,CAAC,CAAC,QAAU,EACrG,EACX,EAaA,EAAK,QAAU,UAAW,CACtB,GAAI,CACA,IAAI,EAAS,EAAK,OAAO,OAEzB,OAAO,EAAO,UAAU,WAAa,EAAK,OAAS,EAAoC,IAC3F,MAAY,CAER,OAAO,IACX,CACJ,EAAA,CAAG,EAOH,EAAK,UAAY,SAAmB,EAAa,CAC7C,IAAI,EAAS,EAAK,OAElB,OAAO,OAAO,GAAgB,SACxB,EACI,EAAO,YAAY,CAAW,EAC9B,IAAI,WAAW,CAAW,EAC9B,EACI,EAAO,KAAK,CAAW,EACvB,IAAI,WAAW,CAAW,CACxC,EAUA,EAAK,SAAW,SAAkB,EAAI,EAAU,EAAM,CAClD,IAAI,EAAM,CAAC,EACP,EAAM,GAAM,EAAI,EAEpB,IADA,KAAS,EACF,EAAM,KACT,EAAI,KAAK,EAAM,IAAM,GAAG,EACxB,KAAS,EAEb,EAAI,KAAK,CAAG,EACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC/B,EAAI,KAAK,EAAK,EAAE,EACpB,OAAO,EAAK,UAAU,CAAG,CAC7B,EAOA,EAAK,MAAQ,WAeb,EAAK,KAAkC,EAAK,OAAO,SAAsC,EAAK,OAAO,QAAQ,MACtE,EAAK,OAAO,OACtC,UAAW,CACR,GAAI,CACA,IAAI,EAAA,EAAA,EACJ,OAAO,GAAQ,EAAK,OAAS,EAAO,IACxC,MAAY,CAER,OAAO,IACX,CACJ,EAAA,CAAG,EAOf,EAAK,OAAS,uBAOd,EAAK,QAAU,wBAOf,EAAK,QAAU,2CAOf,EAAK,WAAa,SAAoB,EAAO,CACzC,OAAO,EACD,EAAK,SAAS,KAAK,CAAK,CAAC,CAAC,OAAO,EACjC,EAAK,SAAS,QACxB,EAQA,EAAK,aAAe,SAAsB,EAAM,EAAU,CACtD,IAAI,EAAO,EAAK,SAAS,SAAS,CAAI,EAGtC,OAFI,EAAK,KACE,EAAK,KAAK,SAAS,EAAK,GAAI,EAAK,GAAI,CAAQ,EACjD,EAAK,SAAS,EAAQ,CAAS,CAC1C,EAQA,EAAK,YAAc,SAAqB,EAAK,EAAU,CACnD,OAAO,EAAK,QAAQ,KAAK,CAAG,GAAK,CAAC,EAAK,QAAQ,KAAK,CAAG,EACjD,EAAK,aAAa,EAAK,CAAQ,EAC/B,CACV,EAOA,EAAK,YAAc,SAAqB,EAAK,CACzC,OAAO,IAAQ,QAAU,IAAQ,GACrC,EASA,SAAS,EAAM,EAAK,CAChB,IAAI,EAAW,OAAO,UAAU,UAAU,OAAS,IAAO,UACtD,EAAQ,EAAW,UAAU,OAAS,EAAI,UAAU,OACxD,IAAuB,UAAU,UAAU,OAAS,GACpD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,EAAE,EAAG,CAC5B,IAAI,EAAM,UAAU,GACf,KAEL,IAAK,IAAI,EAAO,OAAO,KAAK,CAAG,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EACpD,CAAC,EAAiB,EAAK,EAAE,IAAM,CAAC,GAAY,CAAC,OAAO,UAAU,eAAe,KAAK,EAAK,EAAK,EAAE,GAAK,EAAI,EAAK,MAAQ,IAAA,MACpH,EAAI,EAAK,IAAM,EAAI,EAAK,IACpC,CACA,OAAO,CACX,CAEA,EAAK,MAAQ,EAOb,EAAK,aAAe,GAOpB,EAAK,eAAiB,IAUtB,EAAK,SAAW,SAAkB,EAAK,EAAK,EAAY,CAChD,OAAO,UAAU,eAAe,KAAK,EAAK,CAAG,GAEjD,OAAO,eAAe,EAAK,EAAK,CAC5B,WAAY,IAAe,IAAA,IAAmB,EAC9C,aAAc,GACd,SAAU,EACd,CAAC,CACL,EAOA,EAAK,QAAU,SAAiB,EAAK,CACjC,OAAO,EAAI,OAAO,CAAC,CAAC,CAAC,YAAY,EAAI,EAAI,UAAU,CAAC,CACxD,EAQA,SAAS,EAAS,EAAM,CAEpB,SAAS,EAAY,EAAS,EAAY,CAEtC,GAAI,EAAE,gBAAgB,GAClB,OAAO,IAAI,EAAY,EAAS,CAAU,EAK9C,OAAO,eAAe,KAAM,UAAW,CAAE,IAAK,UAAW,CAAE,OAAO,CAAS,CAAE,CAAC,EAG1E,MAAM,kBACN,MAAM,kBAAkB,KAAM,CAAW,EAEzC,OAAO,eAAe,KAAM,QAAS,CAAE,MAAW,MAAM,CAAA,CAAE,OAAS,EAAG,CAAC,EAEvE,GACA,EAAM,KAAM,CAAU,CAC9B,CA2BA,MAzBA,GAAY,UAAY,OAAO,OAAO,MAAM,UAAW,CACnD,YAAa,CACT,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EAClB,EACA,KAAM,CACF,IAAK,UAAe,CAAE,OAAO,CAAM,EACnC,IAAK,IAAA,GACL,WAAY,GAKZ,aAAc,EAClB,EACA,SAAU,CACN,MAAO,UAAiB,CAAE,OAAO,KAAK,KAAO,KAAO,KAAK,OAAS,EAClE,SAAU,GACV,WAAY,GACZ,aAAc,EAClB,CACJ,CAAC,EAEM,CACX,CAEA,EAAK,SAAW,EAmBhB,EAAK,cAAgB,EAAS,eAAe,EAoB7C,EAAK,YAAc,SAAkB,EAAY,CAE7C,IAAK,IADD,EAAW,CAAC,EACP,EAAI,EAAG,EAAI,EAAW,OAAQ,EAAE,EACrC,EAAS,EAAW,IAAM,EAO9B,OAAO,UAAW,CACd,IAAK,IAAI,EAAO,OAAO,KAAK,IAAI,EAAG,EAAI,EAAK,OAAS,EAAG,EAAI,GAAI,EAAE,EAC9D,GAAI,EAAS,EAAK,MAAQ,GAAK,KAAK,EAAK,MAAQ,IAAA,IAAa,KAAK,EAAK,MAAQ,KAC5E,OAAO,EAAK,EACxB,CACJ,EAeA,EAAK,YAAc,SAAkB,EAAY,CAQ7C,OAAO,SAAS,EAAM,CAClB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,EAAE,EACjC,EAAW,KAAO,GAClB,OAAO,KAAK,EAAW,GACnC,CACJ,EAkBA,EAAK,cAAgB,CACjB,MAAO,OACP,MAAO,OACP,MAAO,OACP,KAAM,EACV,kBC7fA,EAAO,QAAU,EAEjB,IAAI,EAAA,EAAA,EAEA,EAEA,EAAY,EAAK,SACjB,EAAY,EAAK,OACjB,EAAY,EAAK,KAOrB,SAAS,GAAS,CAMd,KAAK,IAAM,EAMX,KAAK,IAAM,KAAK,YAAY,MAAM,EAAO,iBAAiB,EAM1D,KAAK,KAAO,KAMZ,KAAK,OAAS,IAClB,CAMA,EAAO,kBAAoB,IAQ3B,OAAO,eAAe,EAAO,UAAW,MAAO,CAC3C,aAAc,GACd,WAAY,GACZ,IAAK,UAAmB,CACpB,OAAO,KAAK,GAChB,CACJ,CAAC,EAED,IAAI,EAAS,UAAkB,CAC3B,OAAO,EAAK,OACN,UAA+B,CAC7B,OAAQ,EAAO,OAAS,UAAyB,CAC7C,OAAO,IAAI,CACf,EAAA,CAAG,CACP,EAEE,UAAwB,CACtB,OAAO,IAAI,CACf,CACR,EAOA,EAAO,OAAS,EAAO,EAOvB,EAAO,MAAQ,SAAe,EAAM,CAChC,OAAO,IAAI,WAAW,CAAI,CAC9B,EAGA,EAAO,MAAQ,EAAK,KAAK,EAAO,MAAO,WAAW,UAAU,QAAQ,EAQpE,SAAS,EAAa,EAAO,CACzB,OAAO,EAAgB,IAAY,EAC5B,EAAgB,MAAY,EAC5B,EAAgB,QAAY,EAC5B,EAAgB,UAAY,EACA,CACvC,CAQA,EAAO,UAAU,SAAW,SAAkB,EAAG,CAC7C,IAAI,EAAO,KAAK,IAAM,EACtB,GAAI,EAAO,KAAK,IAAI,OAAQ,CACxB,IAAI,EAAO,KAAK,IAAI,QAAU,EAC1B,EAAO,IACP,EAAO,GACX,IAAI,EAAM,KAAK,YAAY,MAAM,CAAI,EACrC,EAAI,IAAI,KAAK,IAAI,SAAS,EAAG,KAAK,GAAG,EAAG,CAAC,EACzC,KAAK,IAAM,EACX,KAAK,KAAO,IAChB,CACJ,EAEA,SAAS,EAAiB,EAAK,EAAK,EAAK,CACrC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,QACpB,EAAI,KAAS,EAAI,WAAW,GAAG,CACvC,CAEA,SAAS,EAAc,EAAK,EAAK,EAAK,CAClC,KAAO,EAAM,KACT,EAAI,KAAS,EAAM,IAAM,IACzB,KAAS,EAGb,MADA,GAAI,GAAO,EACJ,EAAM,CACjB,CAOA,EAAO,UAAU,OAAS,SAAsB,EAAO,CACnD,KAAkB,EAClB,KAAK,SAAS,CAAC,EACf,IAAI,EAAM,KAAK,IAEf,MADA,MAAK,IAAM,EAAc,EAAO,KAAK,IAAK,CAAG,EACtC,IACX,EAQA,EAAO,UAAU,MAAQ,SAAqB,EAAO,CAOjD,OANK,GAAS,GAAK,GACf,KAAK,SAAS,EAAE,EAChB,EAAc,EAAS,WAAW,CAAK,EAAG,KAAK,IAAK,KAAK,GAAG,EAC5D,KAAK,KAAO,GACL,MAEJ,KAAK,OAAO,CAAK,CAC5B,EAOA,EAAO,UAAU,OAAS,SAAsB,EAAO,CACnD,OAAO,KAAK,QAAQ,GAAS,EAAI,GAAS,MAAQ,CAAC,CACvD,EAEA,SAAS,EAAc,EAAK,EAAK,EAAK,CAGlC,IAFA,IAAI,EAAK,EAAI,GACT,EAAK,EAAI,GACN,GACH,EAAI,KAAS,EAAK,IAAM,IACxB,GAAM,IAAO,EAAI,GAAM,MAAQ,EAC/B,KAAQ,EAEZ,KAAO,EAAK,KACR,EAAI,KAAS,EAAK,IAAM,IACxB,KAAY,EAGhB,MADA,GAAI,GAAO,EACJ,EAAM,CACjB,CAQA,EAAO,UAAU,OAAS,SAAsB,EAAO,CACnD,IAAI,EAAO,EAAS,KAAK,CAAK,EAC9B,KAAK,SAAS,EAAE,EAChB,IAAI,EAAM,KAAK,IAEf,MADA,MAAK,IAAM,EAAc,EAAM,KAAK,IAAK,CAAG,EACrC,IACX,EASA,EAAO,UAAU,MAAQ,EAAO,UAAU,OAQ1C,EAAO,UAAU,OAAS,SAAsB,EAAO,CACnD,IAAI,EAAO,EAAS,KAAK,CAAK,CAAC,CAAC,SAAS,EACzC,KAAK,SAAS,EAAE,EAChB,IAAI,EAAM,KAAK,IAEf,MADA,MAAK,IAAM,EAAc,EAAM,KAAK,IAAK,CAAG,EACrC,IACX,EAOA,EAAO,UAAU,KAAO,SAAoB,EAAO,CAG/C,OAFA,KAAK,SAAS,CAAC,EACf,KAAK,IAAI,KAAK,OAAS,KAChB,IACX,EAEA,SAAS,EAAa,EAAK,EAAK,EAAK,CACjC,EAAI,GAAY,EAAc,IAC9B,EAAI,EAAM,GAAM,IAAQ,EAAM,IAC9B,EAAI,EAAM,GAAM,IAAQ,GAAM,IAC9B,EAAI,EAAM,GAAM,IAAQ,EAC5B,CAOA,EAAO,UAAU,QAAU,SAAuB,EAAO,CAIrD,OAHA,KAAK,SAAS,CAAC,EACf,EAAa,IAAU,EAAG,KAAK,IAAK,KAAK,GAAG,EAC5C,KAAK,KAAO,EACL,IACX,EAQA,EAAO,UAAU,SAAW,EAAO,UAAU,QAQ7C,EAAO,UAAU,QAAU,SAAuB,EAAO,CACrD,IAAI,EAAO,EAAS,KAAK,CAAK,EAK9B,OAJA,KAAK,SAAS,CAAC,EACf,EAAa,EAAK,GAAI,KAAK,IAAK,KAAK,GAAG,EACxC,EAAa,EAAK,GAAI,KAAK,IAAK,KAAK,IAAM,CAAC,EAC5C,KAAK,KAAO,EACL,IACX,EASA,EAAO,UAAU,SAAW,EAAO,UAAU,QAQ7C,EAAO,UAAU,MAAQ,SAAqB,EAAO,CAIjD,OAHA,KAAK,SAAS,CAAC,EACf,EAAK,MAAM,aAAa,EAAO,KAAK,IAAK,KAAK,GAAG,EACjD,KAAK,KAAO,EACL,IACX,EAQA,EAAO,UAAU,OAAS,SAAsB,EAAO,CAInD,OAHA,KAAK,SAAS,CAAC,EACf,EAAK,MAAM,cAAc,EAAO,KAAK,IAAK,KAAK,GAAG,EAClD,KAAK,KAAO,EACL,IACX,EAOA,EAAO,UAAU,MAAQ,SAAqB,EAAO,CACjD,IAAI,EAAM,EAAM,SAAW,EAC3B,GAAI,CAAC,EAGD,OAFA,KAAK,SAAS,CAAC,EACf,KAAK,IAAI,KAAK,OAAS,EAChB,KAEX,GAAI,EAAK,SAAS,CAAK,EAAG,CACtB,IAAI,EAAM,EAAO,MAAM,EAAM,EAAO,OAAO,CAAK,CAAC,EACjD,EAAO,OAAO,EAAO,EAAK,CAAC,EAC3B,EAAQ,CACZ,CAKA,OAJA,KAAK,OAAO,CAAG,EACf,KAAK,SAAS,CAAG,EACjB,KAAK,IAAI,IAAI,EAAO,KAAK,GAAG,EAC5B,KAAK,KAAO,EACL,IACX,EAOA,EAAO,UAAU,IAAM,SAAmB,EAAO,CAC7C,IAAI,EAAM,EAAM,SAAW,EAM3B,OALK,GAEL,KAAK,SAAS,CAAG,EACjB,KAAK,IAAI,IAAI,EAAO,KAAK,GAAG,EAC5B,KAAK,KAAO,EACL,MAJI,IAKf,EASA,EAAO,UAAU,OAAS,SAAgB,EAAK,EAAK,CAChD,IAAI,EAAI,EAAa,CAAG,EAKxB,OAJI,EAAI,GACJ,KAAK,IAAI,WAAW,EAAM,EAAG,EAAM,EAAG,EAAM,EAAI,CAAG,EACvD,EAAc,EAAK,KAAK,IAAK,CAAG,EAChC,KAAK,IAAM,EAAM,EAAI,EACd,IACX,EAOA,EAAO,UAAU,OAAS,SAAsB,EAAO,CACnD,IAAI,EAAI,EAAM,OACd,GAAI,CAAC,EAGD,OAFA,KAAK,SAAS,CAAC,EACf,KAAK,IAAI,KAAK,OAAS,EAChB,KAEX,GAAI,EAAI,IAAM,CACV,KAAK,SAAS,EAAI,EAAI,CAAC,EACvB,IAAI,EAAS,KAAK,IAClB,OAAO,KAAK,OAAO,EAAQ,EAAK,MAAM,EAAO,KAAK,IAAK,EAAS,CAAC,CAAC,CACtE,CACA,IAAI,EAAM,EAAK,OAAO,CAAK,EAQ3B,OAPA,KAAK,OAAO,CAAG,EACf,KAAK,SAAS,CAAG,EACb,IAAQ,EAAM,OACd,EAAiB,EAAO,KAAK,IAAK,KAAK,GAAG,EAE1C,EAAK,MAAM,EAAO,KAAK,IAAK,KAAK,GAAG,EACxC,KAAK,KAAO,EACL,IACX,EAOA,EAAO,UAAU,QAAU,SAAuB,EAAO,CACrD,IAAI,EAAI,EAAM,OACd,KAAK,SAAS,EAAI,EAAI,CAAC,EAEvB,IAAK,IADD,EAAM,KAAK,IAAK,EAAS,KAAK,IAAK,EAAI,EAAS,EAC3C,EAAI,EAAG,EAAI,EAAG,EAAE,EACrB,EAAI,EAAc,EAAM,KAAO,EAAG,EAAK,CAAC,EAC5C,OAAO,KAAK,OAAO,EAAQ,EAAI,EAAS,CAAC,CAC7C,EAOA,EAAO,UAAU,OAAS,SAAsB,EAAO,CACnD,IAAI,EAAI,EAAM,OACd,KAAK,SAAS,EAAI,GAAK,CAAC,EAExB,IAAK,IADD,EAAM,KAAK,IAAK,EAAS,KAAK,IAAK,EAAM,EAAS,EAAG,EAChD,EAAI,EAAG,EAAI,EAAG,EAAE,EACrB,AAGI,GAHC,EAAM,EAAM,GAAK,GAAK,EACjB,EAAc,EAAS,WAAW,CAAG,EAAG,EAAK,CAAG,EAEhD,EAAc,EAAK,EAAK,CAAG,EAGzC,OAAO,KAAK,OAAO,EAAQ,EAAM,EAAS,CAAC,CAC/C,EAOA,EAAO,UAAU,QAAU,SAAuB,EAAO,CACrD,IAAI,EAAI,EAAM,OACd,KAAK,SAAS,EAAI,EAAI,CAAC,EAEvB,IAAK,IADD,EAAM,KAAK,IAAK,EAAS,KAAK,IAAK,EAAM,EAAS,EAC7C,EAAI,EAAG,EAAI,EAAG,EAAE,EACrB,EAAM,GAAe,EAAM,IAAM,EAAI,EAAM,IAAM,MAAQ,EAAG,EAAK,CAAG,EACxE,OAAO,KAAK,OAAO,EAAQ,EAAM,EAAS,CAAC,CAC/C,EAOA,EAAO,UAAU,QAAU,SAAuB,EAAO,CACrD,IAAI,EAAI,EAAM,OACd,KAAK,SAAS,EAAI,GAAK,CAAC,EAExB,IAAK,IADD,EAAM,KAAK,IAAK,EAAS,KAAK,IAAK,EAAM,EAAS,EAC7C,EAAI,EAAG,EAAI,EAAG,EAAE,EACrB,EAAM,EAAc,EAAS,KAAK,EAAM,EAAE,EAAG,EAAK,CAAG,EAEzD,OAAO,KAAK,OAAO,EAAQ,EAAM,EAAS,CAAC,CAC/C,EAQA,EAAO,UAAU,OAAS,EAAO,UAAU,QAO3C,EAAO,UAAU,QAAU,SAAuB,EAAO,CACrD,IAAI,EAAI,EAAM,OACd,KAAK,SAAS,EAAI,GAAK,CAAC,EAExB,IAAK,IADD,EAAM,KAAK,IAAK,EAAS,KAAK,IAAK,EAAM,EAAS,EAC7C,EAAI,EAAG,EAAI,EAAG,EAAE,EACrB,EAAM,EAAc,EAAS,KAAK,EAAM,EAAE,CAAC,CAAC,SAAS,EAAG,EAAK,CAAG,EAEpE,OAAO,KAAK,OAAO,EAAQ,EAAM,EAAS,CAAC,CAC/C,EAOA,EAAO,UAAU,MAAQ,SAAqB,EAAO,CACjD,IAAI,EAAI,EAAM,OACd,KAAK,OAAO,CAAC,EACb,KAAK,SAAS,CAAC,EAEf,IAAK,IADD,EAAM,KAAK,IAAK,EAAI,KAAK,IACpB,EAAI,EAAG,EAAI,EAAG,EAAE,EACrB,EAAI,KAAO,KAAM,GAErB,MADA,MAAK,KAAO,EACL,IACX,EAGA,IAAI,EAAuB,GACvB,EAAuB,IAE3B,SAAS,EAAY,EAAQ,EAAO,EAAW,CAC3C,IAAI,EAAO,EAAO,KAClB,GAAI,GAAQ,EAAQ,EAChB,OAAO,EACX,IAAI,EAAM,EAAO,IACjB,MAAO,GAAO,KAAO,IAAI,SAAS,EAAI,OAAQ,EAAI,WAAY,EAAI,UAAU,CAChF,CAOA,EAAO,UAAU,SAAW,SAAwB,EAAO,CACvD,IAAI,EAAI,EAAM,OAAQ,EAAQ,EAAI,EAClC,KAAK,OAAO,CAAK,EACjB,KAAK,SAAS,CAAK,EACnB,IAAI,EAAI,KAAK,IAAK,EAAG,EAAK,EAAY,KAAM,EAAG,CAAkB,EACjE,GAAI,EACA,IAAK,EAAI,EAAG,EAAI,EAAG,EAAE,EAAK,EAAG,UAAU,EAAG,EAAM,KAAO,EAAG,EAAI,EAAG,GAAK,MACrE,CACD,IAAI,EAAM,KAAK,IACf,IAAK,EAAI,EAAG,EAAI,EAAG,EAAE,EAAK,EAAa,EAAM,KAAO,EAAG,EAAK,CAAC,EAAG,GAAK,CACzE,CAEA,MADA,MAAK,KAAO,EACL,IACX,EAQA,EAAO,UAAU,UAAY,EAAO,UAAU,SAO9C,EAAO,UAAU,SAAW,SAAwB,EAAO,CACvD,IAAI,EAAI,EAAM,OAAQ,EAAQ,EAAI,EAClC,KAAK,OAAO,CAAK,EACjB,KAAK,SAAS,CAAK,EACnB,IAAI,EAAI,KAAK,IAAK,EAAG,EAAM,EAAK,EAAY,KAAM,EAAG,CAAkB,EACvE,GAAI,EACA,IAAK,EAAI,EAAG,EAAI,EAAG,EAAE,EAAK,EAAO,EAAS,KAAK,EAAM,EAAE,EAAG,EAAG,UAAU,EAAG,EAAK,GAAI,EAAI,EAAG,EAAG,UAAU,EAAI,EAAG,EAAK,GAAI,EAAI,EAAG,GAAK,MAClI,CACD,IAAI,EAAM,KAAK,IACf,IAAK,EAAI,EAAG,EAAI,EAAG,EAAE,EAAK,EAAO,EAAS,KAAK,EAAM,EAAE,EAAG,EAAa,EAAK,GAAI,EAAK,CAAC,EAAG,EAAa,EAAK,GAAI,EAAK,EAAI,CAAC,EAAG,GAAK,CACrI,CAEA,MADA,MAAK,KAAO,EACL,IACX,EAQA,EAAO,UAAU,UAAY,EAAO,UAAU,SAO9C,EAAO,UAAU,OAAS,SAAsB,EAAO,CACnD,IAAI,EAAI,EAAM,OAAQ,EAAQ,EAAI,EAClC,KAAK,OAAO,CAAK,EACjB,KAAK,SAAS,CAAK,EACnB,IAAI,EAAI,KAAK,IAAK,EAAG,EAAK,EAAY,KAAM,EAAG,CAAoB,EACnE,GAAI,EACA,IAAK,EAAI,EAAG,EAAI,EAAG,EAAE,EAAK,EAAG,WAAW,EAAG,EAAM,GAAI,EAAI,EAAG,GAAK,MAChE,CACD,IAAI,EAAM,KAAK,IACf,IAAK,EAAI,EAAG,EAAI,EAAG,EAAE,EAAK,EAAK,MAAM,aAAa,EAAM,GAAI,EAAK,CAAC,EAAG,GAAK,CAC9E,CAEA,MADA,MAAK,KAAO,EACL,IACX,EAOA,EAAO,UAAU,QAAU,SAAuB,EAAO,CACrD,IAAI,EAAI,EAAM,OAAQ,EAAQ,EAAI,EAClC,KAAK,OAAO,CAAK,EACjB,KAAK,SAAS,CAAK,EACnB,IAAI,EAAI,KAAK,IAAK,EAAG,EAAK,EAAY,KAAM,EAAG,CAAoB,EACnE,GAAI,EACA,IAAK,EAAI,EAAG,EAAI,EAAG,EAAE,EAAK,EAAG,WAAW,EAAG,EAAM,GAAI,EAAI,EAAG,GAAK,MAChE,CACD,IAAI,EAAM,KAAK,IACf,IAAK,EAAI,EAAG,EAAI,EAAG,EAAE,EAAK,EAAK,MAAM,cAAc,EAAM,GAAI,EAAK,CAAC,EAAG,GAAK,CAC/E,CAEA,MADA,MAAK,KAAO,EACL,IACX,EAMA,EAAO,UAAU,KAAO,UAAgB,CAIpC,OAHA,KAAK,SAAS,CAAC,GACd,AAAgB,KAAK,SAAS,CAAC,EAAA,CAAI,KAAK,KAAK,GAAG,EACjD,KAAK,KAAO,EACL,IACX,EAMA,EAAO,UAAU,MAAQ,UAAiB,CACtC,IAAI,EAAS,KAAK,OAMlB,MALA,CAGI,KAAK,IAHL,GAAU,EAAO,OACN,EAAO,IAAI,EAEX,EAER,IACX,EAMA,EAAO,UAAU,OAAS,UAAkB,CACxC,IAAI,EAAS,KAAK,OACd,EACA,EACJ,GAAI,GAAU,EAAO,OAAQ,CACzB,IAAI,EAAS,EAAO,IAAI,EACxB,EAAM,KAAK,IAAM,EAAS,EAC1B,EAAO,EAAa,CAAG,EACnB,EAAO,GACP,KAAK,SAAS,EAAO,CAAC,EACtB,KAAK,IAAI,WAAW,EAAS,EAAM,EAAS,EAAG,EAAS,EAAI,CAAG,EAC/D,KAAK,KAAO,EAAO,EACnB,EAAc,EAAK,KAAK,IAAK,CAAM,GAEnC,KAAK,IAAI,GAAU,CAE3B,KAGI,GAAM,KAAK,IACX,EAAO,EAAa,CAAG,EACvB,KAAK,SAAS,CAAI,EAClB,KAAK,IAAI,WAAW,EAAM,EAAG,CAAG,EAChC,EAAc,EAAK,KAAK,IAAK,CAAC,EAC9B,KAAK,KAAO,EAEhB,OAAO,IACX,EAQA,EAAO,UAAU,OAAS,SAAgB,EAAQ,CAC9C,GAAI,EACA,OAAO,KAAK,IAAI,SAAS,EAAG,KAAK,GAAG,EACxC,IAAI,EAAM,KAAK,YAAY,MAAM,KAAK,GAAG,EAEzC,OADA,EAAI,IAAI,KAAK,IAAI,SAAS,EAAG,KAAK,GAAG,EAAG,CAAC,EAClC,CACX,EAWA,EAAO,UAAU,WAAa,SAAoB,EAAK,EAAQ,CAI3D,OAHI,IAAW,IAAA,KACX,EAAS,GACb,EAAI,IAAI,KAAK,IAAI,SAAS,EAAG,KAAK,GAAG,EAAG,CAAM,EACvC,CACX,EAEA,EAAO,WAAa,SAAS,EAAe,CACxC,EAAe,EACf,EAAO,OAAS,EAAO,EACvB,EAAa,WAAW,CAC5B,kBChsBA,EAAO,QAAU,EAGjB,IAAI,EAAA,EAAA,EACJ,EAAa,UAAY,OAAO,OAAO,EAAO,UAAW,CACrD,YAAa,CACT,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EAClB,CACJ,CAAC,EAED,IAAI,EAAA,EAAA,EAQJ,SAAS,GAAe,CACpB,EAAO,KAAK,IAAI,CACpB,CAEA,IAAI,EAEJ,EAAa,WAAa,UAAY,CAOlC,EAAa,MAAQ,EAAK,QAAU,EAAK,OAAO,YAEhD,EAAoB,EAAK,QAAU,EAAK,OAAO,UAAU,UACnD,SAAqC,EAAK,EAAK,EAAK,CAClD,OAAO,EAAI,UAAU,EAAK,CAAG,CACjC,EACE,SAAiC,EAAK,EAAK,EAAK,CAC9C,OAAO,EAAI,MAAM,EAAK,CAAG,CAC7B,CACR,EAMA,EAAa,UAAU,MAAQ,SAA4B,EAAO,CAC1D,EAAK,SAAS,CAAK,IACnB,EAAQ,EAAK,OAAO,KAAK,EAAO,QAAQ,GAC5C,IAAI,EAAM,EAAM,SAAW,EAO3B,OANA,KAAK,OAAO,CAAG,EACX,IACA,KAAK,SAAS,CAAG,EACjB,KAAK,IAAI,IAAI,EAAO,KAAK,GAAG,EAC5B,KAAK,KAAO,GAET,IACX,EAKA,EAAa,UAAU,OAAS,SAA6B,EAAO,CAChE,IAAI,EAAI,EAAM,OACd,GAAI,CAAC,EAGD,OAFA,KAAK,SAAS,CAAC,EACf,KAAK,IAAI,KAAK,OAAS,EAChB,KAEX,GAAI,EAAI,IAAM,CACV,KAAK,SAAS,EAAI,EAAI,CAAC,EACvB,IAAI,EAAM,KAAK,IACX,EAAM,KAAK,IACf,OAAO,KAAK,OAAO,EACf,EAAI,GACE,EAAK,KAAK,MAAM,EAAO,EAAK,EAAM,CAAC,EACnC,EAAkB,EAAO,EAAK,EAAM,CAAC,CAC/C,CACJ,CACA,IAAI,EAAM,EAAK,OAAO,WAAW,CAAK,EAKtC,OAJA,KAAK,OAAO,CAAG,EACf,KAAK,SAAS,CAAG,EACjB,EAAkB,EAAO,KAAK,IAAK,KAAK,GAAG,EAC3C,KAAK,KAAO,EACL,IACX,EAUA,EAAa,WAAW,kBClGxB,EAAO,QAAU,EAEjB,IAAI,EAAA,EAAA,EAEA,EAEA,EAAY,EAAK,SACjB,EAAY,EAAK,KAGrB,SAAS,EAAgB,EAAQ,EAAa,CAC1C,OAAO,WAAW,uBAAyB,EAAO,IAAM,OAAS,GAAe,GAAK,MAAQ,EAAO,GAAG,CAC3G,CAQA,SAAS,EAAO,EAAQ,CAMpB,KAAK,IAAM,EAMX,KAAK,IAAM,EAMX,KAAK,IAAM,EAAO,OAMlB,KAAK,KAAO,KAMZ,KAAK,eAAiB,EAAO,cACjC,CAEA,SAAS,EAAa,EAAQ,CAI1B,GAFI,MAAM,QAAQ,CAAM,IACpB,EAAS,IAAI,WAAW,CAAM,GAC9B,aAAkB,WAClB,OAAO,IAAI,EAAO,CAAM,EAC5B,MAAM,MAAM,gBAAgB,CAChC,CAEA,IAAI,EAAS,UAAkB,CAC3B,OAAO,EAAK,OACN,SAA6B,EAAQ,CACnC,OAAQ,EAAO,OAAS,SAAuB,EAAQ,CACnD,OAAO,EAAK,OAAO,SAAS,CAAM,EAC5B,IAAI,EAAa,CAAM,EAEvB,EAAa,CAAM,CAC7B,EAAA,CAAG,CAAM,CACb,EAEE,CACV,EASA,EAAO,OAAS,EAAO,EAQvB,EAAO,UAAU,IAAM,SAAkB,EAAO,EAAK,CACjD,OAAO,KAAK,IAAI,SAAS,EAAO,CAAG,CACvC,EAEA,SAAS,EAAoB,EAAQ,CAGjC,IAAK,IADD,EAAQ,EACH,EAAI,EAAG,EAAI,EAAG,EAAE,EAAG,CACxB,GAAI,EAAO,KAAO,EAAO,IACrB,MAAM,EAAgB,CAAM,EAChC,IAAI,EAAI,EAAO,IAAI,EAAO,OAE1B,GADA,GAAS,GAAS,EAAI,MAAQ,EAAI,KAAO,EACrC,EAAI,IACJ,OAAO,CACf,CACA,MAAM,EAAgB,CAAM,CAChC,CAOA,EAAO,UAAU,OAAS,UAAuB,CAC7C,GAAI,KAAK,IAAM,KAAK,IAAM,EAAG,CACzB,GAAI,KAAK,KAAO,KAAK,IACjB,MAAM,EAAgB,IAAI,EAC9B,GAAI,KAAK,IAAI,KAAK,MAAQ,IACtB,OAAO,EAAoB,IAAI,CACvC,CACA,IAAI,EAAM,KAAK,IACX,EAAM,KAAK,IACX,GAAS,EAAI,GAAO,OAAS,EAqBjC,GApBI,EAAI,KAAS,MAIjB,GAAS,GAAS,EAAI,GAAO,MAAQ,KAAO,EACxC,EAAI,KAAS,OAIjB,GAAS,GAAS,EAAI,GAAO,MAAQ,MAAQ,EACzC,EAAI,KAAS,OAIjB,GAAS,GAAS,EAAI,GAAO,MAAQ,MAAQ,EACzC,EAAI,KAAS,OAIjB,GAAS,GAAS,EAAI,GAAO,KAAO,MAAQ,EACxC,EAAI,KAAS,KAEb,MADA,MAAK,IAAM,EACJ,EAGX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,EAAE,EAAG,CAExB,GAAI,GAAO,KAAK,IAEZ,KADA,MAAK,IAAM,EACL,EAAgB,IAAI,EAE9B,GAAI,EAAI,KAAS,IAEb,MADA,MAAK,IAAM,EACJ,CAEf,CAGA,KADA,MAAK,IAAM,EACL,MAAM,yBAAyB,CACzC,EAOA,EAAO,UAAU,IAAM,UAAoB,CACvC,GAAI,KAAK,IAAM,KAAK,IAAM,EAAG,CACzB,GAAI,KAAK,KAAO,KAAK,IACjB,MAAM,EAAgB,IAAI,EAC9B,GAAI,KAAK,IAAI,KAAK,MAAQ,IACtB,OAAO,EAAoB,IAAI,CACvC,CACA,IAAI,EAAM,KAAK,IACX,EAAM,KAAK,IACX,GAAS,EAAI,GAAO,OAAS,EAgBjC,GAfI,EAAI,KAAS,MAIjB,GAAS,GAAS,EAAI,GAAO,MAAQ,KAAO,EACxC,EAAI,KAAS,OAIjB,GAAS,GAAS,EAAI,GAAO,MAAQ,MAAQ,EACzC,EAAI,KAAS,OAIjB,GAAS,GAAS,EAAI,GAAO,MAAQ,MAAQ,EACzC,EAAI,KAAS,KAEb,MADA,MAAK,IAAM,EACJ,EAGX,GADA,GAAS,GAAS,EAAI,GAAO,KAAO,MAAQ,EACxC,EAAI,GAAO,KAAA,EAAQ,EAAI,GAAO,KAE9B,MADA,MAAK,IAAM,EAAM,EACV,EAIX,KADA,MAAK,IAAM,EAAM,EACX,MAAM,sBAAsB,CACtC,EAMA,EAAO,UAAU,MAAQ,UAAsB,CAC3C,OAAO,KAAK,OAAO,EAAI,CAC3B,EAMA,EAAO,UAAU,OAAS,UAAuB,CAC7C,IAAI,EAAQ,KAAK,OAAO,EACxB,OAAO,IAAU,EAAI,EAAE,EAAQ,GAAK,CACxC,EAIA,SAAS,GAAiB,CAEtB,IAAI,EAAO,IAAI,EAAS,EAAG,CAAC,EACxB,EAAI,EACR,GAAI,KAAK,IAAM,KAAK,IAAM,EAAG,CACzB,KAAO,EAAI,EAAG,EAAE,EAGZ,GADA,EAAK,IAAM,EAAK,IAAM,KAAK,IAAI,KAAK,KAAO,MAAQ,EAAI,KAAO,EAC1D,KAAK,IAAI,KAAK,OAAS,IACvB,OAAO,EAKf,GAFA,EAAK,IAAM,EAAK,IAAM,KAAK,IAAI,KAAK,KAAO,MAAQ,MAAQ,EAC3D,EAAK,IAAM,EAAK,IAAM,KAAK,IAAI,KAAK,KAAO,MAAS,KAAO,EACvD,KAAK,IAAI,KAAK,OAAS,IACvB,OAAO,EACX,EAAI,CACR,KAAO,CACH,KAAO,EAAI,EAAG,EAAE,EAAG,CAEf,GAAI,KAAK,KAAO,KAAK,IACjB,MAAM,EAAgB,IAAI,EAG9B,GADA,EAAK,IAAM,EAAK,IAAM,KAAK,IAAI,KAAK,KAAO,MAAQ,EAAI,KAAO,EAC1D,KAAK,IAAI,KAAK,OAAS,IACvB,OAAO,CACf,CACA,MAAM,EAAgB,IAAI,CAC9B,CACA,GAAI,KAAK,IAAM,KAAK,IAAM,EACtB,MAAO,EAAI,EAAG,EAAE,EAGZ,GADA,EAAK,IAAM,EAAK,IAAM,KAAK,IAAI,KAAK,KAAO,MAAQ,EAAI,EAAI,KAAO,EAC9D,KAAK,IAAI,KAAK,OAAS,IACvB,OAAO,CACf,MAEA,KAAO,EAAI,EAAG,EAAE,EAAG,CAEf,GAAI,KAAK,KAAO,KAAK,IACjB,MAAM,EAAgB,IAAI,EAG9B,GADA,EAAK,IAAM,EAAK,IAAM,KAAK,IAAI,KAAK,KAAO,MAAQ,EAAI,EAAI,KAAO,EAC9D,KAAK,IAAI,KAAK,OAAS,IACvB,OAAO,CACf,CAGJ,MAAM,MAAM,yBAAyB,CACzC,CA6BA,EAAO,UAAU,KAAO,UAAqB,CAGzC,IAAK,IAFD,EAAQ,GACR,EACK,EAAI,EAAG,EAAI,GAAI,EAAE,EAAG,CAEzB,GAAI,KAAK,KAAO,KAAK,IACjB,MAAM,EAAgB,IAAI,EAI9B,GAHA,EAAI,KAAK,IAAI,KAAK,OACd,EAAI,MACJ,EAAQ,IACR,EAAI,IACJ,OAAO,CACf,CAEA,MAAM,MAAM,yBAAyB,CACzC,EAEA,SAAS,EAAgB,EAAK,EAAK,CAC/B,OAAQ,EAAI,EAAM,GACV,EAAI,EAAM,IAAM,EAChB,EAAI,EAAM,IAAM,GAChB,EAAI,EAAM,IAAM,MAAQ,CACpC,CAMA,EAAO,UAAU,QAAU,UAAwB,CAG/C,GAAI,KAAK,IAAM,EAAI,KAAK,IACpB,MAAM,EAAgB,KAAM,CAAC,EAEjC,OAAO,EAAgB,KAAK,IAAK,KAAK,KAAO,CAAC,CAClD,EAMA,EAAO,UAAU,SAAW,UAAyB,CAGjD,GAAI,KAAK,IAAM,EAAI,KAAK,IACpB,MAAM,EAAgB,KAAM,CAAC,EAEjC,OAAO,EAAgB,KAAK,IAAK,KAAK,KAAO,CAAC,EAAI,CACtD,EAIA,SAAS,GAAgC,CAGrC,GAAI,KAAK,IAAM,EAAI,KAAK,IACpB,MAAM,EAAgB,KAAM,CAAC,EAEjC,OAAO,IAAI,EAAS,EAAgB,KAAK,IAAK,KAAK,KAAO,CAAC,EAAG,EAAgB,KAAK,IAAK,KAAK,KAAO,CAAC,CAAC,CAC1G,CAuBA,EAAO,UAAU,MAAQ,UAAsB,CAG3C,GAAI,KAAK,IAAM,EAAI,KAAK,IACpB,MAAM,EAAgB,KAAM,CAAC,EAEjC,IAAI,EAAQ,EAAK,MAAM,YAAY,KAAK,IAAK,KAAK,GAAG,EAErD,MADA,MAAK,KAAO,EACL,CACX,EAOA,EAAO,UAAU,OAAS,UAAuB,CAG7C,GAAI,KAAK,IAAM,EAAI,KAAK,IACpB,MAAM,EAAgB,KAAM,CAAC,EAEjC,IAAI,EAAQ,EAAK,MAAM,aAAa,KAAK,IAAK,KAAK,GAAG,EAEtD,MADA,MAAK,KAAO,EACL,CACX,EAOA,EAAO,UAAU,QAAU,SAAsB,EAAO,CAChD,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAI,KAAK,IAAK,EAAM,KAAK,IAAK,EAAM,KAAK,IAAK,EAAM,KAAK,IAAK,EACpF,GAAI,EAAM,EAAK,MAAM,EAAgB,KAAM,EAAM,KAAK,GAAG,EAEzD,IADA,KAAK,IAAM,EACJ,EAAM,GACT,EAAQ,EAAI,KACR,EAAQ,IACR,EAAM,KAAK,CAAK,GAEhB,KAAK,IAAM,EAAM,EACjB,EAAM,KAAK,KAAK,OAAO,CAAC,EACxB,EAAM,KAAK,KAInB,GADA,KAAK,IAAM,EACP,IAAQ,EAAK,MAAM,WAAW,oBAAoB,EAEtD,MADA,MAAK,IAAM,EACJ,CACX,EAOA,EAAO,UAAU,OAAS,SAAqB,EAAO,CAC9C,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAI,KAAK,IAAK,EAAM,KAAK,IAAK,EAAM,KAAK,IAAK,EAAM,KAAK,IAAK,EACpF,GAAI,EAAM,EAAK,MAAM,EAAgB,KAAM,EAAM,KAAK,GAAG,EAEzD,IADA,KAAK,IAAM,EACJ,EAAM,GACT,EAAQ,EAAI,KACR,EAAQ,IACR,EAAM,KAAK,CAAK,GAEhB,KAAK,IAAM,EAAM,EACjB,EAAM,KAAK,KAAK,MAAM,CAAC,EACvB,EAAM,KAAK,KAInB,GADA,KAAK,IAAM,EACP,IAAQ,EAAK,MAAM,WAAW,oBAAoB,EAEtD,MADA,MAAK,IAAM,EACJ,CACX,EAOA,EAAO,UAAU,QAAU,SAAsB,EAAO,CAChD,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAI,KAAK,IAAK,EAAM,KAAK,IAC/C,GAAI,EAAM,EAAK,MAAM,EAAgB,KAAM,EAAM,KAAK,GAAG,EAEzD,IADA,KAAK,IAAM,EACJ,KAAK,IAAM,GACd,EAAM,KAAK,KAAK,OAAO,CAAC,EAC5B,GAAI,KAAK,MAAQ,EAAK,MAAM,WAAW,oBAAoB,EAE3D,MADA,MAAK,IAAM,EACJ,CACX,EAOA,EAAO,UAAU,MAAQ,SAAoB,EAAO,CAC5C,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAI,KAAK,IAAK,EAAM,KAAK,IAAK,EAAM,KAAK,IAAK,EAAM,KAAK,IAAK,EACpF,GAAI,EAAM,EAAK,MAAM,EAAgB,KAAM,EAAM,KAAK,GAAG,EAEzD,IADA,KAAK,IAAM,EACJ,EAAM,GACT,EAAQ,EAAI,KACR,EAAQ,IACR,EAAM,KAAK,IAAU,CAAC,GAEtB,KAAK,IAAM,EAAM,EACjB,EAAM,KAAK,KAAK,KAAK,CAAC,EACtB,EAAM,KAAK,KAInB,GADA,KAAK,IAAM,EACP,IAAQ,EAAK,MAAM,WAAW,oBAAoB,EAEtD,MADA,MAAK,IAAM,EACJ,CACX,EAGA,IAAI,EAAuB,EACvB,EAAuB,IAE3B,SAAS,EAAY,EAAQ,EAAO,EAAW,CAC3C,IAAI,EAAO,EAAO,KAClB,GAAI,GAAQ,EAAQ,EAChB,OAAO,EACX,IAAI,EAAM,EAAO,IACjB,MAAO,GAAO,KAAO,IAAI,SAAS,EAAI,OAAQ,EAAI,WAAY,EAAI,UAAU,CAChF,CAOA,EAAO,UAAU,SAAW,SAAuB,EAAO,CAClD,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAG,EAAM,KAAK,IAAM,EAE1C,GAAI,EAAM,KAAK,IAAK,MAAM,EAAgB,KAAM,CAAG,EACnD,IAAI,EAAQ,IAAQ,EAAG,EAAI,EAAM,OAAQ,EAAM,KAAK,IACpD,EAAM,OAAS,EAAI,EACnB,IAAI,EAAK,EAAY,KAAM,EAAO,CAAkB,EACpD,GAAI,EACA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,EAAE,EAAG,GAAO,EAAG,EAAM,KAAO,EAAG,UAAU,EAAK,EAAI,OAG7E,IAAK,IADD,EAAM,KAAK,IACN,EAAI,EAAG,EAAI,EAAO,EAAE,EAAG,GAAO,EAAG,EAAM,KAAO,EAAgB,EAAK,EAAM,CAAC,EAGvF,GADA,KAAK,IAAM,EACP,IAAQ,EAAK,MAAM,EAAgB,KAAM,CAAC,EAC9C,OAAO,CACX,EAOA,EAAO,UAAU,UAAY,SAAwB,EAAO,CACpD,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAG,EAAM,KAAK,IAAM,EAE1C,GAAI,EAAM,KAAK,IAAK,MAAM,EAAgB,KAAM,CAAG,EACnD,IAAI,EAAQ,IAAQ,EAAG,EAAI,EAAM,OAAQ,EAAM,KAAK,IACpD,EAAM,OAAS,EAAI,EACnB,IAAI,EAAK,EAAY,KAAM,EAAO,CAAkB,EACpD,GAAI,EACA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,EAAE,EAAG,GAAO,EAAG,EAAM,KAAO,EAAG,SAAS,EAAK,EAAI,OAG5E,IAAK,IADD,EAAM,KAAK,IACN,EAAI,EAAG,EAAI,EAAO,EAAE,EAAG,GAAO,EAAG,EAAM,KAAO,EAAgB,EAAK,EAAM,CAAC,EAAI,EAG3F,GADA,KAAK,IAAM,EACP,IAAQ,EAAK,MAAM,EAAgB,KAAM,CAAC,EAC9C,OAAO,CACX,EAOA,EAAO,UAAU,OAAS,SAAqB,EAAO,CAC9C,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAG,EAAM,KAAK,IAAM,EAE1C,GAAI,EAAM,KAAK,IAAK,MAAM,EAAgB,KAAM,CAAG,EACnD,IAAI,EAAQ,IAAQ,EAAG,EAAI,EAAM,OAAQ,EAAM,KAAK,IACpD,EAAM,OAAS,EAAI,EACnB,IAAI,EAAK,EAAY,KAAM,EAAO,CAAoB,EACtD,GAAI,EACA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,EAAE,EAAG,GAAO,EAAG,EAAM,KAAO,EAAG,WAAW,EAAK,EAAI,OAG9E,IAAK,IADD,EAAM,KAAK,IACN,EAAI,EAAG,EAAI,EAAO,EAAE,EAAG,GAAO,EAAG,EAAM,KAAO,EAAK,MAAM,YAAY,EAAK,CAAG,EAG1F,GADA,KAAK,IAAM,EACP,IAAQ,EAAK,MAAM,EAAgB,KAAM,CAAC,EAC9C,OAAO,CACX,EAOA,EAAO,UAAU,QAAU,SAAsB,EAAO,CAChD,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAG,EAAM,KAAK,IAAM,EAE1C,GAAI,EAAM,KAAK,IAAK,MAAM,EAAgB,KAAM,CAAG,EACnD,IAAI,EAAQ,IAAQ,EAAG,EAAI,EAAM,OAAQ,EAAM,KAAK,IACpD,EAAM,OAAS,EAAI,EACnB,IAAI,EAAK,EAAY,KAAM,EAAO,CAAoB,EACtD,GAAI,EACA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,EAAE,EAAG,GAAO,EAAG,EAAM,KAAO,EAAG,WAAW,EAAK,EAAI,OAG9E,IAAK,IADD,EAAM,KAAK,IACN,EAAI,EAAG,EAAI,EAAO,EAAE,EAAG,GAAO,EAAG,EAAM,KAAO,EAAK,MAAM,aAAa,EAAK,CAAG,EAG3F,GADA,KAAK,IAAM,EACP,IAAQ,EAAK,MAAM,EAAgB,KAAM,CAAC,EAC9C,OAAO,CACX,EAOA,EAAO,UAAU,QAAU,SAAsB,EAAO,CAChD,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAI,KAAK,IAAK,EAAM,KAAK,IAC/C,GAAI,EAAM,EAAK,MAAM,EAAgB,KAAM,EAAM,KAAK,GAAG,EAEzD,IADA,KAAK,IAAM,EACJ,KAAK,IAAM,GACd,EAAM,KAAK,KAAK,OAAO,CAAC,EAC5B,GAAI,KAAK,MAAQ,EAAK,MAAM,WAAW,oBAAoB,EAE3D,MADA,MAAK,IAAM,EACJ,CACX,EAOA,EAAO,UAAU,OAAS,SAAqB,EAAO,CAC9C,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAI,KAAK,IAAK,EAAM,KAAK,IAC/C,GAAI,EAAM,EAAK,MAAM,EAAgB,KAAM,EAAM,KAAK,GAAG,EAEzD,IADA,KAAK,IAAM,EACJ,KAAK,IAAM,GACd,EAAM,KAAK,KAAK,MAAM,CAAC,EAC3B,GAAI,KAAK,MAAQ,EAAK,MAAM,WAAW,oBAAoB,EAE3D,MADA,MAAK,IAAM,EACJ,CACX,EAOA,EAAO,UAAU,QAAU,SAAsB,EAAO,CAChD,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAI,KAAK,IAAK,EAAM,KAAK,IAC/C,GAAI,EAAM,EAAK,MAAM,EAAgB,KAAM,EAAM,KAAK,GAAG,EAEzD,IADA,KAAK,IAAM,EACJ,KAAK,IAAM,GACd,EAAM,KAAK,KAAK,OAAO,CAAC,EAC5B,GAAI,KAAK,MAAQ,EAAK,MAAM,WAAW,oBAAoB,EAE3D,MADA,MAAK,IAAM,EACJ,CACX,EAOA,EAAO,UAAU,SAAW,SAAuB,EAAO,CAClD,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAG,EAAM,KAAK,IAAM,EAAK,EAAI,EAAM,OAEzD,GAAI,EAAM,KAAK,IAAK,MAAM,EAAgB,KAAM,CAAG,EACnD,IAAI,EAAQ,IAAQ,EACpB,EAAM,OAAS,EAAI,EACnB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,EAAE,EACzB,EAAM,KAAO,KAAK,QAAQ,EAC9B,GAAI,KAAK,MAAQ,EAAK,MAAM,EAAgB,KAAM,CAAC,EACnD,OAAO,CACX,EAOA,EAAO,UAAU,UAAY,SAAwB,EAAO,CACpD,IAAU,IAAA,KAAW,EAAQ,CAAC,GAClC,IAAI,EAAM,KAAK,OAAO,EAAG,EAAM,KAAK,IAAM,EAAK,EAAI,EAAM,OAEzD,GAAI,EAAM,KAAK,IAAK,MAAM,EAAgB,KAAM,CAAG,EACnD,IAAI,EAAQ,IAAQ,EACpB,EAAM,OAAS,EAAI,EACnB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,EAAE,EACzB,EAAM,KAAO,KAAK,SAAS,EAC/B,GAAI,KAAK,MAAQ,EAAK,MAAM,EAAgB,KAAM,CAAC,EACnD,OAAO,CACX,EAMA,EAAO,UAAU,MAAQ,UAAsB,CAC3C,IAAI,EAAS,KAAK,OAAO,EACrB,EAAS,KAAK,IACd,EAAS,KAAK,IAAM,EAGxB,GAAI,EAAM,KAAK,IACX,MAAM,EAAgB,KAAM,CAAM,EAGtC,MADA,MAAK,IAAM,EACJ,KAAK,IAAI,EAAO,CAAG,CAC9B,EAMA,EAAO,UAAU,OAAS,UAAuB,CAC7C,IAAI,EAAS,KAAK,OAAO,EACrB,EAAS,KAAK,IACd,EAAS,KAAK,IAAM,EAGxB,GAAI,EAAM,KAAK,IACX,MAAM,EAAgB,KAAM,CAAM,EAGtC,MADA,MAAK,IAAM,EACJ,EAAK,KAAK,KAAK,IAAK,EAAO,CAAG,CACzC,EAMA,EAAO,UAAU,aAAe,UAA8B,CAC1D,IAAI,EAAS,KAAK,OAAO,EACrB,EAAS,KAAK,IACd,EAAS,KAAK,IAAM,EAGxB,GAAI,EAAM,KAAK,IACX,MAAM,EAAgB,KAAM,CAAM,EAGtC,MADA,MAAK,IAAM,EACJ,EAAK,WAAW,KAAK,IAAK,EAAO,CAAG,CAC/C,EAOA,EAAO,UAAU,KAAO,SAAc,EAAQ,CAC1C,GAAI,OAAO,GAAW,SAAU,CAE5B,GAAI,KAAK,IAAM,EAAS,KAAK,IACzB,MAAM,EAAgB,KAAM,CAAM,EACtC,KAAK,KAAO,CAChB,MACI,GAEI,GAAI,KAAK,KAAO,KAAK,IACjB,MAAM,EAAgB,IAAI,QACzB,KAAK,IAAI,KAAK,OAAS,KAEpC,OAAO,IACX,EAMA,EAAO,eAAiB,EAAK,eAM7B,EAAO,eAAiB,GASxB,EAAO,UAAU,SAAW,SAAS,EAAU,EAAO,EAAa,CAE/D,GADI,IAAU,IAAA,KAAW,EAAQ,GAC7B,EAAQ,EAAO,eACf,MAAM,MAAM,oBAAoB,EACpC,GAAI,IAAgB,EAChB,MAAM,MAAM,6BAA6B,EAC7C,OAAQ,EAAR,CACI,IAAK,GACD,KAAK,KAAK,EACV,MACJ,IAAK,GACD,KAAK,KAAK,CAAC,EACX,MACJ,IAAK,GACD,KAAK,KAAK,KAAK,OAAO,CAAC,EACvB,MACJ,IAAK,GACD,OAAa,CACT,IAAI,EAAM,KAAK,IAAI,EACf,EAAc,IAAQ,EAE1B,GADA,EAAW,EAAM,EACb,CAAC,EACD,MAAM,MAAM,6BAA6B,EAC7C,GAAI,IAAa,EAAG,CAChB,GAAI,IAAgB,IAAA,IAAa,IAAgB,EAC7C,MAAM,MAAM,uBAAuB,EACvC,KACJ,CACA,KAAK,SAAS,EAAU,EAAQ,EAAG,CAAW,CAClD,CACA,MACJ,IAAK,GACD,KAAK,KAAK,CAAC,EACX,MAGJ,QACI,MAAM,MAAM,qBAAuB,EAAW,cAAgB,KAAK,GAAG,CAC9E,CACA,OAAO,IACX,EAEA,EAAO,WAAa,SAAS,EAAe,CACxC,EAAe,EACf,EAAO,OAAS,EAAO,EACvB,EAAa,WAAW,EAExB,IAAI,EAAK,EAAK,KAAO,SAAsC,WAC3D,EAAK,MAAM,EAAO,UAAW,CAEzB,MAAO,UAAsB,CACzB,OAAO,EAAe,KAAK,IAAI,CAAC,CAAC,EAAG,CAAC,EAAK,CAC9C,EAEA,OAAQ,UAAuB,CAC3B,OAAO,EAAe,KAAK,IAAI,CAAC,CAAC,EAAG,CAAC,EAAI,CAC7C,EAEA,OAAQ,UAAuB,CAC3B,OAAO,EAAe,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAG,CAAC,EAAK,CACzD,EAEA,QAAS,UAAwB,CAC7B,OAAO,EAAY,KAAK,IAAI,CAAC,CAAC,EAAG,CAAC,EAAI,CAC1C,EAEA,SAAU,UAAyB,CAC/B,OAAO,EAAY,KAAK,IAAI,CAAC,CAAC,EAAG,CAAC,EAAK,CAC3C,CAEJ,CAAC,CACL,kBCn2BA,EAAO,QAAU,EAGjB,IAAI,EAAA,EAAA,EACJ,EAAa,UAAY,OAAO,OAAO,EAAO,UAAW,CACrD,YAAa,CACT,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EAClB,CACJ,CAAC,EAED,IAAI,EAAA,EAAA,EASJ,SAAS,EAAa,EAAQ,CAC1B,EAAO,KAAK,KAAM,CAAM,CAO5B,CAEA,EAAa,WAAa,UAAY,CAE9B,EAAK,SACL,EAAa,UAAU,OAAS,EAAK,OAAO,UAAU,MAC9D,EAUA,EAAa,UAAU,IAAM,SAAyB,EAAO,EAAK,CAC9D,OAAO,KAAK,OAAO,KAAK,KAAK,IAAK,EAAO,CAAG,CAChD,EAKA,EAAa,UAAU,OAAS,UAA8B,CAC1D,IAAI,EAAM,KAAK,OAAO,EAClB,EAAQ,KAAK,IACb,EAAM,KAAK,IAAM,EAGrB,GAAI,EAAM,KAAK,IACX,MAAM,WAAW,uBAAyB,KAAK,IAAM,MAAQ,EAAM,MAAQ,KAAK,GAAG,EAGvF,MADA,MAAK,IAAM,EACJ,KAAK,IAAI,UACV,KAAK,IAAI,UAAU,EAAO,CAAG,EAC7B,KAAK,IAAI,SAAS,QAAS,EAAO,CAAG,CAC/C,EASA,EAAa,WAAW,kBC3ExB,EAAO,QAAU,EAEjB,IAAI,EAAA,EAAA,EAGJ,EAAQ,UAAY,OAAO,OAAO,EAAK,aAAa,UAAW,CAC3D,YAAa,CACT,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EAClB,CACJ,CAAC,EAyCD,SAAS,EAAQ,EAAS,EAAkB,EAAmB,CAE3D,GAAI,OAAO,GAAY,WACnB,MAAM,UAAU,4BAA4B,EAEhD,EAAK,aAAa,KAAK,IAAI,EAM3B,KAAK,QAAU,EAMf,KAAK,iBAAmB,EAAQ,EAMhC,KAAK,kBAAoB,EAAQ,CACrC,CAaA,EAAQ,UAAU,QAAU,SAAS,EAAQ,EAAQ,EAAa,EAAc,EAAS,EAAU,CAE/F,GAAI,CAAC,EACD,MAAM,UAAU,2BAA2B,EAE/C,IAAI,EAAO,KACX,GAAI,CAAC,EACD,OAAO,EAAK,UAAU,EAAS,EAAM,EAAQ,EAAa,EAAc,CAAO,EAEnF,GAAI,CAAC,EAAK,QAAS,CACf,WAAW,UAAW,CAAE,EAAS,MAAM,eAAe,CAAC,CAAG,EAAG,CAAC,EAC9D,MACJ,CAEA,GAAI,CACA,OAAO,EAAK,QACR,EACA,EAAY,EAAK,iBAAmB,kBAAoB,SAAS,CAAC,CAAO,CAAC,CAAC,OAAO,EAClF,SAAqB,EAAK,EAAU,CAEhC,GAAI,EAEA,OADA,EAAK,KAAK,QAAS,EAAK,CAAM,EACvB,EAAS,CAAG,EAGvB,GAAI,IAAa,KAAM,CACnB,EAAK,IAAqB,EAAI,EAC9B,MACJ,CAEA,GAAI,EAAE,aAAoB,GACtB,GAAI,CACA,EAAW,EAAa,EAAK,kBAAoB,kBAAoB,SAAS,CAAC,CAAQ,CAC3F,OAAS,EAAK,CAEV,OADA,EAAK,KAAK,QAAS,EAAK,CAAM,EACvB,EAAS,CAAG,CACvB,CAIJ,OADA,EAAK,KAAK,OAAQ,EAAU,CAAM,EAC3B,EAAS,KAAM,CAAQ,CAClC,CACJ,CACJ,OAAS,EAAK,CACV,EAAK,KAAK,QAAS,EAAK,CAAM,EAC9B,WAAW,UAAW,CAAE,EAAS,CAAG,CAAG,EAAG,CAAC,EAC3C,MACJ,CACJ,EAOA,EAAQ,UAAU,IAAM,SAAa,EAAY,CAO7C,OANI,KAAK,UACA,GACD,KAAK,QAAQ,KAAM,KAAM,IAAI,EACjC,KAAK,QAAU,KACf,KAAK,KAAK,KAAK,CAAC,CAAC,IAAI,GAElB,IACX,cCpJA,IAAI,EAAM,EA6BV,EAAI,QAAA,EAAA,kBClCJ,EAAO,QAAU,OAAO,OAAO,IAAI,cCOnC,EAAQ,MAAQ,UAGhB,EAAQ,OAAA,EAAA,EACR,EAAQ,aAAA,EAAA,EACR,EAAQ,OAAA,EAAA,EACR,EAAQ,aAAA,EAAA,EAGR,EAAQ,KAAA,EAAA,EACR,EAAQ,IAAA,EAAA,EACR,EAAQ,MAAA,EAAA,EACR,EAAQ,UAAe,EAOvB,SAAS,GAAY,CACjB,EAAQ,KAAK,SAAS,WAAW,EAAQ,KAAK,IAAI,EAClD,EAAQ,OAAO,WAAW,EAAQ,YAAY,EAC9C,EAAQ,OAAO,WAAW,EAAQ,YAAY,CAClD,CAGA,EAAU,kBC/BV,EAAO,QAAA,EAAA,kICCD,EAAA,EAAoB,OAAQ,EAAA,EAAoB,OAAQ,EAAA,EAAkB,KAC1E,EAAU,EAAM,OAAO,OAAQ,EAAa,EAAM,OAAO,UAAW,EAAS,EAAM,OAAO,MAAO,EAAc,EAAM,OAAO,WAAY,EAAa,EAAM,OAAO,UAAW,EAAU,EAAM,OAAO,OAAQ,EAAU,EAAM,OAAO,OAAQ,EAAY,EAAM,OAAO,SAAU,EAAW,EAAM,OAAO,QAAS,EAAU,EAAM,OAAO,OAAQ,EAAS,EAAM,OAAO,MAGpW,EAAA,EAAkB,MAAMC,UAAe,EAAU,MAAMA,QAAa,CAAC,GAE9D,GAAQ,EAAM,WAAe,CAOtC,IAAM,EAAQ,CAAC,EAwiCf,MA/hCA,GAAM,MAAQ,UAAW,CACrB,IAAM,EAAa,EAAQ,OAAO,IAAI,EAAG,EAAS,EAAQ,OAAO,CAAU,EAG3E,MAFA,GAAO,EAAW,GAAK,cAAgB,EACvC,EAAO,EAAW,GAAK,oBAAsB,EACtC,CACX,EAAA,CAAG,EAEH,EAAM,cAAgB,UAAW,CAuC7B,IAAM,EAAe,SAAU,EAAY,CAGvC,GAFA,KAAK,YAAc,CAAC,EACpB,KAAK,WAAa,CAAC,EACf,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAuoBA,MA/nBA,GAAa,UAAU,GAAK,GAQ5B,EAAa,UAAU,MAAQ,GAQ/B,EAAa,UAAU,KAAO,GAQ9B,EAAa,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQvF,EAAa,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQvF,EAAa,UAAU,YAAc,EAAM,YAQ3C,EAAa,UAAU,WAAa,EAAM,YAQ1C,EAAa,UAAU,YAAc,GAQrC,EAAa,UAAU,kBAAoB,GAQ3C,EAAa,UAAU,mBAAqB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAc1F,EAAa,OAAS,SAAS,EAAY,CACvC,OAAO,IAAI,EAAa,CAAU,CACtC,EAWA,EAAa,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKrD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAWrC,GAVI,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,GAAK,EAAQ,KAAO,IACnF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,EAAE,EAC1D,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GAAK,EAAQ,QAAU,IAC5F,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,KAAK,EAC7D,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAAK,EAAQ,OAAS,IACzF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,IAAI,EAC5D,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,EACjF,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAQ,WAAW,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EACzE,EAAO,OAA+B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAM,YAAY,EAAK,GAAI,EAAK,CAAC,CAAC,CAAC,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,YAAY,EAAK,GAAG,CAAC,CAAC,OAAO,EAChN,GAAI,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,EAC/E,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAQ,UAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EACxE,EAAO,OAA+B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAK,EAAE,CAAC,CAAC,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EAAK,GAAG,CAAC,CAAC,OAAO,EAOxL,GANI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA+B,EAAE,CAAC,CAAC,KAAK,EAAQ,WAAW,EAClE,EAAQ,mBAAqB,MAAQ,EAAQ,eAAe,KAAK,EAAS,mBAAmB,GAAK,EAAQ,oBAAsB,IAChI,EAAO,OAA+B,GAAG,CAAC,CAAC,OAAO,EAAQ,iBAAiB,EAC3E,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,IAAM,OAAO,EAAQ,oBAAuB,SAAW,EAAQ,mBAAmB,KAAO,EAAQ,mBAAmB,KAAO,EAAQ,qBAAuB,IACzP,EAAO,OAA+B,GAAG,CAAC,CAAC,MAAM,EAAQ,kBAAkB,EAC3E,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAa,gBAAkB,SAAS,EAAS,EAAQ,CACrD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAa,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKnE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAAK,EACvB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,MAAM,aAC9B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,GAAK,EAEb,OAAO,EAAQ,GACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,MAAQ,EAEhB,OAAO,EAAQ,MACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,KAAO,EAEf,OAAO,EAAQ,KACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,IAAI,CACD,GAAI,IAAa,EACb,MACA,EAAQ,cAAgB,EAAM,cAC9B,EAAQ,YAAc,CAAC,GAC3B,IAAI,EAAO,EAAO,OAAO,EAAI,EAAO,IACpC,GAAI,EAAO,EAAO,IACd,MAAM,EAAY,oBAAoB,EAI1C,IAHA,EAAO,IAAM,EACb,EAAM,EACN,EAAQ,EACD,EAAO,IAAM,GAAM,CACtB,IAAI,EAAO,EAAO,IAAI,EAEtB,OADA,EAAW,EAAO,EACV,KAAU,EAAlB,CACA,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAM,EAAO,MAAM,EACnB,SACJ,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAQ,EAAO,MAAM,EACrB,QACJ,CACA,EAAO,SAAS,EAAU,EAAQ,CAAI,CAC1C,CACA,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,EACb,EAAQ,YAAY,OAAO,GAAQ,SAAW,EAAM,WAAW,CAAG,EAAI,GAAO,EAC7E,QACJ,CACJ,IAAK,IAAI,CACD,GAAI,IAAa,EACb,MACA,EAAQ,aAAe,EAAM,cAC7B,EAAQ,WAAa,CAAC,GAC1B,IAAI,EAAO,EAAO,OAAO,EAAI,EAAO,IACpC,GAAI,EAAO,EAAO,IACd,MAAM,EAAY,oBAAoB,EAI1C,IAHA,EAAO,IAAM,EACb,EAAM,GACN,EAAQ,GACD,EAAO,IAAM,GAAM,CACtB,IAAI,EAAO,EAAO,IAAI,EAEtB,OADA,EAAW,EAAO,EACV,KAAU,EAAlB,CACA,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAM,EAAO,aAAa,EAC1B,SACJ,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAQ,EAAO,aAAa,EAC5B,QACJ,CACA,EAAO,SAAS,EAAU,EAAQ,CAAI,CAC1C,CACA,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,EACT,IAAQ,aACR,EAAM,SAAS,EAAQ,WAAY,CAAG,EAC1C,EAAQ,WAAW,GAAO,EAC1B,QACJ,CACJ,IAAK,IACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,KAAK,GACpB,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,IACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,kBAAoB,EAE5B,OAAO,EAAQ,kBACnB,SAER,IAAK,IACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,mBAAqB,EAE7B,OAAO,EAAQ,mBACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAa,gBAAkB,SAAS,EAAQ,CAG5C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAa,OAAS,SAAU,EAAS,EAAQ,CAC7C,GAAI,OAAO,GAAY,WAAY,EAC/B,MAAO,kBAGX,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAO,qBACX,GAAI,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,GAC3D,CAAC,EAAM,SAAS,EAAQ,EAAE,EAC1B,MAAO,sBACf,GAAI,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GACjE,CAAC,EAAM,SAAS,EAAQ,KAAK,EAC7B,MAAO,yBACf,GAAI,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAC/D,CAAC,EAAM,SAAS,EAAQ,IAAI,EAC5B,MAAO,wBACf,GAAI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GACtK,MAAO,yCACf,GAAI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GACtK,MAAO,yCACf,GAAI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,EAAG,CACpF,GAAI,CAAC,EAAM,SAAS,EAAQ,WAAW,EACnC,MAAO,+BACX,IAAI,EAAM,EAAQ,KAAK,EAAQ,WAAW,EAC1C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,EAAE,EAAG,CACjC,GAAI,CAAC,EAAM,QAAQ,KAAK,EAAI,EAAE,EAC1B,MAAO,kDACX,GAAI,OAAO,EAAQ,YAAY,EAAI,KAAQ,WAAa,EAAQ,YAAY,EAAI,IAAM,KAAO,EAAQ,YAAY,EAAI,IACjH,MAAO,2CACf,CACJ,CACA,GAAI,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,EAAG,CAClF,GAAI,CAAC,EAAM,SAAS,EAAQ,UAAU,EAClC,MAAO,8BACX,IAAI,EAAM,EAAQ,KAAK,EAAQ,UAAU,EACzC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,EAAE,EAC9B,GAAI,CAAC,EAAM,SAAS,EAAQ,WAAW,EAAI,GAAG,EAC1C,MAAO,uCACnB,CAUA,OATI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,OAAO,EAAQ,aAAgB,UACxB,gCACX,EAAQ,mBAAqB,MAAQ,EAAQ,eAAe,KAAK,EAAS,mBAAmB,GACzF,CAAC,EAAM,SAAS,EAAQ,iBAAiB,EAClC,qCACX,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAC3F,CAAC,EAAM,UAAU,EAAQ,kBAAkB,GAAK,EAAE,EAAQ,oBAAsB,EAAM,UAAU,EAAQ,mBAAmB,GAAG,GAAK,EAAM,UAAU,EAAQ,mBAAmB,IAAI,GAC3K,4CACR,IACX,EAUA,EAAa,WAAa,SAAU,EAAQ,EAAQ,CAChD,GAAI,aAAkB,EAAM,MAAM,aAC9B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,sCAAsC,EAG3D,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,MAAM,aA8B9B,GA7BI,EAAO,IAAM,OACT,OAAO,EAAO,IAAO,UAAY,EAAO,GAAG,UAC3C,EAAQ,GAAK,EAAQ,EAAO,EAAE,GAClC,EAAO,OAAS,OACZ,OAAO,EAAO,OAAU,UAAY,EAAO,MAAM,UACjD,EAAQ,MAAQ,EAAQ,EAAO,KAAK,GACxC,EAAO,MAAQ,OACX,OAAO,EAAO,MAAS,UAAY,EAAO,KAAK,UAC/C,EAAQ,KAAO,EAAQ,EAAO,IAAI,GACtC,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,YAAa,CACpB,GAAI,CAAC,EAAM,SAAS,EAAO,WAAW,EAClC,MAAM,EAAW,kDAAkD,EACvE,EAAQ,YAAc,CAAC,EACvB,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAO,WAAW,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAGxE,OAFI,EAAK,KAAO,aACZ,EAAM,SAAS,EAAQ,YAAa,EAAK,EAAE,EACvC,EAAO,YAAY,EAAK,IAAhC,CACA,IAAK,aACL,IAAK,GACD,EAAQ,YAAY,EAAK,IAAM,EAC/B,MACJ,IAAK,mBACL,IAAK,GACD,EAAQ,YAAY,EAAK,IAAM,EAC/B,MACJ,QACQ,OAAO,EAAO,YAAY,EAAK,KAAQ,WAAa,EAAO,YAAY,EAAK,IAAM,KAAO,EAAO,YAAY,EAAK,MACjH,EAAQ,YAAY,EAAK,IAAM,EAAO,YAAY,EAAK,IAC/D,CAER,CACA,GAAI,EAAO,WAAY,CACnB,GAAI,CAAC,EAAM,SAAS,EAAO,UAAU,EACjC,MAAM,EAAW,iDAAiD,EACtE,EAAQ,WAAa,CAAC,EACtB,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAO,UAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EACnE,EAAK,KAAO,aACZ,EAAM,SAAS,EAAQ,WAAY,EAAK,EAAE,EAC9C,EAAQ,WAAW,EAAK,IAAM,EAAQ,EAAO,WAAW,EAAK,GAAG,CAExE,CAiBA,OAhBI,EAAO,aAAe,MAClB,EAAO,cACP,EAAQ,YAAc,EAAS,EAAO,WAAW,GACrD,EAAO,mBAAqB,OACxB,OAAO,EAAO,mBAAsB,UAAY,EAAO,kBAAkB,UACzE,EAAQ,kBAAoB,EAAQ,EAAO,iBAAiB,GAChE,EAAO,oBAAsB,OACzB,OAAO,EAAO,oBAAuB,SAAW,EAAO,mBAAmB,KAAO,EAAO,mBAAmB,KAAO,EAAQ,EAAO,kBAAkB,IAAM,KACrJ,EAAM,KACN,EAAQ,mBAAqB,EAAM,KAAK,UAAU,EAAO,mBAAoB,EAAK,EAC7E,OAAO,EAAO,oBAAuB,SAC1C,EAAQ,mBAAqB,EAAU,EAAO,mBAAoB,EAAE,EAC/D,OAAO,EAAO,oBAAuB,SAC1C,EAAQ,mBAAqB,EAAO,mBAC/B,OAAO,EAAO,oBAAuB,WAC1C,EAAQ,mBAAqB,IAAI,EAAM,SAAS,EAAO,mBAAmB,MAAQ,EAAG,EAAO,mBAAmB,OAAS,CAAC,CAAC,CAAC,SAAS,IACzI,CACX,EAWA,EAAa,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKxD,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAKd,IAJI,EAAQ,SAAW,EAAQ,YAC3B,EAAO,YAAc,CAAC,EACtB,EAAO,WAAa,CAAC,GAErB,EAAQ,SAAU,CAIlB,GAHA,EAAO,GAAK,GACZ,EAAO,MAAQ,GACf,EAAO,KAAO,GACV,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC5I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAG5I,GAFA,EAAO,YAAc,GACrB,EAAO,kBAAoB,GACvB,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,mBAAqB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC5M,KACI,GAAO,mBAAqB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CACnJ,CACI,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,IAC/D,EAAO,GAAK,EAAQ,IACpB,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,IACrE,EAAO,MAAQ,EAAQ,OACvB,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,IACnE,EAAO,KAAO,EAAQ,MACtB,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBACtQ,IAAI,EACJ,GAAI,EAAQ,cAAgB,EAAQ,EAAQ,KAAK,EAAQ,WAAW,EAAA,CAAG,OAAQ,CAC3E,EAAO,YAAc,CAAC,EACtB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAAG,CACnC,IAAI,EAAK,EAAM,YAAY,EAAM,GAAI,EAAK,CAAC,CAAC,SAAS,EACjD,EAAM,KAAO,aACb,EAAM,SAAS,EAAO,YAAa,EAAM,EAAE,EAC/C,EAAO,YAAY,GAAM,EAAQ,QAAU,EAAU,EAAM,MAAM,KAAK,EAAQ,YAAY,EAAM,OAAS,EAAa,EAAQ,YAAY,EAAM,IAAM,EAAM,MAAM,KAAK,EAAQ,YAAY,EAAM,KAAO,EAAQ,YAAY,EAAM,GACtO,CACJ,CACA,GAAI,EAAQ,aAAe,EAAQ,EAAQ,KAAK,EAAQ,UAAU,EAAA,CAAG,OAAQ,CACzE,EAAO,WAAa,CAAC,EACrB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAC5B,EAAM,KAAO,aACb,EAAM,SAAS,EAAO,WAAY,EAAM,EAAE,EAC9C,EAAO,WAAW,EAAM,IAAM,EAAQ,WAAW,EAAM,GAE/D,CAYA,OAXI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,mBAAqB,MAAQ,EAAQ,eAAe,KAAK,EAAS,mBAAmB,IAC7F,EAAO,kBAAoB,EAAQ,mBACnC,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,IAC/F,AAKI,EAAO,mBALA,IAAY,QAAe,EAAQ,QAAU,EACxB,OAAO,EAAQ,oBAAuB,SAAW,EAAQ,EAAQ,kBAAkB,EAAI,EAAM,KAAK,SAAS,EAAQ,mBAAmB,MAAQ,EAAG,EAAQ,mBAAmB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC/N,OAAO,EAAQ,oBAAuB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,kBAAkB,EAAI,EAAQ,mBAE1E,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,kBAAkB,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,mBAAmB,MAAQ,EAAG,EAAQ,mBAAmB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,oBAC3Q,CACX,EASA,EAAa,UAAU,OAAS,UAAW,CACvC,OAAO,EAAa,SAAS,KAAA,EAAgB,KAAK,aAAa,CACnE,EAUA,EAAa,WAAa,SAAS,EAAQ,CAGvC,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,qBACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAM,YAAc,UAAW,CAgC3B,IAAM,EAAa,SAAU,EAAY,CAErC,GADA,KAAK,MAAQ,CAAC,EACV,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAuTA,MA/SA,GAAW,UAAU,mBAAqB,EAQ1C,EAAW,UAAU,qBAAuB,GAQ5C,EAAW,UAAU,MAAQ,EAAM,WAcnC,EAAW,OAAS,SAAS,EAAY,CACrC,OAAO,IAAI,EAAW,CAAU,CACpC,EAWA,EAAW,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKnD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAKrC,GAJI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAAK,EAAQ,qBAAuB,GACnI,EAAO,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAQ,kBAAkB,EACxE,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAAK,EAAQ,uBAAyB,IACzI,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,oBAAoB,EAC5E,EAAQ,OAAS,MAAQ,EAAQ,MAAM,OACvC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,MAAM,OAAQ,EAAE,EACxC,EAAM,MAAM,aAAa,OAAO,EAAQ,MAAM,GAAI,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,EAAG,EAAS,CAAC,CAAC,CAAC,OAAO,EAC9H,GAAI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAW,gBAAkB,SAAS,EAAS,EAAQ,CACnD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAW,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKjE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,MAAM,WAC9B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,mBAAqB,EAE7B,OAAO,EAAQ,mBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,qBAAuB,EAE/B,OAAO,EAAQ,qBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,MACE,EAAQ,OAAS,EAAQ,MAAM,SACjC,EAAQ,MAAQ,CAAC,GACrB,EAAQ,MAAM,KAAK,EAAM,MAAM,aAAa,OAAO,EAAQ,EAAO,OAAO,EAAG,EAAY,EAAS,CAAC,CAAC,EACnG,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAW,gBAAkB,SAAS,EAAQ,CAG1C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAW,OAAS,SAAU,EAAS,EAAQ,CAC3C,GAAI,OAAO,GAAY,WAAY,EAC/B,MAAO,kBAGX,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAO,qBACX,GAAI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAC3F,CAAC,EAAM,UAAU,EAAQ,kBAAkB,EAC3C,MAAO,uCACf,GAAI,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAC/F,CAAC,EAAM,SAAS,EAAQ,oBAAoB,EAC5C,MAAO,wCACf,GAAI,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,EAAG,CACxE,GAAI,CAAC,EAAO,QAAQ,EAAQ,KAAK,EAC7B,MAAO,wBACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,MAAM,OAAQ,EAAE,EAAG,CAC3C,IAAI,EAAQ,EAAM,MAAM,aAAa,OAAO,EAAQ,MAAM,GAAI,EAAS,CAAC,EACxE,GAAI,EACA,MAAO,SAAW,CAC1B,CACJ,CACA,OAAO,IACX,EAUA,EAAW,WAAa,SAAU,EAAQ,EAAQ,CAC9C,GAAI,aAAkB,EAAM,MAAM,WAC9B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,oCAAoC,EAGzD,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,MAAM,WAO9B,GANI,EAAO,oBAAsB,MACzB,EAAQ,EAAO,kBAAkB,IAAM,IACvC,EAAQ,mBAAqB,EAAO,mBAAqB,GAC7D,EAAO,sBAAwB,OAC3B,OAAO,EAAO,sBAAyB,UAAY,EAAO,qBAAqB,UAC/E,EAAQ,qBAAuB,EAAQ,EAAO,oBAAoB,GACtE,EAAO,MAAO,CACd,GAAI,CAAC,EAAO,QAAQ,EAAO,KAAK,EAC5B,MAAM,EAAW,yCAAyC,EAC9D,EAAQ,MAAQ,EAAO,EAAO,MAAM,MAAM,EAC1C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,MAAM,OAAQ,EAAE,EAAG,CAC1C,GAAI,CAAC,EAAM,SAAS,EAAO,MAAM,EAAE,EAC/B,MAAM,EAAW,0CAA0C,EAC/D,EAAQ,MAAM,GAAK,EAAM,MAAM,aAAa,WAAW,EAAO,MAAM,GAAI,EAAS,CAAC,CACtF,CACJ,CACA,OAAO,CACX,EAWA,EAAW,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKtD,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAWd,IAVI,EAAQ,QAAU,EAAQ,YAC1B,EAAO,MAAQ,CAAC,GAChB,EAAQ,WACR,EAAO,mBAAqB,EAC5B,EAAO,qBAAuB,IAE9B,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,IAC/F,EAAO,mBAAqB,EAAQ,oBACpC,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,IACnG,EAAO,qBAAuB,EAAQ,sBACtC,EAAQ,OAAS,EAAQ,MAAM,OAAQ,CACvC,EAAO,MAAQ,EAAO,EAAQ,MAAM,MAAM,EAC1C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,MAAM,OAAQ,EAAE,EACxC,EAAO,MAAM,GAAK,EAAM,MAAM,aAAa,SAAS,EAAQ,MAAM,GAAI,EAAS,EAAS,CAAC,CACjG,CACA,OAAO,CACX,EASA,EAAW,UAAU,OAAS,UAAW,CACrC,OAAO,EAAW,SAAS,KAAA,EAAgB,KAAK,aAAa,CACjE,EAUA,EAAW,WAAa,SAAS,EAAQ,CAGrC,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,mBACpB,EAEO,CACX,EAAA,CAAG,EAEI,CACX,EAAA,CAAG,EAEU,GAAU,EAAM,aAAiB,CAO1C,IAAM,EAAU,CAAC,EA68CjB,MA38CA,GAAQ,aAAe,UAAW,CAsC9B,IAAM,EAAc,SAAU,EAAY,CACtC,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA8gBA,MAtgBA,GAAY,UAAU,mBAAqB,EAQ3C,EAAY,UAAU,qBAAuB,GAQ7C,EAAY,UAAU,GAAK,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQzE,EAAY,UAAU,KAAO,GAQ7B,EAAY,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQtF,EAAY,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQtF,EAAY,UAAU,YAAc,EAQpC,EAAY,UAAU,aAAe,GAQrC,EAAY,UAAU,6BAA+B,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAcnG,EAAY,OAAS,SAAS,EAAY,CACtC,OAAO,IAAI,EAAY,CAAU,CACrC,EAWA,EAAY,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKpD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAmBrC,GAlBI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAAK,EAAQ,qBAAuB,GACnI,EAAO,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAQ,kBAAkB,EACxE,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAAK,EAAQ,uBAAyB,IACzI,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,oBAAoB,EAC5E,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,IAAM,OAAO,EAAQ,IAAO,SAAW,EAAQ,GAAG,KAAO,EAAQ,GAAG,KAAO,EAAQ,KAAO,IACzJ,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,EAAE,EACzD,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAAK,EAAQ,OAAS,IACzF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,IAAI,EAC5D,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,GAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,WAAW,EAClE,EAAQ,cAAgB,MAAQ,EAAQ,eAAe,KAAK,EAAS,cAAc,GAAK,EAAQ,eAAiB,IACjH,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,YAAY,EACpE,EAAQ,8BAAgC,MAAQ,EAAQ,eAAe,KAAK,EAAS,8BAA8B,IAAM,OAAO,EAAQ,8BAAiC,SAAW,EAAQ,6BAA6B,KAAO,EAAQ,6BAA6B,KAAO,EAAQ,+BAAiC,IACrT,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,4BAA4B,EACnF,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAY,gBAAkB,SAAS,EAAS,EAAQ,CACpD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAY,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKlE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,YAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,mBAAqB,EAE7B,OAAO,EAAQ,mBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,qBAAuB,EAE/B,OAAO,EAAQ,qBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,GAAK,EAEb,OAAO,EAAQ,GACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,KAAO,EAEf,OAAO,EAAQ,KACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,aAAe,EAEvB,OAAO,EAAQ,aACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,6BAA+B,EAEvC,OAAO,EAAQ,6BACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAY,gBAAkB,SAAS,EAAQ,CAG3C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAY,OAAS,SAAU,EAAS,EAAQ,CAkC5C,OAjCI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAC3F,CAAC,EAAM,UAAU,EAAQ,kBAAkB,EACpC,uCACX,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAC/F,CAAC,EAAM,SAAS,EAAQ,oBAAoB,EACrC,wCACX,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,GAC3D,CAAC,EAAM,UAAU,EAAQ,EAAE,GAAK,EAAE,EAAQ,IAAM,EAAM,UAAU,EAAQ,GAAG,GAAG,GAAK,EAAM,UAAU,EAAQ,GAAG,IAAI,GAC3G,4BACX,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAC/D,CAAC,EAAM,SAAS,EAAQ,IAAI,EACrB,wBACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACX,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,UAAU,EAAQ,WAAW,EAC7B,gCACX,EAAQ,cAAgB,MAAQ,EAAQ,eAAe,KAAK,EAAS,cAAc,GAC/E,CAAC,EAAM,SAAS,EAAQ,YAAY,EAC7B,gCACX,EAAQ,8BAAgC,MAAQ,EAAQ,eAAe,KAAK,EAAS,8BAA8B,GAC/G,CAAC,EAAM,UAAU,EAAQ,4BAA4B,GAAK,EAAE,EAAQ,8BAAgC,EAAM,UAAU,EAAQ,6BAA6B,GAAG,GAAK,EAAM,UAAU,EAAQ,6BAA6B,IAAI,GACnN,sDACR,KACX,EAUA,EAAY,WAAa,SAAU,EAAQ,EAAQ,CAC/C,GAAI,aAAkB,EAAM,QAAQ,YAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,uCAAuC,EAG5D,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,YAwDhC,OAvDI,EAAO,oBAAsB,MACzB,EAAQ,EAAO,kBAAkB,IAAM,IACvC,EAAQ,mBAAqB,EAAO,mBAAqB,GAC7D,EAAO,sBAAwB,OAC3B,OAAO,EAAO,sBAAyB,UAAY,EAAO,qBAAqB,UAC/E,EAAQ,qBAAuB,EAAQ,EAAO,oBAAoB,GACtE,EAAO,IAAM,OACT,OAAO,EAAO,IAAO,SAAW,EAAO,GAAG,KAAO,EAAO,GAAG,KAAO,EAAQ,EAAO,EAAE,IAAM,KACrF,EAAM,KACN,EAAQ,GAAK,EAAM,KAAK,UAAU,EAAO,GAAI,EAAK,EAC7C,OAAO,EAAO,IAAO,SAC1B,EAAQ,GAAK,EAAU,EAAO,GAAI,EAAE,EAC/B,OAAO,EAAO,IAAO,SAC1B,EAAQ,GAAK,EAAO,GACf,OAAO,EAAO,IAAO,WAC1B,EAAQ,GAAK,IAAI,EAAM,SAAS,EAAO,GAAG,MAAQ,EAAG,EAAO,GAAG,OAAS,CAAC,CAAC,CAAC,SAAS,IAC5F,EAAO,MAAQ,OACX,OAAO,EAAO,MAAS,UAAY,EAAO,KAAK,UAC/C,EAAQ,KAAO,EAAQ,EAAO,IAAI,GACtC,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,aAAe,MAClB,EAAQ,EAAO,WAAW,IAAM,IAChC,EAAQ,YAAc,EAAO,YAAc,GAC/C,EAAO,cAAgB,OACnB,OAAO,EAAO,cAAiB,UAAY,EAAO,aAAa,UAC/D,EAAQ,aAAe,EAAQ,EAAO,YAAY,GACtD,EAAO,8BAAgC,OACnC,OAAO,EAAO,8BAAiC,SAAW,EAAO,6BAA6B,KAAO,EAAO,6BAA6B,KAAO,EAAQ,EAAO,4BAA4B,IAAM,KAC7L,EAAM,KACN,EAAQ,6BAA+B,EAAM,KAAK,UAAU,EAAO,6BAA8B,EAAK,EACjG,OAAO,EAAO,8BAAiC,SACpD,EAAQ,6BAA+B,EAAU,EAAO,6BAA8B,EAAE,EACnF,OAAO,EAAO,8BAAiC,SACpD,EAAQ,6BAA+B,EAAO,6BACzC,OAAO,EAAO,8BAAiC,WACpD,EAAQ,6BAA+B,IAAI,EAAM,SAAS,EAAO,6BAA6B,MAAQ,EAAG,EAAO,6BAA6B,OAAS,CAAC,CAAC,CAAC,SAAS,IACvK,CACX,EAWA,EAAY,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKvD,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAGlB,GAFA,EAAO,mBAAqB,EAC5B,EAAO,qBAAuB,GAC1B,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,GAAK,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC5L,KACI,GAAO,GAAK,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAE/H,GADA,EAAO,KAAO,GACV,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC5I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAG5I,GAFA,EAAO,YAAc,EACrB,EAAO,aAAe,GAClB,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,6BAA+B,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACtN,KACI,GAAO,6BAA+B,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CAC7J,CAuCA,OAtCI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,IAC/F,EAAO,mBAAqB,EAAQ,oBACpC,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,IACnG,EAAO,qBAAuB,EAAQ,sBACtC,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,IAC/D,AAKI,EAAO,GALA,IAAY,QAAe,EAAQ,QAAU,EACxC,OAAO,EAAQ,IAAO,SAAW,EAAQ,EAAQ,EAAE,EAAI,EAAM,KAAK,SAAS,EAAQ,GAAG,MAAQ,EAAG,EAAQ,GAAG,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC/I,OAAO,EAAQ,IAAO,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,EAAE,EAAI,EAAQ,GAE1D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,EAAE,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,GAAG,MAAQ,EAAG,EAAQ,GAAG,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,IAC9M,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,IACnE,EAAO,KAAO,EAAQ,MACtB,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,cAAgB,MAAQ,EAAQ,eAAe,KAAK,EAAS,cAAc,IACnF,EAAO,aAAe,EAAQ,cAC9B,EAAQ,8BAAgC,MAAQ,EAAQ,eAAe,KAAK,EAAS,8BAA8B,IACnH,AAKI,EAAO,6BALA,IAAY,QAAe,EAAQ,QAAU,EACd,OAAO,EAAQ,8BAAiC,SAAW,EAAQ,EAAQ,4BAA4B,EAAI,EAAM,KAAK,SAAS,EAAQ,6BAA6B,MAAQ,EAAG,EAAQ,6BAA6B,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACjR,OAAO,EAAQ,8BAAiC,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,4BAA4B,EAAI,EAAQ,6BAEpF,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,4BAA4B,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,6BAA6B,MAAQ,EAAG,EAAQ,6BAA6B,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,8BACnT,CACX,EASA,EAAY,UAAU,OAAS,UAAW,CACtC,OAAO,EAAY,SAAS,KAAA,EAAgB,KAAK,aAAa,CAClE,EAUA,EAAY,WAAa,SAAS,EAAQ,CAGtC,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,sBACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAQ,gBAAkB,UAAW,CAoCjC,IAAM,EAAiB,SAAU,EAAY,CACzC,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAsdA,MA9cA,GAAe,UAAU,GAAK,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ5E,EAAe,UAAU,KAAO,GAQhC,EAAe,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQzF,EAAe,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQzF,EAAe,UAAU,YAAc,EAQvC,EAAe,UAAU,aAAe,GAQxC,EAAe,UAAU,6BAA+B,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EActG,EAAe,OAAS,SAAS,EAAY,CACzC,OAAO,IAAI,EAAe,CAAU,CACxC,EAWA,EAAe,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKvD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAerC,GAdI,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,IAAM,OAAO,EAAQ,IAAO,SAAW,EAAQ,GAAG,KAAO,EAAQ,GAAG,KAAO,EAAQ,KAAO,IACzJ,EAAO,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAQ,EAAE,EACxD,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAAK,EAAQ,OAAS,IACzF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,IAAI,EAC5D,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,GAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,WAAW,EAClE,EAAQ,cAAgB,MAAQ,EAAQ,eAAe,KAAK,EAAS,cAAc,GAAK,EAAQ,eAAiB,IACjH,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,YAAY,EACpE,EAAQ,8BAAgC,MAAQ,EAAQ,eAAe,KAAK,EAAS,8BAA8B,IAAM,OAAO,EAAQ,8BAAiC,SAAW,EAAQ,6BAA6B,KAAO,EAAQ,6BAA6B,KAAO,EAAQ,+BAAiC,IACrT,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,4BAA4B,EACnF,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAe,gBAAkB,SAAS,EAAS,EAAQ,CACvD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAe,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKrE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,eAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,GAAK,EAEb,OAAO,EAAQ,GACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,KAAO,EAEf,OAAO,EAAQ,KACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,aAAe,EAEvB,OAAO,EAAQ,aACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,6BAA+B,EAEvC,OAAO,EAAQ,6BACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAe,gBAAkB,SAAS,EAAQ,CAG9C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAe,OAAS,SAAU,EAAS,EAAQ,CA4B/C,OA3BI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,GAC3D,CAAC,EAAM,UAAU,EAAQ,EAAE,GAAK,EAAE,EAAQ,IAAM,EAAM,UAAU,EAAQ,GAAG,GAAG,GAAK,EAAM,UAAU,EAAQ,GAAG,IAAI,GAC3G,4BACX,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAC/D,CAAC,EAAM,SAAS,EAAQ,IAAI,EACrB,wBACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACX,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,UAAU,EAAQ,WAAW,EAC7B,gCACX,EAAQ,cAAgB,MAAQ,EAAQ,eAAe,KAAK,EAAS,cAAc,GAC/E,CAAC,EAAM,SAAS,EAAQ,YAAY,EAC7B,gCACX,EAAQ,8BAAgC,MAAQ,EAAQ,eAAe,KAAK,EAAS,8BAA8B,GAC/G,CAAC,EAAM,UAAU,EAAQ,4BAA4B,GAAK,EAAE,EAAQ,8BAAgC,EAAM,UAAU,EAAQ,6BAA6B,GAAG,GAAK,EAAM,UAAU,EAAQ,6BAA6B,IAAI,GACnN,sDACR,KACX,EAUA,EAAe,WAAa,SAAU,EAAQ,EAAQ,CAClD,GAAI,aAAkB,EAAM,QAAQ,eAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,0CAA0C,EAG/D,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,eAkDhC,OAjDI,EAAO,IAAM,OACT,OAAO,EAAO,IAAO,SAAW,EAAO,GAAG,KAAO,EAAO,GAAG,KAAO,EAAQ,EAAO,EAAE,IAAM,KACrF,EAAM,KACN,EAAQ,GAAK,EAAM,KAAK,UAAU,EAAO,GAAI,EAAK,EAC7C,OAAO,EAAO,IAAO,SAC1B,EAAQ,GAAK,EAAU,EAAO,GAAI,EAAE,EAC/B,OAAO,EAAO,IAAO,SAC1B,EAAQ,GAAK,EAAO,GACf,OAAO,EAAO,IAAO,WAC1B,EAAQ,GAAK,IAAI,EAAM,SAAS,EAAO,GAAG,MAAQ,EAAG,EAAO,GAAG,OAAS,CAAC,CAAC,CAAC,SAAS,IAC5F,EAAO,MAAQ,OACX,OAAO,EAAO,MAAS,UAAY,EAAO,KAAK,UAC/C,EAAQ,KAAO,EAAQ,EAAO,IAAI,GACtC,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,aAAe,MAClB,EAAQ,EAAO,WAAW,IAAM,IAChC,EAAQ,YAAc,EAAO,YAAc,GAC/C,EAAO,cAAgB,OACnB,OAAO,EAAO,cAAiB,UAAY,EAAO,aAAa,UAC/D,EAAQ,aAAe,EAAQ,EAAO,YAAY,GACtD,EAAO,8BAAgC,OACnC,OAAO,EAAO,8BAAiC,SAAW,EAAO,6BAA6B,KAAO,EAAO,6BAA6B,KAAO,EAAQ,EAAO,4BAA4B,IAAM,KAC7L,EAAM,KACN,EAAQ,6BAA+B,EAAM,KAAK,UAAU,EAAO,6BAA8B,EAAK,EACjG,OAAO,EAAO,8BAAiC,SACpD,EAAQ,6BAA+B,EAAU,EAAO,6BAA8B,EAAE,EACnF,OAAO,EAAO,8BAAiC,SACpD,EAAQ,6BAA+B,EAAO,6BACzC,OAAO,EAAO,8BAAiC,WACpD,EAAQ,6BAA+B,IAAI,EAAM,SAAS,EAAO,6BAA6B,MAAQ,EAAG,EAAO,6BAA6B,OAAS,CAAC,CAAC,CAAC,SAAS,IACvK,CACX,EAWA,EAAe,SAAW,SAAU,EAAS,EAAS,EAAQ,CAK1D,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAClB,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,GAAK,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC5L,KACI,GAAO,GAAK,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAE/H,GADA,EAAO,KAAO,GACV,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC5I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAG5I,GAFA,EAAO,YAAc,EACrB,EAAO,aAAe,GAClB,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,6BAA+B,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACtN,KACI,GAAO,6BAA+B,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CAC7J,CAmCA,OAlCI,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,IAC/D,AAKI,EAAO,GALA,IAAY,QAAe,EAAQ,QAAU,EACxC,OAAO,EAAQ,IAAO,SAAW,EAAQ,EAAQ,EAAE,EAAI,EAAM,KAAK,SAAS,EAAQ,GAAG,MAAQ,EAAG,EAAQ,GAAG,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC/I,OAAO,EAAQ,IAAO,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,EAAE,EAAI,EAAQ,GAE1D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,EAAE,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,GAAG,MAAQ,EAAG,EAAQ,GAAG,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,IAC9M,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,IACnE,EAAO,KAAO,EAAQ,MACtB,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,cAAgB,MAAQ,EAAQ,eAAe,KAAK,EAAS,cAAc,IACnF,EAAO,aAAe,EAAQ,cAC9B,EAAQ,8BAAgC,MAAQ,EAAQ,eAAe,KAAK,EAAS,8BAA8B,IACnH,AAKI,EAAO,6BALA,IAAY,QAAe,EAAQ,QAAU,EACd,OAAO,EAAQ,8BAAiC,SAAW,EAAQ,EAAQ,4BAA4B,EAAI,EAAM,KAAK,SAAS,EAAQ,6BAA6B,MAAQ,EAAG,EAAQ,6BAA6B,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACjR,OAAO,EAAQ,8BAAiC,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,4BAA4B,EAAI,EAAQ,6BAEpF,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,4BAA4B,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,6BAA6B,MAAQ,EAAG,EAAQ,6BAA6B,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,8BACnT,CACX,EASA,EAAe,UAAU,OAAS,UAAW,CACzC,OAAO,EAAe,SAAS,KAAA,EAAgB,KAAK,aAAa,CACrE,EAUA,EAAe,WAAa,SAAS,EAAQ,CAGzC,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,yBACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAQ,cAAgB,UAAW,CAiC/B,IAAM,EAAe,SAAU,EAAY,CAEvC,GADA,KAAK,QAAU,CAAC,EACZ,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAmWA,MA3VA,GAAa,UAAU,mBAAqB,EAQ5C,EAAa,UAAU,qBAAuB,GAQ9C,EAAa,UAAU,QAAU,EAAM,WAQvC,EAAa,UAAU,kBAAoB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAczF,EAAa,OAAS,SAAS,EAAY,CACvC,OAAO,IAAI,EAAa,CAAU,CACtC,EAWA,EAAa,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKrD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAKrC,GAJI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAAK,EAAQ,qBAAuB,GACnI,EAAO,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAQ,kBAAkB,EACxE,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAAK,EAAQ,uBAAyB,IACzI,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,oBAAoB,EAC5E,EAAQ,SAAW,MAAQ,EAAQ,QAAQ,OAC3C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,QAAQ,OAAQ,EAAE,EAC1C,EAAM,QAAQ,eAAe,OAAO,EAAQ,QAAQ,GAAI,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,EAAG,EAAS,CAAC,CAAC,CAAC,OAAO,EAGpI,GAFI,EAAQ,mBAAqB,MAAQ,EAAQ,eAAe,KAAK,EAAS,mBAAmB,IAAM,OAAO,EAAQ,mBAAsB,SAAW,EAAQ,kBAAkB,KAAO,EAAQ,kBAAkB,KAAO,EAAQ,oBAAsB,IACnP,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,iBAAiB,EACxE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAa,gBAAkB,SAAS,EAAS,EAAQ,CACrD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAa,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKnE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,aAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,mBAAqB,EAE7B,OAAO,EAAQ,mBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,qBAAuB,EAE/B,OAAO,EAAQ,qBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,MACE,EAAQ,SAAW,EAAQ,QAAQ,SACrC,EAAQ,QAAU,CAAC,GACvB,EAAQ,QAAQ,KAAK,EAAM,QAAQ,eAAe,OAAO,EAAQ,EAAO,OAAO,EAAG,EAAY,EAAS,CAAC,CAAC,EACzG,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,kBAAoB,EAE5B,OAAO,EAAQ,kBACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAa,gBAAkB,SAAS,EAAQ,CAG5C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAa,OAAS,SAAU,EAAS,EAAQ,CAC7C,GAAI,OAAO,GAAY,WAAY,EAC/B,MAAO,kBAGX,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAO,qBACX,GAAI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAC3F,CAAC,EAAM,UAAU,EAAQ,kBAAkB,EAC3C,MAAO,uCACf,GAAI,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAC/F,CAAC,EAAM,SAAS,EAAQ,oBAAoB,EAC5C,MAAO,wCACf,GAAI,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,EAAG,CAC5E,GAAI,CAAC,EAAO,QAAQ,EAAQ,OAAO,EAC/B,MAAO,0BACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,QAAQ,OAAQ,EAAE,EAAG,CAC7C,IAAI,EAAQ,EAAM,QAAQ,eAAe,OAAO,EAAQ,QAAQ,GAAI,EAAS,CAAC,EAC9E,GAAI,EACA,MAAO,WAAa,CAC5B,CACJ,CAIA,OAHI,EAAQ,mBAAqB,MAAQ,EAAQ,eAAe,KAAK,EAAS,mBAAmB,GACzF,CAAC,EAAM,UAAU,EAAQ,iBAAiB,GAAK,EAAE,EAAQ,mBAAqB,EAAM,UAAU,EAAQ,kBAAkB,GAAG,GAAK,EAAM,UAAU,EAAQ,kBAAkB,IAAI,GACvK,2CACR,IACX,EAUA,EAAa,WAAa,SAAU,EAAQ,EAAQ,CAChD,GAAI,aAAkB,EAAM,QAAQ,aAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,wCAAwC,EAG7D,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,aAOhC,GANI,EAAO,oBAAsB,MACzB,EAAQ,EAAO,kBAAkB,IAAM,IACvC,EAAQ,mBAAqB,EAAO,mBAAqB,GAC7D,EAAO,sBAAwB,OAC3B,OAAO,EAAO,sBAAyB,UAAY,EAAO,qBAAqB,UAC/E,EAAQ,qBAAuB,EAAQ,EAAO,oBAAoB,GACtE,EAAO,QAAS,CAChB,GAAI,CAAC,EAAO,QAAQ,EAAO,OAAO,EAC9B,MAAM,EAAW,+CAA+C,EACpE,EAAQ,QAAU,EAAO,EAAO,QAAQ,MAAM,EAC9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,QAAQ,OAAQ,EAAE,EAAG,CAC5C,GAAI,CAAC,EAAM,SAAS,EAAO,QAAQ,EAAE,EACjC,MAAM,EAAW,gDAAgD,EACrE,EAAQ,QAAQ,GAAK,EAAM,QAAQ,eAAe,WAAW,EAAO,QAAQ,GAAI,EAAS,CAAC,CAC9F,CACJ,CAWA,OAVI,EAAO,mBAAqB,OACxB,OAAO,EAAO,mBAAsB,SAAW,EAAO,kBAAkB,KAAO,EAAO,kBAAkB,KAAO,EAAQ,EAAO,iBAAiB,IAAM,KACjJ,EAAM,KACN,EAAQ,kBAAoB,EAAM,KAAK,UAAU,EAAO,kBAAmB,EAAK,EAC3E,OAAO,EAAO,mBAAsB,SACzC,EAAQ,kBAAoB,EAAU,EAAO,kBAAmB,EAAE,EAC7D,OAAO,EAAO,mBAAsB,SACzC,EAAQ,kBAAoB,EAAO,kBAC9B,OAAO,EAAO,mBAAsB,WACzC,EAAQ,kBAAoB,IAAI,EAAM,SAAS,EAAO,kBAAkB,MAAQ,EAAG,EAAO,kBAAkB,OAAS,CAAC,CAAC,CAAC,SAAS,IACtI,CACX,EAWA,EAAa,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKxD,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAGd,IAFI,EAAQ,QAAU,EAAQ,YAC1B,EAAO,QAAU,CAAC,GAClB,EAAQ,SAAU,CAGlB,GAFA,EAAO,mBAAqB,EAC5B,EAAO,qBAAuB,GAC1B,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,kBAAoB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC3M,KACI,GAAO,kBAAoB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CAClJ,CAKA,GAJI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,IAC/F,EAAO,mBAAqB,EAAQ,oBACpC,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,IACnG,EAAO,qBAAuB,EAAQ,sBACtC,EAAQ,SAAW,EAAQ,QAAQ,OAAQ,CAC3C,EAAO,QAAU,EAAO,EAAQ,QAAQ,MAAM,EAC9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,QAAQ,OAAQ,EAAE,EAC1C,EAAO,QAAQ,GAAK,EAAM,QAAQ,eAAe,SAAS,EAAQ,QAAQ,GAAI,EAAS,EAAS,CAAC,CACzG,CAQA,OAPI,EAAQ,mBAAqB,MAAQ,EAAQ,eAAe,KAAK,EAAS,mBAAmB,IAC7F,AAKI,EAAO,kBALA,IAAY,QAAe,EAAQ,QAAU,EACzB,OAAO,EAAQ,mBAAsB,SAAW,EAAQ,EAAQ,iBAAiB,EAAI,EAAM,KAAK,SAAS,EAAQ,kBAAkB,MAAQ,EAAG,EAAQ,kBAAkB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC1N,OAAO,EAAQ,mBAAsB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,iBAAiB,EAAI,EAAQ,kBAEzE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,iBAAiB,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,kBAAkB,MAAQ,EAAG,EAAQ,kBAAkB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,mBACvQ,CACX,EASA,EAAa,UAAU,OAAS,UAAW,CACvC,OAAO,EAAa,SAAS,KAAA,EAAgB,KAAK,aAAa,CACnE,EAUA,EAAa,WAAa,SAAS,EAAQ,CAGvC,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,uBACpB,EAEO,CACX,EAAA,CAAG,EAEI,CACX,EAAA,CAAG,EAEU,GAAW,EAAM,cAAkB,CAO5C,IAAM,EAAW,CAAC,EA05ClB,MAx5CA,GAAS,iBAAmB,UAAW,CAqCnC,IAAM,EAAkB,SAAU,EAAY,CAC1C,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAkeA,MA1dA,GAAgB,UAAU,GAAK,GAQ/B,EAAgB,UAAU,KAAO,GAQjC,EAAgB,UAAU,SAAW,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQnF,EAAgB,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ1F,EAAgB,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ1F,EAAgB,UAAU,WAAa,EAQvC,EAAgB,UAAU,gBAAkB,GAQ5C,EAAgB,UAAU,UAAY,GActC,EAAgB,OAAS,SAAS,EAAY,CAC1C,OAAO,IAAI,EAAgB,CAAU,CACzC,EAWA,EAAgB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKxD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAiBrC,GAhBI,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,GAAK,EAAQ,KAAO,IACnF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,EAAE,EAC1D,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAAK,EAAQ,OAAS,IACzF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,IAAI,EAC5D,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAAM,OAAO,EAAQ,UAAa,SAAW,EAAQ,SAAS,KAAO,EAAQ,SAAS,KAAO,EAAQ,WAAa,IAC7L,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,QAAQ,EAC/D,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,GAAK,EAAQ,aAAe,GAC3G,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,UAAU,EACjE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GAAK,EAAQ,kBAAoB,IAC1H,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,eAAe,EACvE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GAAK,EAAQ,YAAc,IACxG,EAAO,OAA+B,EAAE,CAAC,CAAC,KAAK,EAAQ,SAAS,EAChE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAgB,gBAAkB,SAAS,EAAS,EAAQ,CACxD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAgB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKtE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,SAAS,gBACjC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,GAAK,EAEb,OAAO,EAAQ,GACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,KAAO,EAEf,OAAO,EAAQ,KACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,SAAW,EAEnB,OAAO,EAAQ,SACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,WAAa,EAErB,OAAO,EAAQ,WACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,IACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,KAAK,GACpB,EAAQ,UAAY,EAEpB,OAAO,EAAQ,UACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAgB,gBAAkB,SAAS,EAAQ,CAG/C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAgB,OAAS,SAAU,EAAS,EAAQ,CA+BhD,OA9BI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,GAC3D,CAAC,EAAM,SAAS,EAAQ,EAAE,EACnB,sBACX,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAC/D,CAAC,EAAM,SAAS,EAAQ,IAAI,EACrB,wBACX,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,GACvE,CAAC,EAAM,UAAU,EAAQ,QAAQ,GAAK,EAAE,EAAQ,UAAY,EAAM,UAAU,EAAQ,SAAS,GAAG,GAAK,EAAM,UAAU,EAAQ,SAAS,IAAI,GACnI,kCACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACX,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,GAC3E,CAAC,EAAM,UAAU,EAAQ,UAAU,EAC5B,+BACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,SAAS,EAAQ,eAAe,EAChC,mCACX,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GACzE,OAAO,EAAQ,WAAc,UACtB,8BACR,KACX,EAUA,EAAgB,WAAa,SAAU,EAAQ,EAAQ,CACnD,GAAI,aAAkB,EAAM,SAAS,gBACjC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,4CAA4C,EAGjE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,SAAS,gBA8CjC,OA7CI,EAAO,IAAM,OACT,OAAO,EAAO,IAAO,UAAY,EAAO,GAAG,UAC3C,EAAQ,GAAK,EAAQ,EAAO,EAAE,GAClC,EAAO,MAAQ,OACX,OAAO,EAAO,MAAS,UAAY,EAAO,KAAK,UAC/C,EAAQ,KAAO,EAAQ,EAAO,IAAI,GACtC,EAAO,UAAY,OACf,OAAO,EAAO,UAAa,SAAW,EAAO,SAAS,KAAO,EAAO,SAAS,KAAO,EAAQ,EAAO,QAAQ,IAAM,KAC7G,EAAM,KACN,EAAQ,SAAW,EAAM,KAAK,UAAU,EAAO,SAAU,EAAK,EACzD,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAU,EAAO,SAAU,EAAE,EAC3C,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAO,SACrB,OAAO,EAAO,UAAa,WAChC,EAAQ,SAAW,IAAI,EAAM,SAAS,EAAO,SAAS,MAAQ,EAAG,EAAO,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,IAC9G,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,YAAc,MACjB,EAAQ,EAAO,UAAU,IAAM,IAC/B,EAAQ,WAAa,EAAO,WAAa,GAC7C,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,UAAY,EAAO,gBAAgB,UACrE,EAAQ,gBAAkB,EAAQ,EAAO,eAAe,GAC5D,EAAO,WAAa,MAChB,EAAO,YACP,EAAQ,UAAY,EAAS,EAAO,SAAS,GAC9C,CACX,EAWA,EAAgB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAK3D,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAGlB,GAFA,EAAO,GAAK,GACZ,EAAO,KAAO,GACV,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,SAAW,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAClM,KACI,GAAO,SAAW,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EACrI,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC5I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC5I,EAAO,WAAa,EACpB,EAAO,gBAAkB,GACzB,EAAO,UAAY,EACvB,CAgCA,OA/BI,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,IAC/D,EAAO,GAAK,EAAQ,IACpB,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,IACnE,EAAO,KAAO,EAAQ,MACtB,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAC3E,AAKI,EAAO,SALA,IAAY,QAAe,EAAQ,QAAU,EAClC,OAAO,EAAQ,UAAa,SAAW,EAAQ,EAAQ,QAAQ,EAAI,EAAM,KAAK,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC7K,OAAO,EAAQ,UAAa,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,QAAQ,EAAI,EAAQ,SAEhE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,QAAQ,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,UACtO,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,IAC/E,EAAO,WAAa,EAAQ,YAC5B,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,EAAO,gBAAkB,EAAQ,iBACjC,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,IAC7E,EAAO,UAAY,EAAQ,WACxB,CACX,EASA,EAAgB,UAAU,OAAS,UAAW,CAC1C,OAAO,EAAgB,SAAS,KAAA,EAAgB,KAAK,aAAa,CACtE,EAUA,EAAgB,WAAa,SAAS,EAAQ,CAG1C,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,2BACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAS,eAAiB,UAAW,CAgCjC,IAAM,EAAgB,SAAU,EAAY,CAExC,GADA,KAAK,SAAW,CAAC,EACb,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAuTA,MA/SA,GAAc,UAAU,mBAAqB,EAQ7C,EAAc,UAAU,qBAAuB,GAQ/C,EAAc,UAAU,SAAW,EAAM,WAczC,EAAc,OAAS,SAAS,EAAY,CACxC,OAAO,IAAI,EAAc,CAAU,CACvC,EAWA,EAAc,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKtD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAKrC,GAJI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAAK,EAAQ,qBAAuB,GACnI,EAAO,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAQ,kBAAkB,EACxE,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAAK,EAAQ,uBAAyB,IACzI,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,oBAAoB,EAC5E,EAAQ,UAAY,MAAQ,EAAQ,SAAS,OAC7C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,SAAS,OAAQ,EAAE,EAC3C,EAAM,SAAS,gBAAgB,OAAO,EAAQ,SAAS,GAAI,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,EAAG,EAAS,CAAC,CAAC,CAAC,OAAO,EACvI,GAAI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAc,gBAAkB,SAAS,EAAS,EAAQ,CACtD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAc,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKpE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,SAAS,cACjC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,mBAAqB,EAE7B,OAAO,EAAQ,mBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,qBAAuB,EAE/B,OAAO,EAAQ,qBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,MACE,EAAQ,UAAY,EAAQ,SAAS,SACvC,EAAQ,SAAW,CAAC,GACxB,EAAQ,SAAS,KAAK,EAAM,SAAS,gBAAgB,OAAO,EAAQ,EAAO,OAAO,EAAG,EAAY,EAAS,CAAC,CAAC,EAC5G,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAc,gBAAkB,SAAS,EAAQ,CAG7C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAc,OAAS,SAAU,EAAS,EAAQ,CAC9C,GAAI,OAAO,GAAY,WAAY,EAC/B,MAAO,kBAGX,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAO,qBACX,GAAI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAC3F,CAAC,EAAM,UAAU,EAAQ,kBAAkB,EAC3C,MAAO,uCACf,GAAI,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAC/F,CAAC,EAAM,SAAS,EAAQ,oBAAoB,EAC5C,MAAO,wCACf,GAAI,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,EAAG,CAC9E,GAAI,CAAC,EAAO,QAAQ,EAAQ,QAAQ,EAChC,MAAO,2BACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,SAAS,OAAQ,EAAE,EAAG,CAC9C,IAAI,EAAQ,EAAM,SAAS,gBAAgB,OAAO,EAAQ,SAAS,GAAI,EAAS,CAAC,EACjF,GAAI,EACA,MAAO,YAAc,CAC7B,CACJ,CACA,OAAO,IACX,EAUA,EAAc,WAAa,SAAU,EAAQ,EAAQ,CACjD,GAAI,aAAkB,EAAM,SAAS,cACjC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,0CAA0C,EAG/D,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,SAAS,cAOjC,GANI,EAAO,oBAAsB,MACzB,EAAQ,EAAO,kBAAkB,IAAM,IACvC,EAAQ,mBAAqB,EAAO,mBAAqB,GAC7D,EAAO,sBAAwB,OAC3B,OAAO,EAAO,sBAAyB,UAAY,EAAO,qBAAqB,UAC/E,EAAQ,qBAAuB,EAAQ,EAAO,oBAAoB,GACtE,EAAO,SAAU,CACjB,GAAI,CAAC,EAAO,QAAQ,EAAO,QAAQ,EAC/B,MAAM,EAAW,kDAAkD,EACvE,EAAQ,SAAW,EAAO,EAAO,SAAS,MAAM,EAChD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,SAAS,OAAQ,EAAE,EAAG,CAC7C,GAAI,CAAC,EAAM,SAAS,EAAO,SAAS,EAAE,EAClC,MAAM,EAAW,mDAAmD,EACxE,EAAQ,SAAS,GAAK,EAAM,SAAS,gBAAgB,WAAW,EAAO,SAAS,GAAI,EAAS,CAAC,CAClG,CACJ,CACA,OAAO,CACX,EAWA,EAAc,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKzD,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAWd,IAVI,EAAQ,QAAU,EAAQ,YAC1B,EAAO,SAAW,CAAC,GACnB,EAAQ,WACR,EAAO,mBAAqB,EAC5B,EAAO,qBAAuB,IAE9B,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,IAC/F,EAAO,mBAAqB,EAAQ,oBACpC,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,IACnG,EAAO,qBAAuB,EAAQ,sBACtC,EAAQ,UAAY,EAAQ,SAAS,OAAQ,CAC7C,EAAO,SAAW,EAAO,EAAQ,SAAS,MAAM,EAChD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,SAAS,OAAQ,EAAE,EAC3C,EAAO,SAAS,GAAK,EAAM,SAAS,gBAAgB,SAAS,EAAQ,SAAS,GAAI,EAAS,EAAS,CAAC,CAC7G,CACA,OAAO,CACX,EASA,EAAc,UAAU,OAAS,UAAW,CACxC,OAAO,EAAc,SAAS,KAAA,EAAgB,KAAK,aAAa,CACpE,EAUA,EAAc,WAAa,SAAS,EAAQ,CAGxC,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,yBACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAS,kBAAoB,UAAW,CAuCpC,IAAM,EAAmB,SAAU,EAAY,CAC3C,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA0fA,MAlfA,GAAiB,UAAU,UAAY,GAQvC,EAAiB,UAAU,YAAc,GAQzC,EAAiB,UAAU,SAAW,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQpF,EAAiB,UAAU,WAAa,GAQxC,EAAiB,UAAU,QAAU,GAQrC,EAAiB,UAAU,OAAS,GAQpC,EAAiB,UAAU,QAAU,GAQrC,EAAiB,UAAU,gBAAkB,GAQ7C,EAAiB,UAAU,QAAU,GAQrC,EAAiB,UAAU,UAAY,GAcvC,EAAiB,OAAS,SAAS,EAAY,CAC3C,OAAO,IAAI,EAAiB,CAAU,CAC1C,EAWA,EAAiB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKzD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAqBrC,GApBI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GAAK,EAAQ,YAAc,IACxG,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,SAAS,EACjE,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAAM,OAAO,EAAQ,UAAa,SAAW,EAAQ,SAAS,KAAO,EAAQ,SAAS,KAAO,EAAQ,WAAa,IAC7L,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,QAAQ,EAC/D,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,GAAK,EAAQ,aAAe,IAC3G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,UAAU,EAClE,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,GAAK,EAAQ,UAAY,IAClG,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,EAAQ,OAAO,EAC7D,EAAQ,QAAU,MAAQ,EAAQ,eAAe,KAAK,EAAS,QAAQ,GAAK,EAAQ,SAAW,IAC/F,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,MAAM,EAC9D,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,GAAK,EAAQ,UAAY,IAClG,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,OAAO,EAC/D,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GAAK,EAAQ,kBAAoB,IAC1H,EAAO,OAA+B,EAAE,CAAC,CAAC,OAAO,EAAQ,eAAe,EACxE,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,GAAK,EAAQ,UAAY,IAClG,EAAO,OAA+B,EAAE,CAAC,CAAC,OAAO,EAAQ,OAAO,EAChE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GAAK,EAAQ,YAAc,IACxG,EAAO,OAA+B,EAAE,CAAC,CAAC,KAAK,EAAQ,SAAS,EAChE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAiB,gBAAkB,SAAS,EAAS,EAAQ,CACzD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAiB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKvE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,SAAS,iBACjC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,UAAY,EAEpB,OAAO,EAAQ,UACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,SAAW,EAEnB,OAAO,EAAQ,SACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,WAAa,EAErB,OAAO,EAAQ,WACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,KAAK,GACpB,EAAQ,QAAU,EAElB,OAAO,EAAQ,QACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,OAAS,EAEjB,OAAO,EAAQ,OACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,QAAU,EAElB,OAAO,EAAQ,QACnB,SAER,IAAK,IACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,IACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,QAAU,EAElB,OAAO,EAAQ,QACnB,SAER,IAAK,IACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,KAAK,GACpB,EAAQ,UAAY,EAEpB,OAAO,EAAQ,UACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAiB,gBAAkB,SAAS,EAAQ,CAGhD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAiB,OAAS,SAAU,EAAS,EAAQ,CAqCjD,OApCI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GACzE,CAAC,EAAM,SAAS,EAAQ,SAAS,EAC1B,6BACX,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EAC5B,+BACX,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,GACvE,CAAC,EAAM,UAAU,EAAQ,QAAQ,GAAK,EAAE,EAAQ,UAAY,EAAM,UAAU,EAAQ,SAAS,GAAG,GAAK,EAAM,UAAU,EAAQ,SAAS,IAAI,GACnI,kCACX,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,GAC3E,CAAC,EAAM,SAAS,EAAQ,UAAU,EAC3B,8BACX,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,GACrE,OAAO,EAAQ,SAAY,UACpB,4BACX,EAAQ,QAAU,MAAQ,EAAQ,eAAe,KAAK,EAAS,QAAQ,GACnE,CAAC,EAAM,SAAS,EAAQ,MAAM,EACvB,0BACX,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,GACrE,CAAC,EAAM,SAAS,EAAQ,OAAO,EACxB,2BACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,SAAS,EAAQ,eAAe,EAChC,mCACX,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,GACrE,CAAC,EAAM,SAAS,EAAQ,OAAO,EACxB,2BACX,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GACzE,OAAO,EAAQ,WAAc,UACtB,8BACR,KACX,EAUA,EAAiB,WAAa,SAAU,EAAQ,EAAQ,CACpD,GAAI,aAAkB,EAAM,SAAS,iBACjC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,6CAA6C,EAGlE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,SAAS,iBAsCjC,OArCI,EAAO,WAAa,OAChB,OAAO,EAAO,WAAc,UAAY,EAAO,UAAU,UACzD,EAAQ,UAAY,EAAQ,EAAO,SAAS,GAChD,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,UAAY,OACf,OAAO,EAAO,UAAa,SAAW,EAAO,SAAS,KAAO,EAAO,SAAS,KAAO,EAAQ,EAAO,QAAQ,IAAM,KAC7G,EAAM,KACN,EAAQ,SAAW,EAAM,KAAK,UAAU,EAAO,SAAU,EAAK,EACzD,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAU,EAAO,SAAU,EAAE,EAC3C,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAO,SACrB,OAAO,EAAO,UAAa,WAChC,EAAQ,SAAW,IAAI,EAAM,SAAS,EAAO,SAAS,MAAQ,EAAG,EAAO,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,IAC9G,EAAO,YAAc,OACjB,OAAO,EAAO,YAAe,UAAY,EAAO,WAAW,UAC3D,EAAQ,WAAa,EAAQ,EAAO,UAAU,GAClD,EAAO,SAAW,MACd,EAAO,UACP,EAAQ,QAAU,EAAS,EAAO,OAAO,GAC7C,EAAO,QAAU,OACb,OAAO,EAAO,QAAW,UAAY,EAAO,OAAO,UACnD,EAAQ,OAAS,EAAQ,EAAO,MAAM,GAC1C,EAAO,SAAW,OACd,OAAO,EAAO,SAAY,UAAY,EAAO,QAAQ,UACrD,EAAQ,QAAU,EAAQ,EAAO,OAAO,GAC5C,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,UAAY,EAAO,gBAAgB,UACrE,EAAQ,gBAAkB,EAAQ,EAAO,eAAe,GAC5D,EAAO,SAAW,OACd,OAAO,EAAO,SAAY,UAAY,EAAO,QAAQ,UACrD,EAAQ,QAAU,EAAQ,EAAO,OAAO,GAC5C,EAAO,WAAa,MAChB,EAAO,YACP,EAAQ,UAAY,EAAS,EAAO,SAAS,GAC9C,CACX,EAWA,EAAiB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAK5D,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAGlB,GAFA,EAAO,UAAY,GACnB,EAAO,YAAc,GACjB,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,SAAW,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAClM,KACI,GAAO,SAAW,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EACrI,EAAO,WAAa,GACpB,EAAO,QAAU,GACjB,EAAO,OAAS,GAChB,EAAO,QAAU,GACjB,EAAO,gBAAkB,GACzB,EAAO,QAAU,GACjB,EAAO,UAAY,EACvB,CA0BA,OAzBI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,IAC7E,EAAO,UAAY,EAAQ,WAC3B,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAC3E,AAKI,EAAO,SALA,IAAY,QAAe,EAAQ,QAAU,EAClC,OAAO,EAAQ,UAAa,SAAW,EAAQ,EAAQ,QAAQ,EAAI,EAAM,KAAK,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC7K,OAAO,EAAQ,UAAa,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,QAAQ,EAAI,EAAQ,SAEhE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,QAAQ,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,UACtO,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,IAC/E,EAAO,WAAa,EAAQ,YAC5B,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,IACzE,EAAO,QAAU,EAAQ,SACzB,EAAQ,QAAU,MAAQ,EAAQ,eAAe,KAAK,EAAS,QAAQ,IACvE,EAAO,OAAS,EAAQ,QACxB,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,IACzE,EAAO,QAAU,EAAQ,SACzB,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,EAAO,gBAAkB,EAAQ,iBACjC,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,IACzE,EAAO,QAAU,EAAQ,SACzB,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,IAC7E,EAAO,UAAY,EAAQ,WACxB,CACX,EASA,EAAiB,UAAU,OAAS,UAAW,CAC3C,OAAO,EAAiB,SAAS,KAAA,EAAgB,KAAK,aAAa,CACvE,EAUA,EAAiB,WAAa,SAAS,EAAQ,CAG3C,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,4BACpB,EAEO,CACX,EAAA,CAAG,EAEI,CACX,EAAA,CAAG,EAEU,GAAS,EAAM,YAAgB,CAOxC,IAAM,EAAS,CAAC,EA6qHhB,MA3qHA,GAAO,uBAAyB,UAAW,CAgCvC,IAAM,EAAwB,SAAU,EAAY,CAChD,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAsSA,MA9RA,GAAsB,UAAU,UAAY,GAQ5C,EAAsB,UAAU,YAAc,GAQ9C,EAAsB,UAAU,MAAQ,GAcxC,EAAsB,OAAS,SAAS,EAAY,CAChD,OAAO,IAAI,EAAsB,CAAU,CAC/C,EAWA,EAAsB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAK9D,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAOrC,GANI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GAAK,EAAQ,YAAc,IACxG,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,SAAS,EACjE,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GAAK,EAAQ,QAAU,IAC5F,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,KAAK,EAC7D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAsB,gBAAkB,SAAS,EAAS,EAAQ,CAC9D,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAsB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAK5E,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,OAAO,sBAC/B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,UAAY,EAEpB,OAAO,EAAQ,UACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,MAAQ,EAEhB,OAAO,EAAQ,MACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAsB,gBAAkB,SAAS,EAAQ,CAGrD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAsB,OAAS,SAAU,EAAS,EAAQ,CAgBtD,OAfI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GACzE,CAAC,EAAM,SAAS,EAAQ,SAAS,EAC1B,6BACX,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EAC5B,+BACX,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GACjE,CAAC,EAAM,SAAS,EAAQ,KAAK,EACtB,yBACR,KACX,EAUA,EAAsB,WAAa,SAAU,EAAQ,EAAQ,CACzD,GAAI,aAAkB,EAAM,OAAO,sBAC/B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,gDAAgD,EAGrE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,OAAO,sBAU/B,OATI,EAAO,WAAa,OAChB,OAAO,EAAO,WAAc,UAAY,EAAO,UAAU,UACzD,EAAQ,UAAY,EAAQ,EAAO,SAAS,GAChD,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,OAAS,OACZ,OAAO,EAAO,OAAU,UAAY,EAAO,MAAM,UACjD,EAAQ,MAAQ,EAAQ,EAAO,KAAK,GACrC,CACX,EAWA,EAAsB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKjE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAYd,OAXI,EAAQ,WACR,EAAO,UAAY,GACnB,EAAO,YAAc,GACrB,EAAO,MAAQ,IAEf,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,IAC7E,EAAO,UAAY,EAAQ,WAC3B,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,IACrE,EAAO,MAAQ,EAAQ,OACpB,CACX,EASA,EAAsB,UAAU,OAAS,UAAW,CAChD,OAAO,EAAsB,SAAS,KAAA,EAAgB,KAAK,aAAa,CAC5E,EAUA,EAAsB,WAAa,SAAS,EAAQ,CAGhD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,+BACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAO,qBAAuB,UAAW,CAgCrC,IAAM,EAAsB,SAAU,EAAY,CAC9C,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAsSA,MA9RA,GAAoB,UAAU,KAAO,GAQrC,EAAoB,UAAU,KAAO,GAQrC,EAAoB,UAAU,WAAa,GAc3C,EAAoB,OAAS,SAAS,EAAY,CAC9C,OAAO,IAAI,EAAoB,CAAU,CAC7C,EAWA,EAAoB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAK5D,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAOrC,GANI,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAAK,EAAQ,OAAS,IACzF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,IAAI,EAC5D,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAAK,EAAQ,OAAS,IACzF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,IAAI,EAC5D,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,GAAK,EAAQ,aAAe,IAC3G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,UAAU,EAClE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAoB,gBAAkB,SAAS,EAAS,EAAQ,CAC5D,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAoB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAK1E,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,OAAO,oBAC/B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,KAAO,EAEf,OAAO,EAAQ,KACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,KAAO,EAEf,OAAO,EAAQ,KACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,WAAa,EAErB,OAAO,EAAQ,WACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAoB,gBAAkB,SAAS,EAAQ,CAGnD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAoB,OAAS,SAAU,EAAS,EAAQ,CAgBpD,OAfI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAC/D,CAAC,EAAM,SAAS,EAAQ,IAAI,EACrB,wBACX,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAC/D,CAAC,EAAM,SAAS,EAAQ,IAAI,EACrB,wBACX,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,GAC3E,CAAC,EAAM,SAAS,EAAQ,UAAU,EAC3B,8BACR,KACX,EAUA,EAAoB,WAAa,SAAU,EAAQ,EAAQ,CACvD,GAAI,aAAkB,EAAM,OAAO,oBAC/B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,8CAA8C,EAGnE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,OAAO,oBAU/B,OATI,EAAO,MAAQ,OACX,OAAO,EAAO,MAAS,UAAY,EAAO,KAAK,UAC/C,EAAQ,KAAO,EAAQ,EAAO,IAAI,GACtC,EAAO,MAAQ,OACX,OAAO,EAAO,MAAS,UAAY,EAAO,KAAK,UAC/C,EAAQ,KAAO,EAAQ,EAAO,IAAI,GACtC,EAAO,YAAc,OACjB,OAAO,EAAO,YAAe,UAAY,EAAO,WAAW,UAC3D,EAAQ,WAAa,EAAQ,EAAO,UAAU,GAC/C,CACX,EAWA,EAAoB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAK/D,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAYd,OAXI,EAAQ,WACR,EAAO,KAAO,GACd,EAAO,KAAO,GACd,EAAO,WAAa,IAEpB,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,IACnE,EAAO,KAAO,EAAQ,MACtB,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,IACnE,EAAO,KAAO,EAAQ,MACtB,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,IAC/E,EAAO,WAAa,EAAQ,YACzB,CACX,EASA,EAAoB,UAAU,OAAS,UAAW,CAC9C,OAAO,EAAoB,SAAS,KAAA,EAAgB,KAAK,aAAa,CAC1E,EAUA,EAAoB,WAAa,SAAS,EAAQ,CAG9C,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,6BACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAO,yBAA2B,UAAW,CA8BzC,IAAM,EAA0B,SAAU,EAAY,CAElD,GADA,KAAK,UAAY,CAAC,EACd,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA6PA,MArPA,GAAwB,UAAU,UAAY,EAAM,WAcpD,EAAwB,OAAS,SAAS,EAAY,CAClD,OAAO,IAAI,EAAwB,CAAU,CACjD,EAWA,EAAwB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKhE,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,GAAI,EAAQ,WAAa,MAAQ,EAAQ,UAAU,OAC/C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAM,OAAO,oBAAoB,OAAO,EAAQ,UAAU,GAAI,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,EAAG,EAAS,CAAC,CAAC,CAAC,OAAO,EAC1I,GAAI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAwB,gBAAkB,SAAS,EAAS,EAAQ,CAChE,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAwB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAK9E,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EACT,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,OAAO,wBAC/B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,MACE,EAAQ,WAAa,EAAQ,UAAU,SACzC,EAAQ,UAAY,CAAC,GACzB,EAAQ,UAAU,KAAK,EAAM,OAAO,oBAAoB,OAAO,EAAQ,EAAO,OAAO,EAAG,EAAY,EAAS,CAAC,CAAC,EAC/G,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAwB,gBAAkB,SAAS,EAAQ,CAGvD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAwB,OAAS,SAAU,EAAS,EAAQ,CACxD,GAAI,OAAO,GAAY,WAAY,EAC/B,MAAO,kBAGX,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAO,qBACX,GAAI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAAG,CAChF,GAAI,CAAC,EAAO,QAAQ,EAAQ,SAAS,EACjC,MAAO,4BACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAAG,CAC/C,IAAI,EAAQ,EAAM,OAAO,oBAAoB,OAAO,EAAQ,UAAU,GAAI,EAAS,CAAC,EACpF,GAAI,EACA,MAAO,aAAe,CAC9B,CACJ,CACA,OAAO,IACX,EAUA,EAAwB,WAAa,SAAU,EAAQ,EAAQ,CAC3D,GAAI,aAAkB,EAAM,OAAO,wBAC/B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,kDAAkD,EAGvE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,OAAO,wBAC/B,GAAI,EAAO,UAAW,CAClB,GAAI,CAAC,EAAO,QAAQ,EAAO,SAAS,EAChC,MAAM,EAAW,2DAA2D,EAChF,EAAQ,UAAY,EAAO,EAAO,UAAU,MAAM,EAClD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,UAAU,OAAQ,EAAE,EAAG,CAC9C,GAAI,CAAC,EAAM,SAAS,EAAO,UAAU,EAAE,EACnC,MAAM,EAAW,4DAA4D,EACjF,EAAQ,UAAU,GAAK,EAAM,OAAO,oBAAoB,WAAW,EAAO,UAAU,GAAI,EAAS,CAAC,CACtG,CACJ,CACA,OAAO,CACX,EAWA,EAAwB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKnE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAGd,IAFI,EAAQ,QAAU,EAAQ,YAC1B,EAAO,UAAY,CAAC,GACpB,EAAQ,WAAa,EAAQ,UAAU,OAAQ,CAC/C,EAAO,UAAY,EAAO,EAAQ,UAAU,MAAM,EAClD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,UAAU,GAAK,EAAM,OAAO,oBAAoB,SAAS,EAAQ,UAAU,GAAI,EAAS,EAAS,CAAC,CACjH,CACA,OAAO,CACX,EASA,EAAwB,UAAU,OAAS,UAAW,CAClD,OAAO,EAAwB,SAAS,KAAA,EAAgB,KAAK,aAAa,CAC9E,EAUA,EAAwB,WAAa,SAAS,EAAQ,CAGlD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,iCACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAO,sBAAwB,UAAW,CAoCtC,IAAM,EAAuB,SAAU,EAAY,CAC/C,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAsdA,MA9cA,GAAqB,UAAU,UAAY,GAQ3C,EAAqB,UAAU,YAAc,GAQ7C,EAAqB,UAAU,SAAW,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQxF,EAAqB,UAAU,OAAS,GAQxC,EAAqB,UAAU,eAAiB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ9F,EAAqB,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ/F,EAAqB,UAAU,iBAAmB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAchG,EAAqB,OAAS,SAAS,EAAY,CAC/C,OAAO,IAAI,EAAqB,CAAU,CAC9C,EAWA,EAAqB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAK7D,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAerC,GAdI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GAAK,EAAQ,YAAc,IACxG,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,SAAS,EACjE,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAAM,OAAO,EAAQ,UAAa,SAAW,EAAQ,SAAS,KAAO,EAAQ,SAAS,KAAO,EAAQ,WAAa,IAC7L,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,QAAQ,EAC/D,EAAQ,QAAU,MAAQ,EAAQ,eAAe,KAAK,EAAS,QAAQ,GAAK,EAAQ,SAAW,IAC/F,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,MAAM,EAC9D,EAAQ,gBAAkB,MAAQ,EAAQ,eAAe,KAAK,EAAS,gBAAgB,IAAM,OAAO,EAAQ,gBAAmB,SAAW,EAAQ,eAAe,KAAO,EAAQ,eAAe,KAAO,EAAQ,iBAAmB,IACjO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,cAAc,EACrE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,kBAAoB,MAAQ,EAAQ,eAAe,KAAK,EAAS,kBAAkB,IAAM,OAAO,EAAQ,kBAAqB,SAAW,EAAQ,iBAAiB,KAAO,EAAQ,iBAAiB,KAAO,EAAQ,mBAAqB,IAC7O,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,gBAAgB,EACvE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAqB,gBAAkB,SAAS,EAAS,EAAQ,CAC7D,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAqB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAK3E,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,OAAO,qBAC/B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,UAAY,EAEpB,OAAO,EAAQ,UACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,SAAW,EAEnB,OAAO,EAAQ,SACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,OAAS,EAEjB,OAAO,EAAQ,OACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,eAAiB,EAEzB,OAAO,EAAQ,eACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,iBAAmB,EAE3B,OAAO,EAAQ,iBACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAqB,gBAAkB,SAAS,EAAQ,CAGpD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAqB,OAAS,SAAU,EAAS,EAAQ,CA4BrD,OA3BI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GACzE,CAAC,EAAM,SAAS,EAAQ,SAAS,EAC1B,6BACX,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EAC5B,+BACX,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,GACvE,CAAC,EAAM,UAAU,EAAQ,QAAQ,GAAK,EAAE,EAAQ,UAAY,EAAM,UAAU,EAAQ,SAAS,GAAG,GAAK,EAAM,UAAU,EAAQ,SAAS,IAAI,GACnI,kCACX,EAAQ,QAAU,MAAQ,EAAQ,eAAe,KAAK,EAAS,QAAQ,GACnE,CAAC,EAAM,SAAS,EAAQ,MAAM,EACvB,0BACX,EAAQ,gBAAkB,MAAQ,EAAQ,eAAe,KAAK,EAAS,gBAAgB,GACnF,CAAC,EAAM,UAAU,EAAQ,cAAc,GAAK,EAAE,EAAQ,gBAAkB,EAAM,UAAU,EAAQ,eAAe,GAAG,GAAK,EAAM,UAAU,EAAQ,eAAe,IAAI,GAC3J,wCACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACX,EAAQ,kBAAoB,MAAQ,EAAQ,eAAe,KAAK,EAAS,kBAAkB,GACvF,CAAC,EAAM,UAAU,EAAQ,gBAAgB,GAAK,EAAE,EAAQ,kBAAoB,EAAM,UAAU,EAAQ,iBAAiB,GAAG,GAAK,EAAM,UAAU,EAAQ,iBAAiB,IAAI,GACnK,0CACR,KACX,EAUA,EAAqB,WAAa,SAAU,EAAQ,EAAQ,CACxD,GAAI,aAAkB,EAAM,OAAO,qBAC/B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,+CAA+C,EAGpE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,OAAO,qBAkD/B,OAjDI,EAAO,WAAa,OAChB,OAAO,EAAO,WAAc,UAAY,EAAO,UAAU,UACzD,EAAQ,UAAY,EAAQ,EAAO,SAAS,GAChD,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,UAAY,OACf,OAAO,EAAO,UAAa,SAAW,EAAO,SAAS,KAAO,EAAO,SAAS,KAAO,EAAQ,EAAO,QAAQ,IAAM,KAC7G,EAAM,KACN,EAAQ,SAAW,EAAM,KAAK,UAAU,EAAO,SAAU,EAAK,EACzD,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAU,EAAO,SAAU,EAAE,EAC3C,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAO,SACrB,OAAO,EAAO,UAAa,WAChC,EAAQ,SAAW,IAAI,EAAM,SAAS,EAAO,SAAS,MAAQ,EAAG,EAAO,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,IAC9G,EAAO,QAAU,OACb,OAAO,EAAO,QAAW,UAAY,EAAO,OAAO,UACnD,EAAQ,OAAS,EAAQ,EAAO,MAAM,GAC1C,EAAO,gBAAkB,OACrB,OAAO,EAAO,gBAAmB,SAAW,EAAO,eAAe,KAAO,EAAO,eAAe,KAAO,EAAQ,EAAO,cAAc,IAAM,KACrI,EAAM,KACN,EAAQ,eAAiB,EAAM,KAAK,UAAU,EAAO,eAAgB,EAAK,EACrE,OAAO,EAAO,gBAAmB,SACtC,EAAQ,eAAiB,EAAU,EAAO,eAAgB,EAAE,EACvD,OAAO,EAAO,gBAAmB,SACtC,EAAQ,eAAiB,EAAO,eAC3B,OAAO,EAAO,gBAAmB,WACtC,EAAQ,eAAiB,IAAI,EAAM,SAAS,EAAO,eAAe,MAAQ,EAAG,EAAO,eAAe,OAAS,CAAC,CAAC,CAAC,SAAS,IAChI,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,kBAAoB,OACvB,OAAO,EAAO,kBAAqB,SAAW,EAAO,iBAAiB,KAAO,EAAO,iBAAiB,KAAO,EAAQ,EAAO,gBAAgB,IAAM,KAC7I,EAAM,KACN,EAAQ,iBAAmB,EAAM,KAAK,UAAU,EAAO,iBAAkB,EAAK,EACzE,OAAO,EAAO,kBAAqB,SACxC,EAAQ,iBAAmB,EAAU,EAAO,iBAAkB,EAAE,EAC3D,OAAO,EAAO,kBAAqB,SACxC,EAAQ,iBAAmB,EAAO,iBAC7B,OAAO,EAAO,kBAAqB,WACxC,EAAQ,iBAAmB,IAAI,EAAM,SAAS,EAAO,iBAAiB,MAAQ,EAAG,EAAO,iBAAiB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,CACX,EAWA,EAAqB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKhE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAGlB,GAFA,EAAO,UAAY,GACnB,EAAO,YAAc,GACjB,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,SAAW,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAClM,KACI,GAAO,SAAW,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAErI,GADA,EAAO,OAAS,GACZ,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,eAAiB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACxM,KACI,GAAO,eAAiB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC3I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC5I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,iBAAmB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC1M,KACI,GAAO,iBAAmB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CACjJ,CAmCA,OAlCI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,IAC7E,EAAO,UAAY,EAAQ,WAC3B,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAC3E,AAKI,EAAO,SALA,IAAY,QAAe,EAAQ,QAAU,EAClC,OAAO,EAAQ,UAAa,SAAW,EAAQ,EAAQ,QAAQ,EAAI,EAAM,KAAK,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC7K,OAAO,EAAQ,UAAa,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,QAAQ,EAAI,EAAQ,SAEhE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,QAAQ,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,UACtO,EAAQ,QAAU,MAAQ,EAAQ,eAAe,KAAK,EAAS,QAAQ,IACvE,EAAO,OAAS,EAAQ,QACxB,EAAQ,gBAAkB,MAAQ,EAAQ,eAAe,KAAK,EAAS,gBAAgB,IACvF,AAKI,EAAO,eALA,IAAY,QAAe,EAAQ,QAAU,EAC5B,OAAO,EAAQ,gBAAmB,SAAW,EAAQ,EAAQ,cAAc,EAAI,EAAM,KAAK,SAAS,EAAQ,eAAe,MAAQ,EAAG,EAAQ,eAAe,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC3M,OAAO,EAAQ,gBAAmB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,cAAc,EAAI,EAAQ,eAEtE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,cAAc,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,eAAe,MAAQ,EAAG,EAAQ,eAAe,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,gBAC9P,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,kBAAoB,MAAQ,EAAQ,eAAe,KAAK,EAAS,kBAAkB,IAC3F,AAKI,EAAO,iBALA,IAAY,QAAe,EAAQ,QAAU,EAC1B,OAAO,EAAQ,kBAAqB,SAAW,EAAQ,EAAQ,gBAAgB,EAAI,EAAM,KAAK,SAAS,EAAQ,iBAAiB,MAAQ,EAAG,EAAQ,iBAAiB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACrN,OAAO,EAAQ,kBAAqB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,gBAAgB,EAAI,EAAQ,iBAExE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,gBAAgB,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,iBAAiB,MAAQ,EAAG,EAAQ,iBAAiB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,kBACnQ,CACX,EASA,EAAqB,UAAU,OAAS,UAAW,CAC/C,OAAO,EAAqB,SAAS,KAAA,EAAgB,KAAK,aAAa,CAC3E,EAUA,EAAqB,WAAa,SAAS,EAAQ,CAG/C,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,8BACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAO,oBAAsB,UAAW,CAmCpC,IAAM,EAAqB,SAAU,EAAY,CAC7C,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA0YA,MAlYA,GAAmB,UAAU,IAAM,GAQnC,EAAmB,UAAU,UAAY,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQvF,EAAmB,UAAU,YAAc,GAQ3C,EAAmB,UAAU,UAAY,GAQzC,EAAmB,UAAU,YAAc,GAQ3C,EAAmB,UAAU,IAAM,GAcnC,EAAmB,OAAS,SAAS,EAAY,CAC7C,OAAO,IAAI,EAAmB,CAAU,CAC5C,EAWA,EAAmB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAK3D,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAarC,GAZI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,IAAM,OAAO,EAAQ,WAAc,SAAW,EAAQ,UAAU,KAAO,EAAQ,UAAU,KAAO,EAAQ,YAAc,IACnM,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,SAAS,EAChE,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GAAK,EAAQ,YAAc,IACxG,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,SAAS,EACjE,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAmB,gBAAkB,SAAS,EAAS,EAAQ,CAC3D,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAmB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKzE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,OAAO,mBAC/B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,UAAY,EAEpB,OAAO,EAAQ,UACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,UAAY,EAEpB,OAAO,EAAQ,UACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAmB,gBAAkB,SAAS,EAAQ,CAGlD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAmB,OAAS,SAAU,EAAS,EAAQ,CAyBnD,OAxBI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GACzE,CAAC,EAAM,UAAU,EAAQ,SAAS,GAAK,EAAE,EAAQ,WAAa,EAAM,UAAU,EAAQ,UAAU,GAAG,GAAK,EAAM,UAAU,EAAQ,UAAU,IAAI,GACvI,mCACX,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EAC5B,+BACX,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,GACzE,CAAC,EAAM,SAAS,EAAQ,SAAS,EAC1B,6BACX,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EAC5B,+BACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACR,KACX,EAUA,EAAmB,WAAa,SAAU,EAAQ,EAAQ,CACtD,GAAI,aAAkB,EAAM,OAAO,mBAC/B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,6CAA6C,EAGlE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,OAAO,mBA0B/B,OAzBI,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,WAAa,OAChB,OAAO,EAAO,WAAc,SAAW,EAAO,UAAU,KAAO,EAAO,UAAU,KAAO,EAAQ,EAAO,SAAS,IAAM,KACjH,EAAM,KACN,EAAQ,UAAY,EAAM,KAAK,UAAU,EAAO,UAAW,EAAK,EAC3D,OAAO,EAAO,WAAc,SACjC,EAAQ,UAAY,EAAU,EAAO,UAAW,EAAE,EAC7C,OAAO,EAAO,WAAc,SACjC,EAAQ,UAAY,EAAO,UACtB,OAAO,EAAO,WAAc,WACjC,EAAQ,UAAY,IAAI,EAAM,SAAS,EAAO,UAAU,MAAQ,EAAG,EAAO,UAAU,OAAS,CAAC,CAAC,CAAC,SAAS,IACjH,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,WAAa,OAChB,OAAO,EAAO,WAAc,UAAY,EAAO,UAAU,UACzD,EAAQ,UAAY,EAAQ,EAAO,SAAS,GAChD,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACjC,CACX,EAWA,EAAmB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAK9D,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAElB,GADA,EAAO,IAAM,GACT,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,UAAY,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACnM,KACI,GAAO,UAAY,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EACtI,EAAO,YAAc,GACrB,EAAO,UAAY,GACnB,EAAO,YAAc,GACrB,EAAO,IAAM,EACjB,CAkBA,OAjBI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,IAC7E,AAKI,EAAO,UALA,IAAY,QAAe,EAAQ,QAAU,EACjC,OAAO,EAAQ,WAAc,SAAW,EAAQ,EAAQ,SAAS,EAAI,EAAM,KAAK,SAAS,EAAQ,UAAU,MAAQ,EAAG,EAAQ,UAAU,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAClL,OAAO,EAAQ,WAAc,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,SAAS,EAAI,EAAQ,UAEjE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,SAAS,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,UAAU,MAAQ,EAAG,EAAQ,UAAU,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,WAC1O,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,IAC7E,EAAO,UAAY,EAAQ,WAC3B,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KAClB,CACX,EASA,EAAmB,UAAU,OAAS,UAAW,CAC7C,OAAO,EAAmB,SAAS,KAAA,EAAgB,KAAK,aAAa,CACzE,EAUA,EAAmB,WAAa,SAAS,EAAQ,CAG7C,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,4BACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAO,wBAA0B,UAAW,CAkCxC,IAAM,EAAyB,SAAU,EAAY,CACjD,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA8XA,MAtXA,GAAuB,UAAU,IAAM,GAQvC,EAAuB,UAAU,QAAU,GAQ3C,EAAuB,UAAU,KAAO,GAQxC,EAAuB,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQrF,EAAuB,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAcrF,EAAuB,OAAS,SAAS,EAAY,CACjD,OAAO,IAAI,EAAuB,CAAU,CAChD,EAWA,EAAuB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAK/D,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAWrC,GAVI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,GAAK,EAAQ,UAAY,IAClG,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,OAAO,EAC/D,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAAK,EAAQ,OAAS,IACzF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,IAAI,EAC5D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAuB,gBAAkB,SAAS,EAAS,EAAQ,CAC/D,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAuB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAK7E,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,OAAO,uBAC/B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,QAAU,EAElB,OAAO,EAAQ,QACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,KAAO,EAEf,OAAO,EAAQ,KACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAuB,gBAAkB,SAAS,EAAQ,CAGtD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAuB,OAAS,SAAU,EAAS,EAAQ,CAsBvD,OArBI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,GACrE,CAAC,EAAM,SAAS,EAAQ,OAAO,EACxB,2BACX,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAC/D,CAAC,EAAM,SAAS,EAAQ,IAAI,EACrB,wBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACR,KACX,EAUA,EAAuB,WAAa,SAAU,EAAQ,EAAQ,CAC1D,GAAI,aAAkB,EAAM,OAAO,uBAC/B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,iDAAiD,EAGtE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,OAAO,uBA8B/B,OA7BI,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,SAAW,OACd,OAAO,EAAO,SAAY,UAAY,EAAO,QAAQ,UACrD,EAAQ,QAAU,EAAQ,EAAO,OAAO,GAC5C,EAAO,MAAQ,OACX,OAAO,EAAO,MAAS,UAAY,EAAO,KAAK,UAC/C,EAAQ,KAAO,EAAQ,EAAO,IAAI,GACtC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC/F,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC5F,CACX,EAWA,EAAuB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKlE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAIlB,GAHA,EAAO,IAAM,GACb,EAAO,QAAU,GACjB,EAAO,KAAO,GACV,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAChI,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CACpI,CAqBA,OApBI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,IACzE,EAAO,QAAU,EAAQ,SACzB,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,IACnE,EAAO,KAAO,EAAQ,MACtB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAClN,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAC/M,CACX,EASA,EAAuB,UAAU,OAAS,UAAW,CACjD,OAAO,EAAuB,SAAS,KAAA,EAAgB,KAAK,aAAa,CAC7E,EAUA,EAAuB,WAAa,SAAS,EAAQ,CAGjD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,gCACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAO,6BAA+B,UAAW,CAoC7C,IAAM,EAA8B,SAAU,EAAY,CACtD,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAscA,MA9bA,GAA4B,UAAU,IAAM,GAQ5C,EAA4B,UAAU,IAAM,GAQ5C,EAA4B,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ1F,EAA4B,UAAU,IAAM,GAQ5C,EAA4B,UAAU,IAAM,GAQ5C,EAA4B,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ1F,EAA4B,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAc1F,EAA4B,OAAS,SAAS,EAAY,CACtD,OAAO,IAAI,EAA4B,CAAU,CACrD,EAWA,EAA4B,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKpE,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAerC,GAdI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAA4B,gBAAkB,SAAS,EAAS,EAAQ,CACpE,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAA4B,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKlF,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,OAAO,4BAC/B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAA4B,gBAAkB,SAAS,EAAQ,CAG3D,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAA4B,OAAS,SAAU,EAAS,EAAQ,CA4B5D,OA3BI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACR,KACX,EAUA,EAA4B,WAAa,SAAU,EAAQ,EAAQ,CAC/D,GAAI,aAAkB,EAAM,OAAO,4BAC/B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,sDAAsD,EAG3E,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,OAAO,4BA2C/B,OA1CI,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC/F,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC/F,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC5F,CACX,EAWA,EAA4B,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKvE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAGlB,GAFA,EAAO,IAAM,GACb,EAAO,IAAM,GACT,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAGhI,GAFA,EAAO,IAAM,GACb,EAAO,IAAM,GACT,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAChI,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CACpI,CA8BA,OA7BI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAClN,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAClN,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAC/M,CACX,EASA,EAA4B,UAAU,OAAS,UAAW,CACtD,OAAO,EAA4B,SAAS,KAAA,EAAgB,KAAK,aAAa,CAClF,EAUA,EAA4B,WAAa,SAAS,EAAQ,CAGtD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,qCACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAO,uBAAyB,UAAW,CAmCvC,IAAM,EAAwB,SAAU,EAAY,CAChD,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA0aA,MAlaA,GAAsB,UAAU,IAAM,GAQtC,EAAsB,UAAU,IAAM,GAQtC,EAAsB,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQpF,EAAsB,UAAU,IAAM,GAQtC,EAAsB,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQpF,EAAsB,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAcpF,EAAsB,OAAS,SAAS,EAAY,CAChD,OAAO,IAAI,EAAsB,CAAU,CAC/C,EAWA,EAAsB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAK9D,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAarC,GAZI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAsB,gBAAkB,SAAS,EAAS,EAAQ,CAC9D,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAsB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAK5E,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,OAAO,sBAC/B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAsB,gBAAkB,SAAS,EAAQ,CAGrD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAsB,OAAS,SAAU,EAAS,EAAQ,CAyBtD,OAxBI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACR,KACX,EAUA,EAAsB,WAAa,SAAU,EAAQ,EAAQ,CACzD,GAAI,aAAkB,EAAM,OAAO,sBAC/B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,gDAAgD,EAGrE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,OAAO,sBAwC/B,OAvCI,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC/F,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC/F,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC5F,CACX,EAWA,EAAsB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKjE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAGlB,GAFA,EAAO,IAAM,GACb,EAAO,IAAM,GACT,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAEhI,GADA,EAAO,IAAM,GACT,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAChI,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CACpI,CA4BA,OA3BI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAClN,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAClN,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAC/M,CACX,EASA,EAAsB,UAAU,OAAS,UAAW,CAChD,OAAO,EAAsB,SAAS,KAAA,EAAgB,KAAK,aAAa,CAC5E,EAUA,EAAsB,WAAa,SAAS,EAAQ,CAGhD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,+BACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAO,qBAAuB,UAAW,CAmCrC,IAAM,EAAsB,SAAU,EAAY,CAC9C,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA0ZA,MAlZA,GAAoB,UAAU,IAAM,GAQpC,EAAoB,UAAU,IAAM,GAQpC,EAAoB,UAAU,MAAQ,GAQtC,EAAoB,UAAU,KAAO,GAQrC,EAAoB,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQlF,EAAoB,UAAU,IAAM,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAclF,EAAoB,OAAS,SAAS,EAAY,CAC9C,OAAO,IAAI,EAAoB,CAAU,CAC7C,EAWA,EAAoB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAK5D,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAarC,GAZI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAAK,EAAQ,MAAQ,IACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,GAAG,EAC3D,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GAAK,EAAQ,QAAU,IAC5F,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,KAAK,EAC7D,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAAK,EAAQ,OAAS,IACzF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,IAAI,EAC5D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IAAM,OAAO,EAAQ,KAAQ,SAAW,EAAQ,IAAI,KAAO,EAAQ,IAAI,KAAO,EAAQ,MAAQ,IAC/J,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,GAAG,EAC1D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAoB,gBAAkB,SAAS,EAAS,EAAQ,CAC5D,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAoB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAK1E,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,OAAO,oBAC/B,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,MAAQ,EAEhB,OAAO,EAAQ,MACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,KAAO,EAEf,OAAO,EAAQ,KACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,IAAM,EAEd,OAAO,EAAQ,IACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAoB,gBAAkB,SAAS,EAAQ,CAGnD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAoB,OAAS,SAAU,EAAS,EAAQ,CAyBpD,OAxBI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,SAAS,EAAQ,GAAG,EACpB,uBACX,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GACjE,CAAC,EAAM,SAAS,EAAQ,KAAK,EACtB,yBACX,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAC/D,CAAC,EAAM,SAAS,EAAQ,IAAI,EACrB,wBACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACX,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,GAC7D,CAAC,EAAM,UAAU,EAAQ,GAAG,GAAK,EAAE,EAAQ,KAAO,EAAM,UAAU,EAAQ,IAAI,GAAG,GAAK,EAAM,UAAU,EAAQ,IAAI,IAAI,GAC/G,6BACR,KACX,EAUA,EAAoB,WAAa,SAAU,EAAQ,EAAQ,CACvD,GAAI,aAAkB,EAAM,OAAO,oBAC/B,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,8CAA8C,EAGnE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,OAAO,oBAiC/B,OAhCI,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,UAAY,EAAO,IAAI,UAC7C,EAAQ,IAAM,EAAQ,EAAO,GAAG,GACpC,EAAO,OAAS,OACZ,OAAO,EAAO,OAAU,UAAY,EAAO,MAAM,UACjD,EAAQ,MAAQ,EAAQ,EAAO,KAAK,GACxC,EAAO,MAAQ,OACX,OAAO,EAAO,MAAS,UAAY,EAAO,KAAK,UAC/C,EAAQ,KAAO,EAAQ,EAAO,IAAI,GACtC,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC/F,EAAO,KAAO,OACV,OAAO,EAAO,KAAQ,SAAW,EAAO,IAAI,KAAO,EAAO,IAAI,KAAO,EAAQ,EAAO,GAAG,IAAM,KACzF,EAAM,KACN,EAAQ,IAAM,EAAM,KAAK,UAAU,EAAO,IAAK,EAAK,EAC/C,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAU,EAAO,IAAK,EAAE,EACjC,OAAO,EAAO,KAAQ,SAC3B,EAAQ,IAAM,EAAO,IAChB,OAAO,EAAO,KAAQ,WAC3B,EAAQ,IAAM,IAAI,EAAM,SAAS,EAAO,IAAI,MAAQ,EAAG,EAAO,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,IAC5F,CACX,EAWA,EAAoB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAK/D,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAKlB,GAJA,EAAO,IAAM,GACb,EAAO,IAAM,GACb,EAAO,MAAQ,GACf,EAAO,KAAO,GACV,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAChI,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,IAAM,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC7L,KACI,GAAO,IAAM,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CACpI,CAuBA,OAtBI,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,EAAO,IAAM,EAAQ,KACrB,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,IACrE,EAAO,MAAQ,EAAQ,OACvB,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,IACnE,EAAO,KAAO,EAAQ,MACtB,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAClN,EAAQ,KAAO,MAAQ,EAAQ,eAAe,KAAK,EAAS,KAAK,IACjE,AAKI,EAAO,IALA,IAAY,QAAe,EAAQ,QAAU,EACvC,OAAO,EAAQ,KAAQ,SAAW,EAAQ,EAAQ,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACpJ,OAAO,EAAQ,KAAQ,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,GAAG,EAAI,EAAQ,IAE3D,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,IAAI,MAAQ,EAAG,EAAQ,IAAI,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,KAC/M,CACX,EASA,EAAoB,UAAU,OAAS,UAAW,CAC9C,OAAO,EAAoB,SAAS,KAAA,EAAgB,KAAK,aAAa,CAC1E,EAUA,EAAoB,WAAa,SAAS,EAAQ,CAG9C,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,6BACpB,EAEO,CACX,EAAA,CAAG,EAEI,CACX,EAAA,CAAG,EAEU,GAAU,EAAM,aAAiB,CAO1C,IAAM,EAAU,CAAC,EAooFjB,MAloFA,GAAQ,gBAAkB,UAAW,CAoCjC,IAAM,EAAiB,SAAU,EAAY,CACzC,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAsdA,MA9cA,GAAe,UAAU,GAAK,GAQ9B,EAAe,UAAU,SAAW,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQlF,EAAe,UAAU,YAAc,GAQvC,EAAe,UAAU,MAAQ,GAQjC,EAAe,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQzF,EAAe,UAAU,eAAiB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQxF,EAAe,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAczF,EAAe,OAAS,SAAS,EAAY,CACzC,OAAO,IAAI,EAAe,CAAU,CACxC,EAWA,EAAe,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKvD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAerC,GAdI,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,GAAK,EAAQ,KAAO,IACnF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,EAAE,EAC1D,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAAM,OAAO,EAAQ,UAAa,SAAW,EAAQ,SAAS,KAAO,EAAQ,SAAS,KAAO,EAAQ,WAAa,IAC7L,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,QAAQ,EAC/D,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GAAK,EAAQ,QAAU,IAC5F,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,KAAK,EAC7D,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,gBAAkB,MAAQ,EAAQ,eAAe,KAAK,EAAS,gBAAgB,IAAM,OAAO,EAAQ,gBAAmB,SAAW,EAAQ,eAAe,KAAO,EAAQ,eAAe,KAAO,EAAQ,iBAAmB,IACjO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,cAAc,EACrE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAe,gBAAkB,SAAS,EAAS,EAAQ,CACvD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAe,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKrE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,eAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,GAAK,EAEb,OAAO,EAAQ,GACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,SAAW,EAEnB,OAAO,EAAQ,SACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,MAAQ,EAEhB,OAAO,EAAQ,MACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,eAAiB,EAEzB,OAAO,EAAQ,eACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAe,gBAAkB,SAAS,EAAQ,CAG9C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAe,OAAS,SAAU,EAAS,EAAQ,CA4B/C,OA3BI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,GAC3D,CAAC,EAAM,SAAS,EAAQ,EAAE,EACnB,sBACX,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,GACvE,CAAC,EAAM,UAAU,EAAQ,QAAQ,GAAK,EAAE,EAAQ,UAAY,EAAM,UAAU,EAAQ,SAAS,GAAG,GAAK,EAAM,UAAU,EAAQ,SAAS,IAAI,GACnI,kCACX,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EAC5B,+BACX,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GACjE,CAAC,EAAM,SAAS,EAAQ,KAAK,EACtB,yBACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACX,EAAQ,gBAAkB,MAAQ,EAAQ,eAAe,KAAK,EAAS,gBAAgB,GACnF,CAAC,EAAM,UAAU,EAAQ,cAAc,GAAK,EAAE,EAAQ,gBAAkB,EAAM,UAAU,EAAQ,eAAe,GAAG,GAAK,EAAM,UAAU,EAAQ,eAAe,IAAI,GAC3J,wCACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACR,KACX,EAUA,EAAe,WAAa,SAAU,EAAQ,EAAQ,CAClD,GAAI,aAAkB,EAAM,QAAQ,eAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,0CAA0C,EAG/D,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,eAkDhC,OAjDI,EAAO,IAAM,OACT,OAAO,EAAO,IAAO,UAAY,EAAO,GAAG,UAC3C,EAAQ,GAAK,EAAQ,EAAO,EAAE,GAClC,EAAO,UAAY,OACf,OAAO,EAAO,UAAa,SAAW,EAAO,SAAS,KAAO,EAAO,SAAS,KAAO,EAAQ,EAAO,QAAQ,IAAM,KAC7G,EAAM,KACN,EAAQ,SAAW,EAAM,KAAK,UAAU,EAAO,SAAU,EAAK,EACzD,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAU,EAAO,SAAU,EAAE,EAC3C,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAO,SACrB,OAAO,EAAO,UAAa,WAChC,EAAQ,SAAW,IAAI,EAAM,SAAS,EAAO,SAAS,MAAQ,EAAG,EAAO,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,IAC9G,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,OAAS,OACZ,OAAO,EAAO,OAAU,UAAY,EAAO,MAAM,UACjD,EAAQ,MAAQ,EAAQ,EAAO,KAAK,GACxC,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,gBAAkB,OACrB,OAAO,EAAO,gBAAmB,SAAW,EAAO,eAAe,KAAO,EAAO,eAAe,KAAO,EAAQ,EAAO,cAAc,IAAM,KACrI,EAAM,KACN,EAAQ,eAAiB,EAAM,KAAK,UAAU,EAAO,eAAgB,EAAK,EACrE,OAAO,EAAO,gBAAmB,SACtC,EAAQ,eAAiB,EAAU,EAAO,eAAgB,EAAE,EACvD,OAAO,EAAO,gBAAmB,SACtC,EAAQ,eAAiB,EAAO,eAC3B,OAAO,EAAO,gBAAmB,WACtC,EAAQ,eAAiB,IAAI,EAAM,SAAS,EAAO,eAAe,MAAQ,EAAG,EAAO,eAAe,OAAS,CAAC,CAAC,CAAC,SAAS,IAChI,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IAChI,CACX,EAWA,EAAe,SAAW,SAAU,EAAS,EAAS,EAAQ,CAK1D,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAElB,GADA,EAAO,GAAK,GACR,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,SAAW,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAClM,KACI,GAAO,SAAW,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAGrI,GAFA,EAAO,YAAc,GACrB,EAAO,MAAQ,GACX,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC5I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,eAAiB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACxM,KACI,GAAO,eAAiB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC3I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CAChJ,CAmCA,OAlCI,EAAQ,IAAM,MAAQ,EAAQ,eAAe,KAAK,EAAS,IAAI,IAC/D,EAAO,GAAK,EAAQ,IACpB,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAC3E,AAKI,EAAO,SALA,IAAY,QAAe,EAAQ,QAAU,EAClC,OAAO,EAAQ,UAAa,SAAW,EAAQ,EAAQ,QAAQ,EAAI,EAAM,KAAK,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC7K,OAAO,EAAQ,UAAa,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,QAAQ,EAAI,EAAQ,SAEhE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,QAAQ,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,UACtO,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,IACrE,EAAO,MAAQ,EAAQ,OACvB,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,gBAAkB,MAAQ,EAAQ,eAAe,KAAK,EAAS,gBAAgB,IACvF,AAKI,EAAO,eALA,IAAY,QAAe,EAAQ,QAAU,EAC5B,OAAO,EAAQ,gBAAmB,SAAW,EAAQ,EAAQ,cAAc,EAAI,EAAM,KAAK,SAAS,EAAQ,eAAe,MAAQ,EAAG,EAAQ,eAAe,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC3M,OAAO,EAAQ,gBAAmB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,cAAc,EAAI,EAAQ,eAEtE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,cAAc,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,eAAe,MAAQ,EAAG,EAAQ,eAAe,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,gBAC9P,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAC/P,CACX,EASA,EAAe,UAAU,OAAS,UAAW,CACzC,OAAO,EAAe,SAAS,KAAA,EAAgB,KAAK,aAAa,CACrE,EAUA,EAAe,WAAa,SAAS,EAAQ,CAGzC,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,yBACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAQ,cAAgB,UAAW,CAiC/B,IAAM,EAAe,SAAU,EAAY,CAGvC,GAFA,KAAK,QAAU,CAAC,EAChB,KAAK,yBAA2B,CAAC,EAC7B,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA+YA,MAvYA,GAAa,UAAU,mBAAqB,EAQ5C,EAAa,UAAU,qBAAuB,GAQ9C,EAAa,UAAU,QAAU,EAAM,WAQvC,EAAa,UAAU,yBAA2B,EAAM,YAcxD,EAAa,OAAS,SAAS,EAAY,CACvC,OAAO,IAAI,EAAa,CAAU,CACtC,EAWA,EAAa,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKrD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAKrC,GAJI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAAK,EAAQ,qBAAuB,GACnI,EAAO,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAQ,kBAAkB,EACxE,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAAK,EAAQ,uBAAyB,IACzI,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,oBAAoB,EAC5E,EAAQ,SAAW,MAAQ,EAAQ,QAAQ,OAC3C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,QAAQ,OAAQ,EAAE,EAC1C,EAAM,QAAQ,eAAe,OAAO,EAAQ,QAAQ,GAAI,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,EAAG,EAAS,CAAC,CAAC,CAAC,OAAO,EACpI,GAAI,EAAQ,0BAA4B,MAAQ,EAAQ,eAAe,KAAK,EAAS,0BAA0B,EAC3G,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAQ,wBAAwB,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EACtF,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAK,EAAE,CAAC,CAAC,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,yBAAyB,EAAK,GAAG,CAAC,CAAC,OAAO,EACpM,GAAI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAa,gBAAkB,SAAS,EAAS,EAAQ,CACrD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAa,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKnE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAAK,EACvB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,aAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,mBAAqB,EAE7B,OAAO,EAAQ,mBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,qBAAuB,EAE/B,OAAO,EAAQ,qBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,MACE,EAAQ,SAAW,EAAQ,QAAQ,SACrC,EAAQ,QAAU,CAAC,GACvB,EAAQ,QAAQ,KAAK,EAAM,QAAQ,eAAe,OAAO,EAAQ,EAAO,OAAO,EAAG,EAAY,EAAS,CAAC,CAAC,EACzG,SAER,IAAK,GAAG,CACA,GAAI,IAAa,EACb,MACA,EAAQ,2BAA6B,EAAM,cAC3C,EAAQ,yBAA2B,CAAC,GACxC,IAAI,EAAO,EAAO,OAAO,EAAI,EAAO,IACpC,GAAI,EAAO,EAAO,IACd,MAAM,EAAY,oBAAoB,EAI1C,IAHA,EAAO,IAAM,EACb,EAAM,GACN,EAAQ,EAAM,KAAO,EAAM,KAAK,WAAW,EAAG,EAAK,EAAI,EAChD,EAAO,IAAM,GAAM,CACtB,IAAI,EAAO,EAAO,IAAI,EAEtB,OADA,EAAW,EAAO,EACV,KAAU,EAAlB,CACA,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAM,EAAO,aAAa,EAC1B,SACJ,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAQ,EAAO,MAAM,EACrB,QACJ,CACA,EAAO,SAAS,EAAU,EAAQ,CAAI,CAC1C,CACA,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,EACT,IAAQ,aACR,EAAM,SAAS,EAAQ,yBAA0B,CAAG,EACxD,EAAQ,yBAAyB,GAAO,EACxC,QACJ,CACJ,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAa,gBAAkB,SAAS,EAAQ,CAG5C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAa,OAAS,SAAU,EAAS,EAAQ,CAC7C,GAAI,OAAO,GAAY,WAAY,EAC/B,MAAO,kBAGX,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAO,qBACX,GAAI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAC3F,CAAC,EAAM,UAAU,EAAQ,kBAAkB,EAC3C,MAAO,uCACf,GAAI,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAC/F,CAAC,EAAM,SAAS,EAAQ,oBAAoB,EAC5C,MAAO,wCACf,GAAI,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,EAAG,CAC5E,GAAI,CAAC,EAAO,QAAQ,EAAQ,OAAO,EAC/B,MAAO,0BACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,QAAQ,OAAQ,EAAE,EAAG,CAC7C,IAAI,EAAQ,EAAM,QAAQ,eAAe,OAAO,EAAQ,QAAQ,GAAI,EAAS,CAAC,EAC9E,GAAI,EACA,MAAO,WAAa,CAC5B,CACJ,CACA,GAAI,EAAQ,0BAA4B,MAAQ,EAAQ,eAAe,KAAK,EAAS,0BAA0B,EAAG,CAC9G,GAAI,CAAC,EAAM,SAAS,EAAQ,wBAAwB,EAChD,MAAO,4CACX,IAAI,EAAM,EAAQ,KAAK,EAAQ,wBAAwB,EACvD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,EAAE,EAC9B,GAAI,CAAC,EAAM,UAAU,EAAQ,yBAAyB,EAAI,GAAG,GAAK,EAAE,EAAQ,yBAAyB,EAAI,KAAO,EAAM,UAAU,EAAQ,yBAAyB,EAAI,GAAG,CAAC,GAAG,GAAK,EAAM,UAAU,EAAQ,yBAAyB,EAAI,GAAG,CAAC,IAAI,GAC1O,MAAO,2DACnB,CACA,OAAO,IACX,EAUA,EAAa,WAAa,SAAU,EAAQ,EAAQ,CAChD,GAAI,aAAkB,EAAM,QAAQ,aAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,wCAAwC,EAG7D,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,aAOhC,GANI,EAAO,oBAAsB,MACzB,EAAQ,EAAO,kBAAkB,IAAM,IACvC,EAAQ,mBAAqB,EAAO,mBAAqB,GAC7D,EAAO,sBAAwB,OAC3B,OAAO,EAAO,sBAAyB,UAAY,EAAO,qBAAqB,UAC/E,EAAQ,qBAAuB,EAAQ,EAAO,oBAAoB,GACtE,EAAO,QAAS,CAChB,GAAI,CAAC,EAAO,QAAQ,EAAO,OAAO,EAC9B,MAAM,EAAW,+CAA+C,EACpE,EAAQ,QAAU,EAAO,EAAO,QAAQ,MAAM,EAC9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,QAAQ,OAAQ,EAAE,EAAG,CAC5C,GAAI,CAAC,EAAM,SAAS,EAAO,QAAQ,EAAE,EACjC,MAAM,EAAW,gDAAgD,EACrE,EAAQ,QAAQ,GAAK,EAAM,QAAQ,eAAe,WAAW,EAAO,QAAQ,GAAI,EAAS,CAAC,CAC9F,CACJ,CACA,GAAI,EAAO,yBAA0B,CACjC,GAAI,CAAC,EAAM,SAAS,EAAO,wBAAwB,EAC/C,MAAM,EAAW,iEAAiE,EACtF,EAAQ,yBAA2B,CAAC,EACpC,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAO,wBAAwB,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EACjF,EAAK,KAAO,aACZ,EAAM,SAAS,EAAQ,yBAA0B,EAAK,EAAE,EACxD,EAAM,KACN,EAAQ,yBAAyB,EAAK,IAAM,EAAM,KAAK,UAAU,EAAO,yBAAyB,EAAK,IAAK,EAAK,EAC3G,OAAO,EAAO,yBAAyB,EAAK,KAAQ,SACzD,EAAQ,yBAAyB,EAAK,IAAM,EAAU,EAAO,yBAAyB,EAAK,IAAK,EAAE,EAC7F,OAAO,EAAO,yBAAyB,EAAK,KAAQ,SACzD,EAAQ,yBAAyB,EAAK,IAAM,EAAO,yBAAyB,EAAK,IAC5E,OAAO,EAAO,yBAAyB,EAAK,KAAQ,WACzD,EAAQ,yBAAyB,EAAK,IAAM,IAAI,EAAM,SAAS,EAAO,yBAAyB,EAAK,GAAG,CAAC,MAAQ,EAAG,EAAO,yBAAyB,EAAK,GAAG,CAAC,OAAS,CAAC,CAAC,CAAC,SAAS,EAE7L,CACA,OAAO,CACX,EAWA,EAAa,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKxD,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAad,IAZI,EAAQ,QAAU,EAAQ,YAC1B,EAAO,QAAU,CAAC,IAClB,EAAQ,SAAW,EAAQ,YAC3B,EAAO,yBAA2B,CAAC,GACnC,EAAQ,WACR,EAAO,mBAAqB,EAC5B,EAAO,qBAAuB,IAE9B,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,IAC/F,EAAO,mBAAqB,EAAQ,oBACpC,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,IACnG,EAAO,qBAAuB,EAAQ,sBACtC,EAAQ,SAAW,EAAQ,QAAQ,OAAQ,CAC3C,EAAO,QAAU,EAAO,EAAQ,QAAQ,MAAM,EAC9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,QAAQ,OAAQ,EAAE,EAC1C,EAAO,QAAQ,GAAK,EAAM,QAAQ,eAAe,SAAS,EAAQ,QAAQ,GAAI,EAAS,EAAS,CAAC,CACzG,CACA,IAAI,EACJ,GAAI,EAAQ,2BAA6B,EAAQ,EAAQ,KAAK,EAAQ,wBAAwB,EAAA,CAAG,OAAQ,CACrG,EAAO,yBAA2B,CAAC,EACnC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAC5B,EAAM,KAAO,aACb,EAAM,SAAS,EAAO,yBAA0B,EAAM,EAAE,EACjD,IAAY,QAAe,EAAQ,QAAU,EACpD,EAAO,yBAAyB,EAAM,IAAM,OAAO,EAAQ,yBAAyB,EAAM,KAAQ,SAAW,EAAQ,EAAQ,yBAAyB,EAAM,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,yBAAyB,EAAM,GAAG,CAAC,MAAQ,EAAG,EAAQ,yBAAyB,EAAM,GAAG,CAAC,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC/S,OAAO,EAAQ,yBAAyB,EAAM,KAAQ,SAC3D,EAAO,yBAAyB,EAAM,IAAM,EAAQ,QAAU,EAAU,EAAQ,EAAQ,yBAAyB,EAAM,GAAG,EAAI,EAAQ,yBAAyB,EAAM,IAErK,EAAO,yBAAyB,EAAM,IAAM,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,yBAAyB,EAAM,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,yBAAyB,EAAM,GAAG,CAAC,MAAQ,EAAG,EAAQ,yBAAyB,EAAM,GAAG,CAAC,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,yBAAyB,EAAM,GAErX,CACA,OAAO,CACX,EASA,EAAa,UAAU,OAAS,UAAW,CACvC,OAAO,EAAa,SAAS,KAAA,EAAgB,KAAK,aAAa,CACnE,EAUA,EAAa,WAAa,SAAS,EAAQ,CAGvC,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,uBACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAQ,wCAA0C,UAAW,CA+BzD,IAAM,EAAyC,SAAU,EAAY,CACjE,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA0QA,MAlQA,GAAuC,UAAU,YAAc,GAQ/D,EAAuC,UAAU,MAAQ,GAczD,EAAuC,OAAS,SAAS,EAAY,CACjE,OAAO,IAAI,EAAuC,CAAU,CAChE,EAWA,EAAuC,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAK/E,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAKrC,GAJI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GAAK,EAAQ,QAAU,IAC5F,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,KAAK,EAC7D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAuC,gBAAkB,SAAS,EAAS,EAAQ,CAC/E,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAuC,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAK7F,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,uCAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,MAAQ,EAEhB,OAAO,EAAQ,MACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAuC,gBAAkB,SAAS,EAAQ,CAGtE,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAuC,OAAS,SAAU,EAAS,EAAQ,CAavE,OAZI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EAC5B,+BACX,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GACjE,CAAC,EAAM,SAAS,EAAQ,KAAK,EACtB,yBACR,KACX,EAUA,EAAuC,WAAa,SAAU,EAAQ,EAAQ,CAC1E,GAAI,aAAkB,EAAM,QAAQ,uCAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,kEAAkE,EAGvF,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,uCAOhC,OANI,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,OAAS,OACZ,OAAO,EAAO,OAAU,UAAY,EAAO,MAAM,UACjD,EAAQ,MAAQ,EAAQ,EAAO,KAAK,GACrC,CACX,EAWA,EAAuC,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKlF,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EASd,OARI,EAAQ,WACR,EAAO,YAAc,GACrB,EAAO,MAAQ,IAEf,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,IACrE,EAAO,MAAQ,EAAQ,OACpB,CACX,EASA,EAAuC,UAAU,OAAS,UAAW,CACjE,OAAO,EAAuC,SAAS,KAAA,EAAgB,KAAK,aAAa,CAC7F,EAUA,EAAuC,WAAa,SAAS,EAAQ,CAGjE,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,iDACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAQ,2BAA6B,UAAW,CAgC5C,IAAM,EAA4B,SAAU,EAAY,CACpD,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAsTA,MA9SA,GAA0B,UAAU,gBAAkB,GAQtD,EAA0B,UAAU,cAAgB,GAQpD,EAA0B,UAAU,iBAAmB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAcrG,EAA0B,OAAS,SAAS,EAAY,CACpD,OAAO,IAAI,EAA0B,CAAU,CACnD,EAWA,EAA0B,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKlE,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAOrC,GANI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GAAK,EAAQ,kBAAoB,IAC1H,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,eAAe,EACvE,EAAQ,eAAiB,MAAQ,EAAQ,eAAe,KAAK,EAAS,eAAe,GAAK,EAAQ,gBAAkB,IACpH,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,aAAa,EACrE,EAAQ,kBAAoB,MAAQ,EAAQ,eAAe,KAAK,EAAS,kBAAkB,IAAM,OAAO,EAAQ,kBAAqB,SAAW,EAAQ,iBAAiB,KAAO,EAAQ,iBAAiB,KAAO,EAAQ,mBAAqB,IAC7O,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,gBAAgB,EACvE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAA0B,gBAAkB,SAAS,EAAS,EAAQ,CAClE,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAA0B,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKhF,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,0BAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,cAAgB,EAExB,OAAO,EAAQ,cACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,iBAAmB,EAE3B,OAAO,EAAQ,iBACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAA0B,gBAAkB,SAAS,EAAQ,CAGzD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAA0B,OAAS,SAAU,EAAS,EAAQ,CAgB1D,OAfI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,SAAS,EAAQ,eAAe,EAChC,mCACX,EAAQ,eAAiB,MAAQ,EAAQ,eAAe,KAAK,EAAS,eAAe,GACjF,CAAC,EAAM,SAAS,EAAQ,aAAa,EAC9B,iCACX,EAAQ,kBAAoB,MAAQ,EAAQ,eAAe,KAAK,EAAS,kBAAkB,GACvF,CAAC,EAAM,UAAU,EAAQ,gBAAgB,GAAK,EAAE,EAAQ,kBAAoB,EAAM,UAAU,EAAQ,iBAAiB,GAAG,GAAK,EAAM,UAAU,EAAQ,iBAAiB,IAAI,GACnK,0CACR,KACX,EAUA,EAA0B,WAAa,SAAU,EAAQ,EAAQ,CAC7D,GAAI,aAAkB,EAAM,QAAQ,0BAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,qDAAqD,EAG1E,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,0BAiBhC,OAhBI,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,UAAY,EAAO,gBAAgB,UACrE,EAAQ,gBAAkB,EAAQ,EAAO,eAAe,GAC5D,EAAO,eAAiB,OACpB,OAAO,EAAO,eAAkB,UAAY,EAAO,cAAc,UACjE,EAAQ,cAAgB,EAAQ,EAAO,aAAa,GACxD,EAAO,kBAAoB,OACvB,OAAO,EAAO,kBAAqB,SAAW,EAAO,iBAAiB,KAAO,EAAO,iBAAiB,KAAO,EAAQ,EAAO,gBAAgB,IAAM,KAC7I,EAAM,KACN,EAAQ,iBAAmB,EAAM,KAAK,UAAU,EAAO,iBAAkB,EAAK,EACzE,OAAO,EAAO,kBAAqB,SACxC,EAAQ,iBAAmB,EAAU,EAAO,iBAAkB,EAAE,EAC3D,OAAO,EAAO,kBAAqB,SACxC,EAAQ,iBAAmB,EAAO,iBAC7B,OAAO,EAAO,kBAAqB,WACxC,EAAQ,iBAAmB,IAAI,EAAM,SAAS,EAAO,iBAAiB,MAAQ,EAAG,EAAO,iBAAiB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,CACX,EAWA,EAA0B,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKrE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAGlB,GAFA,EAAO,gBAAkB,GACzB,EAAO,cAAgB,GACnB,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,iBAAmB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC1M,KACI,GAAO,iBAAmB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CACjJ,CAYA,OAXI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,EAAO,gBAAkB,EAAQ,iBACjC,EAAQ,eAAiB,MAAQ,EAAQ,eAAe,KAAK,EAAS,eAAe,IACrF,EAAO,cAAgB,EAAQ,eAC/B,EAAQ,kBAAoB,MAAQ,EAAQ,eAAe,KAAK,EAAS,kBAAkB,IAC3F,AAKI,EAAO,iBALA,IAAY,QAAe,EAAQ,QAAU,EAC1B,OAAO,EAAQ,kBAAqB,SAAW,EAAQ,EAAQ,gBAAgB,EAAI,EAAM,KAAK,SAAS,EAAQ,iBAAiB,MAAQ,EAAG,EAAQ,iBAAiB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACrN,OAAO,EAAQ,kBAAqB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,gBAAgB,EAAI,EAAQ,iBAExE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,gBAAgB,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,iBAAiB,MAAQ,EAAG,EAAQ,iBAAiB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,kBACnQ,CACX,EASA,EAA0B,UAAU,OAAS,UAAW,CACpD,OAAO,EAA0B,SAAS,KAAA,EAAgB,KAAK,aAAa,CAChF,EAUA,EAA0B,WAAa,SAAS,EAAQ,CAGpD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,oCACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAQ,0BAA4B,UAAW,CA+B3C,IAAM,EAA2B,SAAU,EAAY,CACnD,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA0QA,MAlQA,GAAyB,UAAU,gBAAkB,GAQrD,EAAyB,UAAU,MAAQ,GAc3C,EAAyB,OAAS,SAAS,EAAY,CACnD,OAAO,IAAI,EAAyB,CAAU,CAClD,EAWA,EAAyB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKjE,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAKrC,GAJI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GAAK,EAAQ,kBAAoB,IAC1H,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,eAAe,EACvE,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GAAK,EAAQ,QAAU,IAC5F,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,KAAK,EAC7D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAyB,gBAAkB,SAAS,EAAS,EAAQ,CACjE,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAyB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAK/E,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,yBAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,MAAQ,EAEhB,OAAO,EAAQ,MACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAyB,gBAAkB,SAAS,EAAQ,CAGxD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAyB,OAAS,SAAU,EAAS,EAAQ,CAazD,OAZI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,SAAS,EAAQ,eAAe,EAChC,mCACX,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GACjE,CAAC,EAAM,SAAS,EAAQ,KAAK,EACtB,yBACR,KACX,EAUA,EAAyB,WAAa,SAAU,EAAQ,EAAQ,CAC5D,GAAI,aAAkB,EAAM,QAAQ,yBAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,oDAAoD,EAGzE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,yBAOhC,OANI,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,UAAY,EAAO,gBAAgB,UACrE,EAAQ,gBAAkB,EAAQ,EAAO,eAAe,GAC5D,EAAO,OAAS,OACZ,OAAO,EAAO,OAAU,UAAY,EAAO,MAAM,UACjD,EAAQ,MAAQ,EAAQ,EAAO,KAAK,GACrC,CACX,EAWA,EAAyB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKpE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EASd,OARI,EAAQ,WACR,EAAO,gBAAkB,GACzB,EAAO,MAAQ,IAEf,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,EAAO,gBAAkB,EAAQ,iBACjC,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,IACrE,EAAO,MAAQ,EAAQ,OACpB,CACX,EASA,EAAyB,UAAU,OAAS,UAAW,CACnD,OAAO,EAAyB,SAAS,KAAA,EAAgB,KAAK,aAAa,CAC/E,EAUA,EAAyB,WAAa,SAAS,EAAQ,CAGnD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,mCACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAQ,6BAA+B,UAAW,CAoC9C,IAAM,EAA8B,SAAU,EAAY,CACtD,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAsbA,MA9aA,GAA4B,UAAU,YAAc,GAQpD,EAA4B,UAAU,SAAW,GAQjD,EAA4B,UAAU,SAAW,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ/F,EAA4B,UAAU,WAAa,GAQnD,EAA4B,UAAU,YAAc,GAQpD,EAA4B,UAAU,MAAQ,GAQ9C,EAA4B,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EActG,EAA4B,OAAS,SAAS,EAAY,CACtD,OAAO,IAAI,EAA4B,CAAU,CACrD,EAWA,EAA4B,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKpE,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAerC,GAdI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,GAAK,EAAQ,WAAa,IACrG,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,QAAQ,EAChE,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAAM,OAAO,EAAQ,UAAa,SAAW,EAAQ,SAAS,KAAO,EAAQ,SAAS,KAAO,EAAQ,WAAa,IAC7L,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,QAAQ,EAC/D,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,GAAK,EAAQ,aAAe,IAC3G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,UAAU,EAClE,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GAAK,EAAQ,QAAU,IAC5F,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,KAAK,EAC7D,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAA4B,gBAAkB,SAAS,EAAS,EAAQ,CACpE,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAA4B,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKlF,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,4BAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,SAAW,EAEnB,OAAO,EAAQ,SACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,SAAW,EAEnB,OAAO,EAAQ,SACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,WAAa,EAErB,OAAO,EAAQ,WACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,MAAQ,EAEhB,OAAO,EAAQ,MACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAA4B,gBAAkB,SAAS,EAAQ,CAG3D,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAA4B,OAAS,SAAU,EAAS,EAAQ,CA4B5D,OA3BI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EAC5B,+BACX,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,GACvE,CAAC,EAAM,SAAS,EAAQ,QAAQ,EACzB,4BACX,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,GACvE,CAAC,EAAM,UAAU,EAAQ,QAAQ,GAAK,EAAE,EAAQ,UAAY,EAAM,UAAU,EAAQ,SAAS,GAAG,GAAK,EAAM,UAAU,EAAQ,SAAS,IAAI,GACnI,kCACX,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,GAC3E,CAAC,EAAM,SAAS,EAAQ,UAAU,EAC3B,8BACX,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EAC5B,+BACX,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,GACjE,CAAC,EAAM,SAAS,EAAQ,KAAK,EACtB,yBACX,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GAC/J,yCACR,KACX,EAUA,EAA4B,WAAa,SAAU,EAAQ,EAAQ,CAC/D,GAAI,aAAkB,EAAM,QAAQ,4BAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,uDAAuD,EAG5E,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,4BAoChC,OAnCI,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,UAAY,OACf,OAAO,EAAO,UAAa,UAAY,EAAO,SAAS,UACvD,EAAQ,SAAW,EAAQ,EAAO,QAAQ,GAC9C,EAAO,UAAY,OACf,OAAO,EAAO,UAAa,SAAW,EAAO,SAAS,KAAO,EAAO,SAAS,KAAO,EAAQ,EAAO,QAAQ,IAAM,KAC7G,EAAM,KACN,EAAQ,SAAW,EAAM,KAAK,UAAU,EAAO,SAAU,EAAK,EACzD,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAU,EAAO,SAAU,EAAE,EAC3C,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAO,SACrB,OAAO,EAAO,UAAa,WAChC,EAAQ,SAAW,IAAI,EAAM,SAAS,EAAO,SAAS,MAAQ,EAAG,EAAO,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,IAC9G,EAAO,YAAc,OACjB,OAAO,EAAO,YAAe,UAAY,EAAO,WAAW,UAC3D,EAAQ,WAAa,EAAQ,EAAO,UAAU,GAClD,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,OAAS,OACZ,OAAO,EAAO,OAAU,UAAY,EAAO,MAAM,UACjD,EAAQ,MAAQ,EAAQ,EAAO,KAAK,GACxC,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IAChI,CACX,EAWA,EAA4B,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKvE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EACd,GAAI,EAAQ,SAAU,CAGlB,GAFA,EAAO,YAAc,GACrB,EAAO,SAAW,GACd,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,SAAW,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAClM,KACI,GAAO,SAAW,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAIrI,GAHA,EAAO,WAAa,GACpB,EAAO,YAAc,GACrB,EAAO,MAAQ,GACX,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CAChJ,CAyBA,OAxBI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAC3E,EAAO,SAAW,EAAQ,UAC1B,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAC3E,AAKI,EAAO,SALA,IAAY,QAAe,EAAQ,QAAU,EAClC,OAAO,EAAQ,UAAa,SAAW,EAAQ,EAAQ,QAAQ,EAAI,EAAM,KAAK,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC7K,OAAO,EAAQ,UAAa,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,QAAQ,EAAI,EAAQ,SAEhE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,QAAQ,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,UACtO,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,IAC/E,EAAO,WAAa,EAAQ,YAC5B,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,OAAS,MAAQ,EAAQ,eAAe,KAAK,EAAS,OAAO,IACrE,EAAO,MAAQ,EAAQ,OACvB,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAC/P,CACX,EASA,EAA4B,UAAU,OAAS,UAAW,CACtD,OAAO,EAA4B,SAAS,KAAA,EAAgB,KAAK,aAAa,CAClF,EAUA,EAA4B,WAAa,SAAS,EAAQ,CAGtD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,sCACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAQ,iBAAmB,UAAW,CA8BlC,IAAM,EAAkB,SAAU,EAAY,CAE1C,GADA,KAAK,QAAU,CAAC,EACZ,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA6PA,MArPA,GAAgB,UAAU,QAAU,EAAM,WAc1C,EAAgB,OAAS,SAAS,EAAY,CAC1C,OAAO,IAAI,EAAgB,CAAU,CACzC,EAWA,EAAgB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKxD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,GAAI,EAAQ,SAAW,MAAQ,EAAQ,QAAQ,OAC3C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,QAAQ,OAAQ,EAAE,EAC1C,EAAM,QAAQ,eAAe,OAAO,EAAQ,QAAQ,GAAI,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,EAAG,EAAS,CAAC,CAAC,CAAC,OAAO,EACpI,GAAI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAgB,gBAAkB,SAAS,EAAS,EAAQ,CACxD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAgB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKtE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EACT,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,QAAQ,gBAChC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,MACE,EAAQ,SAAW,EAAQ,QAAQ,SACrC,EAAQ,QAAU,CAAC,GACvB,EAAQ,QAAQ,KAAK,EAAM,QAAQ,eAAe,OAAO,EAAQ,EAAO,OAAO,EAAG,EAAY,EAAS,CAAC,CAAC,EACzG,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAgB,gBAAkB,SAAS,EAAQ,CAG/C,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAgB,OAAS,SAAU,EAAS,EAAQ,CAChD,GAAI,OAAO,GAAY,WAAY,EAC/B,MAAO,kBAGX,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAO,qBACX,GAAI,EAAQ,SAAW,MAAQ,EAAQ,eAAe,KAAK,EAAS,SAAS,EAAG,CAC5E,GAAI,CAAC,EAAO,QAAQ,EAAQ,OAAO,EAC/B,MAAO,0BACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,QAAQ,OAAQ,EAAE,EAAG,CAC7C,IAAI,EAAQ,EAAM,QAAQ,eAAe,OAAO,EAAQ,QAAQ,GAAI,EAAS,CAAC,EAC9E,GAAI,EACA,MAAO,WAAa,CAC5B,CACJ,CACA,OAAO,IACX,EAUA,EAAgB,WAAa,SAAU,EAAQ,EAAQ,CACnD,GAAI,aAAkB,EAAM,QAAQ,gBAChC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,2CAA2C,EAGhE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,QAAQ,gBAChC,GAAI,EAAO,QAAS,CAChB,GAAI,CAAC,EAAO,QAAQ,EAAO,OAAO,EAC9B,MAAM,EAAW,kDAAkD,EACvE,EAAQ,QAAU,EAAO,EAAO,QAAQ,MAAM,EAC9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,QAAQ,OAAQ,EAAE,EAAG,CAC5C,GAAI,CAAC,EAAM,SAAS,EAAO,QAAQ,EAAE,EACjC,MAAM,EAAW,mDAAmD,EACxE,EAAQ,QAAQ,GAAK,EAAM,QAAQ,eAAe,WAAW,EAAO,QAAQ,GAAI,EAAS,CAAC,CAC9F,CACJ,CACA,OAAO,CACX,EAWA,EAAgB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAK3D,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAGd,IAFI,EAAQ,QAAU,EAAQ,YAC1B,EAAO,QAAU,CAAC,GAClB,EAAQ,SAAW,EAAQ,QAAQ,OAAQ,CAC3C,EAAO,QAAU,EAAO,EAAQ,QAAQ,MAAM,EAC9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,QAAQ,OAAQ,EAAE,EAC1C,EAAO,QAAQ,GAAK,EAAM,QAAQ,eAAe,SAAS,EAAQ,QAAQ,GAAI,EAAS,EAAS,CAAC,CACzG,CACA,OAAO,CACX,EASA,EAAgB,UAAU,OAAS,UAAW,CAC1C,OAAO,EAAgB,SAAS,KAAA,EAAgB,KAAK,aAAa,CACtE,EAUA,EAAgB,WAAa,SAAS,EAAQ,CAG1C,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,0BACpB,EAEO,CACX,EAAA,CAAG,EAEI,CACX,EAAA,CAAG,EAEU,GAAc,EAAM,iBAAqB,CAOlD,IAAM,EAAc,CAAC,EA2hDrB,MAjhDA,GAAY,4BAA8B,UAAW,CACjD,IAAM,EAAa,EAAQ,OAAO,IAAI,EAAG,EAAS,EAAQ,OAAO,CAAU,EAI3E,MAHA,GAAO,EAAW,GAAK,0CAA4C,EACnE,EAAO,EAAW,GAAK,6CAA+C,EACtE,EAAO,EAAW,GAAK,sCAAwC,EACxD,CACX,EAAA,CAAG,EAEH,EAAY,2BAA6B,UAAW,CA8BhD,IAAM,EAA4B,SAAU,EAAY,CACpD,GAAI,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EA6OA,MArOA,GAA0B,UAAU,KAAO,GAc3C,EAA0B,OAAS,SAAS,EAAY,CACpD,OAAO,IAAI,EAA0B,CAAU,CACnD,EAWA,EAA0B,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKlE,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAGrC,GAFI,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAAK,EAAQ,OAAS,IACzF,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,IAAI,EAC5D,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAA0B,gBAAkB,SAAS,EAAS,EAAQ,CAClE,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAA0B,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKhF,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAClB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,YAAY,0BACpC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,KAAO,EAEf,OAAO,EAAQ,KACnB,QAER,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAA0B,gBAAkB,SAAS,EAAQ,CAGzD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAA0B,OAAS,SAAU,EAAS,EAAQ,CAU1D,OATI,OAAO,GAAY,WAAY,EACxB,mBACP,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACR,qBACP,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,GAC/D,CAAC,EAAM,SAAS,EAAQ,IAAI,EACrB,wBACR,KACX,EAUA,EAA0B,WAAa,SAAU,EAAQ,EAAQ,CAC7D,GAAI,aAAkB,EAAM,YAAY,0BACpC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,yDAAyD,EAG9E,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,YAAY,0BAIpC,OAHI,EAAO,MAAQ,OACX,OAAO,EAAO,MAAS,UAAY,EAAO,KAAK,UAC/C,EAAQ,KAAO,EAAQ,EAAO,IAAI,GACnC,CACX,EAWA,EAA0B,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKrE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAKd,OAJI,EAAQ,WACR,EAAO,KAAO,IACd,EAAQ,MAAQ,MAAQ,EAAQ,eAAe,KAAK,EAAS,MAAM,IACnE,EAAO,KAAO,EAAQ,MACnB,CACX,EASA,EAA0B,UAAU,OAAS,UAAW,CACpD,OAAO,EAA0B,SAAS,KAAA,EAAgB,KAAK,aAAa,CAChF,EAUA,EAA0B,WAAa,SAAS,EAAQ,CAGpD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,wCACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAY,6BAA+B,UAAW,CAuClD,IAAM,EAA8B,SAAU,EAAY,CAGtD,GAFA,KAAK,gBAAkB,CAAC,EACxB,KAAK,OAAS,CAAC,EACX,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAqrBA,MA7qBA,GAA4B,UAAU,cAAgB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQpG,EAA4B,UAAU,gBAAkB,EAQxD,EAA4B,UAAU,gBAAkB,EAAM,YAQ9D,EAA4B,UAAU,YAAc,GAQpD,EAA4B,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQtG,EAA4B,UAAU,kBAAoB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQxG,EAA4B,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQtG,EAA4B,UAAU,cAAgB,GAQtD,EAA4B,UAAU,qBAAuB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ3G,EAA4B,UAAU,OAAS,EAAM,YAcrD,EAA4B,OAAS,SAAS,EAAY,CACtD,OAAO,IAAI,EAA4B,CAAU,CACrD,EAWA,EAA4B,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKpE,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EAKrC,GAJI,EAAQ,eAAiB,MAAQ,EAAQ,eAAe,KAAK,EAAS,eAAe,IAAM,OAAO,EAAQ,eAAkB,SAAW,EAAQ,cAAc,KAAO,EAAQ,cAAc,KAAO,EAAQ,gBAAkB,IAC3N,EAAO,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAQ,aAAa,EACnE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GAAK,EAAQ,kBAAoB,GAC1H,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,EACzF,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAQ,eAAe,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC7E,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAK,EAAE,CAAC,CAAC,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,gBAAgB,EAAK,GAAG,CAAC,CAAC,OAAO,EAazL,GAZI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAAK,EAAQ,cAAgB,IAC9G,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,WAAW,EACnE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,mBAAqB,MAAQ,EAAQ,eAAe,KAAK,EAAS,mBAAmB,IAAM,OAAO,EAAQ,mBAAsB,SAAW,EAAQ,kBAAkB,KAAO,EAAQ,kBAAkB,KAAO,EAAQ,oBAAsB,IACnP,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,iBAAiB,EACxE,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,eAAiB,MAAQ,EAAQ,eAAe,KAAK,EAAS,eAAe,GAAK,EAAQ,gBAAkB,IACpH,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,aAAa,EACrE,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,IAAM,OAAO,EAAQ,sBAAyB,SAAW,EAAQ,qBAAqB,KAAO,EAAQ,qBAAqB,KAAO,EAAQ,uBAAyB,IACrQ,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,oBAAoB,EAC3E,EAAQ,QAAU,MAAQ,EAAQ,eAAe,KAAK,EAAS,QAAQ,EACvE,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAQ,MAAM,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EACpE,EAAO,OAA+B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAK,EAAE,CAAC,CAAC,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,OAAO,EAAK,GAAG,CAAC,CAAC,OAAO,EACpL,GAAI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAA4B,gBAAkB,SAAS,EAAS,EAAQ,CACpE,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAA4B,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKlF,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAAK,EACvB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,YAAY,4BACpC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,cAAgB,EAExB,OAAO,EAAQ,cACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GAAG,CACA,GAAI,IAAa,EACb,MACA,EAAQ,kBAAoB,EAAM,cAClC,EAAQ,gBAAkB,CAAC,GAC/B,IAAI,EAAO,EAAO,OAAO,EAAI,EAAO,IACpC,GAAI,EAAO,EAAO,IACd,MAAM,EAAY,oBAAoB,EAI1C,IAHA,EAAO,IAAM,EACb,EAAM,EACN,EAAQ,EAAM,KAAO,EAAM,KAAK,WAAW,EAAG,EAAK,EAAI,EAChD,EAAO,IAAM,GAAM,CACtB,IAAI,EAAO,EAAO,IAAI,EAEtB,OADA,EAAW,EAAO,EACV,KAAU,EAAlB,CACA,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAM,EAAO,MAAM,EACnB,SACJ,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAQ,EAAO,MAAM,EACrB,QACJ,CACA,EAAO,SAAS,EAAU,EAAQ,CAAI,CAC1C,CACA,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,EACb,EAAQ,gBAAgB,GAAO,EAC/B,QACJ,CACJ,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,YAAc,EAEtB,OAAO,EAAQ,YACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,kBAAoB,EAE5B,OAAO,EAAQ,kBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,cAAgB,EAExB,OAAO,EAAQ,cACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,qBAAuB,EAE/B,OAAO,EAAQ,qBACnB,SAER,IAAK,IAAI,CACD,GAAI,IAAa,EACb,MACA,EAAQ,SAAW,EAAM,cACzB,EAAQ,OAAS,CAAC,GACtB,IAAI,EAAO,EAAO,OAAO,EAAI,EAAO,IACpC,GAAI,EAAO,EAAO,IACd,MAAM,EAAY,oBAAoB,EAI1C,IAHA,EAAO,IAAM,EACb,EAAM,GACN,EAAQ,GACD,EAAO,IAAM,GAAM,CACtB,IAAI,EAAO,EAAO,IAAI,EAEtB,OADA,EAAW,EAAO,EACV,KAAU,EAAlB,CACA,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAM,EAAO,aAAa,EAC1B,SACJ,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAQ,EAAO,aAAa,EAC5B,QACJ,CACA,EAAO,SAAS,EAAU,EAAQ,CAAI,CAC1C,CACA,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,EACT,IAAQ,aACR,EAAM,SAAS,EAAQ,OAAQ,CAAG,EACtC,EAAQ,OAAO,GAAO,EACtB,QACJ,CACJ,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAA4B,gBAAkB,SAAS,EAAQ,CAG3D,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAA4B,OAAS,SAAU,EAAS,EAAQ,CAC5D,GAAI,OAAO,GAAY,WAAY,EAC/B,MAAO,kBAGX,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAO,qBACX,GAAI,EAAQ,eAAiB,MAAQ,EAAQ,eAAe,KAAK,EAAS,eAAe,GACjF,CAAC,EAAM,UAAU,EAAQ,aAAa,GAAK,EAAE,EAAQ,eAAiB,EAAM,UAAU,EAAQ,cAAc,GAAG,GAAK,EAAM,UAAU,EAAQ,cAAc,IAAI,GAC9J,MAAO,uCACf,GAAI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACrF,OAAO,EAAQ,iBAAoB,WAAa,EAAQ,gBAAkB,KAAO,EAAQ,iBACzF,MAAO,uCACf,GAAI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,EAAG,CAC5F,GAAI,CAAC,EAAM,SAAS,EAAQ,eAAe,EACvC,MAAO,mCACX,IAAI,EAAM,EAAQ,KAAK,EAAQ,eAAe,EAC9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,EAAE,EAAG,CACjC,GAAI,CAAC,EAAM,QAAQ,KAAK,EAAI,EAAE,EAC1B,MAAO,iDACX,GAAI,CAAC,EAAM,UAAU,EAAQ,gBAAgB,EAAI,GAAG,GAAK,EAAE,EAAQ,gBAAgB,EAAI,KAAO,EAAM,UAAU,EAAQ,gBAAgB,EAAI,GAAG,CAAC,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,EAAI,GAAG,CAAC,IAAI,GACtM,MAAO,iDACf,CACJ,CACA,GAAI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,GAC7E,CAAC,EAAM,SAAS,EAAQ,WAAW,EACnC,MAAO,+BACf,GAAI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GACtK,MAAO,yCACf,GAAI,EAAQ,mBAAqB,MAAQ,EAAQ,eAAe,KAAK,EAAS,mBAAmB,GACzF,CAAC,EAAM,UAAU,EAAQ,iBAAiB,GAAK,EAAE,EAAQ,mBAAqB,EAAM,UAAU,EAAQ,kBAAkB,GAAG,GAAK,EAAM,UAAU,EAAQ,kBAAkB,IAAI,GAC9K,MAAO,2CACf,GAAI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GACtK,MAAO,yCACf,GAAI,EAAQ,eAAiB,MAAQ,EAAQ,eAAe,KAAK,EAAS,eAAe,GACjF,CAAC,EAAM,SAAS,EAAQ,aAAa,EACrC,MAAO,iCACf,GAAI,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAC/F,CAAC,EAAM,UAAU,EAAQ,oBAAoB,GAAK,EAAE,EAAQ,sBAAwB,EAAM,UAAU,EAAQ,qBAAqB,GAAG,GAAK,EAAM,UAAU,EAAQ,qBAAqB,IAAI,GAC1L,MAAO,8CACf,GAAI,EAAQ,QAAU,MAAQ,EAAQ,eAAe,KAAK,EAAS,QAAQ,EAAG,CAC1E,GAAI,CAAC,EAAM,SAAS,EAAQ,MAAM,EAC9B,MAAO,0BACX,IAAI,EAAM,EAAQ,KAAK,EAAQ,MAAM,EACrC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,EAAE,EAC9B,GAAI,CAAC,EAAM,SAAS,EAAQ,OAAO,EAAI,GAAG,EACtC,MAAO,mCACnB,CACA,OAAO,IACX,EAUA,EAA4B,WAAa,SAAU,EAAQ,EAAQ,CAC/D,GAAI,aAAkB,EAAM,YAAY,4BACpC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,2DAA2D,EAGhF,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,YAAY,4BAWpC,GAVI,EAAO,eAAiB,OACpB,OAAO,EAAO,eAAkB,SAAW,EAAO,cAAc,KAAO,EAAO,cAAc,KAAO,EAAQ,EAAO,aAAa,IAAM,KACjI,EAAM,KACN,EAAQ,cAAgB,EAAM,KAAK,UAAU,EAAO,cAAe,EAAK,EACnE,OAAO,EAAO,eAAkB,SACrC,EAAQ,cAAgB,EAAU,EAAO,cAAe,EAAE,EACrD,OAAO,EAAO,eAAkB,SACrC,EAAQ,cAAgB,EAAO,cAC1B,OAAO,EAAO,eAAkB,WACrC,EAAQ,cAAgB,IAAI,EAAM,SAAS,EAAO,cAAc,MAAQ,EAAG,EAAO,cAAc,OAAS,CAAC,CAAC,CAAC,SAAS,IAC7H,EAAO,kBAAoB,IAAM,OAAO,EAAO,iBAAoB,UAAY,EAAM,YAAY,2BAA2B,EAAO,mBAAqB,GACxJ,OAAQ,EAAO,gBAAf,CACA,IAAK,yCACL,IAAK,GACD,EAAQ,gBAAkB,EAC1B,MACJ,IAAK,4CACL,IAAK,GACD,EAAQ,gBAAkB,EAC1B,MACJ,IAAK,qCACL,IAAK,GACD,EAAQ,gBAAkB,EAC1B,MACJ,QACQ,OAAO,EAAO,iBAAoB,WAAa,EAAO,gBAAkB,KAAO,EAAO,kBACtF,EAAQ,gBAAkB,EAAO,gBACzC,CACJ,GAAI,EAAO,gBAAiB,CACxB,GAAI,CAAC,EAAM,SAAS,EAAO,eAAe,EACtC,MAAM,EAAW,2EAA2E,EAChG,EAAQ,gBAAkB,CAAC,EAC3B,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAO,eAAe,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EACxE,EAAK,KAAO,aACZ,EAAM,SAAS,EAAQ,gBAAiB,EAAK,EAAE,EAC/C,EAAM,KACN,EAAQ,gBAAgB,EAAK,IAAM,EAAM,KAAK,UAAU,EAAO,gBAAgB,EAAK,IAAK,EAAK,EACzF,OAAO,EAAO,gBAAgB,EAAK,KAAQ,SAChD,EAAQ,gBAAgB,EAAK,IAAM,EAAU,EAAO,gBAAgB,EAAK,IAAK,EAAE,EAC3E,OAAO,EAAO,gBAAgB,EAAK,KAAQ,SAChD,EAAQ,gBAAgB,EAAK,IAAM,EAAO,gBAAgB,EAAK,IAC1D,OAAO,EAAO,gBAAgB,EAAK,KAAQ,WAChD,EAAQ,gBAAgB,EAAK,IAAM,IAAI,EAAM,SAAS,EAAO,gBAAgB,EAAK,GAAG,CAAC,MAAQ,EAAG,EAAO,gBAAgB,EAAK,GAAG,CAAC,OAAS,CAAC,CAAC,CAAC,SAAS,EAElK,CA+CA,GA9CI,EAAO,aAAe,OAClB,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,UAC7D,EAAQ,YAAc,EAAQ,EAAO,WAAW,GACpD,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,mBAAqB,OACxB,OAAO,EAAO,mBAAsB,SAAW,EAAO,kBAAkB,KAAO,EAAO,kBAAkB,KAAO,EAAQ,EAAO,iBAAiB,IAAM,KACjJ,EAAM,KACN,EAAQ,kBAAoB,EAAM,KAAK,UAAU,EAAO,kBAAmB,EAAK,EAC3E,OAAO,EAAO,mBAAsB,SACzC,EAAQ,kBAAoB,EAAU,EAAO,kBAAmB,EAAE,EAC7D,OAAO,EAAO,mBAAsB,SACzC,EAAQ,kBAAoB,EAAO,kBAC9B,OAAO,EAAO,mBAAsB,WACzC,EAAQ,kBAAoB,IAAI,EAAM,SAAS,EAAO,kBAAkB,MAAQ,EAAG,EAAO,kBAAkB,OAAS,CAAC,CAAC,CAAC,SAAS,IACzI,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,eAAiB,OACpB,OAAO,EAAO,eAAkB,UAAY,EAAO,cAAc,UACjE,EAAQ,cAAgB,EAAQ,EAAO,aAAa,GACxD,EAAO,sBAAwB,OAC3B,OAAO,EAAO,sBAAyB,SAAW,EAAO,qBAAqB,KAAO,EAAO,qBAAqB,KAAO,EAAQ,EAAO,oBAAoB,IAAM,KAC7J,EAAM,KACN,EAAQ,qBAAuB,EAAM,KAAK,UAAU,EAAO,qBAAsB,EAAK,EACjF,OAAO,EAAO,sBAAyB,SAC5C,EAAQ,qBAAuB,EAAU,EAAO,qBAAsB,EAAE,EACnE,OAAO,EAAO,sBAAyB,SAC5C,EAAQ,qBAAuB,EAAO,qBACjC,OAAO,EAAO,sBAAyB,WAC5C,EAAQ,qBAAuB,IAAI,EAAM,SAAS,EAAO,qBAAqB,MAAQ,EAAG,EAAO,qBAAqB,OAAS,CAAC,CAAC,CAAC,SAAS,IAClJ,EAAO,OAAQ,CACf,GAAI,CAAC,EAAM,SAAS,EAAO,MAAM,EAC7B,MAAM,EAAW,kEAAkE,EACvF,EAAQ,OAAS,CAAC,EAClB,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAO,MAAM,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC/D,EAAK,KAAO,aACZ,EAAM,SAAS,EAAQ,OAAQ,EAAK,EAAE,EAC1C,EAAQ,OAAO,EAAK,IAAM,EAAQ,EAAO,OAAO,EAAK,GAAG,CAEhE,CACA,OAAO,CACX,EAWA,EAA4B,SAAW,SAAU,EAAS,EAAS,EAAQ,CAKvE,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAKd,IAJI,EAAQ,SAAW,EAAQ,YAC3B,EAAO,gBAAkB,CAAC,EAC1B,EAAO,OAAS,CAAC,GAEjB,EAAQ,SAAU,CAClB,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,cAAgB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACvM,KACI,GAAO,cAAgB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAG1I,GAFA,EAAO,gBAAkB,EAAQ,QAAU,EAAU,yCAA2C,EAChG,EAAO,YAAc,GACjB,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC5I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,kBAAoB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC3M,KACI,GAAO,kBAAoB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAC9I,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EAE5I,GADA,EAAO,cAAgB,GACnB,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,qBAAuB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAC9M,KACI,GAAO,qBAAuB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CACrJ,CACI,EAAQ,eAAiB,MAAQ,EAAQ,eAAe,KAAK,EAAS,eAAe,IACrF,AAKI,EAAO,cALA,IAAY,QAAe,EAAQ,QAAU,EAC7B,OAAO,EAAQ,eAAkB,SAAW,EAAQ,EAAQ,aAAa,EAAI,EAAM,KAAK,SAAS,EAAQ,cAAc,MAAQ,EAAG,EAAQ,cAAc,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACtM,OAAO,EAAQ,eAAkB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,aAAa,EAAI,EAAQ,cAErE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,aAAa,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,cAAc,MAAQ,EAAG,EAAQ,cAAc,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,eAC1P,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAM,YAAY,2BAA2B,EAAQ,mBAAqB,EAAa,EAAQ,gBAAkB,EAAM,YAAY,2BAA2B,EAAQ,iBAAmB,EAAQ,iBAC1P,IAAI,EACJ,GAAI,EAAQ,kBAAoB,EAAQ,EAAQ,KAAK,EAAQ,eAAe,EAAA,CAAG,OAAQ,CACnF,EAAO,gBAAkB,CAAC,EAC1B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAC5B,EAAM,KAAO,aACb,EAAM,SAAS,EAAO,gBAAiB,EAAM,EAAE,EACxC,IAAY,QAAe,EAAQ,QAAU,EACpD,EAAO,gBAAgB,EAAM,IAAM,OAAO,EAAQ,gBAAgB,EAAM,KAAQ,SAAW,EAAQ,EAAQ,gBAAgB,EAAM,GAAG,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,EAAM,GAAG,CAAC,MAAQ,EAAG,EAAQ,gBAAgB,EAAM,GAAG,CAAC,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAClQ,OAAO,EAAQ,gBAAgB,EAAM,KAAQ,SAClD,EAAO,gBAAgB,EAAM,IAAM,EAAQ,QAAU,EAAU,EAAQ,EAAQ,gBAAgB,EAAM,GAAG,EAAI,EAAQ,gBAAgB,EAAM,IAE1I,EAAO,gBAAgB,EAAM,IAAM,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,gBAAgB,EAAM,GAAG,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,EAAM,GAAG,CAAC,MAAQ,EAAG,EAAQ,gBAAgB,EAAM,GAAG,CAAC,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,gBAAgB,EAAM,GAExU,CAiCA,GAhCI,EAAQ,aAAe,MAAQ,EAAQ,eAAe,KAAK,EAAS,aAAa,IACjF,EAAO,YAAc,EAAQ,aAC7B,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,mBAAqB,MAAQ,EAAQ,eAAe,KAAK,EAAS,mBAAmB,IAC7F,AAKI,EAAO,kBALA,IAAY,QAAe,EAAQ,QAAU,EACzB,OAAO,EAAQ,mBAAsB,SAAW,EAAQ,EAAQ,iBAAiB,EAAI,EAAM,KAAK,SAAS,EAAQ,kBAAkB,MAAQ,EAAG,EAAQ,kBAAkB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC1N,OAAO,EAAQ,mBAAsB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,iBAAiB,EAAI,EAAQ,kBAEzE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,iBAAiB,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,kBAAkB,MAAQ,EAAG,EAAQ,kBAAkB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,mBAC1Q,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,eAAiB,MAAQ,EAAQ,eAAe,KAAK,EAAS,eAAe,IACrF,EAAO,cAAgB,EAAQ,eAC/B,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,IACnG,AAKI,EAAO,qBALA,IAAY,QAAe,EAAQ,QAAU,EACtB,OAAO,EAAQ,sBAAyB,SAAW,EAAQ,EAAQ,oBAAoB,EAAI,EAAM,KAAK,SAAS,EAAQ,qBAAqB,MAAQ,EAAG,EAAQ,qBAAqB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EACzO,OAAO,EAAQ,sBAAyB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,oBAAoB,EAAI,EAAQ,qBAE5E,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,oBAAoB,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,qBAAqB,MAAQ,EAAG,EAAQ,qBAAqB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,sBACtR,EAAQ,SAAW,EAAQ,EAAQ,KAAK,EAAQ,MAAM,EAAA,CAAG,OAAQ,CACjE,EAAO,OAAS,CAAC,EACjB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAC5B,EAAM,KAAO,aACb,EAAM,SAAS,EAAO,OAAQ,EAAM,EAAE,EAC1C,EAAO,OAAO,EAAM,IAAM,EAAQ,OAAO,EAAM,GAEvD,CACA,OAAO,CACX,EASA,EAA4B,UAAU,OAAS,UAAW,CACtD,OAAO,EAA4B,SAAS,KAAA,EAAgB,KAAK,aAAa,CAClF,EAUA,EAA4B,WAAa,SAAS,EAAQ,CAGtD,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,0CACpB,EAEO,CACX,EAAA,CAAG,EAEH,EAAY,kBAAoB,UAAW,CAmCvC,IAAM,EAAmB,SAAU,EAAY,CAG3C,GAFA,KAAK,aAAe,CAAC,EACrB,KAAK,WAAa,CAAC,EACf,EACK,IAAA,IAAI,EAAO,EAAQ,KAAK,CAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAC5D,EAAW,EAAK,KAAO,MAAQ,EAAK,KAAO,cAC3C,KAAK,EAAK,IAAM,EAAW,EAAK,IAChD,EAmeA,MA3dA,GAAiB,UAAU,mBAAqB,EAQhD,EAAiB,UAAU,qBAAuB,GAQlD,EAAiB,UAAU,SAAW,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQpF,EAAiB,UAAU,gBAAkB,EAAM,KAAO,EAAM,KAAK,SAAS,EAAE,EAAE,EAAK,EAAI,EAQ3F,EAAiB,UAAU,aAAe,EAAM,WAQhD,EAAiB,UAAU,WAAa,EAAM,YAc9C,EAAiB,OAAS,SAAS,EAAY,CAC3C,OAAO,IAAI,EAAiB,CAAU,CAC1C,EAWA,EAAiB,OAAS,SAAU,EAAS,EAAQ,EAAQ,CAKzD,GAJA,AACI,IAAS,EAAQ,OAAO,EACxB,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EASrC,GARI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAAK,EAAQ,qBAAuB,GACnI,EAAO,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAQ,kBAAkB,EACxE,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAAK,EAAQ,uBAAyB,IACzI,EAAO,OAA8B,EAAE,CAAC,CAAC,OAAO,EAAQ,oBAAoB,EAC5E,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAAM,OAAO,EAAQ,UAAa,SAAW,EAAQ,SAAS,KAAO,EAAQ,SAAS,KAAO,EAAQ,WAAa,IAC7L,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,QAAQ,EAC/D,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IAAM,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,gBAAgB,KAAO,EAAQ,gBAAgB,KAAO,EAAQ,kBAAoB,IACvO,EAAO,OAA8B,EAAE,CAAC,CAAC,MAAM,EAAQ,eAAe,EACtE,EAAQ,cAAgB,MAAQ,EAAQ,aAAa,OACrD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,aAAa,OAAQ,EAAE,EAC/C,EAAM,YAAY,4BAA4B,OAAO,EAAQ,aAAa,GAAI,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,EAAG,EAAS,CAAC,CAAC,CAAC,OAAO,EAC1J,GAAI,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,EAC/E,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAQ,UAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EACxE,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAA8B,CAAC,CAAC,CAAC,MAAM,EAAK,EAAE,EAC9F,EAAM,YAAY,0BAA0B,OAAO,EAAQ,WAAW,EAAK,IAAK,EAAO,OAA8B,EAAE,CAAC,CAAC,KAAK,EAAG,EAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAErK,GAAI,EAAQ,WAAa,MAAQ,EAAQ,eAAe,KAAK,EAAS,WAAW,EAC7E,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,UAAU,OAAQ,EAAE,EAC5C,EAAO,IAAI,EAAQ,UAAU,EAAE,EACvC,OAAO,CACX,EAWA,EAAiB,gBAAkB,SAAS,EAAS,EAAQ,CACzD,OAAO,KAAK,OAAO,GAAU,GAAU,EAAQ,OAAO,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAC5E,EAaA,EAAiB,OAAS,SAAU,EAAQ,EAAQ,EAAM,EAAQ,EAAS,CAKvE,GAJM,aAAkB,IACpB,EAAS,EAAQ,OAAO,CAAM,GAC9B,IAAW,IACX,EAAS,GACT,EAAS,EAAQ,eACjB,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAK,EAAS,EAAK,EACvB,GAAI,IAAW,EACX,EAAM,EAAO,QACZ,CAED,GADA,EAAM,EAAO,IAAM,EACf,EAAM,EAAO,IACb,MAAM,EAAY,oBAAoB,EAC1C,EAAS,EAAO,IAChB,EAAO,IAAM,CACjB,CAEA,IADA,EAAU,GAAW,IAAI,EAAM,YAAY,iBACpC,EAAO,IAAM,GAAK,CACrB,IAAI,EAAQ,EAAO,IACf,EAAM,EAAO,IAAI,EACrB,GAAI,IAAQ,EAAM,CACd,EAAO,EACP,KACJ,CACA,IAAI,EAAW,EAAM,EACrB,OAAQ,KAAS,EAAjB,CACA,IAAK,GACG,GAAI,IAAa,EACb,OACA,EAAQ,EAAO,MAAM,GACrB,EAAQ,mBAAqB,EAE7B,OAAO,EAAQ,mBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACC,EAAQ,EAAO,aAAa,EAAA,CAAG,OAChC,EAAQ,qBAAuB,EAE/B,OAAO,EAAQ,qBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,SAAW,EAEnB,OAAO,EAAQ,SACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,OACA,OAAQ,EAAQ,EAAO,MAAM,IAAO,SAAW,EAAM,KAAO,EAAM,KAAO,IAAU,GACnF,EAAQ,gBAAkB,EAE1B,OAAO,EAAQ,gBACnB,SAER,IAAK,GACG,GAAI,IAAa,EACb,MACE,EAAQ,cAAgB,EAAQ,aAAa,SAC/C,EAAQ,aAAe,CAAC,GAC5B,EAAQ,aAAa,KAAK,EAAM,YAAY,4BAA4B,OAAO,EAAQ,EAAO,OAAO,EAAG,EAAY,EAAS,CAAC,CAAC,EAC/H,SAER,IAAK,GAAG,CACA,GAAI,IAAa,EACb,MACA,EAAQ,aAAe,EAAM,cAC7B,EAAQ,WAAa,CAAC,GAC1B,IAAI,EAAO,EAAO,OAAO,EAAI,EAAO,IACpC,GAAI,EAAO,EAAO,IACd,MAAM,EAAY,oBAAoB,EAI1C,IAHA,EAAO,IAAM,EACb,EAAM,EACN,EAAQ,KACD,EAAO,IAAM,GAAM,CACtB,IAAI,EAAO,EAAO,IAAI,EAEtB,OADA,EAAW,EAAO,EACV,KAAU,EAAlB,CACA,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAM,EAAO,MAAM,EACnB,SACJ,IAAK,GACD,GAAI,IAAa,EACb,MACJ,EAAQ,EAAM,YAAY,0BAA0B,OAAO,EAAQ,EAAO,OAAO,EAAG,EAAY,EAAS,EAAG,CAAK,EACjH,QACJ,CACA,EAAO,SAAS,EAAU,EAAQ,CAAI,CAC1C,CACA,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,EACb,EAAQ,WAAW,GAAO,GAAS,IAAI,EAAM,YAAY,0BACzD,QACJ,CACJ,CACA,EAAO,SAAS,EAAU,EAAQ,CAAG,EAChC,EAAO,iBACR,EAAM,SAAS,EAAS,YAAa,EAAK,GACzC,EAAQ,YAAc,EAAQ,UAAY,CAAC,GAAA,CAAI,KAAK,EAAO,IAAI,EAAO,EAAO,GAAG,CAAC,EAE1F,CACA,GAAI,IAAW,EAAY,CACvB,GAAI,EAAO,MAAQ,EACf,MAAM,EAAY,oBAAoB,EAC1C,EAAO,IAAM,CACjB,CACA,GAAI,IAAS,EACT,MAAM,EAAO,mBAAmB,EACpC,OAAO,CACX,EAYA,EAAiB,gBAAkB,SAAS,EAAQ,CAGhD,OAFM,aAAkB,IACpB,EAAS,IAAI,EAAQ,CAAM,GACxB,KAAK,OAAO,EAAQ,EAAO,OAAO,CAAC,CAC9C,EAUA,EAAiB,OAAS,SAAU,EAAS,EAAQ,CACjD,GAAI,OAAO,GAAY,WAAY,EAC/B,MAAO,kBAGX,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAO,qBACX,GAAI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,GAC3F,CAAC,EAAM,UAAU,EAAQ,kBAAkB,EAC3C,MAAO,uCACf,GAAI,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,GAC/F,CAAC,EAAM,SAAS,EAAQ,oBAAoB,EAC5C,MAAO,wCACf,GAAI,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,GACvE,CAAC,EAAM,UAAU,EAAQ,QAAQ,GAAK,EAAE,EAAQ,UAAY,EAAM,UAAU,EAAQ,SAAS,GAAG,GAAK,EAAM,UAAU,EAAQ,SAAS,IAAI,GAC1I,MAAO,kCACf,GAAI,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,GACrF,CAAC,EAAM,UAAU,EAAQ,eAAe,GAAK,EAAE,EAAQ,iBAAmB,EAAM,UAAU,EAAQ,gBAAgB,GAAG,GAAK,EAAM,UAAU,EAAQ,gBAAgB,IAAI,GACtK,MAAO,yCACf,GAAI,EAAQ,cAAgB,MAAQ,EAAQ,eAAe,KAAK,EAAS,cAAc,EAAG,CACtF,GAAI,CAAC,EAAO,QAAQ,EAAQ,YAAY,EACpC,MAAO,+BACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,aAAa,OAAQ,EAAE,EAAG,CAClD,IAAI,EAAQ,EAAM,YAAY,4BAA4B,OAAO,EAAQ,aAAa,GAAI,EAAS,CAAC,EACpG,GAAI,EACA,MAAO,gBAAkB,CACjC,CACJ,CACA,GAAI,EAAQ,YAAc,MAAQ,EAAQ,eAAe,KAAK,EAAS,YAAY,EAAG,CAClF,GAAI,CAAC,EAAM,SAAS,EAAQ,UAAU,EAClC,MAAO,8BACX,IAAI,EAAM,EAAQ,KAAK,EAAQ,UAAU,EACzC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,EAAE,EAAG,CACjC,GAAI,CAAC,EAAM,QAAQ,KAAK,EAAI,EAAE,EAC1B,MAAO,4CACX,CACI,IAAI,EAAQ,EAAM,YAAY,0BAA0B,OAAO,EAAQ,WAAW,EAAI,IAAK,EAAS,CAAC,EACrG,GAAI,EACA,MAAO,cAAgB,CAC/B,CACJ,CACJ,CACA,OAAO,IACX,EAUA,EAAiB,WAAa,SAAU,EAAQ,EAAQ,CACpD,GAAI,aAAkB,EAAM,YAAY,iBACpC,OAAO,EACX,GAAI,CAAC,EAAM,SAAS,CAAM,EACtB,MAAM,EAAW,gDAAgD,EAGrE,GAFI,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAU,IAAI,EAAM,YAAY,iBA2BpC,GA1BI,EAAO,oBAAsB,MACzB,EAAQ,EAAO,kBAAkB,IAAM,IACvC,EAAQ,mBAAqB,EAAO,mBAAqB,GAC7D,EAAO,sBAAwB,OAC3B,OAAO,EAAO,sBAAyB,UAAY,EAAO,qBAAqB,UAC/E,EAAQ,qBAAuB,EAAQ,EAAO,oBAAoB,GACtE,EAAO,UAAY,OACf,OAAO,EAAO,UAAa,SAAW,EAAO,SAAS,KAAO,EAAO,SAAS,KAAO,EAAQ,EAAO,QAAQ,IAAM,KAC7G,EAAM,KACN,EAAQ,SAAW,EAAM,KAAK,UAAU,EAAO,SAAU,EAAK,EACzD,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAU,EAAO,SAAU,EAAE,EAC3C,OAAO,EAAO,UAAa,SAChC,EAAQ,SAAW,EAAO,SACrB,OAAO,EAAO,UAAa,WAChC,EAAQ,SAAW,IAAI,EAAM,SAAS,EAAO,SAAS,MAAQ,EAAG,EAAO,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,IAC9G,EAAO,iBAAmB,OACtB,OAAO,EAAO,iBAAoB,SAAW,EAAO,gBAAgB,KAAO,EAAO,gBAAgB,KAAO,EAAQ,EAAO,eAAe,IAAM,KACzI,EAAM,KACN,EAAQ,gBAAkB,EAAM,KAAK,UAAU,EAAO,gBAAiB,EAAK,EACvE,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAU,EAAO,gBAAiB,EAAE,EACzD,OAAO,EAAO,iBAAoB,SACvC,EAAQ,gBAAkB,EAAO,gBAC5B,OAAO,EAAO,iBAAoB,WACvC,EAAQ,gBAAkB,IAAI,EAAM,SAAS,EAAO,gBAAgB,MAAQ,EAAG,EAAO,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,IACnI,EAAO,aAAc,CACrB,GAAI,CAAC,EAAO,QAAQ,EAAO,YAAY,EACnC,MAAM,EAAW,4DAA4D,EACjF,EAAQ,aAAe,EAAO,EAAO,aAAa,MAAM,EACxD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,aAAa,OAAQ,EAAE,EAAG,CACjD,GAAI,CAAC,EAAM,SAAS,EAAO,aAAa,EAAE,EACtC,MAAM,EAAW,6DAA6D,EAClF,EAAQ,aAAa,GAAK,EAAM,YAAY,4BAA4B,WAAW,EAAO,aAAa,GAAI,EAAS,CAAC,CACzH,CACJ,CACA,GAAI,EAAO,WAAY,CACnB,GAAI,CAAC,EAAM,SAAS,EAAO,UAAU,EACjC,MAAM,EAAW,2DAA2D,EAChF,EAAQ,WAAa,CAAC,EACtB,IAAK,IAAI,EAAO,EAAQ,KAAK,EAAO,UAAU,EAAG,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAAG,CAG1E,GAFI,EAAK,KAAO,aACZ,EAAM,SAAS,EAAQ,WAAY,EAAK,EAAE,EAC1C,CAAC,EAAM,SAAS,EAAO,WAAW,EAAK,GAAG,EAC1C,MAAM,EAAW,2DAA2D,EAChF,EAAQ,WAAW,EAAK,IAAM,EAAM,YAAY,0BAA0B,WAAW,EAAO,WAAW,EAAK,IAAK,EAAS,CAAC,CAC/H,CACJ,CACA,OAAO,CACX,EAWA,EAAiB,SAAW,SAAU,EAAS,EAAS,EAAQ,CAK5D,GAJA,AACI,IAAU,CAAC,EACX,IAAW,IACX,EAAS,GACT,EAAS,EAAM,eACf,MAAM,EAAO,oBAAoB,EACrC,IAAI,EAAS,CAAC,EAKd,IAJI,EAAQ,QAAU,EAAQ,YAC1B,EAAO,aAAe,CAAC,IACvB,EAAQ,SAAW,EAAQ,YAC3B,EAAO,WAAa,CAAC,GACrB,EAAQ,SAAU,CAGlB,GAFA,EAAO,mBAAqB,EAC5B,EAAO,qBAAuB,GAC1B,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,SAAW,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CAClM,KACI,GAAO,SAAW,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,EACrI,GAAI,EAAM,KAAM,CACZ,IAAI,EAAO,IAAI,EAAM,KAAK,EAAG,EAAG,EAAK,EACrC,EAAO,gBAAkB,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAW,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAK,SAAS,EAAI,CACzM,KACI,GAAO,gBAAkB,EAAQ,QAAU,EAAU,IAAa,IAAY,QAAe,EAAQ,QAAU,EAAU,EAAQ,GAAG,EAAI,CAChJ,CAmBA,GAlBI,EAAQ,oBAAsB,MAAQ,EAAQ,eAAe,KAAK,EAAS,oBAAoB,IAC/F,EAAO,mBAAqB,EAAQ,oBACpC,EAAQ,sBAAwB,MAAQ,EAAQ,eAAe,KAAK,EAAS,sBAAsB,IACnG,EAAO,qBAAuB,EAAQ,sBACtC,EAAQ,UAAY,MAAQ,EAAQ,eAAe,KAAK,EAAS,UAAU,IAC3E,AAKI,EAAO,SALA,IAAY,QAAe,EAAQ,QAAU,EAClC,OAAO,EAAQ,UAAa,SAAW,EAAQ,EAAQ,QAAQ,EAAI,EAAM,KAAK,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAC7K,OAAO,EAAQ,UAAa,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,QAAQ,EAAI,EAAQ,SAEhE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,QAAQ,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,SAAS,MAAQ,EAAG,EAAQ,SAAS,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,UACtO,EAAQ,iBAAmB,MAAQ,EAAQ,eAAe,KAAK,EAAS,iBAAiB,IACzF,AAKI,EAAO,gBALA,IAAY,QAAe,EAAQ,QAAU,EAC3B,OAAO,EAAQ,iBAAoB,SAAW,EAAQ,EAAQ,eAAe,EAAI,EAAM,KAAK,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,EAAG,EAAK,CAAC,CAAC,SAAS,EAChN,OAAO,EAAQ,iBAAoB,SACf,EAAQ,QAAU,EAAU,EAAQ,EAAQ,eAAe,EAAI,EAAQ,gBAEvE,EAAQ,QAAU,EAAU,EAAM,KAAK,UAAU,SAAS,KAAK,EAAQ,eAAe,EAAI,EAAQ,QAAU,EAAU,IAAI,EAAM,SAAS,EAAQ,gBAAgB,MAAQ,EAAG,EAAQ,gBAAgB,OAAS,CAAC,CAAC,CAAC,SAAS,EAAI,EAAQ,iBAClQ,EAAQ,cAAgB,EAAQ,aAAa,OAAQ,CACrD,EAAO,aAAe,EAAO,EAAQ,aAAa,MAAM,EACxD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,aAAa,OAAQ,EAAE,EAC/C,EAAO,aAAa,GAAK,EAAM,YAAY,4BAA4B,SAAS,EAAQ,aAAa,GAAI,EAAS,EAAS,CAAC,CACpI,CACA,IAAI,EACJ,GAAI,EAAQ,aAAe,EAAQ,EAAQ,KAAK,EAAQ,UAAU,EAAA,CAAG,OAAQ,CACzE,EAAO,WAAa,CAAC,EACrB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAC5B,EAAM,KAAO,aACb,EAAM,SAAS,EAAO,WAAY,EAAM,EAAE,EAC9C,EAAO,WAAW,EAAM,IAAM,EAAM,YAAY,0BAA0B,SAAS,EAAQ,WAAW,EAAM,IAAK,EAAS,EAAS,CAAC,CAE5I,CACA,OAAO,CACX,EASA,EAAiB,UAAU,OAAS,UAAW,CAC3C,OAAO,EAAiB,SAAS,KAAA,EAAgB,KAAK,aAAa,CACvE,EAUA,EAAiB,WAAa,SAAS,EAAQ,CAG3C,OAFI,IAAW,IACX,EAAS,uBACN,EAAS,+BACpB,EAEO,CACX,EAAA,CAAG,EAEI,CACX,EAAA,CAAG,ECzxXU,GAAc,QACd,GAAe,SACf,GAAc,QACd,GAAgB,UAEhB,GAAe,SACf,GAAe,SACf,GAAe,SACf,GAAc,QAEd,GAAqB,eACrB,GAAiB,WACjB,GAAyB,mBACzB,GAA2B,mBAC3B,GAAqB,eACrB,GAAgB,UAChB,GAAa,OACb,GAAc,QACd,GAAc,QACd,GAAmB,aACnB,GAAmB,aAEnB,GAAmB,aACnB,GAAgB,UAGhB,GAAa,OACb,GAAe,SACf,GAAe,SAEf,GAAsB,gBACtB,GAAe,SAGf,GAAgB,UAChB,GAAgB,UAGhB,GAAe,OACf,GAAgB,QAChB,GAAe,OACf,GAAiB,SACjB,GAAuB,eACvB,GAAsB,cAItB,GAAY,YAGZ,GAAqB,gBAKrB,GAAa,OACb,GAAc,QAGd,GAAa,SACb,GAAY,QAEZ,GAAe,UACf,GAAiB,YAIjB,GAAY,OAEZ,GAAc,SAGd,GAAc,QACd,GAAa,OACb,GAAgB,UAEhB,GAAsB,gBAGtB,EAAqB,qBACrB,EAAuB,4BACvB,GAAsB,2BACtB,GAAyB,0BACzB,GAA2B,uBAC3B,GAA6B,kCAC7B,GAAyB,8BACzB,GAAsB,2BACtB,GAAoB,yBACpB,GAA0B,+BAC1B,GAA6B,kCAC7B,GAA0B,+BAG1B,GAAuB,QC/FpC,SAAgB,IAAwB,CAKpC,OAJG,OAAe,iBACV,OAAe,iBAGvB,2BAGJ,CAEA,SAAgB,GAAmB,EAA2B,CAC5D,GAAI,CAAC,EAAW,MAAO,GACvB,GAAI,CACF,IAAM,EACJ,EAAU,WAAW,SAAS,GAC9B,EAAU,WAAW,UAAU,GAC/B,EAAU,WAAW,OAAO,GAC5B,EAAU,WAAW,QAAQ,EACzB,EAAM,IAAI,IAAI,EAAY,EAAY,UAAU,GAAW,EAUjE,OARE,OAAO,OAAW,KAClB,OAAO,WACN,EAAI,WAAa,aAAe,EAAI,WAAa,cAClD,OAAO,SAAS,WAAa,aAC7B,OAAO,SAAS,WAAa,cAE7B,EAAI,SAAW,OAAO,SAAS,UAE1B,EAAI,SAAS,CAAC,CAAC,QAAQ,OAAQ,EAAE,CAC1C,MAAQ,CACN,OAAO,CACT,CACF,CAEA,SAAgB,IAAuB,CACrC,IAAI,EAAM,GAMV,MALA,CAGE,EAHG,OAAe,eACX,OAAe,eAEtB,kCAEK,GAAmB,CAAG,CAC/B,CAEA,SAAgB,GAAO,EAAsB,CAG3C,MAAO,GAFM,GAAc,CAAC,CAAC,QAAQ,OAAQ,EAEnC,IADQ,EAAK,WAAW,GAAG,EAAI,EAAO,IAAI,KAEtD,CAEA,SAAgB,GAA8B,CAC5C,OAAO,aAAa,QAAQ,CAAkB,CAChD,CAEA,SAAgB,EAAa,EAA4B,CACnD,EACF,aAAa,QAAQ,EAAoB,CAAK,EAE9C,aAAa,WAAW,CAAkB,CAE9C,CAEA,SAAgB,GAAgC,CAC9C,OAAO,aAAa,QAAQ,CAAoB,CAClD,CAEA,SAAgB,GAAe,EAA4B,CACrD,EACF,aAAa,QAAQ,EAAsB,CAAK,EAEhD,aAAa,WAAW,CAAoB,CAEhD,CAEA,IAAI,EAA8C,KAElD,SAAgB,GAAkB,EAA+B,CAC/D,EAAyB,CAC3B,CAEA,IAAI,GAAmC,KAEvC,SAAgB,IAAoC,CAKlD,OAJI,KACA,OAAO,OAAW,KAAgB,OAAe,cAC3C,OAAe,cAElB,KACT,CAEA,SAAgB,GAAmB,EAAgC,CAC7D,IACF,GAAoB,EAAU,KAAK,EAEvC,CAEA,eAAsB,GAAc,EAA0B,EAAuC,CACnG,IAAM,EAAY,OAAO,GAAU,SAAW,EAAQ,aAAiB,IAAM,EAAM,SAAS,EAAI,EAAM,IAChG,EAAa,EAAU,WAAW,SAAS,GAAK,EAAU,WAAW,UAAU,EAC/E,EAAU,EAAa,EAAY,GAAO,CAAS,EACnD,EAAU,IAAI,QAAQ,GAAM,SAAW,CAAC,CAAC,EACzC,EAAQ,EAAa,GAAK,EAAe,EACzC,EAAU,GAAc,EACxB,EAAQ,CAAC,GAAe,GAAW,EAAQ,WAAW,CAAO,EAC/D,GAAS,GAAS,CAAC,EAAQ,IAAI,eAAe,GAChD,EAAQ,IAAI,gBAAiB,UAAU,GAAO,EAEhD,IAAM,EAAO,MAAM,MAAM,EAAS,CAAE,GAAG,EAAM,SAAQ,CAAC,EAChD,EACJ,EAAK,QAAQ,IAAI,gBAAgB,GACjC,EAAK,QAAQ,IAAI,aAAa,GAC9B,EAAK,QAAQ,IAAI,cAAc,GAC/B,EAAK,QAAQ,IAAI,WAAW,EAC1B,GACF,GAAmB,CAAS,EAE9B,IAAM,EAAU,EAAK,QAAQ,IAAI,iBAAiB,EAgBlD,OAfI,GAAW,EAAa,GAC1B,EAAa,CAAO,EAElB,GAAS,EAAK,SAAW,MACvB,EAAa,GACf,EAAa,IAAI,EACb,GACF,EAAuB,GAEf,EAAe,GACrB,GACF,EAAuB,GAItB,CACT;g0EErIa,GAAb,KAAkB,CAChB,OAAe,cAAwB,QACvC,OAAe,QAA+C,CAC5D,QAAS,CACX,EAMA,aAAoB,KAAK,EAAiB,QAAwB,CAEhE,GADA,KAAK,cAAgB,EACjB,CAAC,KAAK,QAAQ,GAChB,GAAI,CACF,IAAM,EAAA,yBACA,EAAY,EAAQ,SAAS,GAAG,EAAI,EAAQ,MAAM,EAAG,EAAE,EAAI,EAC3D,EAAO,MAAM,MAAM,GAAG,EAAU,WAAW,mBAAmB,CAAM,EAAE,MAAM,EAC9E,EAAK,GACP,KAAK,QAAQ,GAAU,MAAM,EAAK,KAAK,EAEvC,QAAQ,KAAK,0BAA0B,EAAO,yBAAyB,CAE3E,OAAS,EAAK,CACZ,QAAQ,KAAK,0BAA0B,EAAO,2BAA4B,CAAG,CAC/E,CAEJ,CAKA,OAAc,EAAE,EAAa,EAAoC,CAC/D,IAAM,EAAO,KAAK,QAAQ,KAAK,gBAAkB,KAAK,QAAQ,UAAY,EACpE,EAAQ,EAAI,MAAM,GAAG,EACvB,EAAW,EAEf,IAAK,IAAM,KAAQ,EACjB,GAAI,GAAO,OAAO,GAAQ,UAAY,KAAQ,EAC5C,EAAM,EAAI,OACL,CAEL,IAAI,EAAmB,EACvB,IAAK,IAAM,KAAU,EACnB,GAAI,GAAe,OAAO,GAAgB,UAAY,KAAU,EAC9D,EAAc,EAAY,OACrB,CACL,EAAc,IAAA,GACd,KACF,CAEF,EAAM,IAAgB,IAAA,GAA0B,EAAd,EAClC,KACF,CAaF,OAVI,OAAO,GAAQ,SAIf,EACK,OAAO,QAAQ,CAAM,CAAC,CAAC,QAAQ,EAAK,CAAC,EAAG,KACtC,EAAI,QAAY,OAAO,MAAM,EAAE,KAAM,GAAG,EAAG,OAAO,CAAC,CAAC,EAC1D,CAAG,EAGD,EATE,CAUX,CAEA,OAAc,WAAoB,CAChC,OAAO,KAAK,aACd,CACF,EAEa,IAAK,EAAa,IAAuC,GAAK,EAAE,EAAK,CAAM,ECzElF,EAAoB,GAEpB,EAAmC,CAAC,EAM1C,SAAgB,IAAoC,CAMlD,OALI,OAAO,OAAW,KAAe,OAAO,YACtC,OAAO,WAAW,+BAA+B,CAAC,CAAC,QAC9C,QAGJ,MACT,CAEA,SAAgB,GAA4B,CAC1C,IAAM,EAAQ,aAAa,QAAQ,CAAiB,EAIpD,OAHI,IAAU,QAAU,IAAU,SAAW,IAAU,gBAC9C,EAEF,GAAwB,CACjC,CAEA,SAAgB,GAAW,EAAuB,CAChD,SAAS,gBAAgB,aAAa,aAAc,CAAK,EACzD,SAAS,KAAK,aAAa,aAAc,CAAK,EAG9C,IAAI,EAAY,SAAS,cAAc,2BAA2B,EAC7D,IACH,EAAY,SAAS,cAAc,MAAM,EACzC,EAAU,KAAO,eACjB,SAAS,KAAK,YAAY,CAAS,GAErC,EAAU,QAAU,IAAU,QAAU,QAAU,OAElD,EAAU,QAAS,GAAO,EAAG,CAAK,CAAC,CACrC,CAEA,SAAgB,GAAS,EAAuB,CAC9C,aAAa,QAAQ,EAAmB,CAAK,EAC7C,GAAW,CAAK,CAClB,CAEA,SAAgB,IAAwB,CACtC,IAAM,EAAU,EAAgB,EAC5B,EAAiB,OASrB,MARA,CAKE,EALE,IAAY,OACP,QACE,IAAY,QACd,gBAEA,OAET,GAAS,CAAI,EACN,CACT,CAEA,SAAgB,GAAc,EAAqC,CAEjE,OADA,EAAU,KAAK,CAAE,MACJ,CACX,IAAM,EAAM,EAAU,QAAQ,CAAE,EAC5B,IAAQ,IAAI,EAAU,OAAO,EAAK,CAAC,CACzC,CACF,CAQA,SAAgB,IAAsB,CACpC,IAAM,EAAU,EAAgB,EAGhC,GAFA,GAAW,CAAO,EAEd,OAAO,OAAW,KAAe,OAAO,WAAY,CACtD,IAAM,EAAa,OAAO,WAAW,+BAA+B,EAC9D,EAAsB,GAA2B,CAC9B,aAAa,QAAQ,CAEvC,GACH,GAAW,EAAE,QAAU,QAAU,MAAM,CAE3C,EAEI,EAAW,iBACb,EAAW,iBAAiB,GAAc,CAAkB,EAClD,EAAmB,aAC7B,EAAoB,YAAY,CAAkB,CAEtD,CAEA,OAAO,CACT,CC9FA,SAAgB,IAA2B,CACzC,IAAM,EAAK,UAAU,UAGf,EAAY,EAAG,MAAM,YAAY,EACvC,GAAI,EACF,OAAO,SAAS,EAAU,GAAI,EAAE,GAAK,IAIvC,IAAM,EAAc,EAAG,MAAM,eAAe,EAC5C,GAAI,EACF,OAAO,SAAS,EAAY,GAAI,EAAE,GAAK,IAIzC,IAAM,EAAe,EAAG,MAAM,gBAAgB,EAC9C,GAAI,EACF,OAAO,SAAS,EAAa,GAAI,EAAE,GAAK,IAI1C,IAAM,EAAqB,EAAG,MAAM,gBAAgB,EACpD,GAAI,GAAsB,EAAG,SAAS,QAAQ,EAC5C,OAAO,SAAS,EAAmB,GAAI,EAAE,GAAK,GAEhD,IAAM,EAAW,EAAG,MAAM,WAAW,EAMrC,MALA,CAAI,GACK,SAAS,EAAS,GAAI,EAAE,GAAK,EAKxC,CAMA,SAAgB,IAAqC,CAInD,MAHA,EAAK,GAAgB,CAIvB,CAMA,SAAgB,IAAuC,CACrD,GAAI,GAA0B,EAC5B,MAAO,GAGT,GAAI,SAAS,eAAe,uBAAuB,EACjD,MAAO,GAGT,IAAM,EAAS,SAAS,cAAc,KAAK,EAC3C,EAAO,GAAK,wBACZ,EAAO,UAAY,wBACnB,EAAO,aAAa,OAAQ,OAAO,EACnC,EAAO,UAAY;;;;;;;;;;;;;;;;;;IAoBnB,SAAS,KAAK,QAAQ,CAAM,EAE5B,IAAM,EAAa,SAAS,eAAe,4BAA4B,EAOvE,OANI,GACF,EAAW,iBAAiB,YAAe,CACzC,EAAO,OAAO,CAChB,CAAC,EAGI,EACT"}